\ No newline at end of file
diff --git a/themes/dot/layouts/shortcodes/tabs.html b/themes/dot/layouts/shortcodes/tabs.html
index 76797fb970f9d4fc1c3ea04b3faf3f023e69b290..81b3d762d7684b4c70c024735ab6dc58aa47ae5d 100644
--- a/themes/dot/layouts/shortcodes/tabs.html
+++ b/themes/dot/layouts/shortcodes/tabs.html
@@ -1,6 +1,6 @@
-{{ $_hugo_config := `{ "version": 1 }` }}
-
-
-
-
{{ .Inner }}
+{{ $_hugo_config := `{ "version": 1 }` }}
+
+
\ No newline at end of file
diff --git a/themes/dot/static/plugins/bootstrap/bootstrap.min.css b/themes/dot/static/plugins/bootstrap/bootstrap.min.css
index 03d87f648f3289f2f34d2e8091b2afbd141dbb3e..bd2948dbed1e827eff2cb1cf963a5827525a005f 100644
--- a/themes/dot/static/plugins/bootstrap/bootstrap.min.css
+++ b/themes/dot/static/plugins/bootstrap/bootstrap.min.css
@@ -1,6 +1,6 @@
-/*!
- * Bootstrap v4.1.1 (https://getbootstrap.com/)
- * Copyright 2011-2018 The Bootstrap Authors
- * Copyright 2011-2018 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+/*!
+ * Bootstrap v4.1.1 (https://getbootstrap.com/)
+ * Copyright 2011-2018 The Bootstrap Authors
+ * Copyright 2011-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::before,.was-validated .custom-file-input:valid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::before,.was-validated .custom-file-input:invalid~.custom-file-label::before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.custom-range::-webkit-slider-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.custom-range::-moz-range-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;appearance:none}.custom-range::-ms-thumb:focus{outline:0;box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}@media screen and (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
\ No newline at end of file
diff --git a/themes/dot/static/plugins/bootstrap/bootstrap.min.js b/themes/dot/static/plugins/bootstrap/bootstrap.min.js
index c33fa704149897ef3d7fde1a21a1c5f09c6c3b74..0a5142bdeb969bbe716b7e17a5c42aad8a4b944a 100644
--- a/themes/dot/static/plugins/bootstrap/bootstrap.min.js
+++ b/themes/dot/static/plugins/bootstrap/bootstrap.min.js
@@ -1,12 +1,12 @@
-/*
- Copyright (C) Federico Zivolo 2018
- Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
- */(function (e, t) { 'object' == typeof exports && 'undefined' != typeof module ? module.exports = t() : 'function' == typeof define && define.amd ? define(t) : e.Popper = t() })(this, function () { 'use strict'; function e(e) { return e && '[object Function]' === {}.toString.call(e) } function t(e, t) { if (1 !== e.nodeType) return []; var o = getComputedStyle(e, null); return t ? o[t] : o } function o(e) { return 'HTML' === e.nodeName ? e : e.parentNode || e.host } function n(e) { if (!e) return document.body; switch (e.nodeName) { case 'HTML': case 'BODY': return e.ownerDocument.body; case '#document': return e.body; }var i = t(e), r = i.overflow, p = i.overflowX, s = i.overflowY; return /(auto|scroll|overlay)/.test(r + s + p) ? e : n(o(e)) } function r(e) { return 11 === e ? re : 10 === e ? pe : re || pe } function p(e) { if (!e) return document.documentElement; for (var o = r(10) ? document.body : null, n = e.offsetParent; n === o && e.nextElementSibling;)n = (e = e.nextElementSibling).offsetParent; var i = n && n.nodeName; return i && 'BODY' !== i && 'HTML' !== i ? -1 !== ['TD', 'TABLE'].indexOf(n.nodeName) && 'static' === t(n, 'position') ? p(n) : n : e ? e.ownerDocument.documentElement : document.documentElement } function s(e) { var t = e.nodeName; return 'BODY' !== t && ('HTML' === t || p(e.firstElementChild) === e) } function d(e) { return null === e.parentNode ? e : d(e.parentNode) } function a(e, t) { if (!e || !e.nodeType || !t || !t.nodeType) return document.documentElement; var o = e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING, n = o ? e : t, i = o ? t : e, r = document.createRange(); r.setStart(n, 0), r.setEnd(i, 0); var l = r.commonAncestorContainer; if (e !== l && t !== l || n.contains(i)) return s(l) ? l : p(l); var f = d(e); return f.host ? a(f.host, t) : a(e, d(t).host) } function l(e) { var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 'top', o = 'top' === t ? 'scrollTop' : 'scrollLeft', n = e.nodeName; if ('BODY' === n || 'HTML' === n) { var i = e.ownerDocument.documentElement, r = e.ownerDocument.scrollingElement || i; return r[o] } return e[o] } function f(e, t) { var o = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], n = l(t, 'top'), i = l(t, 'left'), r = o ? -1 : 1; return e.top += n * r, e.bottom += n * r, e.left += i * r, e.right += i * r, e } function m(e, t) { var o = 'x' === t ? 'Left' : 'Top', n = 'Left' == o ? 'Right' : 'Bottom'; return parseFloat(e['border' + o + 'Width'], 10) + parseFloat(e['border' + n + 'Width'], 10) } function h(e, t, o, n) { return $(t['offset' + e], t['scroll' + e], o['client' + e], o['offset' + e], o['scroll' + e], r(10) ? o['offset' + e] + n['margin' + ('Height' === e ? 'Top' : 'Left')] + n['margin' + ('Height' === e ? 'Bottom' : 'Right')] : 0) } function c() { var e = document.body, t = document.documentElement, o = r(10) && getComputedStyle(t); return { height: h('Height', e, t, o), width: h('Width', e, t, o) } } function g(e) { return le({}, e, { right: e.left + e.width, bottom: e.top + e.height }) } function u(e) { var o = {}; try { if (r(10)) { o = e.getBoundingClientRect(); var n = l(e, 'top'), i = l(e, 'left'); o.top += n, o.left += i, o.bottom += n, o.right += i } else o = e.getBoundingClientRect() } catch (t) { } var p = { left: o.left, top: o.top, width: o.right - o.left, height: o.bottom - o.top }, s = 'HTML' === e.nodeName ? c() : {}, d = s.width || e.clientWidth || p.right - p.left, a = s.height || e.clientHeight || p.bottom - p.top, f = e.offsetWidth - d, h = e.offsetHeight - a; if (f || h) { var u = t(e); f -= m(u, 'x'), h -= m(u, 'y'), p.width -= f, p.height -= h } return g(p) } function b(e, o) { var i = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], p = r(10), s = 'HTML' === o.nodeName, d = u(e), a = u(o), l = n(e), m = t(o), h = parseFloat(m.borderTopWidth, 10), c = parseFloat(m.borderLeftWidth, 10); i && 'HTML' === o.nodeName && (a.top = $(a.top, 0), a.left = $(a.left, 0)); var b = g({ top: d.top - a.top - h, left: d.left - a.left - c, width: d.width, height: d.height }); if (b.marginTop = 0, b.marginLeft = 0, !p && s) { var y = parseFloat(m.marginTop, 10), w = parseFloat(m.marginLeft, 10); b.top -= h - y, b.bottom -= h - y, b.left -= c - w, b.right -= c - w, b.marginTop = y, b.marginLeft = w } return (p && !i ? o.contains(l) : o === l && 'BODY' !== l.nodeName) && (b = f(b, o)), b } function y(e) { var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1], o = e.ownerDocument.documentElement, n = b(e, o), i = $(o.clientWidth, window.innerWidth || 0), r = $(o.clientHeight, window.innerHeight || 0), p = t ? 0 : l(o), s = t ? 0 : l(o, 'left'), d = { top: p - n.top + n.marginTop, left: s - n.left + n.marginLeft, width: i, height: r }; return g(d) } function w(e) { var n = e.nodeName; return 'BODY' === n || 'HTML' === n ? !1 : 'fixed' === t(e, 'position') || w(o(e)) } function E(e) { if (!e || !e.parentElement || r()) return document.documentElement; for (var o = e.parentElement; o && 'none' === t(o, 'transform');)o = o.parentElement; return o || document.documentElement } function v(e, t, i, r) { var p = 4 < arguments.length && void 0 !== arguments[4] && arguments[4], s = { top: 0, left: 0 }, d = p ? E(e) : a(e, t); if ('viewport' === r) s = y(d, p); else { var l; 'scrollParent' === r ? (l = n(o(t)), 'BODY' === l.nodeName && (l = e.ownerDocument.documentElement)) : 'window' === r ? l = e.ownerDocument.documentElement : l = r; var f = b(l, d, p); if ('HTML' === l.nodeName && !w(d)) { var m = c(), h = m.height, g = m.width; s.top += f.top - f.marginTop, s.bottom = h + f.top, s.left += f.left - f.marginLeft, s.right = g + f.left } else s = f } return s.left += i, s.top += i, s.right -= i, s.bottom -= i, s } function x(e) { var t = e.width, o = e.height; return t * o } function O(e, t, o, n, i) { var r = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 0; if (-1 === e.indexOf('auto')) return e; var p = v(o, n, r, i), s = { top: { width: p.width, height: t.top - p.top }, right: { width: p.right - t.right, height: p.height }, bottom: { width: p.width, height: p.bottom - t.bottom }, left: { width: t.left - p.left, height: p.height } }, d = Object.keys(s).map(function (e) { return le({ key: e }, s[e], { area: x(s[e]) }) }).sort(function (e, t) { return t.area - e.area }), a = d.filter(function (e) { var t = e.width, n = e.height; return t >= o.clientWidth && n >= o.clientHeight }), l = 0 < a.length ? a[0].key : d[0].key, f = e.split('-')[1]; return l + (f ? '-' + f : '') } function L(e, t, o) { var n = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null, i = n ? E(t) : a(t, o); return b(o, i, n) } function S(e) { var t = getComputedStyle(e), o = parseFloat(t.marginTop) + parseFloat(t.marginBottom), n = parseFloat(t.marginLeft) + parseFloat(t.marginRight), i = { width: e.offsetWidth + n, height: e.offsetHeight + o }; return i } function T(e) { var t = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; return e.replace(/left|right|bottom|top/g, function (e) { return t[e] }) } function C(e, t, o) { o = o.split('-')[0]; var n = S(e), i = { width: n.width, height: n.height }, r = -1 !== ['right', 'left'].indexOf(o), p = r ? 'top' : 'left', s = r ? 'left' : 'top', d = r ? 'height' : 'width', a = r ? 'width' : 'height'; return i[p] = t[p] + t[d] / 2 - n[d] / 2, i[s] = o === s ? t[s] - n[a] : t[T(s)], i } function D(e, t) { return Array.prototype.find ? e.find(t) : e.filter(t)[0] } function N(e, t, o) { if (Array.prototype.findIndex) return e.findIndex(function (e) { return e[t] === o }); var n = D(e, function (e) { return e[t] === o }); return e.indexOf(n) } function P(t, o, n) { var i = void 0 === n ? t : t.slice(0, N(t, 'name', n)); return i.forEach(function (t) { t['function'] && console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); var n = t['function'] || t.fn; t.enabled && e(n) && (o.offsets.popper = g(o.offsets.popper), o.offsets.reference = g(o.offsets.reference), o = n(o, t)) }), o } function k() { if (!this.state.isDestroyed) { var e = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: !1, offsets: {} }; e.offsets.reference = L(this.state, this.popper, this.reference, this.options.positionFixed), e.placement = O(this.options.placement, e.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding), e.originalPlacement = e.placement, e.positionFixed = this.options.positionFixed, e.offsets.popper = C(this.popper, e.offsets.reference, e.placement), e.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute', e = P(this.modifiers, e), this.state.isCreated ? this.options.onUpdate(e) : (this.state.isCreated = !0, this.options.onCreate(e)) } } function W(e, t) { return e.some(function (e) { var o = e.name, n = e.enabled; return n && o === t }) } function B(e) { for (var t = [!1, 'ms', 'Webkit', 'Moz', 'O'], o = e.charAt(0).toUpperCase() + e.slice(1), n = 0; n < t.length; n++) { var i = t[n], r = i ? '' + i + o : e; if ('undefined' != typeof document.body.style[r]) return r } return null } function H() { return this.state.isDestroyed = !0, W(this.modifiers, 'applyStyle') && (this.popper.removeAttribute('x-placement'), this.popper.style.position = '', this.popper.style.top = '', this.popper.style.left = '', this.popper.style.right = '', this.popper.style.bottom = '', this.popper.style.willChange = '', this.popper.style[B('transform')] = ''), this.disableEventListeners(), this.options.removeOnDestroy && this.popper.parentNode.removeChild(this.popper), this } function A(e) { var t = e.ownerDocument; return t ? t.defaultView : window } function M(e, t, o, i) { var r = 'BODY' === e.nodeName, p = r ? e.ownerDocument.defaultView : e; p.addEventListener(t, o, { passive: !0 }), r || M(n(p.parentNode), t, o, i), i.push(p) } function I(e, t, o, i) { o.updateBound = i, A(e).addEventListener('resize', o.updateBound, { passive: !0 }); var r = n(e); return M(r, 'scroll', o.updateBound, o.scrollParents), o.scrollElement = r, o.eventsEnabled = !0, o } function F() { this.state.eventsEnabled || (this.state = I(this.reference, this.options, this.state, this.scheduleUpdate)) } function R(e, t) { return A(e).removeEventListener('resize', t.updateBound), t.scrollParents.forEach(function (e) { e.removeEventListener('scroll', t.updateBound) }), t.updateBound = null, t.scrollParents = [], t.scrollElement = null, t.eventsEnabled = !1, t } function U() { this.state.eventsEnabled && (cancelAnimationFrame(this.scheduleUpdate), this.state = R(this.reference, this.state)) } function Y(e) { return '' !== e && !isNaN(parseFloat(e)) && isFinite(e) } function j(e, t) { Object.keys(t).forEach(function (o) { var n = ''; -1 !== ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(o) && Y(t[o]) && (n = 'px'), e.style[o] = t[o] + n }) } function K(e, t) { Object.keys(t).forEach(function (o) { var n = t[o]; !1 === n ? e.removeAttribute(o) : e.setAttribute(o, t[o]) }) } function q(e, t, o) { var n = D(e, function (e) { var o = e.name; return o === t }), i = !!n && e.some(function (e) { return e.name === o && e.enabled && e.order < n.order }); if (!i) { var r = '`' + t + '`'; console.warn('`' + o + '`' + ' modifier is required by ' + r + ' modifier in order to work, be sure to include it before ' + r + '!') } return i } function G(e) { return 'end' === e ? 'start' : 'start' === e ? 'end' : e } function z(e) { var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1], o = me.indexOf(e), n = me.slice(o + 1).concat(me.slice(0, o)); return t ? n.reverse() : n } function V(e, t, o, n) { var i = e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/), r = +i[1], p = i[2]; if (!r) return e; if (0 === p.indexOf('%')) { var s; switch (p) { case '%p': s = o; break; case '%': case '%r': default: s = n; }var d = g(s); return d[t] / 100 * r } if ('vh' === p || 'vw' === p) { var a; return a = 'vh' === p ? $(document.documentElement.clientHeight, window.innerHeight || 0) : $(document.documentElement.clientWidth, window.innerWidth || 0), a / 100 * r } return r } function _(e, t, o, n) { var i = [0, 0], r = -1 !== ['right', 'left'].indexOf(n), p = e.split(/(\+|\-)/).map(function (e) { return e.trim() }), s = p.indexOf(D(p, function (e) { return -1 !== e.search(/,|\s/) })); p[s] && -1 === p[s].indexOf(',') && console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); var d = /\s*,\s*|\s+/, a = -1 === s ? [p] : [p.slice(0, s).concat([p[s].split(d)[0]]), [p[s].split(d)[1]].concat(p.slice(s + 1))]; return a = a.map(function (e, n) { var i = (1 === n ? !r : r) ? 'height' : 'width', p = !1; return e.reduce(function (e, t) { return '' === e[e.length - 1] && -1 !== ['+', '-'].indexOf(t) ? (e[e.length - 1] = t, p = !0, e) : p ? (e[e.length - 1] += t, p = !1, e) : e.concat(t) }, []).map(function (e) { return V(e, i, t, o) }) }), a.forEach(function (e, t) { e.forEach(function (o, n) { Y(o) && (i[t] += o * ('-' === e[n - 1] ? -1 : 1)) }) }), i } function X(e, t) { var o, n = t.offset, i = e.placement, r = e.offsets, p = r.popper, s = r.reference, d = i.split('-')[0]; return o = Y(+n) ? [+n, 0] : _(n, p, s, d), 'left' === d ? (p.top += o[0], p.left -= o[1]) : 'right' === d ? (p.top += o[0], p.left += o[1]) : 'top' === d ? (p.left += o[0], p.top -= o[1]) : 'bottom' === d && (p.left += o[0], p.top += o[1]), e.popper = p, e } for (var J = Math.min, Q = Math.round, Z = Math.floor, $ = Math.max, ee = 'undefined' != typeof window && 'undefined' != typeof document, te = ['Edge', 'Trident', 'Firefox'], oe = 0, ne = 0; ne < te.length; ne += 1)if (ee && 0 <= navigator.userAgent.indexOf(te[ne])) { oe = 1; break } var i = ee && window.Promise, ie = i ? function (e) { var t = !1; return function () { t || (t = !0, window.Promise.resolve().then(function () { t = !1, e() })) } } : function (e) { var t = !1; return function () { t || (t = !0, setTimeout(function () { t = !1, e() }, oe)) } }, re = ee && !!(window.MSInputMethodContext && document.documentMode), pe = ee && /MSIE 10/.test(navigator.userAgent), se = function (e, t) { if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function') }, de = function () { function e(e, t) { for (var o, n = 0; n < t.length; n++)o = t[n], o.enumerable = o.enumerable || !1, o.configurable = !0, 'value' in o && (o.writable = !0), Object.defineProperty(e, o.key, o) } return function (t, o, n) { return o && e(t.prototype, o), n && e(t, n), t } }(), ae = function (e, t, o) { return t in e ? Object.defineProperty(e, t, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = o, e }, le = Object.assign || function (e) { for (var t, o = 1; o < arguments.length; o++)for (var n in t = arguments[o], t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]); return e }, fe = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'], me = fe.slice(3), he = { FLIP: 'flip', CLOCKWISE: 'clockwise', COUNTERCLOCKWISE: 'counterclockwise' }, ce = function () { function t(o, n) { var i = this, r = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {}; se(this, t), this.scheduleUpdate = function () { return requestAnimationFrame(i.update) }, this.update = ie(this.update.bind(this)), this.options = le({}, t.Defaults, r), this.state = { isDestroyed: !1, isCreated: !1, scrollParents: [] }, this.reference = o && o.jquery ? o[0] : o, this.popper = n && n.jquery ? n[0] : n, this.options.modifiers = {}, Object.keys(le({}, t.Defaults.modifiers, r.modifiers)).forEach(function (e) { i.options.modifiers[e] = le({}, t.Defaults.modifiers[e] || {}, r.modifiers ? r.modifiers[e] : {}) }), this.modifiers = Object.keys(this.options.modifiers).map(function (e) { return le({ name: e }, i.options.modifiers[e]) }).sort(function (e, t) { return e.order - t.order }), this.modifiers.forEach(function (t) { t.enabled && e(t.onLoad) && t.onLoad(i.reference, i.popper, i.options, t, i.state) }), this.update(); var p = this.options.eventsEnabled; p && this.enableEventListeners(), this.state.eventsEnabled = p } return de(t, [{ key: 'update', value: function () { return k.call(this) } }, { key: 'destroy', value: function () { return H.call(this) } }, { key: 'enableEventListeners', value: function () { return F.call(this) } }, { key: 'disableEventListeners', value: function () { return U.call(this) } }]), t }(); return ce.Utils = ('undefined' == typeof window ? global : window).PopperUtils, ce.placements = fe, ce.Defaults = { placement: 'bottom', positionFixed: !1, eventsEnabled: !0, removeOnDestroy: !1, onCreate: function () { }, onUpdate: function () { }, modifiers: { shift: { order: 100, enabled: !0, fn: function (e) { var t = e.placement, o = t.split('-')[0], n = t.split('-')[1]; if (n) { var i = e.offsets, r = i.reference, p = i.popper, s = -1 !== ['bottom', 'top'].indexOf(o), d = s ? 'left' : 'top', a = s ? 'width' : 'height', l = { start: ae({}, d, r[d]), end: ae({}, d, r[d] + r[a] - p[a]) }; e.offsets.popper = le({}, p, l[n]) } return e } }, offset: { order: 200, enabled: !0, fn: X, offset: 0 }, preventOverflow: { order: 300, enabled: !0, fn: function (e, t) { var o = t.boundariesElement || p(e.instance.popper); e.instance.reference === o && (o = p(o)); var n = B('transform'), i = e.instance.popper.style, r = i.top, s = i.left, d = i[n]; i.top = '', i.left = '', i[n] = ''; var a = v(e.instance.popper, e.instance.reference, t.padding, o, e.positionFixed); i.top = r, i.left = s, i[n] = d, t.boundaries = a; var l = t.priority, f = e.offsets.popper, m = { primary: function (e) { var o = f[e]; return f[e] < a[e] && !t.escapeWithReference && (o = $(f[e], a[e])), ae({}, e, o) }, secondary: function (e) { var o = 'right' === e ? 'left' : 'top', n = f[o]; return f[e] > a[e] && !t.escapeWithReference && (n = J(f[o], a[e] - ('right' === e ? f.width : f.height))), ae({}, o, n) } }; return l.forEach(function (e) { var t = -1 === ['left', 'top'].indexOf(e) ? 'secondary' : 'primary'; f = le({}, f, m[t](e)) }), e.offsets.popper = f, e }, priority: ['left', 'right', 'top', 'bottom'], padding: 5, boundariesElement: 'scrollParent' }, keepTogether: { order: 400, enabled: !0, fn: function (e) { var t = e.offsets, o = t.popper, n = t.reference, i = e.placement.split('-')[0], r = Z, p = -1 !== ['top', 'bottom'].indexOf(i), s = p ? 'right' : 'bottom', d = p ? 'left' : 'top', a = p ? 'width' : 'height'; return o[s] < r(n[d]) && (e.offsets.popper[d] = r(n[d]) - o[a]), o[d] > r(n[s]) && (e.offsets.popper[d] = r(n[s])), e } }, arrow: { order: 500, enabled: !0, fn: function (e, o) { var n; if (!q(e.instance.modifiers, 'arrow', 'keepTogether')) return e; var i = o.element; if ('string' == typeof i) { if (i = e.instance.popper.querySelector(i), !i) return e; } else if (!e.instance.popper.contains(i)) return console.warn('WARNING: `arrow.element` must be child of its popper element!'), e; var r = e.placement.split('-')[0], p = e.offsets, s = p.popper, d = p.reference, a = -1 !== ['left', 'right'].indexOf(r), l = a ? 'height' : 'width', f = a ? 'Top' : 'Left', m = f.toLowerCase(), h = a ? 'left' : 'top', c = a ? 'bottom' : 'right', u = S(i)[l]; d[c] - u < s[m] && (e.offsets.popper[m] -= s[m] - (d[c] - u)), d[m] + u > s[c] && (e.offsets.popper[m] += d[m] + u - s[c]), e.offsets.popper = g(e.offsets.popper); var b = d[m] + d[l] / 2 - u / 2, y = t(e.instance.popper), w = parseFloat(y['margin' + f], 10), E = parseFloat(y['border' + f + 'Width'], 10), v = b - e.offsets.popper[m] - w - E; return v = $(J(s[l] - u, v), 0), e.arrowElement = i, e.offsets.arrow = (n = {}, ae(n, m, Q(v)), ae(n, h, ''), n), e }, element: '[x-arrow]' }, flip: { order: 600, enabled: !0, fn: function (e, t) { if (W(e.instance.modifiers, 'inner')) return e; if (e.flipped && e.placement === e.originalPlacement) return e; var o = v(e.instance.popper, e.instance.reference, t.padding, t.boundariesElement, e.positionFixed), n = e.placement.split('-')[0], i = T(n), r = e.placement.split('-')[1] || '', p = []; switch (t.behavior) { case he.FLIP: p = [n, i]; break; case he.CLOCKWISE: p = z(n); break; case he.COUNTERCLOCKWISE: p = z(n, !0); break; default: p = t.behavior; }return p.forEach(function (s, d) { if (n !== s || p.length === d + 1) return e; n = e.placement.split('-')[0], i = T(n); var a = e.offsets.popper, l = e.offsets.reference, f = Z, m = 'left' === n && f(a.right) > f(l.left) || 'right' === n && f(a.left) < f(l.right) || 'top' === n && f(a.bottom) > f(l.top) || 'bottom' === n && f(a.top) < f(l.bottom), h = f(a.left) < f(o.left), c = f(a.right) > f(o.right), g = f(a.top) < f(o.top), u = f(a.bottom) > f(o.bottom), b = 'left' === n && h || 'right' === n && c || 'top' === n && g || 'bottom' === n && u, y = -1 !== ['top', 'bottom'].indexOf(n), w = !!t.flipVariations && (y && 'start' === r && h || y && 'end' === r && c || !y && 'start' === r && g || !y && 'end' === r && u); (m || b || w) && (e.flipped = !0, (m || b) && (n = p[d + 1]), w && (r = G(r)), e.placement = n + (r ? '-' + r : ''), e.offsets.popper = le({}, e.offsets.popper, C(e.instance.popper, e.offsets.reference, e.placement)), e = P(e.instance.modifiers, e, 'flip')) }), e }, behavior: 'flip', padding: 5, boundariesElement: 'viewport' }, inner: { order: 700, enabled: !1, fn: function (e) { var t = e.placement, o = t.split('-')[0], n = e.offsets, i = n.popper, r = n.reference, p = -1 !== ['left', 'right'].indexOf(o), s = -1 === ['top', 'left'].indexOf(o); return i[p ? 'left' : 'top'] = r[o] - (s ? i[p ? 'width' : 'height'] : 0), e.placement = T(t), e.offsets.popper = g(i), e } }, hide: { order: 800, enabled: !0, fn: function (e) { if (!q(e.instance.modifiers, 'hide', 'preventOverflow')) return e; var t = e.offsets.reference, o = D(e.instance.modifiers, function (e) { return 'preventOverflow' === e.name }).boundaries; if (t.bottom < o.top || t.left > o.right || t.top > o.bottom || t.right < o.left) { if (!0 === e.hide) return e; e.hide = !0, e.attributes['x-out-of-boundaries'] = '' } else { if (!1 === e.hide) return e; e.hide = !1, e.attributes['x-out-of-boundaries'] = !1 } return e } }, computeStyle: { order: 850, enabled: !0, fn: function (e, t) { var o = t.x, n = t.y, i = e.offsets.popper, r = D(e.instance.modifiers, function (e) { return 'applyStyle' === e.name }).gpuAcceleration; void 0 !== r && console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); var s, d, a = void 0 === r ? t.gpuAcceleration : r, l = p(e.instance.popper), f = u(l), m = { position: i.position }, h = { left: Z(i.left), top: Q(i.top), bottom: Q(i.bottom), right: Z(i.right) }, c = 'bottom' === o ? 'top' : 'bottom', g = 'right' === n ? 'left' : 'right', b = B('transform'); if (d = 'bottom' == c ? -f.height + h.bottom : h.top, s = 'right' == g ? -f.width + h.right : h.left, a && b) m[b] = 'translate3d(' + s + 'px, ' + d + 'px, 0)', m[c] = 0, m[g] = 0, m.willChange = 'transform'; else { var y = 'bottom' == c ? -1 : 1, w = 'right' == g ? -1 : 1; m[c] = d * y, m[g] = s * w, m.willChange = c + ', ' + g } var E = { "x-placement": e.placement }; return e.attributes = le({}, E, e.attributes), e.styles = le({}, m, e.styles), e.arrowStyles = le({}, e.offsets.arrow, e.arrowStyles), e }, gpuAcceleration: !0, x: 'bottom', y: 'right' }, applyStyle: { order: 900, enabled: !0, fn: function (e) { return j(e.instance.popper, e.styles), K(e.instance.popper, e.attributes), e.arrowElement && Object.keys(e.arrowStyles).length && j(e.arrowElement, e.arrowStyles), e }, onLoad: function (e, t, o, n, i) { var r = L(i, t, e, o.positionFixed), p = O(o.placement, r, t, e, o.modifiers.flip.boundariesElement, o.modifiers.flip.padding); return t.setAttribute('x-placement', p), j(t, { position: o.positionFixed ? 'fixed' : 'absolute' }), o }, gpuAcceleration: void 0 } } }, ce });
-//# sourceMappingURL=popper.min.js.map
-
-/*!
- * Bootstrap v4.1.1 (https://getbootstrap.com/)
- * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
+/*
+ Copyright (C) Federico Zivolo 2018
+ Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
+ */(function (e, t) { 'object' == typeof exports && 'undefined' != typeof module ? module.exports = t() : 'function' == typeof define && define.amd ? define(t) : e.Popper = t() })(this, function () { 'use strict'; function e(e) { return e && '[object Function]' === {}.toString.call(e) } function t(e, t) { if (1 !== e.nodeType) return []; var o = getComputedStyle(e, null); return t ? o[t] : o } function o(e) { return 'HTML' === e.nodeName ? e : e.parentNode || e.host } function n(e) { if (!e) return document.body; switch (e.nodeName) { case 'HTML': case 'BODY': return e.ownerDocument.body; case '#document': return e.body; }var i = t(e), r = i.overflow, p = i.overflowX, s = i.overflowY; return /(auto|scroll|overlay)/.test(r + s + p) ? e : n(o(e)) } function r(e) { return 11 === e ? re : 10 === e ? pe : re || pe } function p(e) { if (!e) return document.documentElement; for (var o = r(10) ? document.body : null, n = e.offsetParent; n === o && e.nextElementSibling;)n = (e = e.nextElementSibling).offsetParent; var i = n && n.nodeName; return i && 'BODY' !== i && 'HTML' !== i ? -1 !== ['TD', 'TABLE'].indexOf(n.nodeName) && 'static' === t(n, 'position') ? p(n) : n : e ? e.ownerDocument.documentElement : document.documentElement } function s(e) { var t = e.nodeName; return 'BODY' !== t && ('HTML' === t || p(e.firstElementChild) === e) } function d(e) { return null === e.parentNode ? e : d(e.parentNode) } function a(e, t) { if (!e || !e.nodeType || !t || !t.nodeType) return document.documentElement; var o = e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING, n = o ? e : t, i = o ? t : e, r = document.createRange(); r.setStart(n, 0), r.setEnd(i, 0); var l = r.commonAncestorContainer; if (e !== l && t !== l || n.contains(i)) return s(l) ? l : p(l); var f = d(e); return f.host ? a(f.host, t) : a(e, d(t).host) } function l(e) { var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 'top', o = 'top' === t ? 'scrollTop' : 'scrollLeft', n = e.nodeName; if ('BODY' === n || 'HTML' === n) { var i = e.ownerDocument.documentElement, r = e.ownerDocument.scrollingElement || i; return r[o] } return e[o] } function f(e, t) { var o = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], n = l(t, 'top'), i = l(t, 'left'), r = o ? -1 : 1; return e.top += n * r, e.bottom += n * r, e.left += i * r, e.right += i * r, e } function m(e, t) { var o = 'x' === t ? 'Left' : 'Top', n = 'Left' == o ? 'Right' : 'Bottom'; return parseFloat(e['border' + o + 'Width'], 10) + parseFloat(e['border' + n + 'Width'], 10) } function h(e, t, o, n) { return $(t['offset' + e], t['scroll' + e], o['client' + e], o['offset' + e], o['scroll' + e], r(10) ? o['offset' + e] + n['margin' + ('Height' === e ? 'Top' : 'Left')] + n['margin' + ('Height' === e ? 'Bottom' : 'Right')] : 0) } function c() { var e = document.body, t = document.documentElement, o = r(10) && getComputedStyle(t); return { height: h('Height', e, t, o), width: h('Width', e, t, o) } } function g(e) { return le({}, e, { right: e.left + e.width, bottom: e.top + e.height }) } function u(e) { var o = {}; try { if (r(10)) { o = e.getBoundingClientRect(); var n = l(e, 'top'), i = l(e, 'left'); o.top += n, o.left += i, o.bottom += n, o.right += i } else o = e.getBoundingClientRect() } catch (t) { } var p = { left: o.left, top: o.top, width: o.right - o.left, height: o.bottom - o.top }, s = 'HTML' === e.nodeName ? c() : {}, d = s.width || e.clientWidth || p.right - p.left, a = s.height || e.clientHeight || p.bottom - p.top, f = e.offsetWidth - d, h = e.offsetHeight - a; if (f || h) { var u = t(e); f -= m(u, 'x'), h -= m(u, 'y'), p.width -= f, p.height -= h } return g(p) } function b(e, o) { var i = 2 < arguments.length && void 0 !== arguments[2] && arguments[2], p = r(10), s = 'HTML' === o.nodeName, d = u(e), a = u(o), l = n(e), m = t(o), h = parseFloat(m.borderTopWidth, 10), c = parseFloat(m.borderLeftWidth, 10); i && 'HTML' === o.nodeName && (a.top = $(a.top, 0), a.left = $(a.left, 0)); var b = g({ top: d.top - a.top - h, left: d.left - a.left - c, width: d.width, height: d.height }); if (b.marginTop = 0, b.marginLeft = 0, !p && s) { var y = parseFloat(m.marginTop, 10), w = parseFloat(m.marginLeft, 10); b.top -= h - y, b.bottom -= h - y, b.left -= c - w, b.right -= c - w, b.marginTop = y, b.marginLeft = w } return (p && !i ? o.contains(l) : o === l && 'BODY' !== l.nodeName) && (b = f(b, o)), b } function y(e) { var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1], o = e.ownerDocument.documentElement, n = b(e, o), i = $(o.clientWidth, window.innerWidth || 0), r = $(o.clientHeight, window.innerHeight || 0), p = t ? 0 : l(o), s = t ? 0 : l(o, 'left'), d = { top: p - n.top + n.marginTop, left: s - n.left + n.marginLeft, width: i, height: r }; return g(d) } function w(e) { var n = e.nodeName; return 'BODY' === n || 'HTML' === n ? !1 : 'fixed' === t(e, 'position') || w(o(e)) } function E(e) { if (!e || !e.parentElement || r()) return document.documentElement; for (var o = e.parentElement; o && 'none' === t(o, 'transform');)o = o.parentElement; return o || document.documentElement } function v(e, t, i, r) { var p = 4 < arguments.length && void 0 !== arguments[4] && arguments[4], s = { top: 0, left: 0 }, d = p ? E(e) : a(e, t); if ('viewport' === r) s = y(d, p); else { var l; 'scrollParent' === r ? (l = n(o(t)), 'BODY' === l.nodeName && (l = e.ownerDocument.documentElement)) : 'window' === r ? l = e.ownerDocument.documentElement : l = r; var f = b(l, d, p); if ('HTML' === l.nodeName && !w(d)) { var m = c(), h = m.height, g = m.width; s.top += f.top - f.marginTop, s.bottom = h + f.top, s.left += f.left - f.marginLeft, s.right = g + f.left } else s = f } return s.left += i, s.top += i, s.right -= i, s.bottom -= i, s } function x(e) { var t = e.width, o = e.height; return t * o } function O(e, t, o, n, i) { var r = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 0; if (-1 === e.indexOf('auto')) return e; var p = v(o, n, r, i), s = { top: { width: p.width, height: t.top - p.top }, right: { width: p.right - t.right, height: p.height }, bottom: { width: p.width, height: p.bottom - t.bottom }, left: { width: t.left - p.left, height: p.height } }, d = Object.keys(s).map(function (e) { return le({ key: e }, s[e], { area: x(s[e]) }) }).sort(function (e, t) { return t.area - e.area }), a = d.filter(function (e) { var t = e.width, n = e.height; return t >= o.clientWidth && n >= o.clientHeight }), l = 0 < a.length ? a[0].key : d[0].key, f = e.split('-')[1]; return l + (f ? '-' + f : '') } function L(e, t, o) { var n = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null, i = n ? E(t) : a(t, o); return b(o, i, n) } function S(e) { var t = getComputedStyle(e), o = parseFloat(t.marginTop) + parseFloat(t.marginBottom), n = parseFloat(t.marginLeft) + parseFloat(t.marginRight), i = { width: e.offsetWidth + n, height: e.offsetHeight + o }; return i } function T(e) { var t = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; return e.replace(/left|right|bottom|top/g, function (e) { return t[e] }) } function C(e, t, o) { o = o.split('-')[0]; var n = S(e), i = { width: n.width, height: n.height }, r = -1 !== ['right', 'left'].indexOf(o), p = r ? 'top' : 'left', s = r ? 'left' : 'top', d = r ? 'height' : 'width', a = r ? 'width' : 'height'; return i[p] = t[p] + t[d] / 2 - n[d] / 2, i[s] = o === s ? t[s] - n[a] : t[T(s)], i } function D(e, t) { return Array.prototype.find ? e.find(t) : e.filter(t)[0] } function N(e, t, o) { if (Array.prototype.findIndex) return e.findIndex(function (e) { return e[t] === o }); var n = D(e, function (e) { return e[t] === o }); return e.indexOf(n) } function P(t, o, n) { var i = void 0 === n ? t : t.slice(0, N(t, 'name', n)); return i.forEach(function (t) { t['function'] && console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); var n = t['function'] || t.fn; t.enabled && e(n) && (o.offsets.popper = g(o.offsets.popper), o.offsets.reference = g(o.offsets.reference), o = n(o, t)) }), o } function k() { if (!this.state.isDestroyed) { var e = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: !1, offsets: {} }; e.offsets.reference = L(this.state, this.popper, this.reference, this.options.positionFixed), e.placement = O(this.options.placement, e.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding), e.originalPlacement = e.placement, e.positionFixed = this.options.positionFixed, e.offsets.popper = C(this.popper, e.offsets.reference, e.placement), e.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute', e = P(this.modifiers, e), this.state.isCreated ? this.options.onUpdate(e) : (this.state.isCreated = !0, this.options.onCreate(e)) } } function W(e, t) { return e.some(function (e) { var o = e.name, n = e.enabled; return n && o === t }) } function B(e) { for (var t = [!1, 'ms', 'Webkit', 'Moz', 'O'], o = e.charAt(0).toUpperCase() + e.slice(1), n = 0; n < t.length; n++) { var i = t[n], r = i ? '' + i + o : e; if ('undefined' != typeof document.body.style[r]) return r } return null } function H() { return this.state.isDestroyed = !0, W(this.modifiers, 'applyStyle') && (this.popper.removeAttribute('x-placement'), this.popper.style.position = '', this.popper.style.top = '', this.popper.style.left = '', this.popper.style.right = '', this.popper.style.bottom = '', this.popper.style.willChange = '', this.popper.style[B('transform')] = ''), this.disableEventListeners(), this.options.removeOnDestroy && this.popper.parentNode.removeChild(this.popper), this } function A(e) { var t = e.ownerDocument; return t ? t.defaultView : window } function M(e, t, o, i) { var r = 'BODY' === e.nodeName, p = r ? e.ownerDocument.defaultView : e; p.addEventListener(t, o, { passive: !0 }), r || M(n(p.parentNode), t, o, i), i.push(p) } function I(e, t, o, i) { o.updateBound = i, A(e).addEventListener('resize', o.updateBound, { passive: !0 }); var r = n(e); return M(r, 'scroll', o.updateBound, o.scrollParents), o.scrollElement = r, o.eventsEnabled = !0, o } function F() { this.state.eventsEnabled || (this.state = I(this.reference, this.options, this.state, this.scheduleUpdate)) } function R(e, t) { return A(e).removeEventListener('resize', t.updateBound), t.scrollParents.forEach(function (e) { e.removeEventListener('scroll', t.updateBound) }), t.updateBound = null, t.scrollParents = [], t.scrollElement = null, t.eventsEnabled = !1, t } function U() { this.state.eventsEnabled && (cancelAnimationFrame(this.scheduleUpdate), this.state = R(this.reference, this.state)) } function Y(e) { return '' !== e && !isNaN(parseFloat(e)) && isFinite(e) } function j(e, t) { Object.keys(t).forEach(function (o) { var n = ''; -1 !== ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(o) && Y(t[o]) && (n = 'px'), e.style[o] = t[o] + n }) } function K(e, t) { Object.keys(t).forEach(function (o) { var n = t[o]; !1 === n ? e.removeAttribute(o) : e.setAttribute(o, t[o]) }) } function q(e, t, o) { var n = D(e, function (e) { var o = e.name; return o === t }), i = !!n && e.some(function (e) { return e.name === o && e.enabled && e.order < n.order }); if (!i) { var r = '`' + t + '`'; console.warn('`' + o + '`' + ' modifier is required by ' + r + ' modifier in order to work, be sure to include it before ' + r + '!') } return i } function G(e) { return 'end' === e ? 'start' : 'start' === e ? 'end' : e } function z(e) { var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1], o = me.indexOf(e), n = me.slice(o + 1).concat(me.slice(0, o)); return t ? n.reverse() : n } function V(e, t, o, n) { var i = e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/), r = +i[1], p = i[2]; if (!r) return e; if (0 === p.indexOf('%')) { var s; switch (p) { case '%p': s = o; break; case '%': case '%r': default: s = n; }var d = g(s); return d[t] / 100 * r } if ('vh' === p || 'vw' === p) { var a; return a = 'vh' === p ? $(document.documentElement.clientHeight, window.innerHeight || 0) : $(document.documentElement.clientWidth, window.innerWidth || 0), a / 100 * r } return r } function _(e, t, o, n) { var i = [0, 0], r = -1 !== ['right', 'left'].indexOf(n), p = e.split(/(\+|\-)/).map(function (e) { return e.trim() }), s = p.indexOf(D(p, function (e) { return -1 !== e.search(/,|\s/) })); p[s] && -1 === p[s].indexOf(',') && console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); var d = /\s*,\s*|\s+/, a = -1 === s ? [p] : [p.slice(0, s).concat([p[s].split(d)[0]]), [p[s].split(d)[1]].concat(p.slice(s + 1))]; return a = a.map(function (e, n) { var i = (1 === n ? !r : r) ? 'height' : 'width', p = !1; return e.reduce(function (e, t) { return '' === e[e.length - 1] && -1 !== ['+', '-'].indexOf(t) ? (e[e.length - 1] = t, p = !0, e) : p ? (e[e.length - 1] += t, p = !1, e) : e.concat(t) }, []).map(function (e) { return V(e, i, t, o) }) }), a.forEach(function (e, t) { e.forEach(function (o, n) { Y(o) && (i[t] += o * ('-' === e[n - 1] ? -1 : 1)) }) }), i } function X(e, t) { var o, n = t.offset, i = e.placement, r = e.offsets, p = r.popper, s = r.reference, d = i.split('-')[0]; return o = Y(+n) ? [+n, 0] : _(n, p, s, d), 'left' === d ? (p.top += o[0], p.left -= o[1]) : 'right' === d ? (p.top += o[0], p.left += o[1]) : 'top' === d ? (p.left += o[0], p.top -= o[1]) : 'bottom' === d && (p.left += o[0], p.top += o[1]), e.popper = p, e } for (var J = Math.min, Q = Math.round, Z = Math.floor, $ = Math.max, ee = 'undefined' != typeof window && 'undefined' != typeof document, te = ['Edge', 'Trident', 'Firefox'], oe = 0, ne = 0; ne < te.length; ne += 1)if (ee && 0 <= navigator.userAgent.indexOf(te[ne])) { oe = 1; break } var i = ee && window.Promise, ie = i ? function (e) { var t = !1; return function () { t || (t = !0, window.Promise.resolve().then(function () { t = !1, e() })) } } : function (e) { var t = !1; return function () { t || (t = !0, setTimeout(function () { t = !1, e() }, oe)) } }, re = ee && !!(window.MSInputMethodContext && document.documentMode), pe = ee && /MSIE 10/.test(navigator.userAgent), se = function (e, t) { if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function') }, de = function () { function e(e, t) { for (var o, n = 0; n < t.length; n++)o = t[n], o.enumerable = o.enumerable || !1, o.configurable = !0, 'value' in o && (o.writable = !0), Object.defineProperty(e, o.key, o) } return function (t, o, n) { return o && e(t.prototype, o), n && e(t, n), t } }(), ae = function (e, t, o) { return t in e ? Object.defineProperty(e, t, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = o, e }, le = Object.assign || function (e) { for (var t, o = 1; o < arguments.length; o++)for (var n in t = arguments[o], t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]); return e }, fe = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'], me = fe.slice(3), he = { FLIP: 'flip', CLOCKWISE: 'clockwise', COUNTERCLOCKWISE: 'counterclockwise' }, ce = function () { function t(o, n) { var i = this, r = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {}; se(this, t), this.scheduleUpdate = function () { return requestAnimationFrame(i.update) }, this.update = ie(this.update.bind(this)), this.options = le({}, t.Defaults, r), this.state = { isDestroyed: !1, isCreated: !1, scrollParents: [] }, this.reference = o && o.jquery ? o[0] : o, this.popper = n && n.jquery ? n[0] : n, this.options.modifiers = {}, Object.keys(le({}, t.Defaults.modifiers, r.modifiers)).forEach(function (e) { i.options.modifiers[e] = le({}, t.Defaults.modifiers[e] || {}, r.modifiers ? r.modifiers[e] : {}) }), this.modifiers = Object.keys(this.options.modifiers).map(function (e) { return le({ name: e }, i.options.modifiers[e]) }).sort(function (e, t) { return e.order - t.order }), this.modifiers.forEach(function (t) { t.enabled && e(t.onLoad) && t.onLoad(i.reference, i.popper, i.options, t, i.state) }), this.update(); var p = this.options.eventsEnabled; p && this.enableEventListeners(), this.state.eventsEnabled = p } return de(t, [{ key: 'update', value: function () { return k.call(this) } }, { key: 'destroy', value: function () { return H.call(this) } }, { key: 'enableEventListeners', value: function () { return F.call(this) } }, { key: 'disableEventListeners', value: function () { return U.call(this) } }]), t }(); return ce.Utils = ('undefined' == typeof window ? global : window).PopperUtils, ce.placements = fe, ce.Defaults = { placement: 'bottom', positionFixed: !1, eventsEnabled: !0, removeOnDestroy: !1, onCreate: function () { }, onUpdate: function () { }, modifiers: { shift: { order: 100, enabled: !0, fn: function (e) { var t = e.placement, o = t.split('-')[0], n = t.split('-')[1]; if (n) { var i = e.offsets, r = i.reference, p = i.popper, s = -1 !== ['bottom', 'top'].indexOf(o), d = s ? 'left' : 'top', a = s ? 'width' : 'height', l = { start: ae({}, d, r[d]), end: ae({}, d, r[d] + r[a] - p[a]) }; e.offsets.popper = le({}, p, l[n]) } return e } }, offset: { order: 200, enabled: !0, fn: X, offset: 0 }, preventOverflow: { order: 300, enabled: !0, fn: function (e, t) { var o = t.boundariesElement || p(e.instance.popper); e.instance.reference === o && (o = p(o)); var n = B('transform'), i = e.instance.popper.style, r = i.top, s = i.left, d = i[n]; i.top = '', i.left = '', i[n] = ''; var a = v(e.instance.popper, e.instance.reference, t.padding, o, e.positionFixed); i.top = r, i.left = s, i[n] = d, t.boundaries = a; var l = t.priority, f = e.offsets.popper, m = { primary: function (e) { var o = f[e]; return f[e] < a[e] && !t.escapeWithReference && (o = $(f[e], a[e])), ae({}, e, o) }, secondary: function (e) { var o = 'right' === e ? 'left' : 'top', n = f[o]; return f[e] > a[e] && !t.escapeWithReference && (n = J(f[o], a[e] - ('right' === e ? f.width : f.height))), ae({}, o, n) } }; return l.forEach(function (e) { var t = -1 === ['left', 'top'].indexOf(e) ? 'secondary' : 'primary'; f = le({}, f, m[t](e)) }), e.offsets.popper = f, e }, priority: ['left', 'right', 'top', 'bottom'], padding: 5, boundariesElement: 'scrollParent' }, keepTogether: { order: 400, enabled: !0, fn: function (e) { var t = e.offsets, o = t.popper, n = t.reference, i = e.placement.split('-')[0], r = Z, p = -1 !== ['top', 'bottom'].indexOf(i), s = p ? 'right' : 'bottom', d = p ? 'left' : 'top', a = p ? 'width' : 'height'; return o[s] < r(n[d]) && (e.offsets.popper[d] = r(n[d]) - o[a]), o[d] > r(n[s]) && (e.offsets.popper[d] = r(n[s])), e } }, arrow: { order: 500, enabled: !0, fn: function (e, o) { var n; if (!q(e.instance.modifiers, 'arrow', 'keepTogether')) return e; var i = o.element; if ('string' == typeof i) { if (i = e.instance.popper.querySelector(i), !i) return e; } else if (!e.instance.popper.contains(i)) return console.warn('WARNING: `arrow.element` must be child of its popper element!'), e; var r = e.placement.split('-')[0], p = e.offsets, s = p.popper, d = p.reference, a = -1 !== ['left', 'right'].indexOf(r), l = a ? 'height' : 'width', f = a ? 'Top' : 'Left', m = f.toLowerCase(), h = a ? 'left' : 'top', c = a ? 'bottom' : 'right', u = S(i)[l]; d[c] - u < s[m] && (e.offsets.popper[m] -= s[m] - (d[c] - u)), d[m] + u > s[c] && (e.offsets.popper[m] += d[m] + u - s[c]), e.offsets.popper = g(e.offsets.popper); var b = d[m] + d[l] / 2 - u / 2, y = t(e.instance.popper), w = parseFloat(y['margin' + f], 10), E = parseFloat(y['border' + f + 'Width'], 10), v = b - e.offsets.popper[m] - w - E; return v = $(J(s[l] - u, v), 0), e.arrowElement = i, e.offsets.arrow = (n = {}, ae(n, m, Q(v)), ae(n, h, ''), n), e }, element: '[x-arrow]' }, flip: { order: 600, enabled: !0, fn: function (e, t) { if (W(e.instance.modifiers, 'inner')) return e; if (e.flipped && e.placement === e.originalPlacement) return e; var o = v(e.instance.popper, e.instance.reference, t.padding, t.boundariesElement, e.positionFixed), n = e.placement.split('-')[0], i = T(n), r = e.placement.split('-')[1] || '', p = []; switch (t.behavior) { case he.FLIP: p = [n, i]; break; case he.CLOCKWISE: p = z(n); break; case he.COUNTERCLOCKWISE: p = z(n, !0); break; default: p = t.behavior; }return p.forEach(function (s, d) { if (n !== s || p.length === d + 1) return e; n = e.placement.split('-')[0], i = T(n); var a = e.offsets.popper, l = e.offsets.reference, f = Z, m = 'left' === n && f(a.right) > f(l.left) || 'right' === n && f(a.left) < f(l.right) || 'top' === n && f(a.bottom) > f(l.top) || 'bottom' === n && f(a.top) < f(l.bottom), h = f(a.left) < f(o.left), c = f(a.right) > f(o.right), g = f(a.top) < f(o.top), u = f(a.bottom) > f(o.bottom), b = 'left' === n && h || 'right' === n && c || 'top' === n && g || 'bottom' === n && u, y = -1 !== ['top', 'bottom'].indexOf(n), w = !!t.flipVariations && (y && 'start' === r && h || y && 'end' === r && c || !y && 'start' === r && g || !y && 'end' === r && u); (m || b || w) && (e.flipped = !0, (m || b) && (n = p[d + 1]), w && (r = G(r)), e.placement = n + (r ? '-' + r : ''), e.offsets.popper = le({}, e.offsets.popper, C(e.instance.popper, e.offsets.reference, e.placement)), e = P(e.instance.modifiers, e, 'flip')) }), e }, behavior: 'flip', padding: 5, boundariesElement: 'viewport' }, inner: { order: 700, enabled: !1, fn: function (e) { var t = e.placement, o = t.split('-')[0], n = e.offsets, i = n.popper, r = n.reference, p = -1 !== ['left', 'right'].indexOf(o), s = -1 === ['top', 'left'].indexOf(o); return i[p ? 'left' : 'top'] = r[o] - (s ? i[p ? 'width' : 'height'] : 0), e.placement = T(t), e.offsets.popper = g(i), e } }, hide: { order: 800, enabled: !0, fn: function (e) { if (!q(e.instance.modifiers, 'hide', 'preventOverflow')) return e; var t = e.offsets.reference, o = D(e.instance.modifiers, function (e) { return 'preventOverflow' === e.name }).boundaries; if (t.bottom < o.top || t.left > o.right || t.top > o.bottom || t.right < o.left) { if (!0 === e.hide) return e; e.hide = !0, e.attributes['x-out-of-boundaries'] = '' } else { if (!1 === e.hide) return e; e.hide = !1, e.attributes['x-out-of-boundaries'] = !1 } return e } }, computeStyle: { order: 850, enabled: !0, fn: function (e, t) { var o = t.x, n = t.y, i = e.offsets.popper, r = D(e.instance.modifiers, function (e) { return 'applyStyle' === e.name }).gpuAcceleration; void 0 !== r && console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); var s, d, a = void 0 === r ? t.gpuAcceleration : r, l = p(e.instance.popper), f = u(l), m = { position: i.position }, h = { left: Z(i.left), top: Q(i.top), bottom: Q(i.bottom), right: Z(i.right) }, c = 'bottom' === o ? 'top' : 'bottom', g = 'right' === n ? 'left' : 'right', b = B('transform'); if (d = 'bottom' == c ? -f.height + h.bottom : h.top, s = 'right' == g ? -f.width + h.right : h.left, a && b) m[b] = 'translate3d(' + s + 'px, ' + d + 'px, 0)', m[c] = 0, m[g] = 0, m.willChange = 'transform'; else { var y = 'bottom' == c ? -1 : 1, w = 'right' == g ? -1 : 1; m[c] = d * y, m[g] = s * w, m.willChange = c + ', ' + g } var E = { "x-placement": e.placement }; return e.attributes = le({}, E, e.attributes), e.styles = le({}, m, e.styles), e.arrowStyles = le({}, e.offsets.arrow, e.arrowStyles), e }, gpuAcceleration: !0, x: 'bottom', y: 'right' }, applyStyle: { order: 900, enabled: !0, fn: function (e) { return j(e.instance.popper, e.styles), K(e.instance.popper, e.attributes), e.arrowElement && Object.keys(e.arrowStyles).length && j(e.arrowElement, e.arrowStyles), e }, onLoad: function (e, t, o, n, i) { var r = L(i, t, e, o.positionFixed), p = O(o.placement, r, t, e, o.modifiers.flip.boundariesElement, o.modifiers.flip.padding); return t.setAttribute('x-placement', p), j(t, { position: o.positionFixed ? 'fixed' : 'absolute' }), o }, gpuAcceleration: void 0 } } }, ce });
+//# sourceMappingURL=popper.min.js.map
+
+/*!
+ * Bootstrap v4.1.1 (https://getbootstrap.com/)
+ * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
!function (t, e) { "object" == typeof exports && "undefined" != typeof module ? e(exports, require("jquery"), require("popper.js")) : "function" == typeof define && define.amd ? define(["exports", "jquery", "popper.js"], e) : e(t.bootstrap = {}, t.jQuery, t.Popper) }(this, function (t, e, c) { "use strict"; function i(t, e) { for (var n = 0; n < e.length; n++) { var i = e[n]; i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) } } function o(t, e, n) { return e && i(t.prototype, e), n && i(t, n), t } function h(r) { for (var t = 1; t < arguments.length; t++) { var s = null != arguments[t] ? arguments[t] : {}, e = Object.keys(s); "function" == typeof Object.getOwnPropertySymbols && (e = e.concat(Object.getOwnPropertySymbols(s).filter(function (t) { return Object.getOwnPropertyDescriptor(s, t).enumerable }))), e.forEach(function (t) { var e, n, i; e = r, i = s[n = t], n in e ? Object.defineProperty(e, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : e[n] = i }) } return r } e = e && e.hasOwnProperty("default") ? e.default : e, c = c && c.hasOwnProperty("default") ? c.default : c; var r, n, s, a, l, u, f, d, _, g, m, p, v, E, y, T, C, I, A, D, b, S, w, N, O, k, P, L, j, R, H, W, M, x, U, K, F, V, Q, B, Y, G, q, z, X, J, Z, $, tt, et, nt, it, rt, st, ot, at, lt, ht, ct, ut, ft, dt, _t, gt, mt, pt, vt, Et, yt, Tt, Ct, It, At, Dt, bt, St, wt, Nt, Ot, kt, Pt, Lt, jt, Rt, Ht, Wt, Mt, xt, Ut, Kt, Ft, Vt, Qt, Bt, Yt, Gt, qt, zt, Xt, Jt, Zt, $t, te, ee, ne, ie, re, se, oe, ae, le, he, ce, ue, fe, de, _e, ge, me, pe, ve, Ee, ye, Te, Ce, Ie, Ae, De, be, Se, we, Ne, Oe, ke, Pe, Le, je, Re, He, We, Me, xe, Ue, Ke, Fe, Ve, Qe, Be, Ye, Ge, qe, ze, Xe, Je, Ze, $e, tn, en, nn, rn, sn, on, an, ln, hn, cn, un, fn, dn, _n, gn, mn, pn, vn, En, yn, Tn, Cn = function (i) { var e = "transitionend"; function t(t) { var e = this, n = !1; return i(this).one(l.TRANSITION_END, function () { n = !0 }), setTimeout(function () { n || l.triggerTransitionEnd(e) }, t), this } var l = { TRANSITION_END: "bsTransitionEnd", getUID: function (t) { for (; t += ~~(1e6 * Math.random()), document.getElementById(t);); return t }, getSelectorFromElement: function (t) { var e = t.getAttribute("data-target"); e && "#" !== e || (e = t.getAttribute("href") || ""); try { return 0 < i(document).find(e).length ? e : null } catch (t) { return null } }, getTransitionDurationFromElement: function (t) { if (!t) return 0; var e = i(t).css("transition-duration"); return parseFloat(e) ? (e = e.split(",")[0], 1e3 * parseFloat(e)) : 0 }, reflow: function (t) { return t.offsetHeight }, triggerTransitionEnd: function (t) { i(t).trigger(e) }, supportsTransitionEnd: function () { return Boolean(e) }, isElement: function (t) { return (t[0] || t).nodeType }, typeCheckConfig: function (t, e, n) { for (var i in n) if (Object.prototype.hasOwnProperty.call(n, i)) { var r = n[i], s = e[i], o = s && l.isElement(s) ? "element" : (a = s, {}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase()); if (!new RegExp(r).test(o)) throw new Error(t.toUpperCase() + ': Option "' + i + '" provided type "' + o + '" but expected type "' + r + '".') } var a } }; return i.fn.emulateTransitionEnd = t, i.event.special[l.TRANSITION_END] = { bindType: e, delegateType: e, handle: function (t) { if (i(t.target).is(this)) return t.handleObj.handler.apply(this, arguments) } }, l }(e), In = (n = "alert", a = "." + (s = "bs.alert"), l = (r = e).fn[n], u = { CLOSE: "close" + a, CLOSED: "closed" + a, CLICK_DATA_API: "click" + a + ".data-api" }, f = "alert", d = "fade", _ = "show", g = function () { function i(t) { this._element = t } var t = i.prototype; return t.close = function (t) { var e = this._element; t && (e = this._getRootElement(t)), this._triggerCloseEvent(e).isDefaultPrevented() || this._removeElement(e) }, t.dispose = function () { r.removeData(this._element, s), this._element = null }, t._getRootElement = function (t) { var e = Cn.getSelectorFromElement(t), n = !1; return e && (n = r(e)[0]), n || (n = r(t).closest("." + f)[0]), n }, t._triggerCloseEvent = function (t) { var e = r.Event(u.CLOSE); return r(t).trigger(e), e }, t._removeElement = function (e) { var n = this; if (r(e).removeClass(_), r(e).hasClass(d)) { var t = Cn.getTransitionDurationFromElement(e); r(e).one(Cn.TRANSITION_END, function (t) { return n._destroyElement(e, t) }).emulateTransitionEnd(t) } else this._destroyElement(e) }, t._destroyElement = function (t) { r(t).detach().trigger(u.CLOSED).remove() }, i._jQueryInterface = function (n) { return this.each(function () { var t = r(this), e = t.data(s); e || (e = new i(this), t.data(s, e)), "close" === n && e[n](this) }) }, i._handleDismiss = function (e) { return function (t) { t && t.preventDefault(), e.close(this) } }, o(i, null, [{ key: "VERSION", get: function () { return "4.1.1" } }]), i }(), r(document).on(u.CLICK_DATA_API, '[data-dismiss="alert"]', g._handleDismiss(new g)), r.fn[n] = g._jQueryInterface, r.fn[n].Constructor = g, r.fn[n].noConflict = function () { return r.fn[n] = l, g._jQueryInterface }, g), An = (p = "button", E = "." + (v = "bs.button"), y = ".data-api", T = (m = e).fn[p], C = "active", I = "btn", D = '[data-toggle^="button"]', b = '[data-toggle="buttons"]', S = "input", w = ".active", N = ".btn", O = { CLICK_DATA_API: "click" + E + y, FOCUS_BLUR_DATA_API: (A = "focus") + E + y + " blur" + E + y }, k = function () { function n(t) { this._element = t } var t = n.prototype; return t.toggle = function () { var t = !0, e = !0, n = m(this._element).closest(b)[0]; if (n) { var i = m(this._element).find(S)[0]; if (i) { if ("radio" === i.type) if (i.checked && m(this._element).hasClass(C)) t = !1; else { var r = m(n).find(w)[0]; r && m(r).removeClass(C) } if (t) { if (i.hasAttribute("disabled") || n.hasAttribute("disabled") || i.classList.contains("disabled") || n.classList.contains("disabled")) return; i.checked = !m(this._element).hasClass(C), m(i).trigger("change") } i.focus(), e = !1 } } e && this._element.setAttribute("aria-pressed", !m(this._element).hasClass(C)), t && m(this._element).toggleClass(C) }, t.dispose = function () { m.removeData(this._element, v), this._element = null }, n._jQueryInterface = function (e) { return this.each(function () { var t = m(this).data(v); t || (t = new n(this), m(this).data(v, t)), "toggle" === e && t[e]() }) }, o(n, null, [{ key: "VERSION", get: function () { return "4.1.1" } }]), n }(), m(document).on(O.CLICK_DATA_API, D, function (t) { t.preventDefault(); var e = t.target; m(e).hasClass(I) || (e = m(e).closest(N)), k._jQueryInterface.call(m(e), "toggle") }).on(O.FOCUS_BLUR_DATA_API, D, function (t) { var e = m(t.target).closest(N)[0]; m(e).toggleClass(A, /^focus(in)?$/.test(t.type)) }), m.fn[p] = k._jQueryInterface, m.fn[p].Constructor = k, m.fn[p].noConflict = function () { return m.fn[p] = T, k._jQueryInterface }, k), Dn = (L = "carousel", R = "." + (j = "bs.carousel"), H = ".data-api", W = (P = e).fn[L], M = { interval: 5e3, keyboard: !0, slide: !1, pause: "hover", wrap: !0 }, x = { interval: "(number|boolean)", keyboard: "boolean", slide: "(boolean|string)", pause: "(string|boolean)", wrap: "boolean" }, U = "next", K = "prev", F = "left", V = "right", Q = { SLIDE: "slide" + R, SLID: "slid" + R, KEYDOWN: "keydown" + R, MOUSEENTER: "mouseenter" + R, MOUSELEAVE: "mouseleave" + R, TOUCHEND: "touchend" + R, LOAD_DATA_API: "load" + R + H, CLICK_DATA_API: "click" + R + H }, B = "carousel", Y = "active", G = "slide", q = "carousel-item-right", z = "carousel-item-left", X = "carousel-item-next", J = "carousel-item-prev", Z = { ACTIVE: ".active", ACTIVE_ITEM: ".active.carousel-item", ITEM: ".carousel-item", NEXT_PREV: ".carousel-item-next, .carousel-item-prev", INDICATORS: ".carousel-indicators", DATA_SLIDE: "[data-slide], [data-slide-to]", DATA_RIDE: '[data-ride="carousel"]' }, $ = function () { function s(t, e) { this._items = null, this._interval = null, this._activeElement = null, this._isPaused = !1, this._isSliding = !1, this.touchTimeout = null, this._config = this._getConfig(e), this._element = P(t)[0], this._indicatorsElement = P(this._element).find(Z.INDICATORS)[0], this._addEventListeners() } var t = s.prototype; return t.next = function () { this._isSliding || this._slide(U) }, t.nextWhenVisible = function () { !document.hidden && P(this._element).is(":visible") && "hidden" !== P(this._element).css("visibility") && this.next() }, t.prev = function () { this._isSliding || this._slide(K) }, t.pause = function (t) { t || (this._isPaused = !0), P(this._element).find(Z.NEXT_PREV)[0] && (Cn.triggerTransitionEnd(this._element), this.cycle(!0)), clearInterval(this._interval), this._interval = null }, t.cycle = function (t) { t || (this._isPaused = !1), this._interval && (clearInterval(this._interval), this._interval = null), this._config.interval && !this._isPaused && (this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval)) }, t.to = function (t) { var e = this; this._activeElement = P(this._element).find(Z.ACTIVE_ITEM)[0]; var n = this._getItemIndex(this._activeElement); if (!(t > this._items.length - 1 || t < 0)) if (this._isSliding) P(this._element).one(Q.SLID, function () { return e.to(t) }); else { if (n === t) return this.pause(), void this.cycle(); var i = n < t ? U : K; this._slide(i, this._items[t]) } }, t.dispose = function () { P(this._element).off(R), P.removeData(this._element, j), this._items = null, this._config = null, this._element = null, this._interval = null, this._isPaused = null, this._isSliding = null, this._activeElement = null, this._indicatorsElement = null }, t._getConfig = function (t) { return t = h({}, M, t), Cn.typeCheckConfig(L, t, x), t }, t._addEventListeners = function () { var e = this; this._config.keyboard && P(this._element).on(Q.KEYDOWN, function (t) { return e._keydown(t) }), "hover" === this._config.pause && (P(this._element).on(Q.MOUSEENTER, function (t) { return e.pause(t) }).on(Q.MOUSELEAVE, function (t) { return e.cycle(t) }), "ontouchstart" in document.documentElement && P(this._element).on(Q.TOUCHEND, function () { e.pause(), e.touchTimeout && clearTimeout(e.touchTimeout), e.touchTimeout = setTimeout(function (t) { return e.cycle(t) }, 500 + e._config.interval) })) }, t._keydown = function (t) { if (!/input|textarea/i.test(t.target.tagName)) switch (t.which) { case 37: t.preventDefault(), this.prev(); break; case 39: t.preventDefault(), this.next() } }, t._getItemIndex = function (t) { return this._items = P.makeArray(P(t).parent().find(Z.ITEM)), this._items.indexOf(t) }, t._getItemByDirection = function (t, e) { var n = t === U, i = t === K, r = this._getItemIndex(e), s = this._items.length - 1; if ((i && 0 === r || n && r === s) && !this._config.wrap) return e; var o = (r + (t === K ? -1 : 1)) % this._items.length; return -1 === o ? this._items[this._items.length - 1] : this._items[o] }, t._triggerSlideEvent = function (t, e) { var n = this._getItemIndex(t), i = this._getItemIndex(P(this._element).find(Z.ACTIVE_ITEM)[0]), r = P.Event(Q.SLIDE, { relatedTarget: t, direction: e, from: i, to: n }); return P(this._element).trigger(r), r }, t._setActiveIndicatorElement = function (t) { if (this._indicatorsElement) { P(this._indicatorsElement).find(Z.ACTIVE).removeClass(Y); var e = this._indicatorsElement.children[this._getItemIndex(t)]; e && P(e).addClass(Y) } }, t._slide = function (t, e) { var n, i, r, s = this, o = P(this._element).find(Z.ACTIVE_ITEM)[0], a = this._getItemIndex(o), l = e || o && this._getItemByDirection(t, o), h = this._getItemIndex(l), c = Boolean(this._interval); if (t === U ? (n = z, i = X, r = F) : (n = q, i = J, r = V), l && P(l).hasClass(Y)) this._isSliding = !1; else if (!this._triggerSlideEvent(l, r).isDefaultPrevented() && o && l) { this._isSliding = !0, c && this.pause(), this._setActiveIndicatorElement(l); var u = P.Event(Q.SLID, { relatedTarget: l, direction: r, from: a, to: h }); if (P(this._element).hasClass(G)) { P(l).addClass(i), Cn.reflow(l), P(o).addClass(n), P(l).addClass(n); var f = Cn.getTransitionDurationFromElement(o); P(o).one(Cn.TRANSITION_END, function () { P(l).removeClass(n + " " + i).addClass(Y), P(o).removeClass(Y + " " + i + " " + n), s._isSliding = !1, setTimeout(function () { return P(s._element).trigger(u) }, 0) }).emulateTransitionEnd(f) } else P(o).removeClass(Y), P(l).addClass(Y), this._isSliding = !1, P(this._element).trigger(u); c && this.cycle() } }, s._jQueryInterface = function (i) { return this.each(function () { var t = P(this).data(j), e = h({}, M, P(this).data()); "object" == typeof i && (e = h({}, e, i)); var n = "string" == typeof i ? i : e.slide; if (t || (t = new s(this, e), P(this).data(j, t)), "number" == typeof i) t.to(i); else if ("string" == typeof n) { if ("undefined" == typeof t[n]) throw new TypeError('No method named "' + n + '"'); t[n]() } else e.interval && (t.pause(), t.cycle()) }) }, s._dataApiClickHandler = function (t) { var e = Cn.getSelectorFromElement(this); if (e) { var n = P(e)[0]; if (n && P(n).hasClass(B)) { var i = h({}, P(n).data(), P(this).data()), r = this.getAttribute("data-slide-to"); r && (i.interval = !1), s._jQueryInterface.call(P(n), i), r && P(n).data(j).to(r), t.preventDefault() } } }, o(s, null, [{ key: "VERSION", get: function () { return "4.1.1" } }, { key: "Default", get: function () { return M } }]), s }(), P(document).on(Q.CLICK_DATA_API, Z.DATA_SLIDE, $._dataApiClickHandler), P(window).on(Q.LOAD_DATA_API, function () { P(Z.DATA_RIDE).each(function () { var t = P(this); $._jQueryInterface.call(t, t.data()) }) }), P.fn[L] = $._jQueryInterface, P.fn[L].Constructor = $, P.fn[L].noConflict = function () { return P.fn[L] = W, $._jQueryInterface }, $), bn = (et = "collapse", it = "." + (nt = "bs.collapse"), rt = (tt = e).fn[et], st = { toggle: !0, parent: "" }, ot = { toggle: "boolean", parent: "(string|element)" }, at = { SHOW: "show" + it, SHOWN: "shown" + it, HIDE: "hide" + it, HIDDEN: "hidden" + it, CLICK_DATA_API: "click" + it + ".data-api" }, lt = "show", ht = "collapse", ct = "collapsing", ut = "collapsed", ft = "width", dt = "height", _t = { ACTIVES: ".show, .collapsing", DATA_TOGGLE: '[data-toggle="collapse"]' }, gt = function () { function a(t, e) { this._isTransitioning = !1, this._element = t, this._config = this._getConfig(e), this._triggerArray = tt.makeArray(tt('[data-toggle="collapse"][href="#' + t.id + '"],[data-toggle="collapse"][data-target="#' + t.id + '"]')); for (var n = tt(_t.DATA_TOGGLE), i = 0; i < n.length; i++) { var r = n[i], s = Cn.getSelectorFromElement(r); null !== s && 0 < tt(s).filter(t).length && (this._selector = s, this._triggerArray.push(r)) } this._parent = this._config.parent ? this._getParent() : null, this._config.parent || this._addAriaAndCollapsedClass(this._element, this._triggerArray), this._config.toggle && this.toggle() } var t = a.prototype; return t.toggle = function () { tt(this._element).hasClass(lt) ? this.hide() : this.show() }, t.show = function () { var t, e, n = this; if (!this._isTransitioning && !tt(this._element).hasClass(lt) && (this._parent && 0 === (t = tt.makeArray(tt(this._parent).find(_t.ACTIVES).filter('[data-parent="' + this._config.parent + '"]'))).length && (t = null), !(t && (e = tt(t).not(this._selector).data(nt)) && e._isTransitioning))) { var i = tt.Event(at.SHOW); if (tt(this._element).trigger(i), !i.isDefaultPrevented()) { t && (a._jQueryInterface.call(tt(t).not(this._selector), "hide"), e || tt(t).data(nt, null)); var r = this._getDimension(); tt(this._element).removeClass(ht).addClass(ct), (this._element.style[r] = 0) < this._triggerArray.length && tt(this._triggerArray).removeClass(ut).attr("aria-expanded", !0), this.setTransitioning(!0); var s = "scroll" + (r[0].toUpperCase() + r.slice(1)), o = Cn.getTransitionDurationFromElement(this._element); tt(this._element).one(Cn.TRANSITION_END, function () { tt(n._element).removeClass(ct).addClass(ht).addClass(lt), n._element.style[r] = "", n.setTransitioning(!1), tt(n._element).trigger(at.SHOWN) }).emulateTransitionEnd(o), this._element.style[r] = this._element[s] + "px" } } }, t.hide = function () { var t = this; if (!this._isTransitioning && tt(this._element).hasClass(lt)) { var e = tt.Event(at.HIDE); if (tt(this._element).trigger(e), !e.isDefaultPrevented()) { var n = this._getDimension(); if (this._element.style[n] = this._element.getBoundingClientRect()[n] + "px", Cn.reflow(this._element), tt(this._element).addClass(ct).removeClass(ht).removeClass(lt), 0 < this._triggerArray.length) for (var i = 0; i < this._triggerArray.length; i++) { var r = this._triggerArray[i], s = Cn.getSelectorFromElement(r); if (null !== s) tt(s).hasClass(lt) || tt(r).addClass(ut).attr("aria-expanded", !1) } this.setTransitioning(!0); this._element.style[n] = ""; var o = Cn.getTransitionDurationFromElement(this._element); tt(this._element).one(Cn.TRANSITION_END, function () { t.setTransitioning(!1), tt(t._element).removeClass(ct).addClass(ht).trigger(at.HIDDEN) }).emulateTransitionEnd(o) } } }, t.setTransitioning = function (t) { this._isTransitioning = t }, t.dispose = function () { tt.removeData(this._element, nt), this._config = null, this._parent = null, this._element = null, this._triggerArray = null, this._isTransitioning = null }, t._getConfig = function (t) { return (t = h({}, st, t)).toggle = Boolean(t.toggle), Cn.typeCheckConfig(et, t, ot), t }, t._getDimension = function () { return tt(this._element).hasClass(ft) ? ft : dt }, t._getParent = function () { var n = this, t = null; Cn.isElement(this._config.parent) ? (t = this._config.parent, "undefined" != typeof this._config.parent.jquery && (t = this._config.parent[0])) : t = tt(this._config.parent)[0]; var e = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]'; return tt(t).find(e).each(function (t, e) { n._addAriaAndCollapsedClass(a._getTargetFromElement(e), [e]) }), t }, t._addAriaAndCollapsedClass = function (t, e) { if (t) { var n = tt(t).hasClass(lt); 0 < e.length && tt(e).toggleClass(ut, !n).attr("aria-expanded", n) } }, a._getTargetFromElement = function (t) { var e = Cn.getSelectorFromElement(t); return e ? tt(e)[0] : null }, a._jQueryInterface = function (i) { return this.each(function () { var t = tt(this), e = t.data(nt), n = h({}, st, t.data(), "object" == typeof i && i ? i : {}); if (!e && n.toggle && /show|hide/.test(i) && (n.toggle = !1), e || (e = new a(this, n), t.data(nt, e)), "string" == typeof i) { if ("undefined" == typeof e[i]) throw new TypeError('No method named "' + i + '"'); e[i]() } }) }, o(a, null, [{ key: "VERSION", get: function () { return "4.1.1" } }, { key: "Default", get: function () { return st } }]), a }(), tt(document).on(at.CLICK_DATA_API, _t.DATA_TOGGLE, function (t) { "A" === t.currentTarget.tagName && t.preventDefault(); var n = tt(this), e = Cn.getSelectorFromElement(this); tt(e).each(function () { var t = tt(this), e = t.data(nt) ? "toggle" : n.data(); gt._jQueryInterface.call(t, e) }) }), tt.fn[et] = gt._jQueryInterface, tt.fn[et].Constructor = gt, tt.fn[et].noConflict = function () { return tt.fn[et] = rt, gt._jQueryInterface }, gt), Sn = (pt = "dropdown", Et = "." + (vt = "bs.dropdown"), yt = ".data-api", Tt = (mt = e).fn[pt], Ct = new RegExp("38|40|27"), It = { HIDE: "hide" + Et, HIDDEN: "hidden" + Et, SHOW: "show" + Et, SHOWN: "shown" + Et, CLICK: "click" + Et, CLICK_DATA_API: "click" + Et + yt, KEYDOWN_DATA_API: "keydown" + Et + yt, KEYUP_DATA_API: "keyup" + Et + yt }, At = "disabled", Dt = "show", bt = "dropup", St = "dropright", wt = "dropleft", Nt = "dropdown-menu-right", Ot = "position-static", kt = '[data-toggle="dropdown"]', Pt = ".dropdown form", Lt = ".dropdown-menu", jt = ".navbar-nav", Rt = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", Ht = "top-start", Wt = "top-end", Mt = "bottom-start", xt = "bottom-end", Ut = "right-start", Kt = "left-start", Ft = { offset: 0, flip: !0, boundary: "scrollParent", reference: "toggle", display: "dynamic" }, Vt = { offset: "(number|string|function)", flip: "boolean", boundary: "(string|element)", reference: "(string|element)", display: "string" }, Qt = function () { function l(t, e) { this._element = t, this._popper = null, this._config = this._getConfig(e), this._menu = this._getMenuElement(), this._inNavbar = this._detectNavbar(), this._addEventListeners() } var t = l.prototype; return t.toggle = function () { if (!this._element.disabled && !mt(this._element).hasClass(At)) { var t = l._getParentFromElement(this._element), e = mt(this._menu).hasClass(Dt); if (l._clearMenus(), !e) { var n = { relatedTarget: this._element }, i = mt.Event(It.SHOW, n); if (mt(t).trigger(i), !i.isDefaultPrevented()) { if (!this._inNavbar) { if ("undefined" == typeof c) throw new TypeError("Bootstrap dropdown require Popper.js (https://popper.js.org)"); var r = this._element; "parent" === this._config.reference ? r = t : Cn.isElement(this._config.reference) && (r = this._config.reference, "undefined" != typeof this._config.reference.jquery && (r = this._config.reference[0])), "scrollParent" !== this._config.boundary && mt(t).addClass(Ot), this._popper = new c(r, this._menu, this._getPopperConfig()) } "ontouchstart" in document.documentElement && 0 === mt(t).closest(jt).length && mt(document.body).children().on("mouseover", null, mt.noop), this._element.focus(), this._element.setAttribute("aria-expanded", !0), mt(this._menu).toggleClass(Dt), mt(t).toggleClass(Dt).trigger(mt.Event(It.SHOWN, n)) } } } }, t.dispose = function () { mt.removeData(this._element, vt), mt(this._element).off(Et), this._element = null, (this._menu = null) !== this._popper && (this._popper.destroy(), this._popper = null) }, t.update = function () { this._inNavbar = this._detectNavbar(), null !== this._popper && this._popper.scheduleUpdate() }, t._addEventListeners = function () { var e = this; mt(this._element).on(It.CLICK, function (t) { t.preventDefault(), t.stopPropagation(), e.toggle() }) }, t._getConfig = function (t) { return t = h({}, this.constructor.Default, mt(this._element).data(), t), Cn.typeCheckConfig(pt, t, this.constructor.DefaultType), t }, t._getMenuElement = function () { if (!this._menu) { var t = l._getParentFromElement(this._element); this._menu = mt(t).find(Lt)[0] } return this._menu }, t._getPlacement = function () { var t = mt(this._element).parent(), e = Mt; return t.hasClass(bt) ? (e = Ht, mt(this._menu).hasClass(Nt) && (e = Wt)) : t.hasClass(St) ? e = Ut : t.hasClass(wt) ? e = Kt : mt(this._menu).hasClass(Nt) && (e = xt), e }, t._detectNavbar = function () { return 0 < mt(this._element).closest(".navbar").length }, t._getPopperConfig = function () { var e = this, t = {}; "function" == typeof this._config.offset ? t.fn = function (t) { return t.offsets = h({}, t.offsets, e._config.offset(t.offsets) || {}), t } : t.offset = this._config.offset; var n = { placement: this._getPlacement(), modifiers: { offset: t, flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } }; return "static" === this._config.display && (n.modifiers.applyStyle = { enabled: !1 }), n }, l._jQueryInterface = function (e) { return this.each(function () { var t = mt(this).data(vt); if (t || (t = new l(this, "object" == typeof e ? e : null), mt(this).data(vt, t)), "string" == typeof e) { if ("undefined" == typeof t[e]) throw new TypeError('No method named "' + e + '"'); t[e]() } }) }, l._clearMenus = function (t) { if (!t || 3 !== t.which && ("keyup" !== t.type || 9 === t.which)) for (var e = mt.makeArray(mt(kt)), n = 0; n < e.length; n++) { var i = l._getParentFromElement(e[n]), r = mt(e[n]).data(vt), s = { relatedTarget: e[n] }; if (r) { var o = r._menu; if (mt(i).hasClass(Dt) && !(t && ("click" === t.type && /input|textarea/i.test(t.target.tagName) || "keyup" === t.type && 9 === t.which) && mt.contains(i, t.target))) { var a = mt.Event(It.HIDE, s); mt(i).trigger(a), a.isDefaultPrevented() || ("ontouchstart" in document.documentElement && mt(document.body).children().off("mouseover", null, mt.noop), e[n].setAttribute("aria-expanded", "false"), mt(o).removeClass(Dt), mt(i).removeClass(Dt).trigger(mt.Event(It.HIDDEN, s))) } } } }, l._getParentFromElement = function (t) { var e, n = Cn.getSelectorFromElement(t); return n && (e = mt(n)[0]), e || t.parentNode }, l._dataApiKeydownHandler = function (t) { if ((/input|textarea/i.test(t.target.tagName) ? !(32 === t.which || 27 !== t.which && (40 !== t.which && 38 !== t.which || mt(t.target).closest(Lt).length)) : Ct.test(t.which)) && (t.preventDefault(), t.stopPropagation(), !this.disabled && !mt(this).hasClass(At))) { var e = l._getParentFromElement(this), n = mt(e).hasClass(Dt); if ((n || 27 === t.which && 32 === t.which) && (!n || 27 !== t.which && 32 !== t.which)) { var i = mt(e).find(Rt).get(); if (0 !== i.length) { var r = i.indexOf(t.target); 38 === t.which && 0 < r && r-- , 40 === t.which && r < i.length - 1 && r++ , r < 0 && (r = 0), i[r].focus() } } else { if (27 === t.which) { var s = mt(e).find(kt)[0]; mt(s).trigger("focus") } mt(this).trigger("click") } } }, o(l, null, [{ key: "VERSION", get: function () { return "4.1.1" } }, { key: "Default", get: function () { return Ft } }, { key: "DefaultType", get: function () { return Vt } }]), l }(), mt(document).on(It.KEYDOWN_DATA_API, kt, Qt._dataApiKeydownHandler).on(It.KEYDOWN_DATA_API, Lt, Qt._dataApiKeydownHandler).on(It.CLICK_DATA_API + " " + It.KEYUP_DATA_API, Qt._clearMenus).on(It.CLICK_DATA_API, kt, function (t) { t.preventDefault(), t.stopPropagation(), Qt._jQueryInterface.call(mt(this), "toggle") }).on(It.CLICK_DATA_API, Pt, function (t) { t.stopPropagation() }), mt.fn[pt] = Qt._jQueryInterface, mt.fn[pt].Constructor = Qt, mt.fn[pt].noConflict = function () { return mt.fn[pt] = Tt, Qt._jQueryInterface }, Qt), wn = (Yt = "modal", qt = "." + (Gt = "bs.modal"), zt = (Bt = e).fn[Yt], Xt = { backdrop: !0, keyboard: !0, focus: !0, show: !0 }, Jt = { backdrop: "(boolean|string)", keyboard: "boolean", focus: "boolean", show: "boolean" }, Zt = { HIDE: "hide" + qt, HIDDEN: "hidden" + qt, SHOW: "show" + qt, SHOWN: "shown" + qt, FOCUSIN: "focusin" + qt, RESIZE: "resize" + qt, CLICK_DISMISS: "click.dismiss" + qt, KEYDOWN_DISMISS: "keydown.dismiss" + qt, MOUSEUP_DISMISS: "mouseup.dismiss" + qt, MOUSEDOWN_DISMISS: "mousedown.dismiss" + qt, CLICK_DATA_API: "click" + qt + ".data-api" }, $t = "modal-scrollbar-measure", te = "modal-backdrop", ee = "modal-open", ne = "fade", ie = "show", re = { DIALOG: ".modal-dialog", DATA_TOGGLE: '[data-toggle="modal"]', DATA_DISMISS: '[data-dismiss="modal"]', FIXED_CONTENT: ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", STICKY_CONTENT: ".sticky-top", NAVBAR_TOGGLER: ".navbar-toggler" }, se = function () { function r(t, e) { this._config = this._getConfig(e), this._element = t, this._dialog = Bt(t).find(re.DIALOG)[0], this._backdrop = null, this._isShown = !1, this._isBodyOverflowing = !1, this._ignoreBackdropClick = !1, this._scrollbarWidth = 0 } var t = r.prototype; return t.toggle = function (t) { return this._isShown ? this.hide() : this.show(t) }, t.show = function (t) { var e = this; if (!this._isTransitioning && !this._isShown) { Bt(this._element).hasClass(ne) && (this._isTransitioning = !0); var n = Bt.Event(Zt.SHOW, { relatedTarget: t }); Bt(this._element).trigger(n), this._isShown || n.isDefaultPrevented() || (this._isShown = !0, this._checkScrollbar(), this._setScrollbar(), this._adjustDialog(), Bt(document.body).addClass(ee), this._setEscapeEvent(), this._setResizeEvent(), Bt(this._element).on(Zt.CLICK_DISMISS, re.DATA_DISMISS, function (t) { return e.hide(t) }), Bt(this._dialog).on(Zt.MOUSEDOWN_DISMISS, function () { Bt(e._element).one(Zt.MOUSEUP_DISMISS, function (t) { Bt(t.target).is(e._element) && (e._ignoreBackdropClick = !0) }) }), this._showBackdrop(function () { return e._showElement(t) })) } }, t.hide = function (t) { var e = this; if (t && t.preventDefault(), !this._isTransitioning && this._isShown) { var n = Bt.Event(Zt.HIDE); if (Bt(this._element).trigger(n), this._isShown && !n.isDefaultPrevented()) { this._isShown = !1; var i = Bt(this._element).hasClass(ne); if (i && (this._isTransitioning = !0), this._setEscapeEvent(), this._setResizeEvent(), Bt(document).off(Zt.FOCUSIN), Bt(this._element).removeClass(ie), Bt(this._element).off(Zt.CLICK_DISMISS), Bt(this._dialog).off(Zt.MOUSEDOWN_DISMISS), i) { var r = Cn.getTransitionDurationFromElement(this._element); Bt(this._element).one(Cn.TRANSITION_END, function (t) { return e._hideModal(t) }).emulateTransitionEnd(r) } else this._hideModal() } } }, t.dispose = function () { Bt.removeData(this._element, Gt), Bt(window, document, this._element, this._backdrop).off(qt), this._config = null, this._element = null, this._dialog = null, this._backdrop = null, this._isShown = null, this._isBodyOverflowing = null, this._ignoreBackdropClick = null, this._scrollbarWidth = null }, t.handleUpdate = function () { this._adjustDialog() }, t._getConfig = function (t) { return t = h({}, Xt, t), Cn.typeCheckConfig(Yt, t, Jt), t }, t._showElement = function (t) { var e = this, n = Bt(this._element).hasClass(ne); this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE || document.body.appendChild(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.scrollTop = 0, n && Cn.reflow(this._element), Bt(this._element).addClass(ie), this._config.focus && this._enforceFocus(); var i = Bt.Event(Zt.SHOWN, { relatedTarget: t }), r = function () { e._config.focus && e._element.focus(), e._isTransitioning = !1, Bt(e._element).trigger(i) }; if (n) { var s = Cn.getTransitionDurationFromElement(this._element); Bt(this._dialog).one(Cn.TRANSITION_END, r).emulateTransitionEnd(s) } else r() }, t._enforceFocus = function () { var e = this; Bt(document).off(Zt.FOCUSIN).on(Zt.FOCUSIN, function (t) { document !== t.target && e._element !== t.target && 0 === Bt(e._element).has(t.target).length && e._element.focus() }) }, t._setEscapeEvent = function () { var e = this; this._isShown && this._config.keyboard ? Bt(this._element).on(Zt.KEYDOWN_DISMISS, function (t) { 27 === t.which && (t.preventDefault(), e.hide()) }) : this._isShown || Bt(this._element).off(Zt.KEYDOWN_DISMISS) }, t._setResizeEvent = function () { var e = this; this._isShown ? Bt(window).on(Zt.RESIZE, function (t) { return e.handleUpdate(t) }) : Bt(window).off(Zt.RESIZE) }, t._hideModal = function () { var t = this; this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._isTransitioning = !1, this._showBackdrop(function () { Bt(document.body).removeClass(ee), t._resetAdjustments(), t._resetScrollbar(), Bt(t._element).trigger(Zt.HIDDEN) }) }, t._removeBackdrop = function () { this._backdrop && (Bt(this._backdrop).remove(), this._backdrop = null) }, t._showBackdrop = function (t) { var e = this, n = Bt(this._element).hasClass(ne) ? ne : ""; if (this._isShown && this._config.backdrop) { if (this._backdrop = document.createElement("div"), this._backdrop.className = te, n && Bt(this._backdrop).addClass(n), Bt(this._backdrop).appendTo(document.body), Bt(this._element).on(Zt.CLICK_DISMISS, function (t) { e._ignoreBackdropClick ? e._ignoreBackdropClick = !1 : t.target === t.currentTarget && ("static" === e._config.backdrop ? e._element.focus() : e.hide()) }), n && Cn.reflow(this._backdrop), Bt(this._backdrop).addClass(ie), !t) return; if (!n) return void t(); var i = Cn.getTransitionDurationFromElement(this._backdrop); Bt(this._backdrop).one(Cn.TRANSITION_END, t).emulateTransitionEnd(i) } else if (!this._isShown && this._backdrop) { Bt(this._backdrop).removeClass(ie); var r = function () { e._removeBackdrop(), t && t() }; if (Bt(this._element).hasClass(ne)) { var s = Cn.getTransitionDurationFromElement(this._backdrop); Bt(this._backdrop).one(Cn.TRANSITION_END, r).emulateTransitionEnd(s) } else r() } else t && t() }, t._adjustDialog = function () { var t = this._element.scrollHeight > document.documentElement.clientHeight; !this._isBodyOverflowing && t && (this._element.style.paddingLeft = this._scrollbarWidth + "px"), this._isBodyOverflowing && !t && (this._element.style.paddingRight = this._scrollbarWidth + "px") }, t._resetAdjustments = function () { this._element.style.paddingLeft = "", this._element.style.paddingRight = "" }, t._checkScrollbar = function () { var t = document.body.getBoundingClientRect(); this._isBodyOverflowing = t.left + t.right < window.innerWidth, this._scrollbarWidth = this._getScrollbarWidth() }, t._setScrollbar = function () { var r = this; if (this._isBodyOverflowing) { Bt(re.FIXED_CONTENT).each(function (t, e) { var n = Bt(e)[0].style.paddingRight, i = Bt(e).css("padding-right"); Bt(e).data("padding-right", n).css("padding-right", parseFloat(i) + r._scrollbarWidth + "px") }), Bt(re.STICKY_CONTENT).each(function (t, e) { var n = Bt(e)[0].style.marginRight, i = Bt(e).css("margin-right"); Bt(e).data("margin-right", n).css("margin-right", parseFloat(i) - r._scrollbarWidth + "px") }), Bt(re.NAVBAR_TOGGLER).each(function (t, e) { var n = Bt(e)[0].style.marginRight, i = Bt(e).css("margin-right"); Bt(e).data("margin-right", n).css("margin-right", parseFloat(i) + r._scrollbarWidth + "px") }); var t = document.body.style.paddingRight, e = Bt(document.body).css("padding-right"); Bt(document.body).data("padding-right", t).css("padding-right", parseFloat(e) + this._scrollbarWidth + "px") } }, t._resetScrollbar = function () { Bt(re.FIXED_CONTENT).each(function (t, e) { var n = Bt(e).data("padding-right"); "undefined" != typeof n && Bt(e).css("padding-right", n).removeData("padding-right") }), Bt(re.STICKY_CONTENT + ", " + re.NAVBAR_TOGGLER).each(function (t, e) { var n = Bt(e).data("margin-right"); "undefined" != typeof n && Bt(e).css("margin-right", n).removeData("margin-right") }); var t = Bt(document.body).data("padding-right"); "undefined" != typeof t && Bt(document.body).css("padding-right", t).removeData("padding-right") }, t._getScrollbarWidth = function () { var t = document.createElement("div"); t.className = $t, document.body.appendChild(t); var e = t.getBoundingClientRect().width - t.clientWidth; return document.body.removeChild(t), e }, r._jQueryInterface = function (n, i) { return this.each(function () { var t = Bt(this).data(Gt), e = h({}, Xt, Bt(this).data(), "object" == typeof n && n ? n : {}); if (t || (t = new r(this, e), Bt(this).data(Gt, t)), "string" == typeof n) { if ("undefined" == typeof t[n]) throw new TypeError('No method named "' + n + '"'); t[n](i) } else e.show && t.show(i) }) }, o(r, null, [{ key: "VERSION", get: function () { return "4.1.1" } }, { key: "Default", get: function () { return Xt } }]), r }(), Bt(document).on(Zt.CLICK_DATA_API, re.DATA_TOGGLE, function (t) { var e, n = this, i = Cn.getSelectorFromElement(this); i && (e = Bt(i)[0]); var r = Bt(e).data(Gt) ? "toggle" : h({}, Bt(e).data(), Bt(this).data()); "A" !== this.tagName && "AREA" !== this.tagName || t.preventDefault(); var s = Bt(e).one(Zt.SHOW, function (t) { t.isDefaultPrevented() || s.one(Zt.HIDDEN, function () { Bt(n).is(":visible") && n.focus() }) }); se._jQueryInterface.call(Bt(e), r, this) }), Bt.fn[Yt] = se._jQueryInterface, Bt.fn[Yt].Constructor = se, Bt.fn[Yt].noConflict = function () { return Bt.fn[Yt] = zt, se._jQueryInterface }, se), Nn = (ae = "tooltip", he = "." + (le = "bs.tooltip"), ce = (oe = e).fn[ae], ue = "bs-tooltip", fe = new RegExp("(^|\\s)" + ue + "\\S+", "g"), ge = { animation: !0, template: '
', trigger: "hover focus", title: "", delay: 0, html: !(_e = { AUTO: "auto", TOP: "top", RIGHT: "right", BOTTOM: "bottom", LEFT: "left" }), selector: !(de = { animation: "boolean", template: "string", title: "(string|element|function)", trigger: "string", delay: "(number|object)", html: "boolean", selector: "(string|boolean)", placement: "(string|function)", offset: "(number|string)", container: "(string|element|boolean)", fallbackPlacement: "(string|array)", boundary: "(string|element)" }), placement: "top", offset: 0, container: !1, fallbackPlacement: "flip", boundary: "scrollParent" }, pe = "out", ve = { HIDE: "hide" + he, HIDDEN: "hidden" + he, SHOW: (me = "show") + he, SHOWN: "shown" + he, INSERTED: "inserted" + he, CLICK: "click" + he, FOCUSIN: "focusin" + he, FOCUSOUT: "focusout" + he, MOUSEENTER: "mouseenter" + he, MOUSELEAVE: "mouseleave" + he }, Ee = "fade", ye = "show", Te = ".tooltip-inner", Ce = ".arrow", Ie = "hover", Ae = "focus", De = "click", be = "manual", Se = function () { function i(t, e) { if ("undefined" == typeof c) throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)"); this._isEnabled = !0, this._timeout = 0, this._hoverState = "", this._activeTrigger = {}, this._popper = null, this.element = t, this.config = this._getConfig(e), this.tip = null, this._setListeners() } var t = i.prototype; return t.enable = function () { this._isEnabled = !0 }, t.disable = function () { this._isEnabled = !1 }, t.toggleEnabled = function () { this._isEnabled = !this._isEnabled }, t.toggle = function (t) { if (this._isEnabled) if (t) { var e = this.constructor.DATA_KEY, n = oe(t.currentTarget).data(e); n || (n = new this.constructor(t.currentTarget, this._getDelegateConfig()), oe(t.currentTarget).data(e, n)), n._activeTrigger.click = !n._activeTrigger.click, n._isWithActiveTrigger() ? n._enter(null, n) : n._leave(null, n) } else { if (oe(this.getTipElement()).hasClass(ye)) return void this._leave(null, this); this._enter(null, this) } }, t.dispose = function () { clearTimeout(this._timeout), oe.removeData(this.element, this.constructor.DATA_KEY), oe(this.element).off(this.constructor.EVENT_KEY), oe(this.element).closest(".modal").off("hide.bs.modal"), this.tip && oe(this.tip).remove(), this._isEnabled = null, this._timeout = null, this._hoverState = null, (this._activeTrigger = null) !== this._popper && this._popper.destroy(), this._popper = null, this.element = null, this.config = null, this.tip = null }, t.show = function () { var e = this; if ("none" === oe(this.element).css("display")) throw new Error("Please use show on visible elements"); var t = oe.Event(this.constructor.Event.SHOW); if (this.isWithContent() && this._isEnabled) { oe(this.element).trigger(t); var n = oe.contains(this.element.ownerDocument.documentElement, this.element); if (t.isDefaultPrevented() || !n) return; var i = this.getTipElement(), r = Cn.getUID(this.constructor.NAME); i.setAttribute("id", r), this.element.setAttribute("aria-describedby", r), this.setContent(), this.config.animation && oe(i).addClass(Ee); var s = "function" == typeof this.config.placement ? this.config.placement.call(this, i, this.element) : this.config.placement, o = this._getAttachment(s); this.addAttachmentClass(o); var a = !1 === this.config.container ? document.body : oe(this.config.container); oe(i).data(this.constructor.DATA_KEY, this), oe.contains(this.element.ownerDocument.documentElement, this.tip) || oe(i).appendTo(a), oe(this.element).trigger(this.constructor.Event.INSERTED), this._popper = new c(this.element, i, { placement: o, modifiers: { offset: { offset: this.config.offset }, flip: { behavior: this.config.fallbackPlacement }, arrow: { element: Ce }, preventOverflow: { boundariesElement: this.config.boundary } }, onCreate: function (t) { t.originalPlacement !== t.placement && e._handlePopperPlacementChange(t) }, onUpdate: function (t) { e._handlePopperPlacementChange(t) } }), oe(i).addClass(ye), "ontouchstart" in document.documentElement && oe(document.body).children().on("mouseover", null, oe.noop); var l = function () { e.config.animation && e._fixTransition(); var t = e._hoverState; e._hoverState = null, oe(e.element).trigger(e.constructor.Event.SHOWN), t === pe && e._leave(null, e) }; if (oe(this.tip).hasClass(Ee)) { var h = Cn.getTransitionDurationFromElement(this.tip); oe(this.tip).one(Cn.TRANSITION_END, l).emulateTransitionEnd(h) } else l() } }, t.hide = function (t) { var e = this, n = this.getTipElement(), i = oe.Event(this.constructor.Event.HIDE), r = function () { e._hoverState !== me && n.parentNode && n.parentNode.removeChild(n), e._cleanTipClass(), e.element.removeAttribute("aria-describedby"), oe(e.element).trigger(e.constructor.Event.HIDDEN), null !== e._popper && e._popper.destroy(), t && t() }; if (oe(this.element).trigger(i), !i.isDefaultPrevented()) { if (oe(n).removeClass(ye), "ontouchstart" in document.documentElement && oe(document.body).children().off("mouseover", null, oe.noop), this._activeTrigger[De] = !1, this._activeTrigger[Ae] = !1, this._activeTrigger[Ie] = !1, oe(this.tip).hasClass(Ee)) { var s = Cn.getTransitionDurationFromElement(n); oe(n).one(Cn.TRANSITION_END, r).emulateTransitionEnd(s) } else r(); this._hoverState = "" } }, t.update = function () { null !== this._popper && this._popper.scheduleUpdate() }, t.isWithContent = function () { return Boolean(this.getTitle()) }, t.addAttachmentClass = function (t) { oe(this.getTipElement()).addClass(ue + "-" + t) }, t.getTipElement = function () { return this.tip = this.tip || oe(this.config.template)[0], this.tip }, t.setContent = function () { var t = oe(this.getTipElement()); this.setElementContent(t.find(Te), this.getTitle()), t.removeClass(Ee + " " + ye) }, t.setElementContent = function (t, e) { var n = this.config.html; "object" == typeof e && (e.nodeType || e.jquery) ? n ? oe(e).parent().is(t) || t.empty().append(e) : t.text(oe(e).text()) : t[n ? "html" : "text"](e) }, t.getTitle = function () { var t = this.element.getAttribute("data-original-title"); return t || (t = "function" == typeof this.config.title ? this.config.title.call(this.element) : this.config.title), t }, t._getAttachment = function (t) { return _e[t.toUpperCase()] }, t._setListeners = function () { var i = this; this.config.trigger.split(" ").forEach(function (t) { if ("click" === t) oe(i.element).on(i.constructor.Event.CLICK, i.config.selector, function (t) { return i.toggle(t) }); else if (t !== be) { var e = t === Ie ? i.constructor.Event.MOUSEENTER : i.constructor.Event.FOCUSIN, n = t === Ie ? i.constructor.Event.MOUSELEAVE : i.constructor.Event.FOCUSOUT; oe(i.element).on(e, i.config.selector, function (t) { return i._enter(t) }).on(n, i.config.selector, function (t) { return i._leave(t) }) } oe(i.element).closest(".modal").on("hide.bs.modal", function () { return i.hide() }) }), this.config.selector ? this.config = h({}, this.config, { trigger: "manual", selector: "" }) : this._fixTitle() }, t._fixTitle = function () { var t = typeof this.element.getAttribute("data-original-title"); (this.element.getAttribute("title") || "string" !== t) && (this.element.setAttribute("data-original-title", this.element.getAttribute("title") || ""), this.element.setAttribute("title", "")) }, t._enter = function (t, e) { var n = this.constructor.DATA_KEY; (e = e || oe(t.currentTarget).data(n)) || (e = new this.constructor(t.currentTarget, this._getDelegateConfig()), oe(t.currentTarget).data(n, e)), t && (e._activeTrigger["focusin" === t.type ? Ae : Ie] = !0), oe(e.getTipElement()).hasClass(ye) || e._hoverState === me ? e._hoverState = me : (clearTimeout(e._timeout), e._hoverState = me, e.config.delay && e.config.delay.show ? e._timeout = setTimeout(function () { e._hoverState === me && e.show() }, e.config.delay.show) : e.show()) }, t._leave = function (t, e) { var n = this.constructor.DATA_KEY; (e = e || oe(t.currentTarget).data(n)) || (e = new this.constructor(t.currentTarget, this._getDelegateConfig()), oe(t.currentTarget).data(n, e)), t && (e._activeTrigger["focusout" === t.type ? Ae : Ie] = !1), e._isWithActiveTrigger() || (clearTimeout(e._timeout), e._hoverState = pe, e.config.delay && e.config.delay.hide ? e._timeout = setTimeout(function () { e._hoverState === pe && e.hide() }, e.config.delay.hide) : e.hide()) }, t._isWithActiveTrigger = function () { for (var t in this._activeTrigger) if (this._activeTrigger[t]) return !0; return !1 }, t._getConfig = function (t) { return "number" == typeof (t = h({}, this.constructor.Default, oe(this.element).data(), "object" == typeof t && t ? t : {})).delay && (t.delay = { show: t.delay, hide: t.delay }), "number" == typeof t.title && (t.title = t.title.toString()), "number" == typeof t.content && (t.content = t.content.toString()), Cn.typeCheckConfig(ae, t, this.constructor.DefaultType), t }, t._getDelegateConfig = function () { var t = {}; if (this.config) for (var e in this.config) this.constructor.Default[e] !== this.config[e] && (t[e] = this.config[e]); return t }, t._cleanTipClass = function () { var t = oe(this.getTipElement()), e = t.attr("class").match(fe); null !== e && 0 < e.length && t.removeClass(e.join("")) }, t._handlePopperPlacementChange = function (t) { this._cleanTipClass(), this.addAttachmentClass(this._getAttachment(t.placement)) }, t._fixTransition = function () { var t = this.getTipElement(), e = this.config.animation; null === t.getAttribute("x-placement") && (oe(t).removeClass(Ee), this.config.animation = !1, this.hide(), this.show(), this.config.animation = e) }, i._jQueryInterface = function (n) { return this.each(function () { var t = oe(this).data(le), e = "object" == typeof n && n; if ((t || !/dispose|hide/.test(n)) && (t || (t = new i(this, e), oe(this).data(le, t)), "string" == typeof n)) { if ("undefined" == typeof t[n]) throw new TypeError('No method named "' + n + '"'); t[n]() } }) }, o(i, null, [{ key: "VERSION", get: function () { return "4.1.1" } }, { key: "Default", get: function () { return ge } }, { key: "NAME", get: function () { return ae } }, { key: "DATA_KEY", get: function () { return le } }, { key: "Event", get: function () { return ve } }, { key: "EVENT_KEY", get: function () { return he } }, { key: "DefaultType", get: function () { return de } }]), i }(), oe.fn[ae] = Se._jQueryInterface, oe.fn[ae].Constructor = Se, oe.fn[ae].noConflict = function () { return oe.fn[ae] = ce, Se._jQueryInterface }, Se), On = (Ne = "popover", ke = "." + (Oe = "bs.popover"), Pe = (we = e).fn[Ne], Le = "bs-popover", je = new RegExp("(^|\\s)" + Le + "\\S+", "g"), Re = h({}, Nn.Default, { placement: "right", trigger: "click", content: "", template: '
' }), He = h({}, Nn.DefaultType, { content: "(string|element|function)" }), We = "fade", xe = ".popover-header", Ue = ".popover-body", Ke = { HIDE: "hide" + ke, HIDDEN: "hidden" + ke, SHOW: (Me = "show") + ke, SHOWN: "shown" + ke, INSERTED: "inserted" + ke, CLICK: "click" + ke, FOCUSIN: "focusin" + ke, FOCUSOUT: "focusout" + ke, MOUSEENTER: "mouseenter" + ke, MOUSELEAVE: "mouseleave" + ke }, Fe = function (t) { var e, n; function i() { return t.apply(this, arguments) || this } n = t, (e = i).prototype = Object.create(n.prototype), (e.prototype.constructor = e).__proto__ = n; var r = i.prototype; return r.isWithContent = function () { return this.getTitle() || this._getContent() }, r.addAttachmentClass = function (t) { we(this.getTipElement()).addClass(Le + "-" + t) }, r.getTipElement = function () { return this.tip = this.tip || we(this.config.template)[0], this.tip }, r.setContent = function () { var t = we(this.getTipElement()); this.setElementContent(t.find(xe), this.getTitle()); var e = this._getContent(); "function" == typeof e && (e = e.call(this.element)), this.setElementContent(t.find(Ue), e), t.removeClass(We + " " + Me) }, r._getContent = function () { return this.element.getAttribute("data-content") || this.config.content }, r._cleanTipClass = function () { var t = we(this.getTipElement()), e = t.attr("class").match(je); null !== e && 0 < e.length && t.removeClass(e.join("")) }, i._jQueryInterface = function (n) { return this.each(function () { var t = we(this).data(Oe), e = "object" == typeof n ? n : null; if ((t || !/destroy|hide/.test(n)) && (t || (t = new i(this, e), we(this).data(Oe, t)), "string" == typeof n)) { if ("undefined" == typeof t[n]) throw new TypeError('No method named "' + n + '"'); t[n]() } }) }, o(i, null, [{ key: "VERSION", get: function () { return "4.1.1" } }, { key: "Default", get: function () { return Re } }, { key: "NAME", get: function () { return Ne } }, { key: "DATA_KEY", get: function () { return Oe } }, { key: "Event", get: function () { return Ke } }, { key: "EVENT_KEY", get: function () { return ke } }, { key: "DefaultType", get: function () { return He } }]), i }(Nn), we.fn[Ne] = Fe._jQueryInterface, we.fn[Ne].Constructor = Fe, we.fn[Ne].noConflict = function () { return we.fn[Ne] = Pe, Fe._jQueryInterface }, Fe), kn = (Qe = "scrollspy", Ye = "." + (Be = "bs.scrollspy"), Ge = (Ve = e).fn[Qe], qe = { offset: 10, method: "auto", target: "" }, ze = { offset: "number", method: "string", target: "(string|element)" }, Xe = { ACTIVATE: "activate" + Ye, SCROLL: "scroll" + Ye, LOAD_DATA_API: "load" + Ye + ".data-api" }, Je = "dropdown-item", Ze = "active", $e = { DATA_SPY: '[data-spy="scroll"]', ACTIVE: ".active", NAV_LIST_GROUP: ".nav, .list-group", NAV_LINKS: ".nav-link", NAV_ITEMS: ".nav-item", LIST_ITEMS: ".list-group-item", DROPDOWN: ".dropdown", DROPDOWN_ITEMS: ".dropdown-item", DROPDOWN_TOGGLE: ".dropdown-toggle" }, tn = "offset", en = "position", nn = function () { function n(t, e) { var n = this; this._element = t, this._scrollElement = "BODY" === t.tagName ? window : t, this._config = this._getConfig(e), this._selector = this._config.target + " " + $e.NAV_LINKS + "," + this._config.target + " " + $e.LIST_ITEMS + "," + this._config.target + " " + $e.DROPDOWN_ITEMS, this._offsets = [], this._targets = [], this._activeTarget = null, this._scrollHeight = 0, Ve(this._scrollElement).on(Xe.SCROLL, function (t) { return n._process(t) }), this.refresh(), this._process() } var t = n.prototype; return t.refresh = function () { var e = this, t = this._scrollElement === this._scrollElement.window ? tn : en, r = "auto" === this._config.method ? t : this._config.method, s = r === en ? this._getScrollTop() : 0; this._offsets = [], this._targets = [], this._scrollHeight = this._getScrollHeight(), Ve.makeArray(Ve(this._selector)).map(function (t) { var e, n = Cn.getSelectorFromElement(t); if (n && (e = Ve(n)[0]), e) { var i = e.getBoundingClientRect(); if (i.width || i.height) return [Ve(e)[r]().top + s, n] } return null }).filter(function (t) { return t }).sort(function (t, e) { return t[0] - e[0] }).forEach(function (t) { e._offsets.push(t[0]), e._targets.push(t[1]) }) }, t.dispose = function () { Ve.removeData(this._element, Be), Ve(this._scrollElement).off(Ye), this._element = null, this._scrollElement = null, this._config = null, this._selector = null, this._offsets = null, this._targets = null, this._activeTarget = null, this._scrollHeight = null }, t._getConfig = function (t) { if ("string" != typeof (t = h({}, qe, "object" == typeof t && t ? t : {})).target) { var e = Ve(t.target).attr("id"); e || (e = Cn.getUID(Qe), Ve(t.target).attr("id", e)), t.target = "#" + e } return Cn.typeCheckConfig(Qe, t, ze), t }, t._getScrollTop = function () { return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop }, t._getScrollHeight = function () { return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) }, t._getOffsetHeight = function () { return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height }, t._process = function () { var t = this._getScrollTop() + this._config.offset, e = this._getScrollHeight(), n = this._config.offset + e - this._getOffsetHeight(); if (this._scrollHeight !== e && this.refresh(), n <= t) { var i = this._targets[this._targets.length - 1]; this._activeTarget !== i && this._activate(i) } else { if (this._activeTarget && t < this._offsets[0] && 0 < this._offsets[0]) return this._activeTarget = null, void this._clear(); for (var r = this._offsets.length; r--;) { this._activeTarget !== this._targets[r] && t >= this._offsets[r] && ("undefined" == typeof this._offsets[r + 1] || t < this._offsets[r + 1]) && this._activate(this._targets[r]) } } }, t._activate = function (e) { this._activeTarget = e, this._clear(); var t = this._selector.split(","); t = t.map(function (t) { return t + '[data-target="' + e + '"],' + t + '[href="' + e + '"]' }); var n = Ve(t.join(",")); n.hasClass(Je) ? (n.closest($e.DROPDOWN).find($e.DROPDOWN_TOGGLE).addClass(Ze), n.addClass(Ze)) : (n.addClass(Ze), n.parents($e.NAV_LIST_GROUP).prev($e.NAV_LINKS + ", " + $e.LIST_ITEMS).addClass(Ze), n.parents($e.NAV_LIST_GROUP).prev($e.NAV_ITEMS).children($e.NAV_LINKS).addClass(Ze)), Ve(this._scrollElement).trigger(Xe.ACTIVATE, { relatedTarget: e }) }, t._clear = function () { Ve(this._selector).filter($e.ACTIVE).removeClass(Ze) }, n._jQueryInterface = function (e) { return this.each(function () { var t = Ve(this).data(Be); if (t || (t = new n(this, "object" == typeof e && e), Ve(this).data(Be, t)), "string" == typeof e) { if ("undefined" == typeof t[e]) throw new TypeError('No method named "' + e + '"'); t[e]() } }) }, o(n, null, [{ key: "VERSION", get: function () { return "4.1.1" } }, { key: "Default", get: function () { return qe } }]), n }(), Ve(window).on(Xe.LOAD_DATA_API, function () { for (var t = Ve.makeArray(Ve($e.DATA_SPY)), e = t.length; e--;) { var n = Ve(t[e]); nn._jQueryInterface.call(n, n.data()) } }), Ve.fn[Qe] = nn._jQueryInterface, Ve.fn[Qe].Constructor = nn, Ve.fn[Qe].noConflict = function () { return Ve.fn[Qe] = Ge, nn._jQueryInterface }, nn), Pn = (on = "." + (sn = "bs.tab"), an = (rn = e).fn.tab, ln = { HIDE: "hide" + on, HIDDEN: "hidden" + on, SHOW: "show" + on, SHOWN: "shown" + on, CLICK_DATA_API: "click" + on + ".data-api" }, hn = "dropdown-menu", cn = "active", un = "disabled", fn = "fade", dn = "show", _n = ".dropdown", gn = ".nav, .list-group", mn = ".active", pn = "> li > .active", vn = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', En = ".dropdown-toggle", yn = "> .dropdown-menu .active", Tn = function () { function i(t) { this._element = t } var t = i.prototype; return t.show = function () { var n = this; if (!(this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && rn(this._element).hasClass(cn) || rn(this._element).hasClass(un))) { var t, i, e = rn(this._element).closest(gn)[0], r = Cn.getSelectorFromElement(this._element); if (e) { var s = "UL" === e.nodeName ? pn : mn; i = (i = rn.makeArray(rn(e).find(s)))[i.length - 1] } var o = rn.Event(ln.HIDE, { relatedTarget: this._element }), a = rn.Event(ln.SHOW, { relatedTarget: i }); if (i && rn(i).trigger(o), rn(this._element).trigger(a), !a.isDefaultPrevented() && !o.isDefaultPrevented()) { r && (t = rn(r)[0]), this._activate(this._element, e); var l = function () { var t = rn.Event(ln.HIDDEN, { relatedTarget: n._element }), e = rn.Event(ln.SHOWN, { relatedTarget: i }); rn(i).trigger(t), rn(n._element).trigger(e) }; t ? this._activate(t, t.parentNode, l) : l() } } }, t.dispose = function () { rn.removeData(this._element, sn), this._element = null }, t._activate = function (t, e, n) { var i = this, r = ("UL" === e.nodeName ? rn(e).find(pn) : rn(e).children(mn))[0], s = n && r && rn(r).hasClass(fn), o = function () { return i._transitionComplete(t, r, n) }; if (r && s) { var a = Cn.getTransitionDurationFromElement(r); rn(r).one(Cn.TRANSITION_END, o).emulateTransitionEnd(a) } else o() }, t._transitionComplete = function (t, e, n) { if (e) { rn(e).removeClass(dn + " " + cn); var i = rn(e.parentNode).find(yn)[0]; i && rn(i).removeClass(cn), "tab" === e.getAttribute("role") && e.setAttribute("aria-selected", !1) } if (rn(t).addClass(cn), "tab" === t.getAttribute("role") && t.setAttribute("aria-selected", !0), Cn.reflow(t), rn(t).addClass(dn), t.parentNode && rn(t.parentNode).hasClass(hn)) { var r = rn(t).closest(_n)[0]; r && rn(r).find(En).addClass(cn), t.setAttribute("aria-expanded", !0) } n && n() }, i._jQueryInterface = function (n) { return this.each(function () { var t = rn(this), e = t.data(sn); if (e || (e = new i(this), t.data(sn, e)), "string" == typeof n) { if ("undefined" == typeof e[n]) throw new TypeError('No method named "' + n + '"'); e[n]() } }) }, o(i, null, [{ key: "VERSION", get: function () { return "4.1.1" } }]), i }(), rn(document).on(ln.CLICK_DATA_API, vn, function (t) { t.preventDefault(), Tn._jQueryInterface.call(rn(this), "show") }), rn.fn.tab = Tn._jQueryInterface, rn.fn.tab.Constructor = Tn, rn.fn.tab.noConflict = function () { return rn.fn.tab = an, Tn._jQueryInterface }, Tn); !function (t) { if ("undefined" == typeof t) throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript."); var e = t.fn.jquery.split(" ")[0].split("."); if (e[0] < 2 && e[1] < 9 || 1 === e[0] && 9 === e[1] && e[2] < 1 || 4 <= e[0]) throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0") }(e), t.Util = Cn, t.Alert = In, t.Button = An, t.Carousel = Dn, t.Collapse = bn, t.Dropdown = Sn, t.Modal = wn, t.Popover = On, t.Scrollspy = kn, t.Tab = Pn, t.Tooltip = Nn, Object.defineProperty(t, "__esModule", { value: !0 }) });
\ No newline at end of file
diff --git a/themes/dot/static/plugins/jquery/jquery-1.12.4.js b/themes/dot/static/plugins/jquery/jquery-1.12.4.js
index edfdd04f731ee3914012635a5da89ce0deac7ebe..9d72b727afbadf43969c810a2e156a2424461a8d 100644
--- a/themes/dot/static/plugins/jquery/jquery-1.12.4.js
+++ b/themes/dot/static/plugins/jquery/jquery-1.12.4.js
@@ -1,11008 +1,11008 @@
-/*!
- * jQuery JavaScript Library v1.12.4
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2016-05-20T17:17Z
- */
-
-(function( global, factory ) {
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Support: Firefox 18+
-// Can't be in strict mode, several libs including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-//"use strict";
-var deletedIds = [];
-
-var document = window.document;
-
-var slice = deletedIds.slice;
-
-var concat = deletedIds.concat;
-
-var push = deletedIds.push;
-
-var indexOf = deletedIds.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
- version = "1.12.4",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
-
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android<4.1, IE<9
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn = jQuery.prototype = {
-
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num != null ?
-
- // Return just the one element from the set
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- // Return all the elements in a clean array
- slice.call( this );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- each: function( callback ) {
- return jQuery.each( this, callback );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map( this, function( elem, i ) {
- return callback.call( elem, i, elem );
- } ) );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor();
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: deletedIds.sort,
- splice: deletedIds.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var src, copyIsArray, copy, name, options, clone,
- target = arguments[ 0 ] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
-
- // Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
-
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
- ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
-
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray( src ) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject( src ) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend( {
-
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type( obj ) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type( obj ) === "array";
- },
-
- isWindow: function( obj ) {
- /* jshint eqeqeq: false */
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
-
- // parseFloat NaNs numeric-cast false positives (null|true|false|"")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- // adding 1 corrects loss of precision from parseFloat (#15100)
- var realStringObj = obj && obj.toString();
- return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- isPlainObject: function( obj ) {
- var key;
-
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
-
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call( obj, "constructor" ) &&
- !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
- return false;
- }
- } catch ( e ) {
-
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Support: IE<9
- // Handle iteration over inherited properties before own properties.
- if ( !support.ownFirst ) {
- for ( key in obj ) {
- return hasOwn.call( obj, key );
- }
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call( obj ) ] || "object" :
- typeof obj;
- },
-
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
-
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- each: function( obj, callback ) {
- var length, i = 0;
-
- if ( isArrayLike( obj ) ) {
- length = obj.length;
- for ( ; i < length; i++ ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
- break;
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android<4.1, IE<9
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArrayLike( Object( arr ) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- var len;
-
- if ( arr ) {
- if ( indexOf ) {
- return indexOf.call( arr, elem, i );
- }
-
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
-
- // Skip accessing in sparse arrays
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- while ( j < len ) {
- first[ i++ ] = second[ j++ ];
- }
-
- // Support: IE<9
- // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
- if ( len !== len ) {
- while ( second[ j ] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var length, value,
- i = 0,
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArrayLike( elems ) ) {
- length = elems.length;
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var args, proxy, tmp;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: function() {
- return +( new Date() );
- },
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-} );
-
-// JSHint would error on this code due to the Symbol not being defined in ES5.
-// Defining this global in .jshintrc would create a danger of using the global
-// unguarded in another place, it seems safer to just disable JSHint for these
-// three lines.
-/* jshint ignore: start */
-if ( typeof Symbol === "function" ) {
- jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];
-}
-/* jshint ignore: end */
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
- // Support: iOS 8.2 (not reproducible in simulator)
- // `in` check used to prevent JIT error (gh-2145)
- // hasOwn isn't used here due to false negatives
- // regarding Nodelist length in IE
- var length = !!obj && "length" in obj && obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.2.1
- * http://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-10-17
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + 1 * new Date(),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // General-purpose constants
- MAX_NEGATIVE = 1 << 31,
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf as it's faster than native
- // http://jsperf.com/thor-indexof-vs-for/5
- indexOf = function( list, elem ) {
- var i = 0,
- len = list.length;
- for ( ; i < len; i++ ) {
- if ( list[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
-
- // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + identifier + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rwhitespace = new RegExp( whitespace + "+", "g" ),
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + identifier + ")" ),
- "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
- "TAG": new RegExp( "^(" + identifier + "|[*])" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- },
-
- // Used for iframes
- // See setDocument()
- // Removing the function wrapper causes a "Permission Denied"
- // error in IE
- unloadHandler = function() {
- setDocument();
- };
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var m, i, elem, nid, nidselect, match, groups, newSelector,
- newContext = context && context.ownerDocument,
-
- // nodeType defaults to 9, since context defaults to document
- nodeType = context ? context.nodeType : 9;
-
- results = results || [];
-
- // Return early from calls with invalid selector or context
- if ( typeof selector !== "string" || !selector ||
- nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
- return results;
- }
-
- // Try to shortcut find operations (as opposed to filters) in HTML documents
- if ( !seed ) {
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
- context = context || document;
-
- if ( documentIsHTML ) {
-
- // If the selector is sufficiently simple, try using a "get*By*" DOM method
- // (excepting DocumentFragment context, where the methods don't exist)
- if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
- // ID selector
- if ( (m = match[1]) ) {
-
- // Document context
- if ( nodeType === 9 ) {
- if ( (elem = context.getElementById( m )) ) {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
-
- // Element context
- } else {
-
- // Support: IE, Opera, Webkit
- // TODO: identify versions
- // getElementById can match elements by name instead of ID
- if ( newContext && (elem = newContext.getElementById( m )) &&
- contains( context, elem ) &&
- elem.id === m ) {
-
- results.push( elem );
- return results;
- }
- }
-
- // Type selector
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Class selector
- } else if ( (m = match[3]) && support.getElementsByClassName &&
- context.getElementsByClassName ) {
-
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // Take advantage of querySelectorAll
- if ( support.qsa &&
- !compilerCache[ selector + " " ] &&
- (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-
- if ( nodeType !== 1 ) {
- newContext = context;
- newSelector = selector;
-
- // qSA looks outside Element context, which is not what we want
- // Thanks to Andrew Dupont for this workaround technique
- // Support: IE <=8
- // Exclude object elements
- } else if ( context.nodeName.toLowerCase() !== "object" ) {
-
- // Capture the context ID, setting it first if necessary
- if ( (nid = context.getAttribute( "id" )) ) {
- nid = nid.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", (nid = expando) );
- }
-
- // Prefix every selector in the list
- groups = tokenize( selector );
- i = groups.length;
- nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
- while ( i-- ) {
- groups[i] = nidselect + " " + toSelector( groups[i] );
- }
- newSelector = groups.join( "," );
-
- // Expand context for sibling selectors
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
- context;
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch ( qsaError ) {
- } finally {
- if ( nid === expando ) {
- context.removeAttribute( "id" );
- }
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
- // release memory in IE
- div = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = arr.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare, parent,
- doc = node ? node.ownerDocument || node : preferredDoc;
-
- // Return early if doc is invalid or already selected
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Update global variables
- document = doc;
- docElem = document.documentElement;
- documentIsHTML = !isXML( document );
-
- // Support: IE 9-11, Edge
- // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
- if ( (parent = document.defaultView) && parent.top !== parent ) {
- // Support: IE 11
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", unloadHandler, false );
-
- // Support: IE 9 - 10 only
- } else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", unloadHandler );
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties
- // (excepting IE8 booleans)
- support.attributes = assert(function( div ) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( document.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Support: IE<9
- support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !document.getElementsByName || !document.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
- var m = context.getElementById( id );
- return m ? [ m ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== "undefined" &&
- elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( tag );
-
- // DocumentFragment nodes don't have gEBTN
- } else if ( support.qsa ) {
- return context.querySelectorAll( tag );
- }
- } :
-
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- docElem.appendChild( div ).innerHTML = "
" +
- "
" +
- " ";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowcapture^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
- if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
- rbuggyQSA.push("~=");
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
-
- // Support: Safari 8+, iOS 8+
- // https://bugs.webkit.org/show_bug.cgi?id=136851
- // In-page `selector#id sibing-combinator selector` fails
- if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
- rbuggyQSA.push(".#.+[+~]");
- }
- });
-
- assert(function( div ) {
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = document.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( div.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully self-exclusive
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === document ? -1 :
- b === document ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- !compilerCache[ expr + " " ] &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch (e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, uniqueCache, outerCache, node, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType,
- diff = false;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) {
-
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
-
- // Seek `elem` from a previously-cached index
-
- // ...in a gzip-friendly way
- node = parent;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex && cache[ 2 ];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- } else {
- // Use previously-cached element index if available
- if ( useCache ) {
- // ...in a gzip-friendly way
- node = elem;
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- cache = uniqueCache[ type ] || [];
- nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
- diff = nodeIndex;
- }
-
- // xml :nth-child(...)
- // or :nth-last-child(...) or :nth(-last)?-of-type(...)
- if ( diff === false ) {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ?
- node.nodeName.toLowerCase() === name :
- node.nodeType === 1 ) &&
- ++diff ) {
-
- // Cache the index of each encountered element
- if ( useCache ) {
- outerCache = node[ expando ] || (node[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ node.uniqueID ] ||
- (outerCache[ node.uniqueID ] = {});
-
- uniqueCache[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- // Don't keep the element (issue #299)
- input[0] = null;
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- text = text.replace( runescape, funescape );
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, uniqueCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
-
- // Support: IE <9 only
- // Defend against cloned attroperties (jQuery gh-1709)
- uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
- if ( (oldCache = uniqueCache[ dir ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- uniqueCache[ dir ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- // Avoid hanging onto element (issue #299)
- checkContext = null;
- return ret;
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context === document || context || outermost;
- }
-
- // Add elements passing elementMatchers directly to results
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari:
) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- if ( !context && elem.ownerDocument !== document ) {
- setDocument( elem );
- xml = !documentIsHTML;
- }
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context || document, xml) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // `i` is now the count of elements visited above, and adding it to `matchedCount`
- // makes the latter nonnegative.
- matchedCount += i;
-
- // Apply set filters to unmatched elements
- // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
- // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
- // no element matchers and no seed.
- // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
- // case, which will result in a "00" `matchedCount` that differs from `i` but is also
- // numerically zero.
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is only one selector in the list and no seed
- // (the latter of which guarantees us context)
- if ( match.length === 1 ) {
-
- // Reduce context if the leading compound selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
- div.innerHTML = " ";
- return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
- div.innerHTML = " ";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
- return div.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var dir = function( elem, dir, until ) {
- var matched = [],
- truncate = until !== undefined;
-
- while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
- if ( elem.nodeType === 1 ) {
- if ( truncate && jQuery( elem ).is( until ) ) {
- break;
- }
- matched.push( elem );
- }
- }
- return matched;
-};
-
-
-var siblings = function( n, elem ) {
- var matched = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- matched.push( n );
- }
- }
-
- return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- /* jshint -W018 */
- return !!qualifier.call( elem, i, elem ) !== not;
- } );
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- } );
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;
- } );
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- } ) );
-};
-
-jQuery.fn.extend( {
- find: function( selector ) {
- var i,
- ret = [],
- self = this,
- len = self.length;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter( function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- } ) );
- }
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow( this, selector || [], false ) );
- },
- not: function( selector ) {
- return this.pushStack( winnow( this, selector || [], true ) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // A simple way to check for HTML strings
- // Prioritize #id over to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- init = jQuery.fn.init = function( selector, context, root ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // init accepts an alternate rootjQuery
- // so migrate can support jQuery.sub (gh-2101)
- root = root || rootjQuery;
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector.charAt( 0 ) === "<" &&
- selector.charAt( selector.length - 1 ) === ">" &&
- selector.length >= 3 ) {
-
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && ( match[ 1 ] || !context ) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[ 1 ] ) {
- context = context instanceof jQuery ? context[ 0 ] : context;
-
- // scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[ 1 ],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
-
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[ 2 ] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
-
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[ 2 ] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[ 0 ] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || root ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[ 0 ] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return typeof root.ready !== "undefined" ?
- root.ready( selector ) :
-
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend( {
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
-
- return this.filter( function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[ i ] ) ) {
- return true;
- }
- }
- } );
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
- // Always skip document fragments
- if ( cur.nodeType < 11 && ( pos ?
- pos.index( cur ) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[ 0 ], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
-
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[ 0 ] : elem, this );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.uniqueSort(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter( selector )
- );
- }
-} );
-
-function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
-
- return cur;
-}
-
-jQuery.each( {
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return siblings( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return siblings( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- if ( this.length > 1 ) {
-
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- ret = jQuery.uniqueSort( ret );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
- }
-
- return this.pushStack( ret );
- };
-} );
-var rnotwhite = ( /\S+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
- var object = {};
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- } );
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- createOptions( options ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
-
- // Last fire value for non-forgettable lists
- memory,
-
- // Flag to know if list was already fired
- fired,
-
- // Flag to prevent firing
- locked,
-
- // Actual callback list
- list = [],
-
- // Queue of execution data for repeatable lists
- queue = [],
-
- // Index of currently firing callback (modified by add/remove as needed)
- firingIndex = -1,
-
- // Fire callbacks
- fire = function() {
-
- // Enforce single-firing
- locked = options.once;
-
- // Execute callbacks for all pending executions,
- // respecting firingIndex overrides and runtime changes
- fired = firing = true;
- for ( ; queue.length; firingIndex = -1 ) {
- memory = queue.shift();
- while ( ++firingIndex < list.length ) {
-
- // Run callback and check for early termination
- if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
- options.stopOnFalse ) {
-
- // Jump to end and forget the data so .add doesn't re-fire
- firingIndex = list.length;
- memory = false;
- }
- }
- }
-
- // Forget the data if we're done with it
- if ( !options.memory ) {
- memory = false;
- }
-
- firing = false;
-
- // Clean up if we're done firing for good
- if ( locked ) {
-
- // Keep an empty list if we have data for future add calls
- if ( memory ) {
- list = [];
-
- // Otherwise, this object is spent
- } else {
- list = "";
- }
- }
- },
-
- // Actual Callbacks object
- self = {
-
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
-
- // If we have memory from a past run, we should fire after adding
- if ( memory && !firing ) {
- firingIndex = list.length - 1;
- queue.push( memory );
- }
-
- ( function add( args ) {
- jQuery.each( args, function( _, arg ) {
- if ( jQuery.isFunction( arg ) ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
-
- // Inspect recursively
- add( arg );
- }
- } );
- } )( arguments );
-
- if ( memory && !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Remove a callback from the list
- remove: function() {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
-
- // Handle firing indexes
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- } );
- return this;
- },
-
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ?
- jQuery.inArray( fn, list ) > -1 :
- list.length > 0;
- },
-
- // Remove all callbacks from the list
- empty: function() {
- if ( list ) {
- list = [];
- }
- return this;
- },
-
- // Disable .fire and .add
- // Abort any current/pending executions
- // Clear all callbacks and values
- disable: function() {
- locked = queue = [];
- list = memory = "";
- return this;
- },
- disabled: function() {
- return !list;
- },
-
- // Disable .fire
- // Also disable .add unless we have memory (since it would have no effect)
- // Abort any pending executions
- lock: function() {
- locked = true;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- locked: function() {
- return !!locked;
- },
-
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( !locked ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- queue.push( args );
- if ( !firing ) {
- fire();
- }
- }
- return this;
- },
-
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
-
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-jQuery.extend( {
-
- Deferred: function( func ) {
- var tuples = [
-
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks( "memory" ) ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred( function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[ 1 ] ]( function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .progress( newDefer.notify )
- .done( newDefer.resolve )
- .fail( newDefer.reject );
- } else {
- newDefer[ tuple[ 0 ] + "With" ](
- this === promise ? newDefer.promise() : this,
- fn ? [ returned ] : arguments
- );
- }
- } );
- } );
- fns = null;
- } ).promise();
- },
-
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[ 1 ] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add( function() {
-
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[ tuple[ 0 ] ] = function() {
- deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
- } );
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 ||
- ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred.
- // If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( values === progressValues ) {
- deferred.notifyWith( contexts, values );
-
- } else if ( !( --remaining ) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .progress( updateFunc( i, progressContexts, progressValues ) )
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-} );
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
-
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
-};
-
-jQuery.extend( {
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- jQuery( document ).off( "ready" );
- }
- }
-} );
-
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed );
- window.removeEventListener( "load", completed );
-
- } else {
- document.detachEvent( "onreadystatechange", completed );
- window.detachEvent( "onload", completed );
- }
-}
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
-
- // readyState === "complete" is good enough for us to call the dom ready in oldIE
- if ( document.addEventListener ||
- window.event.type === "load" ||
- document.readyState === "complete" ) {
-
- detach();
- jQuery.ready();
- }
-}
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called
- // after the browser event has already occurred.
- // Support: IE6-10
- // Older IE sometimes signals "interactive" too soon
- if ( document.readyState === "complete" ||
- ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
-
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- window.setTimeout( jQuery.ready );
-
- // Standards-based browsers support DOMContentLoaded
- } else if ( document.addEventListener ) {
-
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed );
-
- // If IE event model is used
- } else {
-
- // Ensure firing before onload, maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", completed );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", completed );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var top = false;
-
- try {
- top = window.frameElement == null && document.documentElement;
- } catch ( e ) {}
-
- if ( top && top.doScroll ) {
- ( function doScrollCheck() {
- if ( !jQuery.isReady ) {
-
- try {
-
- // Use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll( "left" );
- } catch ( e ) {
- return window.setTimeout( doScrollCheck, 50 );
- }
-
- // detach all dom ready events
- detach();
-
- // and execute any waiting functions
- jQuery.ready();
- }
- } )();
- }
- }
- }
- return readyList.promise( obj );
-};
-
-// Kick off the DOM ready check even if the user does not
-jQuery.ready.promise();
-
-
-
-
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
- break;
-}
-support.ownFirst = i === "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery( function() {
-
- // Minified: var a,b,c,d
- var val, div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
-
- // Return for frameset docs that don't have a body
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- if ( typeof div.style.zoom !== "undefined" ) {
-
- // Support: IE<8
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
-
- support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
- if ( val ) {
-
- // Prevent IE 6 from affecting layout for positioned elements #11048
- // Prevent IE from shrinking the body in IE 7 mode #12869
- // Support: IE<8
- body.style.zoom = 1;
- }
- }
-
- body.removeChild( container );
-} );
-
-
-( function() {
- var div = document.createElement( "div" );
-
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch ( e ) {
- support.deleteExpando = false;
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-} )();
-var acceptData = function( elem ) {
- var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ],
- nodeType = +elem.nodeType || 1;
-
- // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
- return nodeType !== 1 && nodeType !== 9 ?
- false :
-
- // Nodes accept data unless otherwise specified; rejection can be conditional
- !noData || noData !== true && elem.getAttribute( "classid" ) === noData;
-};
-
-
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
-
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
-
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch ( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !acceptData( elem ) ) {
- return;
- }
-
- var ret, thisCache,
- internalKey = jQuery.expando,
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&
- data === undefined && typeof name === "string" ) {
- return;
- }
-
- if ( !id ) {
-
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
-
- // Avoid exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( typeof name === "string" ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
- if ( !acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i,
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split( " " );
- }
- }
- } else {
-
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = name.concat( jQuery.map( name, jQuery.camelCase ) );
- }
-
- i = name.length;
- while ( i-- ) {
- delete thisCache[ name[ i ] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- // Destroy the cache
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
- /* jshint eqeqeq: false */
- } else if ( support.deleteExpando || cache != cache.window ) {
- /* jshint eqeqeq: true */
- delete cache[ id ];
-
- // When all else fails, undefined
- } else {
- cache[ id ] = undefined;
- }
-}
-
-jQuery.extend( {
- cache: {},
-
- // The following elements (space-suffixed to avoid Object.prototype collisions)
- // throw uncatchable exceptions if you attempt to set expando properties
- noData: {
- "applet ": true,
- "embed ": true,
-
- // ...but Flash objects (which have this classid) *can* handle expandos
- "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data ) {
- return internalData( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- return internalRemoveData( elem, name );
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return internalData( elem, name, data, true );
- },
-
- _removeData: function( elem, name ) {
- return internalRemoveData( elem, name, true );
- }
-} );
-
-jQuery.fn.extend( {
- data: function( key, value ) {
- var i, name, data,
- elem = this[ 0 ],
- attrs = elem && elem.attributes;
-
- // Special expections of .data basically thwart jQuery.access,
- // so implement the relevant behavior ourselves
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE11+
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice( 5 ) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each( function() {
- jQuery.data( this, key );
- } );
- }
-
- return arguments.length > 1 ?
-
- // Sets one value
- this.each( function() {
- jQuery.data( this, key, value );
- } ) :
-
- // Gets one value
- // Try to fetch any internally stored data first
- elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
- },
-
- removeData: function( key ) {
- return this.each( function() {
- jQuery.removeData( this, key );
- } );
- }
-} );
-
-
-jQuery.extend( {
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray( data ) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray( data ) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object,
- // or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks( "once memory" ).add( function() {
- jQuery._removeData( elem, type + "queue" );
- jQuery._removeData( elem, key );
- } )
- } );
- }
-} );
-
-jQuery.fn.extend( {
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[ 0 ], type );
- }
-
- return data === undefined ?
- this :
- this.each( function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- } );
- },
- dequeue: function( type ) {
- return this.each( function() {
- jQuery.dequeue( this, type );
- } );
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
-
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-} );
-
-
-( function() {
- var shrinkWrapBlocksVal;
-
- support.shrinkWrapBlocks = function() {
- if ( shrinkWrapBlocksVal != null ) {
- return shrinkWrapBlocksVal;
- }
-
- // Will be changed later if needed.
- shrinkWrapBlocksVal = false;
-
- // Minified: var b,c,d
- var div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
-
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- // Support: IE6
- // Check if elements with layout shrink-wrap their children
- if ( typeof div.style.zoom !== "undefined" ) {
-
- // Reset CSS: box-sizing; display; margin; border
- div.style.cssText =
-
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;" +
- "padding:1px;width:1px;zoom:1";
- div.appendChild( document.createElement( "div" ) ).style.width = "5px";
- shrinkWrapBlocksVal = div.offsetWidth !== 3;
- }
-
- body.removeChild( container );
-
- return shrinkWrapBlocksVal;
- };
-
-} )();
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
-
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" ||
- !jQuery.contains( elem.ownerDocument, elem );
- };
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
- var adjusted,
- scale = 1,
- maxIterations = 20,
- currentValue = tween ?
- function() { return tween.cur(); } :
- function() { return jQuery.css( elem, prop, "" ); },
- initial = currentValue(),
- unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
- rcssNum.exec( jQuery.css( elem, prop ) );
-
- if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
- // Trust units reported by jQuery.css
- unit = unit || initialInUnit[ 3 ];
-
- // Make sure we update the tween properties later on
- valueParts = valueParts || [];
-
- // Iteratively approximate from a nonzero starting point
- initialInUnit = +initial || 1;
-
- do {
-
- // If previous iteration zeroed out, double until we get *something*.
- // Use string for doubling so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- initialInUnit = initialInUnit / scale;
- jQuery.style( elem, prop, initialInUnit + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // Break the loop if scale is unchanged or perfect, or if we've just had enough.
- } while (
- scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
- );
- }
-
- if ( valueParts ) {
- initialInUnit = +initialInUnit || +initial || 0;
-
- // Apply relative offset (+=/-=) if specified
- adjusted = valueParts[ 1 ] ?
- initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
- +valueParts[ 2 ];
- if ( tween ) {
- tween.unit = unit;
- tween.start = initialInUnit;
- tween.end = adjusted;
- }
- }
- return adjusted;
-}
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- length = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- access( elems, fn, i, key[ i ], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
-
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < length; i++ ) {
- fn(
- elems[ i ],
- key,
- raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )
- );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[ 0 ], key ) : emptyGet;
-};
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([\w:-]+)/ );
-
-var rscriptType = ( /^$|\/(?:java|ecma)script/i );
-
-var rleadingWhitespace = ( /^\s+/ );
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" +
- "details|dialog|figcaption|figure|footer|header|hgroup|main|" +
- "mark|meter|nav|output|picture|progress|section|summary|template|time|video";
-
-
-
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-
-( function() {
- var div = document.createElement( "div" ),
- fragment = document.createDocumentFragment(),
- input = document.createElement( "input" );
-
- // Setup
- div.innerHTML = " a ";
-
- // IE strips leading whitespace when .innerHTML is used
- support.leadingWhitespace = div.firstChild.nodeType === 3;
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- support.html5Clone =
- document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>";
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- input.type = "checkbox";
- input.checked = true;
- fragment.appendChild( input );
- support.appendChecked = input.checked;
-
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- // Support: IE6-IE11+
- div.innerHTML = "";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- fragment.appendChild( div );
-
- // Support: Windows Web Apps (WWA)
- // `name` and `type` must use .setAttribute for WWA (#14901)
- input = document.createElement( "input" );
- input.setAttribute( "type", "radio" );
- input.setAttribute( "checked", "checked" );
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
-
- // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
- // old WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE<9
- // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+
- support.noCloneEvent = !!div.addEventListener;
-
- // Support: IE<9
- // Since attributes and properties are the same in IE,
- // cleanData must set properties to undefined rather than use removeAttribute
- div[ jQuery.expando ] = 1;
- support.attributes = !div.getAttribute( jQuery.expando );
-} )();
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
- option: [ 1, "", " " ],
- legend: [ 1, "", " " ],
- area: [ 1, "", " " ],
-
- // Support: IE8
- param: [ 1, "", " " ],
- thead: [ 1, "" ],
- tr: [ 2, "" ],
- col: [ 2, "" ],
- td: [ 3, "" ],
-
- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
- // unless wrapped in a div with non-breaking characters in front of it.
- _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X", "
" ]
-};
-
-// Support: IE8-IE9
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== "undefined" ?
- context.querySelectorAll( tag || "*" ) :
- undefined;
-
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context;
- ( elem = elems[ i ] ) != null;
- i++
- ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; ( elem = elems[ i ] ) != null; i++ ) {
- jQuery._data(
- elem,
- "globalEval",
- !refElements || jQuery._data( refElements[ i ], "globalEval" )
- );
- }
-}
-
-
-var rhtml = /<|?\w+;/,
- rtbody = / from table fragments
- if ( !support.tbody ) {
-
- // String was a , *may* have spurious
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- // String was a bare or
- wrap[ 1 ] === "" && !rtbody.test( elem ) ?
- tmp :
- 0;
-
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) &&
- !tbody.childNodes.length ) {
-
- elem.removeChild( tbody );
- }
- }
- }
-
- jQuery.merge( nodes, tmp.childNodes );
-
- // Fix #12392 for WebKit and IE > 9
- tmp.textContent = "";
-
- // Fix #12392 for oldIE
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- // Remember the top-level container for proper cleanup
- tmp = safe.lastChild;
- }
- }
- }
-
- // Fix #11356: Clear elements from fragment
- if ( tmp ) {
- safe.removeChild( tmp );
- }
-
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
- }
-
- i = 0;
- while ( ( elem = nodes[ i++ ] ) ) {
-
- // Skip elements already in the context collection (trac-4087)
- if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
- if ( ignored ) {
- ignored.push( elem );
- }
-
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( ( elem = tmp[ j++ ] ) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- tmp = null;
-
- return safe;
-}
-
-
-( function() {
- var i, eventName,
- div = document.createElement( "div" );
-
- // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)
- for ( i in { submit: true, change: true, focusin: true } ) {
- eventName = "on" + i;
-
- if ( !( support[ i ] = eventName in window ) ) {
-
- // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
- div.setAttribute( eventName, "t" );
- support[ i ] = div.attributes[ eventName ].expando === false;
- }
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-} )();
-
-
-var rformElems = /^(?:input|select|textarea)$/i,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-// Support: IE9
-// See #13393 for more info
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
-
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
-
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- on( elem, type, selector, data, types[ type ], one );
- }
- return elem;
- }
-
- if ( data == null && fn == null ) {
-
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
-
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
-
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return elem;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
-
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
-
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return elem.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- } );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
- var tmp, events, t, handleObjIn,
- special, eventHandle, handleObj,
- handlers, type, namespaces, origType,
- elemData = jQuery._data( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !( events = elemData.events ) ) {
- events = elemData.events = {};
- }
- if ( !( eventHandle = elemData.handle ) ) {
- eventHandle = elemData.handle = function( e ) {
-
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" &&
- ( !e || jQuery.event.triggered !== e.type ) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
-
- // Add elem as a property of the handle fn to prevent a memory leak
- // with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend( {
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join( "." )
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !( handlers = events[ type ] ) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup ||
- special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
- var j, handleObj, tmp,
- origCount, t, events,
- special, handlers, type,
- namespaces, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
- if ( !elemData || !( events = elemData.events ) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[ t ] ) || [];
- type = origType = tmp[ 1 ];
- namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[ 2 ] &&
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector ||
- selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown ||
- special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery._removeData( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- var handle, ontype, cur,
- bubbleType, special, tmp, i,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "." ) > -1 ) {
-
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split( "." );
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join( "." );
- event.rnamespace = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === ( elem.ownerDocument || document ) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] &&
- jQuery._data( cur, "handle" );
-
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if (
- ( !special._default ||
- special._default.apply( eventPath.pop(), data ) === false
- ) && acceptData( elem )
- ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- try {
- elem[ type ]();
- } catch ( e ) {
-
- // IE<9 dies on focus/blur to hidden element (#1486,#12518)
- // only reproducible on winXP IE8 native, not IE9 in IE8 mode
- }
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, j, ret, matched, handleObj,
- handlerQueue = [],
- args = slice.call( arguments ),
- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[ 0 ] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( ( handleObj = matched.handlers[ j++ ] ) &&
- !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or 2) have namespace(s)
- // a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
- handleObj.handler ).apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( ( event.result = ret ) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var i, matches, sel, handleObj,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Support (at least): Chrome, IE9
- // Find delegate handlers
- // Black-hole SVG instance trees (#13180)
- //
- // Support: Firefox<=42+
- // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
- if ( delegateCount && cur.nodeType &&
- ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
-
- /* jshint eqeqeq: false */
- for ( ; cur != this; cur = cur.parentNode || this ) {
- /* jshint eqeqeq: true */
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) > -1 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push( { elem: cur, handlers: matches } );
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
- }
-
- return handlerQueue;
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: IE<9
- // Fix target property (#1925)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Support: Safari 6-8+
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Support: IE<9
- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
- event.metaKey = !!event.metaKey;
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
- "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split( " " ),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: ( "button buttons clientX clientY fromElement offsetX offsetY " +
- "pageX pageY screenX screenY toElement" ).split( " " ),
- filter: function( event, original ) {
- var body, eventDoc, doc,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX +
- ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
- ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY +
- ( doc && doc.scrollTop || body && body.scrollTop || 0 ) -
- ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ?
- original.toElement :
- fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- special: {
- load: {
-
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
-
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- try {
- this.focus();
- return false;
- } catch ( e ) {
-
- // Support: IE<9
- // If we error on focus to hidden element (#1486, #12518),
- // let .trigger() run the handlers
- }
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
-
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert rounded-0 if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- // Piggyback on a donor event to simulate a different one
- simulate: function( type, elem, event ) {
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true
-
- // Previously, `originalEvent: {}` was set here, so stopPropagation call
- // would not be triggered on donor event, since in our own
- // jQuery.event.stopPropagation function we had a check for existence of
- // originalEvent.stopPropagation method, so, consequently it would be a noop.
- //
- // Guard for simulated events was moved to jQuery.event.stopPropagation function
- // since `originalEvent` should point to the original event for the
- // constancy with other events and for more focused logic
- }
- );
-
- jQuery.event.trigger( e, null, elem );
-
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
-
- // This "if" is needed for plain objects
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
-
- if ( elem.detachEvent ) {
-
- // #8545, #7054, preventing memory leaks for custom events in IE6-8
- // detachEvent needed property on element, by name of that event,
- // to properly expose it to GC
- if ( typeof elem[ name ] === "undefined" ) {
- elem[ name ] = null;
- }
-
- elem.detachEvent( name, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
-
- // Allow instantiation without the 'new' keyword
- if ( !( this instanceof jQuery.Event ) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
-
- // Support: IE < 9, Android < 4.0
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- constructor: jQuery.Event,
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
- if ( !e ) {
- return;
- }
-
- // If preventDefault exists, run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // Support: IE
- // Otherwise set the returnValue property of the original event to false
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
-
- if ( !e || this.isSimulated ) {
- return;
- }
-
- // If stopPropagation exists, run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
-
- // Support: IE
- // Set the cancelBubble property of the original event to true
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && e.stopImmediatePropagation ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://code.google.com/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mouseenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-} );
-
-// IE submit delegation
-if ( !support.submit ) {
-
- jQuery.event.special.submit = {
- setup: function() {
-
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ?
-
- // Support: IE <=8
- // We use jQuery.prop instead of elem.form
- // to allow fixing the IE8 delegated submit issue (gh-2332)
- // by 3rd party polyfills/workarounds.
- jQuery.prop( elem, "form" ) :
- undefined;
-
- if ( form && !jQuery._data( form, "submit" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submitBubble = true;
- } );
- jQuery._data( form, "submit", true );
- }
- } );
-
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
-
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submitBubble ) {
- delete event._submitBubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event );
- }
- }
- },
-
- teardown: function() {
-
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !support.change ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
-
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._justChanged = true;
- }
- } );
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._justChanged && !event.isTrigger ) {
- this._justChanged = false;
- }
-
- // Allow triggered, simulated change events (#11500)
- jQuery.event.simulate( "change", this, event );
- } );
- }
- return false;
- }
-
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event );
- }
- } );
- jQuery._data( elem, "change", true );
- }
- } );
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger ||
- ( elem.type !== "radio" && elem.type !== "checkbox" ) ) {
-
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return !rformElems.test( this.nodeName );
- }
- };
-}
-
-// Support: Firefox
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome, Safari
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
- jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- jQuery._removeData( doc, fix );
- } else {
- jQuery._data( doc, fix, attaches );
- }
- }
- };
- } );
-}
-
-jQuery.fn.extend( {
-
- on: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn );
- },
- one: function( types, selector, data, fn ) {
- return on( this, types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
-
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ?
- handleObj.origType + "." + handleObj.namespace :
- handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
-
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
-
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each( function() {
- jQuery.event.remove( this, types, fn, selector );
- } );
- },
-
- trigger: function( type, data ) {
- return this.each( function() {
- jQuery.event.trigger( type, data, this );
- } );
- },
- triggerHandler: function( type, data ) {
- var elem = this[ 0 ];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-} );
-
-
-var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ),
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
-
- // Support: IE 10-11, Edge 10240+
- // In IE/Edge using regex groups here causes severe slowdowns.
- // See https://connect.microsoft.com/IE/feedback/details/1736512/
- rnoInnerhtml = /
-
-
-
-
-{{ $url := .Get "url" }}
-{{ $base_url := .Site.BaseURL | urls.Parse}}
-{{ $base_path := $base_url.Path}}
-{{ $url_pdf := path.Join $base_path $url}}
-
-
-
-
+
+
+
+
+{{ $url := .Get "url" }}
+{{ $base_url := .Site.BaseURL | urls.Parse}}
+{{ $base_path := $base_url.Path}}
+{{ $url_pdf := path.Join $base_path $url}}
+
+
+
+
\ No newline at end of file
diff --git a/themes/hugo-theme-pdf-js/layouts/shortcodes/embed-pdf.html b/themes/hugo-theme-pdf-js/layouts/shortcodes/embed-pdf.html
index f6d05ed863fc3926190ea180ad951b8d5b5d0620..ccdec786a9e2283905d9d2add73faef15e2a8d76 100644
--- a/themes/hugo-theme-pdf-js/layouts/shortcodes/embed-pdf.html
+++ b/themes/hugo-theme-pdf-js/layouts/shortcodes/embed-pdf.html
@@ -1,129 +1,129 @@
-
-
-
-
- Previous
- Next
-
- Page: /
-
-
-
-
-
-
+
+
+
+ Previous
+ Next
+
+ Page: /
+
+
+
+
+
+
\ No newline at end of file
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/LICENSE b/themes/hugo-theme-pdf-js/static/js/pdf-js/LICENSE
index f433b1a53f5b830a205fd2df78e2b34974656c7b..ade750b16ba50a06c955c07a75f5f82bdd3c5331 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/LICENSE
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/LICENSE
@@ -1,177 +1,177 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.js b/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.js
index a2ee957dde2b3313c678baab0e010866db222ae9..3b2b17949a504d7dba0b78d6d51c504c0f084f6b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.js
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.js
@@ -1,13489 +1,13489 @@
-/**
- * @licstart The following is the entire license notice for the
- * Javascript code in this page
- *
- * Copyright 2020 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
- */
-
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define("pdfjs-dist/build/pdf", [], factory);
- else if(typeof exports === 'object')
- exports["pdfjs-dist/build/pdf"] = factory();
- else
- root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __w_pdfjs_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __w_pdfjs_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __w_pdfjs_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __w_pdfjs_require__.d = function(exports, name, getter) {
-/******/ if(!__w_pdfjs_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __w_pdfjs_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __w_pdfjs_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __w_pdfjs_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __w_pdfjs_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __w_pdfjs_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __w_pdfjs_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __w_pdfjs_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-Object.defineProperty(exports, "addLinkAttributes", {
- enumerable: true,
- get: function () {
- return _display_utils.addLinkAttributes;
- }
-});
-Object.defineProperty(exports, "getFilenameFromUrl", {
- enumerable: true,
- get: function () {
- return _display_utils.getFilenameFromUrl;
- }
-});
-Object.defineProperty(exports, "LinkTarget", {
- enumerable: true,
- get: function () {
- return _display_utils.LinkTarget;
- }
-});
-Object.defineProperty(exports, "loadScript", {
- enumerable: true,
- get: function () {
- return _display_utils.loadScript;
- }
-});
-Object.defineProperty(exports, "PDFDateString", {
- enumerable: true,
- get: function () {
- return _display_utils.PDFDateString;
- }
-});
-Object.defineProperty(exports, "RenderingCancelledException", {
- enumerable: true,
- get: function () {
- return _display_utils.RenderingCancelledException;
- }
-});
-Object.defineProperty(exports, "build", {
- enumerable: true,
- get: function () {
- return _api.build;
- }
-});
-Object.defineProperty(exports, "getDocument", {
- enumerable: true,
- get: function () {
- return _api.getDocument;
- }
-});
-Object.defineProperty(exports, "LoopbackPort", {
- enumerable: true,
- get: function () {
- return _api.LoopbackPort;
- }
-});
-Object.defineProperty(exports, "PDFDataRangeTransport", {
- enumerable: true,
- get: function () {
- return _api.PDFDataRangeTransport;
- }
-});
-Object.defineProperty(exports, "PDFWorker", {
- enumerable: true,
- get: function () {
- return _api.PDFWorker;
- }
-});
-Object.defineProperty(exports, "version", {
- enumerable: true,
- get: function () {
- return _api.version;
- }
-});
-Object.defineProperty(exports, "CMapCompressionType", {
- enumerable: true,
- get: function () {
- return _util.CMapCompressionType;
- }
-});
-Object.defineProperty(exports, "createObjectURL", {
- enumerable: true,
- get: function () {
- return _util.createObjectURL;
- }
-});
-Object.defineProperty(exports, "createPromiseCapability", {
- enumerable: true,
- get: function () {
- return _util.createPromiseCapability;
- }
-});
-Object.defineProperty(exports, "createValidAbsoluteUrl", {
- enumerable: true,
- get: function () {
- return _util.createValidAbsoluteUrl;
- }
-});
-Object.defineProperty(exports, "InvalidPDFException", {
- enumerable: true,
- get: function () {
- return _util.InvalidPDFException;
- }
-});
-Object.defineProperty(exports, "MissingPDFException", {
- enumerable: true,
- get: function () {
- return _util.MissingPDFException;
- }
-});
-Object.defineProperty(exports, "OPS", {
- enumerable: true,
- get: function () {
- return _util.OPS;
- }
-});
-Object.defineProperty(exports, "PasswordResponses", {
- enumerable: true,
- get: function () {
- return _util.PasswordResponses;
- }
-});
-Object.defineProperty(exports, "PermissionFlag", {
- enumerable: true,
- get: function () {
- return _util.PermissionFlag;
- }
-});
-Object.defineProperty(exports, "removeNullCharacters", {
- enumerable: true,
- get: function () {
- return _util.removeNullCharacters;
- }
-});
-Object.defineProperty(exports, "shadow", {
- enumerable: true,
- get: function () {
- return _util.shadow;
- }
-});
-Object.defineProperty(exports, "UnexpectedResponseException", {
- enumerable: true,
- get: function () {
- return _util.UnexpectedResponseException;
- }
-});
-Object.defineProperty(exports, "UNSUPPORTED_FEATURES", {
- enumerable: true,
- get: function () {
- return _util.UNSUPPORTED_FEATURES;
- }
-});
-Object.defineProperty(exports, "Util", {
- enumerable: true,
- get: function () {
- return _util.Util;
- }
-});
-Object.defineProperty(exports, "VerbosityLevel", {
- enumerable: true,
- get: function () {
- return _util.VerbosityLevel;
- }
-});
-Object.defineProperty(exports, "AnnotationLayer", {
- enumerable: true,
- get: function () {
- return _annotation_layer.AnnotationLayer;
- }
-});
-Object.defineProperty(exports, "apiCompatibilityParams", {
- enumerable: true,
- get: function () {
- return _api_compatibility.apiCompatibilityParams;
- }
-});
-Object.defineProperty(exports, "GlobalWorkerOptions", {
- enumerable: true,
- get: function () {
- return _worker_options.GlobalWorkerOptions;
- }
-});
-Object.defineProperty(exports, "renderTextLayer", {
- enumerable: true,
- get: function () {
- return _text_layer.renderTextLayer;
- }
-});
-Object.defineProperty(exports, "SVGGraphics", {
- enumerable: true,
- get: function () {
- return _svg.SVGGraphics;
- }
-});
-
-var _display_utils = __w_pdfjs_require__(1);
-
-var _api = __w_pdfjs_require__(5);
-
-var _util = __w_pdfjs_require__(2);
-
-var _annotation_layer = __w_pdfjs_require__(16);
-
-var _api_compatibility = __w_pdfjs_require__(7);
-
-var _worker_options = __w_pdfjs_require__(10);
-
-var _text_layer = __w_pdfjs_require__(17);
-
-var _svg = __w_pdfjs_require__(18);
-
-const pdfjsVersion = '2.5.207';
-const pdfjsBuild = '0974d6052';
-{
- const {
- isNodeJS
- } = __w_pdfjs_require__(4);
-
- if (isNodeJS) {
- const PDFNodeStream = __w_pdfjs_require__(19).PDFNodeStream;
-
- (0, _api.setPDFNetworkStreamFactory)(params => {
- return new PDFNodeStream(params);
- });
- } else {
- const PDFNetworkStream = __w_pdfjs_require__(22).PDFNetworkStream;
-
- let PDFFetchStream;
-
- if ((0, _display_utils.isFetchSupported)()) {
- PDFFetchStream = __w_pdfjs_require__(23).PDFFetchStream;
- }
-
- (0, _api.setPDFNetworkStreamFactory)(params => {
- if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {
- return new PDFFetchStream(params);
- }
-
- return new PDFNetworkStream(params);
- });
- }
-}
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.addLinkAttributes = addLinkAttributes;
-exports.getFilenameFromUrl = getFilenameFromUrl;
-exports.isFetchSupported = isFetchSupported;
-exports.isValidFetchUrl = isValidFetchUrl;
-exports.loadScript = loadScript;
-exports.deprecated = deprecated;
-exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-const DEFAULT_LINK_REL = "noopener noreferrer nofollow";
-exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
-const SVG_NS = "http://www.w3.org/2000/svg";
-
-class DOMCanvasFactory {
- create(width, height) {
- if (width <= 0 || height <= 0) {
- throw new Error("Invalid canvas size");
- }
-
- const canvas = document.createElement("canvas");
- const context = canvas.getContext("2d");
- canvas.width = width;
- canvas.height = height;
- return {
- canvas,
- context
- };
- }
-
- 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;
- }
-
-}
-
-exports.DOMCanvasFactory = DOMCanvasFactory;
-
-class DOMCMapReaderFactory {
- constructor({
- baseUrl = null,
- isCompressed = false
- }) {
- 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 ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
-
- if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) {
- return fetch(url).then(async response => {
- if (!response.ok) {
- throw new Error(response.statusText);
- }
-
- let cMapData;
-
- if (this.isCompressed) {
- cMapData = new Uint8Array(await response.arrayBuffer());
- } else {
- cMapData = (0, _util.stringToBytes)(await response.text());
- }
-
- return {
- cMapData,
- compressionType
- };
- }).catch(reason => {
- throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
- });
- }
-
- return new Promise((resolve, reject) => {
- const request = new XMLHttpRequest();
- request.open("GET", url, true);
-
- if (this.isCompressed) {
- request.responseType = "arraybuffer";
- }
-
- request.onreadystatechange = () => {
- if (request.readyState !== XMLHttpRequest.DONE) {
- return;
- }
-
- if (request.status === 200 || request.status === 0) {
- let cMapData;
-
- if (this.isCompressed && request.response) {
- cMapData = new Uint8Array(request.response);
- } else if (!this.isCompressed && request.responseText) {
- cMapData = (0, _util.stringToBytes)(request.responseText);
- }
-
- if (cMapData) {
- resolve({
- cMapData,
- compressionType
- });
- return;
- }
- }
-
- reject(new Error(request.statusText));
- };
-
- request.send(null);
- }).catch(reason => {
- throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
- });
- }
-
-}
-
-exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
-
-class DOMSVGFactory {
- create(width, height) {
- (0, _util.assert)(width > 0 && height > 0, "Invalid SVG dimensions");
- const svg = document.createElementNS(SVG_NS, "svg:svg");
- svg.setAttribute("version", "1.1");
- 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) {
- (0, _util.assert)(typeof type === "string", "Invalid SVG element type");
- return document.createElementNS(SVG_NS, type);
- }
-
-}
-
-exports.DOMSVGFactory = DOMSVGFactory;
-
-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 = rotation % 360;
- rotation = rotation < 0 ? rotation + 360 : rotation;
-
- 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 = Math.abs(viewBox[3] - viewBox[1]) * scale;
- height = Math.abs(viewBox[2] - viewBox[0]) * scale;
- } else {
- offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
- offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
- width = Math.abs(viewBox[2] - viewBox[0]) * scale;
- height = Math.abs(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;
- }
-
- 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 _util.Util.applyTransform([x, y], this.transform);
- }
-
- convertToViewportRectangle(rect) {
- const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
-
- const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
-
- return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
- }
-
- convertToPdfPoint(x, y) {
- return _util.Util.applyInverseTransform([x, y], this.transform);
- }
-
-}
-
-exports.PageViewport = PageViewport;
-
-class RenderingCancelledException extends _util.BaseException {
- constructor(msg, type) {
- super(msg);
- this.type = type;
- }
-
-}
-
-exports.RenderingCancelledException = RenderingCancelledException;
-const LinkTarget = {
- NONE: 0,
- SELF: 1,
- BLANK: 2,
- PARENT: 3,
- TOP: 4
-};
-exports.LinkTarget = LinkTarget;
-
-function addLinkAttributes(link, {
- url,
- target,
- rel,
- enabled = true
-} = {}) {
- (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.');
- const urlNullRemoved = (0, _util.removeNullCharacters)(url);
-
- if (enabled) {
- link.href = link.title = urlNullRemoved;
- } else {
- link.href = "";
- link.title = `Disabled: ${urlNullRemoved}`;
-
- link.onclick = () => {
- return false;
- };
- }
-
- let targetStr = "";
-
- switch (target) {
- case LinkTarget.NONE:
- break;
-
- case LinkTarget.SELF:
- targetStr = "_self";
- break;
-
- case LinkTarget.BLANK:
- targetStr = "_blank";
- break;
-
- case LinkTarget.PARENT:
- targetStr = "_parent";
- break;
-
- case LinkTarget.TOP:
- targetStr = "_top";
- break;
- }
-
- link.target = targetStr;
- link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL;
-}
-
-function getFilenameFromUrl(url) {
- const anchor = url.indexOf("#");
- const query = url.indexOf("?");
- const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
- return url.substring(url.lastIndexOf("/", end) + 1, end);
-}
-
-class StatTimer {
- constructor() {
- this.started = Object.create(null);
- this.times = [];
- }
-
- time(name) {
- if (name in this.started) {
- (0, _util.warn)(`Timer is already running for ${name}`);
- }
-
- this.started[name] = Date.now();
- }
-
- timeEnd(name) {
- if (!(name in this.started)) {
- (0, _util.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 time of this.times) {
- const name = time.name;
-
- if (name.length > longest) {
- longest = name.length;
- }
- }
-
- for (const time of this.times) {
- const duration = time.end - time.start;
- outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`);
- }
-
- return outBuf.join("");
- }
-
-}
-
-exports.StatTimer = StatTimer;
-
-function isFetchSupported() {
- return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined";
-}
-
-function isValidFetchUrl(url, baseUrl) {
- try {
- const {
- protocol
- } = baseUrl ? new URL(url, baseUrl) : new URL(url);
- return protocol === "http:" || protocol === "https:";
- } catch (ex) {
- return false;
- }
-}
-
-function loadScript(src) {
- return new Promise((resolve, reject) => {
- const script = document.createElement("script");
- script.src = src;
- script.onload = resolve;
-
- script.onerror = function () {
- reject(new Error(`Cannot load script at: ${script.src}`));
- };
-
- (document.head || document.documentElement).appendChild(script);
- });
-}
-
-function deprecated(details) {
- console.log("Deprecated API usage: " + details);
-}
-
-let pdfDateStringRegex;
-
-class PDFDateString {
- static toDateObject(input) {
- if (!input || !(0, _util.isString)(input)) {
- return null;
- }
-
- if (!pdfDateStringRegex) {
- 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));
- }
-
-}
-
-exports.PDFDateString = PDFDateString;
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.arrayByteLength = arrayByteLength;
-exports.arraysToBytes = arraysToBytes;
-exports.assert = assert;
-exports.bytesToString = bytesToString;
-exports.createPromiseCapability = createPromiseCapability;
-exports.getVerbosityLevel = getVerbosityLevel;
-exports.info = info;
-exports.isArrayBuffer = isArrayBuffer;
-exports.isArrayEqual = isArrayEqual;
-exports.isBool = isBool;
-exports.isEmptyObj = isEmptyObj;
-exports.isNum = isNum;
-exports.isString = isString;
-exports.isSameOrigin = isSameOrigin;
-exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
-exports.removeNullCharacters = removeNullCharacters;
-exports.setVerbosityLevel = setVerbosityLevel;
-exports.shadow = shadow;
-exports.string32 = string32;
-exports.stringToBytes = stringToBytes;
-exports.stringToPDFString = stringToPDFString;
-exports.stringToUTF8String = stringToUTF8String;
-exports.utf8StringToString = utf8StringToString;
-exports.warn = warn;
-exports.unreachable = unreachable;
-exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
-
-__w_pdfjs_require__(3);
-
-const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
-exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
-const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
-exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
-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
-};
-exports.PermissionFlag = PermissionFlag;
-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
-};
-exports.TextRenderingMode = TextRenderingMode;
-const ImageKind = {
- GRAYSCALE_1BPP: 1,
- RGB_24BPP: 2,
- RGBA_32BPP: 3
-};
-exports.ImageKind = ImageKind;
-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
-};
-exports.AnnotationType = AnnotationType;
-const AnnotationStateModelType = {
- MARKED: "Marked",
- REVIEW: "Review"
-};
-exports.AnnotationStateModelType = AnnotationStateModelType;
-const AnnotationMarkedState = {
- MARKED: "Marked",
- UNMARKED: "Unmarked"
-};
-exports.AnnotationMarkedState = AnnotationMarkedState;
-const AnnotationReviewState = {
- ACCEPTED: "Accepted",
- REJECTED: "Rejected",
- CANCELLED: "Cancelled",
- COMPLETED: "Completed",
- NONE: "None"
-};
-exports.AnnotationReviewState = AnnotationReviewState;
-const AnnotationReplyType = {
- GROUP: "Group",
- REPLY: "R"
-};
-exports.AnnotationReplyType = AnnotationReplyType;
-const AnnotationFlag = {
- INVISIBLE: 0x01,
- HIDDEN: 0x02,
- PRINT: 0x04,
- NOZOOM: 0x08,
- NOROTATE: 0x10,
- NOVIEW: 0x20,
- READONLY: 0x40,
- LOCKED: 0x80,
- TOGGLENOVIEW: 0x100,
- LOCKEDCONTENTS: 0x200
-};
-exports.AnnotationFlag = AnnotationFlag;
-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
-};
-exports.AnnotationFieldFlag = AnnotationFieldFlag;
-const AnnotationBorderStyleType = {
- SOLID: 1,
- DASHED: 2,
- BEVELED: 3,
- INSET: 4,
- UNDERLINE: 5
-};
-exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
-const StreamType = {
- UNKNOWN: "UNKNOWN",
- FLATE: "FLATE",
- LZW: "LZW",
- DCT: "DCT",
- JPX: "JPX",
- JBIG: "JBIG",
- A85: "A85",
- AHX: "AHX",
- CCF: "CCF",
- RLX: "RLX"
-};
-exports.StreamType = StreamType;
-const FontType = {
- UNKNOWN: "UNKNOWN",
- TYPE1: "TYPE1",
- TYPE1C: "TYPE1C",
- CIDFONTTYPE0: "CIDFONTTYPE0",
- CIDFONTTYPE0C: "CIDFONTTYPE0C",
- TRUETYPE: "TRUETYPE",
- CIDFONTTYPE2: "CIDFONTTYPE2",
- TYPE3: "TYPE3",
- OPENTYPE: "OPENTYPE",
- TYPE0: "TYPE0",
- MMTYPE1: "MMTYPE1"
-};
-exports.FontType = FontType;
-const VerbosityLevel = {
- ERRORS: 0,
- WARNINGS: 1,
- INFOS: 5
-};
-exports.VerbosityLevel = VerbosityLevel;
-const CMapCompressionType = {
- NONE: 0,
- BINARY: 1,
- STREAM: 2
-};
-exports.CMapCompressionType = CMapCompressionType;
-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,
- beginAnnotations: 78,
- endAnnotations: 79,
- beginAnnotation: 80,
- endAnnotation: 81,
- paintJpegXObject: 82,
- paintImageMaskXObject: 83,
- paintImageMaskXObjectGroup: 84,
- paintImageXObject: 85,
- paintInlineImageXObject: 86,
- paintInlineImageXObjectGroup: 87,
- paintImageXObjectRepeat: 88,
- paintImageMaskXObjectRepeat: 89,
- paintSolidColorImageMask: 90,
- constructPath: 91
-};
-exports.OPS = OPS;
-const UNSUPPORTED_FEATURES = {
- unknown: "unknown",
- forms: "forms",
- javaScript: "javaScript",
- smask: "smask",
- shadingPattern: "shadingPattern",
- font: "font",
- errorTilingPattern: "errorTilingPattern",
- errorExtGState: "errorExtGState",
- errorXObject: "errorXObject",
- errorFontLoadType3: "errorFontLoadType3",
- errorFontState: "errorFontState",
- errorFontMissing: "errorFontMissing",
- errorFontTranslate: "errorFontTranslate",
- errorColorSpace: "errorColorSpace",
- errorOperatorList: "errorOperatorList",
- errorFontToUnicode: "errorFontToUnicode",
- errorFontLoadNative: "errorFontLoadNative",
- errorFontGetPath: "errorFontGetPath"
-};
-exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
-const PasswordResponses = {
- NEED_PASSWORD: 1,
- INCORRECT_PASSWORD: 2
-};
-exports.PasswordResponses = PasswordResponses;
-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 isSameOrigin(baseUrl, otherUrl) {
- let base;
-
- try {
- base = new URL(baseUrl);
-
- if (!base.origin || base.origin === "null") {
- return false;
- }
- } catch (e) {
- return false;
- }
-
- const other = new URL(otherUrl, base);
- return base.origin === other.origin;
-}
-
-function _isValidProtocol(url) {
- if (!url) {
- return false;
- }
-
- switch (url.protocol) {
- case "http:":
- case "https:":
- case "ftp:":
- case "mailto:":
- case "tel:":
- return true;
-
- default:
- return false;
- }
-}
-
-function createValidAbsoluteUrl(url, baseUrl) {
- if (!url) {
- return null;
- }
-
- try {
- const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
-
- if (_isValidProtocol(absoluteUrl)) {
- return absoluteUrl;
- }
- } catch (ex) {}
-
- return null;
-}
-
-function shadow(obj, prop, value) {
- Object.defineProperty(obj, prop, {
- value,
- enumerable: true,
- configurable: true,
- writable: false
- });
- return value;
-}
-
-const BaseException = function BaseExceptionClosure() {
- function BaseException(message) {
- if (this.constructor === BaseException) {
- unreachable("Cannot initialize BaseException.");
- }
-
- this.message = message;
- this.name = this.constructor.name;
- }
-
- BaseException.prototype = new Error();
- BaseException.constructor = BaseException;
- return BaseException;
-}();
-
-exports.BaseException = BaseException;
-
-class PasswordException extends BaseException {
- constructor(msg, code) {
- super(msg);
- this.code = code;
- }
-
-}
-
-exports.PasswordException = PasswordException;
-
-class UnknownErrorException extends BaseException {
- constructor(msg, details) {
- super(msg);
- this.details = details;
- }
-
-}
-
-exports.UnknownErrorException = UnknownErrorException;
-
-class InvalidPDFException extends BaseException {}
-
-exports.InvalidPDFException = InvalidPDFException;
-
-class MissingPDFException extends BaseException {}
-
-exports.MissingPDFException = MissingPDFException;
-
-class UnexpectedResponseException extends BaseException {
- constructor(msg, status) {
- super(msg);
- this.status = status;
- }
-
-}
-
-exports.UnexpectedResponseException = UnexpectedResponseException;
-
-class FormatError extends BaseException {}
-
-exports.FormatError = FormatError;
-
-class AbortException extends BaseException {}
-
-exports.AbortException = AbortException;
-const NullCharactersRegExp = /\x00/g;
-
-function removeNullCharacters(str) {
- if (typeof str !== "string") {
- warn("The argument for removeNullCharacters must be a string.");
- return str;
- }
-
- return str.replace(NullCharactersRegExp, "");
-}
-
-function bytesToString(bytes) {
- assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "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) {
- assert(typeof str === "string", "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 arrayByteLength(arr) {
- if (arr.length !== undefined) {
- return arr.length;
- }
-
- assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
- return arr.byteLength;
-}
-
-function arraysToBytes(arr) {
- const length = arr.length;
-
- if (length === 1 && arr[0] instanceof Uint8Array) {
- return arr[0];
- }
-
- let resultLength = 0;
-
- for (let i = 0; i < length; i++) {
- resultLength += arrayByteLength(arr[i]);
- }
-
- let pos = 0;
- const data = new Uint8Array(resultLength);
-
- for (let i = 0; i < length; i++) {
- let item = arr[i];
-
- if (!(item instanceof Uint8Array)) {
- if (typeof item === "string") {
- item = stringToBytes(item);
- } else {
- item = new Uint8Array(item);
- }
- }
-
- const itemLength = item.byteLength;
- data.set(item, pos);
- pos += itemLength;
- }
-
- return data;
-}
-
-function string32(value) {
- return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
-}
-
-function isLittleEndian() {
- const buffer8 = new Uint8Array(4);
- buffer8[0] = 1;
- const view32 = new Uint32Array(buffer8.buffer, 0, 1);
- return view32[0] === 1;
-}
-
-const IsLittleEndianCached = {
- get value() {
- return shadow(this, "value", isLittleEndian());
- }
-
-};
-exports.IsLittleEndianCached = IsLittleEndianCached;
-
-function isEvalSupported() {
- try {
- new Function("");
- return true;
- } catch (e) {
- return false;
- }
-}
-
-const IsEvalSupportedCached = {
- get value() {
- return shadow(this, "value", isEvalSupported());
- }
-
-};
-exports.IsEvalSupportedCached = IsEvalSupportedCached;
-const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];
-
-class Util {
- static makeCssRgb(r, g, b) {
- rgbBuf[1] = r;
- rgbBuf[3] = g;
- rgbBuf[5] = b;
- return rgbBuf.join("");
- }
-
- 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 = Util.applyTransform(r, m);
- const p2 = Util.applyTransform(r.slice(2, 4), m);
- const p3 = Util.applyTransform([r[0], r[3]], m);
- const p4 = Util.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 apply3dTransform(m, v) {
- return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
- }
-
- 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) * (a + d) - 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) {
- function compare(a, b) {
- return a - b;
- }
-
- const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
- const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
- const result = [];
- rect1 = Util.normalizeRect(rect1);
- rect2 = Util.normalizeRect(rect2);
-
- if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
- result[0] = orderedX[1];
- result[2] = orderedX[2];
- } else {
- return null;
- }
-
- if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
- result[1] = orderedY[1];
- result[3] = orderedY[2];
- } else {
- return null;
- }
-
- return result;
- }
-
-}
-
-exports.Util = Util;
-const PDFStringTranslateTable = [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) {
- const length = str.length,
- strBuf = [];
-
- if (str[0] === "\xFE" && str[1] === "\xFF") {
- for (let i = 2; i < length; i += 2) {
- strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));
- }
- } else if (str[0] === "\xFF" && str[1] === "\xFE") {
- for (let i = 2; i < length; i += 2) {
- strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i)));
- }
- } else {
- for (let i = 0; i < length; ++i) {
- const code = PDFStringTranslateTable[str.charCodeAt(i)];
- 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 isEmptyObj(obj) {
- for (const key in obj) {
- return false;
- }
-
- return true;
-}
-
-function isBool(v) {
- return typeof v === "boolean";
-}
-
-function isNum(v) {
- return typeof v === "number";
-}
-
-function isString(v) {
- return typeof v === "string";
-}
-
-function isArrayBuffer(v) {
- return typeof v === "object" && v !== null && v.byteLength !== undefined;
-}
-
-function isArrayEqual(arr1, arr2) {
- if (arr1.length !== arr2.length) {
- return false;
- }
-
- return arr1.every(function (element, index) {
- return element === arr2[index];
- });
-}
-
-function createPromiseCapability() {
- const capability = Object.create(null);
- let isSettled = false;
- Object.defineProperty(capability, "settled", {
- get() {
- return isSettled;
- }
-
- });
- capability.promise = new Promise(function (resolve, reject) {
- capability.resolve = function (data) {
- isSettled = true;
- resolve(data);
- };
-
- capability.reject = function (reason) {
- isSettled = true;
- reject(reason);
- };
- });
- return capability;
-}
-
-const createObjectURL = function createObjectURLClosure() {
- const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- return function createObjectURL(data, contentType, forceDataSchema = false) {
- if (!forceDataSchema && URL.createObjectURL) {
- const blob = new Blob([data], {
- type: contentType
- });
- return URL.createObjectURL(blob);
- }
-
- let buffer = `data:${contentType};base64,`;
-
- for (let i = 0, ii = data.length; i < ii; i += 3) {
- const b1 = data[i] & 0xff;
- const b2 = data[i + 1] & 0xff;
- const b3 = data[i + 2] & 0xff;
- const d1 = b1 >> 2,
- d2 = (b1 & 3) << 4 | b2 >> 4;
- const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
- const d4 = i + 2 < ii ? b3 & 0x3f : 64;
- buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
- }
-
- return buffer;
- };
-}();
-
-exports.createObjectURL = createObjectURL;
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-var _is_node = __w_pdfjs_require__(4);
-
-;
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.isNodeJS = void 0;
-const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !process.versions.electron;
-exports.isNodeJS = isNodeJS;
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getDocument = getDocument;
-exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
-exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _display_utils = __w_pdfjs_require__(1);
-
-var _font_loader = __w_pdfjs_require__(6);
-
-var _api_compatibility = __w_pdfjs_require__(7);
-
-var _canvas = __w_pdfjs_require__(8);
-
-var _worker_options = __w_pdfjs_require__(10);
-
-var _is_node = __w_pdfjs_require__(4);
-
-var _message_handler = __w_pdfjs_require__(11);
-
-var _metadata = __w_pdfjs_require__(12);
-
-var _transport_stream = __w_pdfjs_require__(14);
-
-var _webgl = __w_pdfjs_require__(15);
-
-const DEFAULT_RANGE_CHUNK_SIZE = 65536;
-const RENDERING_CANCELLED_TIMEOUT = 100;
-let createPDFNetworkStream;
-
-function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
- createPDFNetworkStream = pdfNetworkStreamFactory;
-}
-
-function getDocument(src) {
- const task = new PDFDocumentLoadingTask();
- let source;
-
- if (typeof src === "string") {
- source = {
- url: src
- };
- } else if ((0, _util.isArrayBuffer)(src)) {
- source = {
- data: src
- };
- } else if (src instanceof PDFDataRangeTransport) {
- source = {
- range: src
- };
- } else {
- if (typeof src !== "object") {
- throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter object");
- }
-
- if (!src.url && !src.data && !src.range) {
- throw new Error("Invalid parameter object: need either .data, .range or .url");
- }
-
- source = src;
- }
-
- const params = Object.create(null);
- let rangeTransport = null,
- worker = null;
-
- for (const key in source) {
- if (key === "url" && typeof window !== "undefined") {
- params[key] = new URL(source[key], window.location).href;
- continue;
- } else if (key === "range") {
- rangeTransport = source[key];
- continue;
- } else if (key === "worker") {
- worker = source[key];
- continue;
- } else if (key === "data" && !(source[key] instanceof Uint8Array)) {
- const pdfBytes = source[key];
-
- if (typeof pdfBytes === "string") {
- params[key] = (0, _util.stringToBytes)(pdfBytes);
- } else if (typeof pdfBytes === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) {
- params[key] = new Uint8Array(pdfBytes);
- } else if ((0, _util.isArrayBuffer)(pdfBytes)) {
- params[key] = new Uint8Array(pdfBytes);
- } else {
- throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is expected in the " + "data property.");
- }
-
- continue;
- }
-
- params[key] = source[key];
- }
-
- params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
- params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;
- params.ignoreErrors = params.stopAtErrors !== true;
- params.fontExtraProperties = params.fontExtraProperties === true;
- params.pdfBug = params.pdfBug === true;
-
- if (!Number.isInteger(params.maxImageSize)) {
- params.maxImageSize = -1;
- }
-
- if (typeof params.isEvalSupported !== "boolean") {
- params.isEvalSupported = true;
- }
-
- if (typeof params.disableFontFace !== "boolean") {
- params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;
- }
-
- if (typeof params.disableRange !== "boolean") {
- params.disableRange = false;
- }
-
- if (typeof params.disableStream !== "boolean") {
- params.disableStream = false;
- }
-
- if (typeof params.disableAutoFetch !== "boolean") {
- params.disableAutoFetch = false;
- }
-
- (0, _util.setVerbosityLevel)(params.verbosity);
-
- if (!worker) {
- const workerParams = {
- verbosity: params.verbosity,
- port: _worker_options.GlobalWorkerOptions.workerPort
- };
- worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
- task._worker = worker;
- }
-
- const docId = task.docId;
- worker.promise.then(function () {
- if (task.destroyed) {
- throw new Error("Loading aborted");
- }
-
- const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);
-
- const networkStreamPromise = new Promise(function (resolve) {
- let networkStream;
-
- if (rangeTransport) {
- networkStream = new _transport_stream.PDFDataTransportStream({
- length: params.length,
- initialData: params.initialData,
- progressiveDone: params.progressiveDone,
- disableRange: params.disableRange,
- disableStream: params.disableStream
- }, rangeTransport);
- } else if (!params.data) {
- networkStream = createPDFNetworkStream({
- url: params.url,
- length: params.length,
- httpHeaders: params.httpHeaders,
- withCredentials: params.withCredentials,
- rangeChunkSize: params.rangeChunkSize,
- disableRange: params.disableRange,
- disableStream: params.disableStream
- });
- }
-
- resolve(networkStream);
- });
- return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) {
- if (task.destroyed) {
- throw new Error("Loading aborted");
- }
-
- const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
- messageHandler.postMessageTransfers = worker.postMessageTransfers;
- const transport = new WorkerTransport(messageHandler, task, networkStream, params);
- task._transport = transport;
- messageHandler.send("Ready", null);
- });
- }).catch(task._capability.reject);
- return task;
-}
-
-function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
- if (worker.destroyed) {
- return Promise.reject(new Error("Worker was destroyed"));
- }
-
- if (pdfDataRangeTransport) {
- source.length = pdfDataRangeTransport.length;
- source.initialData = pdfDataRangeTransport.initialData;
- source.progressiveDone = pdfDataRangeTransport.progressiveDone;
- }
-
- return worker.messageHandler.sendWithPromise("GetDocRequest", {
- docId,
- apiVersion: '2.5.207',
- source: {
- data: source.data,
- url: source.url,
- password: source.password,
- disableAutoFetch: source.disableAutoFetch,
- rangeChunkSize: source.rangeChunkSize,
- length: source.length
- },
- maxImageSize: source.maxImageSize,
- disableFontFace: source.disableFontFace,
- postMessageTransfers: worker.postMessageTransfers,
- docBaseUrl: source.docBaseUrl,
- ignoreErrors: source.ignoreErrors,
- isEvalSupported: source.isEvalSupported,
- fontExtraProperties: source.fontExtraProperties
- }).then(function (workerId) {
- if (worker.destroyed) {
- throw new Error("Worker was destroyed");
- }
-
- return workerId;
- });
-}
-
-const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
- let nextDocumentId = 0;
-
- class PDFDocumentLoadingTask {
- constructor() {
- this._capability = (0, _util.createPromiseCapability)();
- this._transport = null;
- this._worker = null;
- this.docId = "d" + nextDocumentId++;
- this.destroyed = false;
- this.onPassword = null;
- this.onProgress = null;
- this.onUnsupportedFeature = null;
- }
-
- get promise() {
- return this._capability.promise;
- }
-
- destroy() {
- this.destroyed = true;
- const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
- return transportDestroyed.then(() => {
- this._transport = null;
-
- if (this._worker) {
- this._worker.destroy();
-
- this._worker = null;
- }
- });
- }
-
- }
-
- return PDFDocumentLoadingTask;
-}();
-
-class PDFDataRangeTransport {
- constructor(length, initialData, progressiveDone = false) {
- this.length = length;
- this.initialData = initialData;
- this.progressiveDone = progressiveDone;
- this._rangeListeners = [];
- this._progressListeners = [];
- this._progressiveReadListeners = [];
- this._progressiveDoneListeners = [];
- this._readyCapability = (0, _util.createPromiseCapability)();
- }
-
- 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, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
- }
-
- abort() {}
-
-}
-
-exports.PDFDataRangeTransport = PDFDataRangeTransport;
-
-class PDFDocumentProxy {
- constructor(pdfInfo, transport) {
- this._pdfInfo = pdfInfo;
- this._transport = transport;
- }
-
- get numPages() {
- return this._pdfInfo.numPages;
- }
-
- get fingerprint() {
- return this._pdfInfo.fingerprint;
- }
-
- 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();
- }
-
- getOpenActionDestination() {
- (0, _display_utils.deprecated)("getOpenActionDestination, use getOpenAction instead.");
- return this.getOpenAction().then(function (openAction) {
- return openAction && openAction.dest ? openAction.dest : null;
- });
- }
-
- getAttachments() {
- return this._transport.getAttachments();
- }
-
- getJavaScript() {
- return this._transport.getJavaScript();
- }
-
- getOutline() {
- return this._transport.getOutline();
- }
-
- getPermissions() {
- return this._transport.getPermissions();
- }
-
- getMetadata() {
- return this._transport.getMetadata();
- }
-
- getData() {
- return this._transport.getData();
- }
-
- getDownloadInfo() {
- return this._transport.downloadInfoCapability.promise;
- }
-
- getStats() {
- return this._transport.getStats();
- }
-
- cleanup() {
- return this._transport.startCleanup();
- }
-
- destroy() {
- return this.loadingTask.destroy();
- }
-
- get loadingParams() {
- return this._transport.loadingParams;
- }
-
- get loadingTask() {
- return this._transport.loadingTask;
- }
-
-}
-
-exports.PDFDocumentProxy = PDFDocumentProxy;
-
-class PDFPageProxy {
- constructor(pageIndex, pageInfo, transport, pdfBug = false) {
- this._pageIndex = pageIndex;
- this._pageInfo = pageInfo;
- this._transport = transport;
- this._stats = pdfBug ? new _display_utils.StatTimer() : null;
- this._pdfBug = pdfBug;
- this.commonObjs = transport.commonObjs;
- this.objs = new PDFObjects();
- this.cleanupAfterRender = false;
- this.pendingCleanup = false;
- this.intentStates = Object.create(null);
- 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.PageViewport({
- viewBox: this.view,
- scale,
- rotation,
- offsetX,
- offsetY,
- dontFlip
- });
- }
-
- getAnnotations({
- intent = null
- } = {}) {
- if (!this.annotationsPromise || this.annotationsIntent !== intent) {
- this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);
- this.annotationsIntent = intent;
- }
-
- return this.annotationsPromise;
- }
-
- render({
- canvasContext,
- viewport,
- intent = "display",
- enableWebGL = false,
- renderInteractiveForms = false,
- transform = null,
- imageLayer = null,
- canvasFactory = null,
- background = null
- }) {
- if (this._stats) {
- this._stats.time("Overall");
- }
-
- const renderingIntent = intent === "print" ? "print" : "display";
- this.pendingCleanup = false;
-
- if (!this.intentStates[renderingIntent]) {
- this.intentStates[renderingIntent] = Object.create(null);
- }
-
- const intentState = this.intentStates[renderingIntent];
-
- if (intentState.streamReaderCancelTimeout) {
- clearTimeout(intentState.streamReaderCancelTimeout);
- intentState.streamReaderCancelTimeout = null;
- }
-
- const canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();
- const webGLContext = new _webgl.WebGLContext({
- enable: enableWebGL
- });
-
- if (!intentState.displayReadyCapability) {
- intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
- intentState.operatorList = {
- fnArray: [],
- argsArray: [],
- lastChunk: false
- };
-
- if (this._stats) {
- this._stats.time("Page Request");
- }
-
- this._pumpOperatorList({
- pageIndex: this._pageIndex,
- intent: renderingIntent,
- renderInteractiveForms: renderInteractiveForms === true
- });
- }
-
- const complete = error => {
- const i = intentState.renderTasks.indexOf(internalRenderTask);
-
- if (i >= 0) {
- intentState.renderTasks.splice(i, 1);
- }
-
- if (this.cleanupAfterRender || renderingIntent === "print") {
- this.pendingCleanup = true;
- }
-
- this._tryCleanup();
-
- if (error) {
- internalRenderTask.capability.reject(error);
-
- this._abortOperatorList({
- intentState,
- reason: error
- });
- } else {
- internalRenderTask.capability.resolve();
- }
-
- if (this._stats) {
- this._stats.timeEnd("Rendering");
-
- this._stats.timeEnd("Overall");
- }
- };
-
- const internalRenderTask = new InternalRenderTask({
- callback: complete,
- params: {
- canvasContext,
- viewport,
- transform,
- imageLayer,
- background
- },
- objs: this.objs,
- commonObjs: this.commonObjs,
- operatorList: intentState.operatorList,
- pageIndex: this._pageIndex,
- canvasFactory: canvasFactoryInstance,
- webGLContext,
- useRequestAnimationFrame: renderingIntent !== "print",
- pdfBug: this._pdfBug
- });
-
- if (!intentState.renderTasks) {
- intentState.renderTasks = [];
- }
-
- intentState.renderTasks.push(internalRenderTask);
- const renderTask = internalRenderTask.task;
- intentState.displayReadyCapability.promise.then(transparency => {
- if (this.pendingCleanup) {
- complete();
- return;
- }
-
- if (this._stats) {
- this._stats.time("Rendering");
- }
-
- internalRenderTask.initializeGraphics(transparency);
- internalRenderTask.operatorListChanged();
- }).catch(complete);
- return renderTask;
- }
-
- getOperatorList() {
- function operatorListChanged() {
- if (intentState.operatorList.lastChunk) {
- intentState.opListReadCapability.resolve(intentState.operatorList);
- const i = intentState.renderTasks.indexOf(opListTask);
-
- if (i >= 0) {
- intentState.renderTasks.splice(i, 1);
- }
- }
- }
-
- const renderingIntent = "oplist";
-
- if (!this.intentStates[renderingIntent]) {
- this.intentStates[renderingIntent] = Object.create(null);
- }
-
- const intentState = this.intentStates[renderingIntent];
- let opListTask;
-
- if (!intentState.opListReadCapability) {
- opListTask = {};
- opListTask.operatorListChanged = operatorListChanged;
- intentState.opListReadCapability = (0, _util.createPromiseCapability)();
- intentState.renderTasks = [];
- intentState.renderTasks.push(opListTask);
- intentState.operatorList = {
- fnArray: [],
- argsArray: [],
- lastChunk: false
- };
-
- if (this._stats) {
- this._stats.time("Page Request");
- }
-
- this._pumpOperatorList({
- pageIndex: this._pageIndex,
- intent: renderingIntent
- });
- }
-
- return intentState.opListReadCapability.promise;
- }
-
- streamTextContent({
- normalizeWhitespace = false,
- disableCombineTextItems = false
- } = {}) {
- const TEXT_CONTENT_CHUNK_SIZE = 100;
- return this._transport.messageHandler.sendWithStream("GetTextContent", {
- pageIndex: this._pageIndex,
- normalizeWhitespace: normalizeWhitespace === true,
- combineTextItems: disableCombineTextItems !== true
- }, {
- highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
-
- size(textContent) {
- return textContent.items.length;
- }
-
- });
- }
-
- getTextContent(params = {}) {
- 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();
- });
- }
-
- _destroy() {
- this.destroyed = true;
- this._transport.pageCache[this._pageIndex] = null;
- const waitOn = [];
- Object.keys(this.intentStates).forEach(intent => {
- const intentState = this.intentStates[intent];
-
- this._abortOperatorList({
- intentState,
- reason: new Error("Page was destroyed."),
- force: true
- });
-
- if (intent === "oplist") {
- return;
- }
-
- intentState.renderTasks.forEach(function (renderTask) {
- const renderCompleted = renderTask.capability.promise.catch(function () {});
- waitOn.push(renderCompleted);
- renderTask.cancel();
- });
- });
- this.objs.clear();
- this.annotationsPromise = null;
- this.pendingCleanup = false;
- return Promise.all(waitOn);
- }
-
- cleanup(resetStats = false) {
- this.pendingCleanup = true;
- return this._tryCleanup(resetStats);
- }
-
- _tryCleanup(resetStats = false) {
- if (!this.pendingCleanup || Object.keys(this.intentStates).some(intent => {
- const intentState = this.intentStates[intent];
- return intentState.renderTasks.length !== 0 || !intentState.operatorList.lastChunk;
- })) {
- return false;
- }
-
- Object.keys(this.intentStates).forEach(intent => {
- delete this.intentStates[intent];
- });
- this.objs.clear();
- this.annotationsPromise = null;
-
- if (resetStats && this._stats) {
- this._stats = new _display_utils.StatTimer();
- }
-
- this.pendingCleanup = false;
- return true;
- }
-
- _startRenderPage(transparency, intent) {
- const intentState = this.intentStates[intent];
-
- if (!intentState) {
- return;
- }
-
- if (this._stats) {
- this._stats.timeEnd("Page Request");
- }
-
- if (intentState.displayReadyCapability) {
- 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;
-
- for (let i = 0; i < intentState.renderTasks.length; i++) {
- intentState.renderTasks[i].operatorListChanged();
- }
-
- if (operatorListChunk.lastChunk) {
- this._tryCleanup();
- }
- }
-
- _pumpOperatorList(args) {
- (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.');
-
- const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args);
-
- const reader = readableStream.getReader();
- const intentState = this.intentStates[args.intent];
- 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 (let i = 0; i < intentState.renderTasks.length; i++) {
- intentState.renderTasks[i].operatorListChanged();
- }
-
- this._tryCleanup();
- }
-
- if (intentState.displayReadyCapability) {
- intentState.displayReadyCapability.reject(reason);
- } else if (intentState.opListReadCapability) {
- intentState.opListReadCapability.reject(reason);
- } else {
- throw reason;
- }
- });
- };
-
- pump();
- }
-
- _abortOperatorList({
- intentState,
- reason,
- force = false
- }) {
- (0, _util.assert)(reason instanceof Error || typeof reason === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.');
-
- if (!intentState.streamReader) {
- return;
- }
-
- if (!force) {
- if (intentState.renderTasks.length !== 0) {
- return;
- }
-
- if (reason instanceof _display_utils.RenderingCancelledException) {
- intentState.streamReaderCancelTimeout = setTimeout(() => {
- this._abortOperatorList({
- intentState,
- reason,
- force: true
- });
-
- intentState.streamReaderCancelTimeout = null;
- }, RENDERING_CANCELLED_TIMEOUT);
- return;
- }
- }
-
- intentState.streamReader.cancel(new _util.AbortException(reason && reason.message));
- intentState.streamReader = null;
-
- if (this._transport.destroyed) {
- return;
- }
-
- Object.keys(this.intentStates).some(intent => {
- if (this.intentStates[intent] === intentState) {
- delete this.intentStates[intent];
- return true;
- }
-
- return false;
- });
- this.cleanup();
- }
-
- get stats() {
- return this._stats;
- }
-
-}
-
-exports.PDFPageProxy = PDFPageProxy;
-
-class LoopbackPort {
- constructor(defer = true) {
- this._listeners = [];
- this._defer = defer;
- this._deferred = Promise.resolve(undefined);
- }
-
- postMessage(obj, transfers) {
- function cloneValue(value) {
- if (typeof value !== "object" || value === null) {
- return value;
- }
-
- if (cloned.has(value)) {
- return cloned.get(value);
- }
-
- let buffer, result;
-
- if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
- const transferable = transfers && transfers.includes(buffer);
-
- if (transferable) {
- result = new value.constructor(buffer, value.byteOffset, value.byteLength);
- } else {
- result = new value.constructor(value);
- }
-
- cloned.set(value, result);
- return result;
- }
-
- result = Array.isArray(value) ? [] : {};
- cloned.set(value, result);
-
- for (const i in value) {
- let desc,
- p = value;
-
- while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
- p = Object.getPrototypeOf(p);
- }
-
- if (typeof desc.value === "undefined") {
- continue;
- }
-
- if (typeof desc.value === "function") {
- if (value.hasOwnProperty && value.hasOwnProperty(i)) {
- throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`);
- }
-
- continue;
- }
-
- result[i] = cloneValue(desc.value);
- }
-
- return result;
- }
-
- if (!this._defer) {
- this._listeners.forEach(listener => {
- listener.call(this, {
- data: obj
- });
- });
-
- return;
- }
-
- const cloned = new WeakMap();
- const e = {
- data: cloneValue(obj)
- };
-
- this._deferred.then(() => {
- this._listeners.forEach(listener => {
- listener.call(this, e);
- });
- });
- }
-
- addEventListener(name, listener) {
- this._listeners.push(listener);
- }
-
- removeEventListener(name, listener) {
- const i = this._listeners.indexOf(listener);
-
- this._listeners.splice(i, 1);
- }
-
- terminate() {
- this._listeners.length = 0;
- }
-
-}
-
-exports.LoopbackPort = LoopbackPort;
-
-const PDFWorker = function PDFWorkerClosure() {
- const pdfWorkerPorts = new WeakMap();
- let isWorkerDisabled = false;
- let fallbackWorkerSrc;
- let nextFakeWorkerId = 0;
- let fakeWorkerCapability;
-
- if (_is_node.isNodeJS && typeof require === "function") {
- isWorkerDisabled = true;
- fallbackWorkerSrc = "./pdf.worker.js";
- } else if (typeof document === "object" && "currentScript" in document) {
- const pdfjsFilePath = document.currentScript && document.currentScript.src;
-
- if (pdfjsFilePath) {
- fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
- }
- }
-
- function getWorkerSrc() {
- if (_worker_options.GlobalWorkerOptions.workerSrc) {
- return _worker_options.GlobalWorkerOptions.workerSrc;
- }
-
- if (typeof fallbackWorkerSrc !== "undefined") {
- if (!_is_node.isNodeJS) {
- (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
- }
-
- return fallbackWorkerSrc;
- }
-
- throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
- }
-
- function getMainThreadWorkerMessageHandler() {
- let mainWorkerMessageHandler;
-
- try {
- mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;
- } catch (ex) {}
-
- return mainWorkerMessageHandler || null;
- }
-
- function setupFakeWorkerGlobal() {
- if (fakeWorkerCapability) {
- return fakeWorkerCapability.promise;
- }
-
- fakeWorkerCapability = (0, _util.createPromiseCapability)();
-
- const loader = async function () {
- const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
-
- if (mainWorkerMessageHandler) {
- return mainWorkerMessageHandler;
- }
-
- if (_is_node.isNodeJS && typeof require === "function") {
- const worker = eval("require")(getWorkerSrc());
- return worker.WorkerMessageHandler;
- }
-
- await (0, _display_utils.loadScript)(getWorkerSrc());
- return window.pdfjsWorker.WorkerMessageHandler;
- };
-
- loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);
- return fakeWorkerCapability.promise;
- }
-
- function createCDNWrapper(url) {
- const wrapper = "importScripts('" + url + "');";
- return URL.createObjectURL(new Blob([wrapper]));
- }
-
- class PDFWorker {
- constructor({
- name = null,
- port = null,
- verbosity = (0, _util.getVerbosityLevel)()
- } = {}) {
- if (port && pdfWorkerPorts.has(port)) {
- throw new Error("Cannot use more than one PDFWorker per port");
- }
-
- this.name = name;
- this.destroyed = false;
- this.postMessageTransfers = true;
- this.verbosity = verbosity;
- this._readyCapability = (0, _util.createPromiseCapability)();
- this._port = null;
- this._webWorker = null;
- this._messageHandler = null;
-
- if (port) {
- pdfWorkerPorts.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 _message_handler.MessageHandler("main", "worker", port);
-
- this._messageHandler.on("ready", function () {});
-
- this._readyCapability.resolve();
- }
-
- _initialize() {
- if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
- let workerSrc = getWorkerSrc();
-
- try {
- if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
- workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);
- }
-
- const worker = new Worker(workerSrc);
- const messageHandler = new _message_handler.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;
-
- if (!data.supportTransfers) {
- this.postMessageTransfers = false;
- }
-
- 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 (e) {
- this._setupFakeWorker();
- }
- });
-
- const sendTest = () => {
- const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]);
-
- try {
- messageHandler.send("test", testObj, [testObj.buffer]);
- } catch (ex) {
- (0, _util.warn)("Cannot use postMessage transfers.");
- testObj[0] = 0;
- messageHandler.send("test", testObj);
- }
- };
-
- sendTest();
- return;
- } catch (e) {
- (0, _util.info)("The worker has been disabled.");
- }
- }
-
- this._setupFakeWorker();
- }
-
- _setupFakeWorker() {
- if (!isWorkerDisabled) {
- (0, _util.warn)("Setting up fake worker.");
- isWorkerDisabled = true;
- }
-
- 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" + nextFakeWorkerId++;
- const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
- WorkerMessageHandler.setup(workerHandler, port);
- const messageHandler = new _message_handler.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;
- }
-
- pdfWorkerPorts.delete(this._port);
- this._port = null;
-
- if (this._messageHandler) {
- this._messageHandler.destroy();
-
- this._messageHandler = null;
- }
- }
-
- static fromPort(params) {
- if (!params || !params.port) {
- throw new Error("PDFWorker.fromPort - invalid method signature.");
- }
-
- if (pdfWorkerPorts.has(params.port)) {
- return pdfWorkerPorts.get(params.port);
- }
-
- return new PDFWorker(params);
- }
-
- static getWorkerSrc() {
- return getWorkerSrc();
- }
-
- }
-
- return PDFWorker;
-}();
-
-exports.PDFWorker = PDFWorker;
-
-class WorkerTransport {
- constructor(messageHandler, loadingTask, networkStream, params) {
- this.messageHandler = messageHandler;
- this.loadingTask = loadingTask;
- this.commonObjs = new PDFObjects();
- this.fontLoader = new _font_loader.FontLoader({
- docId: loadingTask.docId,
- onUnsupportedFeature: this._onUnsupportedFeature.bind(this)
- });
- this._params = params;
- this.CMapReaderFactory = new params.CMapReaderFactory({
- baseUrl: params.cMapUrl,
- isCompressed: params.cMapPacked
- });
- this.destroyed = false;
- this.destroyCapability = null;
- this._passwordCapability = null;
- this._networkStream = networkStream;
- this._fullReader = null;
- this._lastProgress = null;
- this.pageCache = [];
- this.pagePromises = [];
- this.downloadInfoCapability = (0, _util.createPromiseCapability)();
- this.setupMessageHandler();
- }
-
- destroy() {
- if (this.destroyCapability) {
- return this.destroyCapability.promise;
- }
-
- this.destroyed = true;
- this.destroyCapability = (0, _util.createPromiseCapability)();
-
- if (this._passwordCapability) {
- this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));
- }
-
- const waitOn = [];
- this.pageCache.forEach(function (page) {
- if (page) {
- waitOn.push(page._destroy());
- }
- });
- this.pageCache.length = 0;
- this.pagePromises.length = 0;
- const terminated = this.messageHandler.sendWithPromise("Terminate", null);
- waitOn.push(terminated);
- Promise.all(waitOn).then(() => {
- this.fontLoader.clear();
-
- if (this._networkStream) {
- this._networkStream.cancelAllRequests(new _util.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, _util.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, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer.");
- sink.enqueue(new Uint8Array(value), 1, [value]);
- }).catch(reason => {
- sink.error(reason);
- });
- };
-
- sink.onCancel = reason => {
- this._fullReader.cancel(reason);
- };
- });
- messageHandler.on("ReaderHeadersReady", data => {
- const headersCapability = (0, _util.createPromiseCapability)();
- const fullReader = this._fullReader;
- fullReader.headersReady.then(() => {
- if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
- if (this._lastProgress && loadingTask.onProgress) {
- loadingTask.onProgress(this._lastProgress);
- }
-
- fullReader.onProgress = evt => {
- if (loadingTask.onProgress) {
- 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, _util.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, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer.");
- sink.enqueue(new Uint8Array(value), 1, [value]);
- }).catch(reason => {
- sink.error(reason);
- });
- };
-
- sink.onCancel = reason => {
- rangeReader.cancel(reason);
- };
- });
- messageHandler.on("GetDoc", ({
- pdfInfo
- }) => {
- this._numPages = pdfInfo.numPages;
-
- loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
- });
- messageHandler.on("DocException", function (ex) {
- let reason;
-
- switch (ex.name) {
- case "PasswordException":
- reason = new _util.PasswordException(ex.message, ex.code);
- break;
-
- case "InvalidPDFException":
- reason = new _util.InvalidPDFException(ex.message);
- break;
-
- case "MissingPDFException":
- reason = new _util.MissingPDFException(ex.message);
- break;
-
- case "UnexpectedResponseException":
- reason = new _util.UnexpectedResponseException(ex.message, ex.status);
- break;
-
- case "UnknownErrorException":
- reason = new _util.UnknownErrorException(ex.message, ex.details);
- break;
- }
-
- loadingTask._capability.reject(reason);
- });
- messageHandler.on("PasswordRequest", exception => {
- this._passwordCapability = (0, _util.createPromiseCapability)();
-
- if (loadingTask.onPassword) {
- const updatePassword = password => {
- this._passwordCapability.resolve({
- password
- });
- };
-
- try {
- loadingTask.onPassword(updatePassword, exception.code);
- } catch (ex) {
- this._passwordCapability.reject(ex);
- }
- } else {
- this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
- }
-
- return this._passwordCapability.promise;
- });
- messageHandler.on("DataLoaded", data => {
- if (loadingTask.onProgress) {
- loadingTask.onProgress({
- loaded: data.length,
- total: data.length
- });
- }
-
- this.downloadInfoCapability.resolve(data);
- });
- messageHandler.on("StartRenderPage", data => {
- if (this.destroyed) {
- return;
- }
-
- const page = this.pageCache[data.pageIndex];
-
- page._startRenderPage(data.transparency, data.intent);
- });
- messageHandler.on("commonobj", data => {
- if (this.destroyed) {
- return;
- }
-
- const [id, type, exportedData] = data;
-
- if (this.commonObjs.has(id)) {
- return;
- }
-
- switch (type) {
- case "Font":
- const params = this._params;
-
- if ("error" in exportedData) {
- const exportedError = exportedData.error;
- (0, _util.warn)(`Error during font loading: ${exportedError}`);
- this.commonObjs.resolve(id, exportedError);
- break;
- }
-
- let fontRegistry = null;
-
- if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) {
- fontRegistry = {
- registerFont(font, url) {
- globalThis.FontInspector.fontAdded(font, url);
- }
-
- };
- }
-
- const font = new _font_loader.FontFaceObject(exportedData, {
- isEvalSupported: params.isEvalSupported,
- disableFontFace: params.disableFontFace,
- ignoreErrors: params.ignoreErrors,
- onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
- fontRegistry
- });
- 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 "FontPath":
- case "FontType3Res":
- case "Image":
- this.commonObjs.resolve(id, exportedData);
- break;
-
- default:
- throw new Error(`Got unknown common object type ${type}`);
- }
- });
- messageHandler.on("obj", data => {
- if (this.destroyed) {
- return undefined;
- }
-
- const [id, pageIndex, type, imageData] = data;
- const pageProxy = this.pageCache[pageIndex];
-
- if (pageProxy.objs.has(id)) {
- return undefined;
- }
-
- switch (type) {
- case "Image":
- pageProxy.objs.resolve(id, imageData);
- const MAX_IMAGE_SIZE_TO_STORE = 8000000;
-
- if (imageData && "data" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
- pageProxy.cleanupAfterRender = true;
- }
-
- break;
-
- default:
- throw new Error(`Got unknown object type ${type}`);
- }
-
- return undefined;
- });
- messageHandler.on("DocProgress", data => {
- if (this.destroyed) {
- return;
- }
-
- if (loadingTask.onProgress) {
- loadingTask.onProgress({
- loaded: data.loaded,
- total: data.total
- });
- }
- });
- messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
- messageHandler.on("FetchBuiltInCMap", (data, sink) => {
- if (this.destroyed) {
- sink.error(new Error("Worker was destroyed"));
- return;
- }
-
- let fetched = false;
-
- sink.onPull = () => {
- if (fetched) {
- sink.close();
- return;
- }
-
- fetched = true;
- this.CMapReaderFactory.fetch(data).then(function (builtInCMap) {
- sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);
- }).catch(function (reason) {
- sink.error(reason);
- });
- };
- });
- }
-
- _onUnsupportedFeature({
- featureId
- }) {
- if (this.destroyed) {
- return;
- }
-
- if (this.loadingTask.onUnsupportedFeature) {
- this.loadingTask.onUnsupportedFeature(featureId);
- }
- }
-
- getData() {
- return this.messageHandler.sendWithPromise("GetData", null);
- }
-
- getPage(pageNumber) {
- if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
- return Promise.reject(new Error("Invalid page request"));
- }
-
- const pageIndex = pageNumber - 1;
-
- if (pageIndex in this.pagePromises) {
- return this.pagePromises[pageIndex];
- }
-
- 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[pageIndex] = page;
- return page;
- });
- this.pagePromises[pageIndex] = promise;
- return promise;
- }
-
- getPageIndex(ref) {
- return this.messageHandler.sendWithPromise("GetPageIndex", {
- ref
- }).catch(function (reason) {
- return Promise.reject(new Error(reason));
- });
- }
-
- getAnnotations(pageIndex, intent) {
- return this.messageHandler.sendWithPromise("GetAnnotations", {
- pageIndex,
- intent
- });
- }
-
- 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);
- }
-
- getJavaScript() {
- return this.messageHandler.sendWithPromise("GetJavaScript", null);
- }
-
- getOutline() {
- return this.messageHandler.sendWithPromise("GetOutline", null);
- }
-
- getPermissions() {
- return this.messageHandler.sendWithPromise("GetPermissions", null);
- }
-
- getMetadata() {
- return this.messageHandler.sendWithPromise("GetMetadata", null).then(results => {
- return {
- info: results[0],
- metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
- contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
- };
- });
- }
-
- getStats() {
- return this.messageHandler.sendWithPromise("GetStats", null);
- }
-
- startCleanup() {
- return this.messageHandler.sendWithPromise("Cleanup", null).then(() => {
- for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
- const page = this.pageCache[i];
-
- if (page) {
- const cleanupSuccessful = page.cleanup();
-
- if (!cleanupSuccessful) {
- throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);
- }
- }
- }
-
- this.commonObjs.clear();
- this.fontLoader.clear();
- });
- }
-
- get loadingParams() {
- const params = this._params;
- return (0, _util.shadow)(this, "loadingParams", {
- disableAutoFetch: params.disableAutoFetch,
- disableFontFace: params.disableFontFace
- });
- }
-
-}
-
-class PDFObjects {
- constructor() {
- this._objs = Object.create(null);
- }
-
- _ensureObj(objId) {
- if (this._objs[objId]) {
- return this._objs[objId];
- }
-
- return this._objs[objId] = {
- capability: (0, _util.createPromiseCapability)(),
- data: null,
- resolved: false
- };
- }
-
- get(objId, callback = null) {
- if (callback) {
- this._ensureObj(objId).capability.promise.then(callback);
-
- return null;
- }
-
- const obj = this._objs[objId];
-
- if (!obj || !obj.resolved) {
- throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
- }
-
- return obj.data;
- }
-
- has(objId) {
- const obj = this._objs[objId];
- return obj ? obj.resolved : false;
- }
-
- resolve(objId, data) {
- const obj = this._ensureObj(objId);
-
- obj.resolved = true;
- obj.data = data;
- obj.capability.resolve(data);
- }
-
- clear() {
- this._objs = Object.create(null);
- }
-
-}
-
-class RenderTask {
- constructor(internalRenderTask) {
- this._internalRenderTask = internalRenderTask;
- this.onContinue = null;
- }
-
- get promise() {
- return this._internalRenderTask.capability.promise;
- }
-
- cancel() {
- this._internalRenderTask.cancel();
- }
-
-}
-
-const InternalRenderTask = function InternalRenderTaskClosure() {
- const canvasInRendering = new WeakSet();
-
- class InternalRenderTask {
- constructor({
- callback,
- params,
- objs,
- commonObjs,
- operatorList,
- pageIndex,
- canvasFactory,
- webGLContext,
- useRequestAnimationFrame = false,
- pdfBug = false
- }) {
- this.callback = callback;
- this.params = params;
- this.objs = objs;
- this.commonObjs = commonObjs;
- this.operatorListIdx = null;
- this.operatorList = operatorList;
- this._pageIndex = pageIndex;
- this.canvasFactory = canvasFactory;
- this.webGLContext = webGLContext;
- this._pdfBug = pdfBug;
- this.running = false;
- this.graphicsReadyCallback = null;
- this.graphicsReady = false;
- this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
- this.cancelled = false;
- this.capability = (0, _util.createPromiseCapability)();
- this.task = new RenderTask(this);
- this._continueBound = this._continue.bind(this);
- this._scheduleNextBound = this._scheduleNext.bind(this);
- this._nextBound = this._next.bind(this);
- this._canvas = params.canvasContext.canvas;
- }
-
- initializeGraphics(transparency = false) {
- if (this.cancelled) {
- return;
- }
-
- if (this._canvas) {
- if (canvasInRendering.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.");
- }
-
- canvasInRendering.add(this._canvas);
- }
-
- if (this._pdfBug && globalThis.StepperManager && 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,
- imageLayer,
- background
- } = this.params;
- this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer);
- this.gfx.beginDrawing({
- transform,
- viewport,
- transparency,
- background
- });
- this.operatorListIdx = 0;
- this.graphicsReady = true;
-
- if (this.graphicsReadyCallback) {
- this.graphicsReadyCallback();
- }
- }
-
- cancel(error = null) {
- this.running = false;
- this.cancelled = true;
-
- if (this.gfx) {
- this.gfx.endDrawing();
- }
-
- if (this._canvas) {
- canvasInRendering.delete(this._canvas);
- }
-
- this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas"));
- }
-
- operatorListChanged() {
- if (!this.graphicsReady) {
- if (!this.graphicsReadyCallback) {
- this.graphicsReadyCallback = this._continueBound;
- }
-
- return;
- }
-
- if (this.stepper) {
- 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.cancel.bind(this));
- });
- } else {
- Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this));
- }
- }
-
- 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();
-
- if (this._canvas) {
- canvasInRendering.delete(this._canvas);
- }
-
- this.callback();
- }
- }
- }
-
- }
-
- return InternalRenderTask;
-}();
-
-const version = '2.5.207';
-exports.version = version;
-const build = '0974d6052';
-exports.build = build;
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.FontLoader = exports.FontFaceObject = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-class BaseFontLoader {
- constructor({
- docId,
- onUnsupportedFeature
- }) {
- if (this.constructor === BaseFontLoader) {
- (0, _util.unreachable)("Cannot initialize BaseFontLoader.");
- }
-
- this.docId = docId;
- this._onUnsupportedFeature = onUnsupportedFeature;
- this.nativeFontFaces = [];
- this.styleElement = null;
- }
-
- addNativeFontFace(nativeFontFace) {
- this.nativeFontFaces.push(nativeFontFace);
- document.fonts.add(nativeFontFace);
- }
-
- insertRule(rule) {
- let styleElement = this.styleElement;
-
- if (!styleElement) {
- styleElement = this.styleElement = document.createElement("style");
- styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
- document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
- }
-
- const styleSheet = styleElement.sheet;
- styleSheet.insertRule(rule, styleSheet.cssRules.length);
- }
-
- clear() {
- this.nativeFontFaces.forEach(function (nativeFontFace) {
- document.fonts.delete(nativeFontFace);
- });
- this.nativeFontFaces.length = 0;
-
- if (this.styleElement) {
- this.styleElement.remove();
- this.styleElement = null;
- }
- }
-
- async bind(font) {
- if (font.attached || font.missingFile) {
- return;
- }
-
- font.attached = true;
-
- if (this.isFontLoadingAPISupported) {
- const nativeFontFace = font.createNativeFontFace();
-
- if (nativeFontFace) {
- this.addNativeFontFace(nativeFontFace);
-
- try {
- await nativeFontFace.loaded;
- } catch (ex) {
- this._onUnsupportedFeature({
- featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
- });
-
- (0, _util.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([rule], [font], request);
- });
- }
- }
-
- _queueLoadingCallback(callback) {
- (0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
- }
-
- get isFontLoadingAPISupported() {
- const supported = typeof document !== "undefined" && !!document.fonts;
- return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported);
- }
-
- get isSyncFontLoadingSupported() {
- (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
- }
-
- get _loadTestFont() {
- (0, _util.unreachable)("Abstract method `_loadTestFont`.");
- }
-
- _prepareFontLoadEvent(rules, fontsToLoad, request) {
- (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
- }
-
-}
-
-let FontLoader;
-exports.FontLoader = FontLoader;
-{
- exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader {
- constructor(docId) {
- super(docId);
- this.loadingContext = {
- requests: [],
- nextRequestId: 0
- };
- this.loadTestFontId = 0;
- }
-
- get isSyncFontLoadingSupported() {
- let supported = false;
-
- if (typeof navigator === "undefined") {
- supported = true;
- } else {
- const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
-
- if (m && m[1] >= 14) {
- supported = true;
- }
- }
-
- return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
- }
-
- _queueLoadingCallback(callback) {
- function completeRequest() {
- (0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
- request.done = true;
-
- while (context.requests.length > 0 && context.requests[0].done) {
- const otherRequest = context.requests.shift();
- setTimeout(otherRequest.callback, 0);
- }
- }
-
- const context = this.loadingContext;
- const request = {
- id: `pdfjs-font-loading-${context.nextRequestId++}`,
- done: false,
- complete: completeRequest,
- callback
- };
- context.requests.push(request);
- return request;
- }
-
- get _loadTestFont() {
- const getLoadTestFont = function () {
- return 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, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
- }
-
- _prepareFontLoadEvent(rules, fonts, 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 = document.createElement("canvas");
- canvas.width = 1;
- canvas.height = 1;
- const ctx = canvas.getContext("2d");
- let called = 0;
-
- function isFontReady(name, callback) {
- called++;
-
- if (called > 30) {
- (0, _util.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, _util.string32)(checksum));
- const url = `url(data:font/opentype;base64,${btoa(data)});`;
- const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
- this.insertRule(rule);
- const names = [];
-
- for (i = 0, ii = fonts.length; i < ii; i++) {
- names.push(fonts[i].loadedName);
- }
-
- names.push(loadTestFontId);
- const div = 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 (i = 0, ii = names.length; i < ii; ++i) {
- const span = document.createElement("span");
- span.textContent = "Hi";
- span.style.fontFamily = names[i];
- div.appendChild(span);
- }
-
- document.body.appendChild(div);
- isFontReady(loadTestFontId, function () {
- document.body.removeChild(div);
- request.complete();
- });
- }
-
- };
-}
-
-class FontFaceObject {
- constructor(translatedData, {
- isEvalSupported = true,
- disableFontFace = false,
- ignoreErrors = false,
- onUnsupportedFeature = null,
- fontRegistry = 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._onUnsupportedFeature = onUnsupportedFeature;
- this.fontRegistry = fontRegistry;
- }
-
- createNativeFontFace() {
- if (!this.data || this.disableFontFace) {
- return null;
- }
-
- const nativeFontFace = new FontFace(this.loadedName, this.data, {});
-
- if (this.fontRegistry) {
- this.fontRegistry.registerFont(this);
- }
-
- return nativeFontFace;
- }
-
- createFontFaceRule() {
- if (!this.data || this.disableFontFace) {
- return null;
- }
-
- const data = (0, _util.bytesToString)(new Uint8Array(this.data));
- const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
- const rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
-
- if (this.fontRegistry) {
- this.fontRegistry.registerFont(this, url);
- }
-
- return rule;
- }
-
- getPathGenerator(objs, character) {
- if (this.compiledGlyphs[character] !== undefined) {
- return this.compiledGlyphs[character];
- }
-
- let cmds, current;
-
- try {
- cmds = objs.get(this.loadedName + "_path_" + character);
- } catch (ex) {
- if (!this.ignoreErrors) {
- throw ex;
- }
-
- if (this._onUnsupportedFeature) {
- this._onUnsupportedFeature({
- featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
- });
- }
-
- (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
- return this.compiledGlyphs[character] = function (c, size) {};
- }
-
- if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
- let args,
- js = "";
-
- for (let i = 0, ii = cmds.length; i < ii; i++) {
- current = cmds[i];
-
- if (current.args !== undefined) {
- args = current.args.join(",");
- } else {
- args = "";
- }
-
- js += "c." + current.cmd + "(" + args + ");\n";
- }
-
- return this.compiledGlyphs[character] = new Function("c", "size", js);
- }
-
- return this.compiledGlyphs[character] = function (c, size) {
- for (let i = 0, ii = cmds.length; i < ii; i++) {
- current = cmds[i];
-
- if (current.cmd === "scale") {
- current.args = [size, -size];
- }
-
- c[current.cmd].apply(c, current.args);
- }
- };
- }
-
-}
-
-exports.FontFaceObject = FontFaceObject;
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.apiCompatibilityParams = void 0;
-
-var _is_node = __w_pdfjs_require__(4);
-
-const compatibilityParams = Object.create(null);
-{
- (function checkFontFace() {
- if (_is_node.isNodeJS) {
- compatibilityParams.disableFontFace = true;
- }
- })();
-}
-const apiCompatibilityParams = Object.freeze(compatibilityParams);
-exports.apiCompatibilityParams = apiCompatibilityParams;
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CanvasGraphics = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _pattern_helper = __w_pdfjs_require__(9);
-
-var MIN_FONT_SIZE = 16;
-var MAX_FONT_SIZE = 100;
-var MAX_GROUP_SIZE = 4096;
-var MIN_WIDTH_FACTOR = 0.65;
-var COMPILE_TYPE3_GLYPHS = true;
-var MAX_SIZE_TO_COMPILE = 1000;
-var FULL_CHUNK_HEIGHT = 16;
-
-function addContextCurrentTransform(ctx) {
- if (!ctx.mozCurrentTransform) {
- 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._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
- ctx._transformStack = [];
- Object.defineProperty(ctx, "mozCurrentTransform", {
- get: function getCurrentTransform() {
- return this._transformMatrix;
- }
- });
- Object.defineProperty(ctx, "mozCurrentTransformInverse", {
- get: function getCurrentTransformInverse() {
- var m = this._transformMatrix;
- var a = m[0],
- b = m[1],
- c = m[2],
- d = m[3],
- e = m[4],
- f = m[5];
- var ad_bc = a * d - b * c;
- var bc_ad = b * c - a * d;
- return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];
- }
- });
-
- ctx.save = function ctxSave() {
- var old = this._transformMatrix;
-
- this._transformStack.push(old);
-
- this._transformMatrix = old.slice(0, 6);
-
- this._originalSave();
- };
-
- ctx.restore = function ctxRestore() {
- var prev = this._transformStack.pop();
-
- if (prev) {
- this._transformMatrix = prev;
-
- this._originalRestore();
- }
- };
-
- ctx.translate = function ctxTranslate(x, y) {
- var m = this._transformMatrix;
- m[4] = m[0] * x + m[2] * y + m[4];
- m[5] = m[1] * x + m[3] * y + m[5];
-
- this._originalTranslate(x, y);
- };
-
- ctx.scale = function ctxScale(x, y) {
- var m = this._transformMatrix;
- m[0] = m[0] * x;
- m[1] = m[1] * x;
- m[2] = m[2] * y;
- m[3] = m[3] * y;
-
- this._originalScale(x, y);
- };
-
- ctx.transform = function ctxTransform(a, b, c, d, e, f) {
- var m = this._transformMatrix;
- this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];
-
- ctx._originalTransform(a, b, c, d, e, f);
- };
-
- ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
- this._transformMatrix = [a, b, c, d, e, f];
-
- ctx._originalSetTransform(a, b, c, d, e, f);
- };
-
- ctx.rotate = function ctxRotate(angle) {
- var cosValue = Math.cos(angle);
- var sinValue = Math.sin(angle);
- var m = this._transformMatrix;
- this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];
-
- this._originalRotate(angle);
- };
- }
-}
-
-var CachedCanvases = function CachedCanvasesClosure() {
- function CachedCanvases(canvasFactory) {
- this.canvasFactory = canvasFactory;
- this.cache = Object.create(null);
- }
-
- CachedCanvases.prototype = {
- getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) {
- var canvasEntry;
-
- if (this.cache[id] !== undefined) {
- canvasEntry = this.cache[id];
- this.canvasFactory.reset(canvasEntry, width, height);
- canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
- } else {
- canvasEntry = this.canvasFactory.create(width, height);
- this.cache[id] = canvasEntry;
- }
-
- if (trackTransform) {
- addContextCurrentTransform(canvasEntry.context);
- }
-
- return canvasEntry;
- },
-
- clear() {
- for (var id in this.cache) {
- var canvasEntry = this.cache[id];
- this.canvasFactory.destroy(canvasEntry);
- delete this.cache[id];
- }
- }
-
- };
- return CachedCanvases;
-}();
-
-function compileType3Glyph(imgData) {
- var POINT_TO_PROCESS_LIMIT = 1000;
- var width = imgData.width,
- height = imgData.height;
- var i,
- j,
- j0,
- width1 = width + 1;
- var points = new Uint8Array(width1 * (height + 1));
- var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
- var lineSize = width + 7 & ~7,
- data0 = imgData.data;
- var data = new Uint8Array(lineSize * height),
- pos = 0,
- ii;
-
- for (i = 0, ii = data0.length; i < ii; i++) {
- var mask = 128,
- elem = data0[i];
-
- while (mask > 0) {
- data[pos++] = elem & mask ? 0 : 255;
- mask >>= 1;
- }
- }
-
- var 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;
- }
-
- var 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;
- }
-
- var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
- var outlines = [];
-
- for (i = 0; count && i <= height; i++) {
- var p = i * width1;
- var end = p + width;
-
- while (p < end && !points[p]) {
- p++;
- }
-
- if (p === end) {
- continue;
- }
-
- var coords = [p % width1, i];
- var type = points[p],
- p0 = p,
- pp;
-
- do {
- var step = steps[type];
-
- do {
- p += step;
- } while (!points[p]);
-
- 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;
- }
-
- coords.push(p % width1);
- coords.push(p / width1 | 0);
-
- if (!points[p]) {
- --count;
- }
- } while (p0 !== p);
-
- outlines.push(coords);
- --i;
- }
-
- var drawOutline = function (c) {
- c.save();
- c.scale(1 / width, -1 / height);
- c.translate(0, -height);
- c.beginPath();
-
- for (let k = 0, kk = outlines.length; k < kk; k++) {
- var o = outlines[k];
- c.moveTo(o[0], o[1]);
-
- for (let l = 2, ll = o.length; l < ll; l += 2) {
- c.lineTo(o[l], o[l + 1]);
- }
- }
-
- c.fill();
- c.beginPath();
- c.restore();
- };
-
- return drawOutline;
-}
-
-var CanvasExtraState = function CanvasExtraStateClosure() {
- function CanvasExtraState() {
- 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.resumeSMaskCtx = null;
- }
-
- CanvasExtraState.prototype = {
- clone: function CanvasExtraState_clone() {
- return Object.create(this);
- },
- setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {
- this.x = x;
- this.y = y;
- }
- };
- return CanvasExtraState;
-}();
-
-var CanvasGraphics = function CanvasGraphicsClosure() {
- var EXECUTION_TIME = 15;
- var EXECUTION_STEPS = 10;
-
- function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer) {
- this.ctx = canvasCtx;
- this.current = new CanvasExtraState();
- this.stateStack = [];
- this.pendingClip = null;
- this.pendingEOFill = false;
- this.res = null;
- this.xobjs = null;
- this.commonObjs = commonObjs;
- this.objs = objs;
- this.canvasFactory = canvasFactory;
- this.webGLContext = webGLContext;
- this.imageLayer = imageLayer;
- this.groupStack = [];
- this.processingType3 = null;
- this.baseTransform = null;
- this.baseTransformStack = [];
- this.groupLevel = 0;
- this.smaskStack = [];
- this.smaskCounter = 0;
- this.tempSMask = null;
- this.cachedCanvases = new CachedCanvases(this.canvasFactory);
-
- if (canvasCtx) {
- addContextCurrentTransform(canvasCtx);
- }
-
- this._cachedGetSinglePixelWidth = null;
- }
-
- function putBinaryImageData(ctx, imgData) {
- if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
- ctx.putImageData(imgData, 0, 0);
- return;
- }
-
- var height = imgData.height,
- width = imgData.width;
- var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
- var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
- var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
- var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
- var srcPos = 0,
- destPos;
- var src = imgData.data;
- var dest = chunkImgData.data;
- var i, j, thisChunkHeight, elemsInThisChunk;
-
- if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
- var srcLength = src.byteLength;
- var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
- var dest32DataLength = dest32.length;
- var fullSrcDiff = width + 7 >> 3;
- var white = 0xffffffff;
- var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;
-
- for (i = 0; i < totalChunks; i++) {
- thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
- destPos = 0;
-
- for (j = 0; j < thisChunkHeight; j++) {
- var srcDiff = srcLength - srcPos;
- var k = 0;
- var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
- var kEndUnrolled = kEnd & ~7;
- var mask = 0;
- var 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) {
- var height = imgData.height,
- width = imgData.width;
- var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
- var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
- var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
- var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
- var srcPos = 0;
- var src = imgData.data;
- var dest = chunkImgData.data;
-
- for (var i = 0; i < totalChunks; i++) {
- var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
- var destPos = 3;
-
- for (var j = 0; j < thisChunkHeight; j++) {
- var mask = 0;
-
- for (var k = 0; k < width; k++) {
- if (!mask) {
- var elem = src[srcPos++];
- mask = 128;
- }
-
- dest[destPos] = elem & mask ? 0 : 255;
- destPos += 4;
- mask >>= 1;
- }
- }
-
- ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
- }
- }
-
- function copyCtxState(sourceCtx, destCtx) {
- var properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"];
-
- for (var i = 0, ii = properties.length; i < ii; i++) {
- var property = properties[i];
-
- 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 = "#000000";
- 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;
- }
- }
-
- function composeSMaskBackdrop(bytes, r0, g0, b0) {
- var length = bytes.length;
-
- for (var i = 3; i < length; i += 4) {
- var alpha = bytes[i];
-
- if (alpha === 0) {
- bytes[i - 3] = r0;
- bytes[i - 2] = g0;
- bytes[i - 1] = b0;
- } else if (alpha < 255) {
- var 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) {
- var length = maskData.length;
- var scale = 1 / 255;
-
- for (var i = 3; i < length; i += 4) {
- var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
- layerData[i] = layerData[i] * alpha * scale | 0;
- }
- }
-
- function composeSMaskLuminosity(maskData, layerData, transferMap) {
- var length = maskData.length;
-
- for (var i = 3; i < length; i += 4) {
- var 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) {
- var hasBackdrop = !!backdrop;
- var r0 = hasBackdrop ? backdrop[0] : 0;
- var g0 = hasBackdrop ? backdrop[1] : 0;
- var b0 = hasBackdrop ? backdrop[2] : 0;
- var composeFn;
-
- if (subtype === "Luminosity") {
- composeFn = composeSMaskLuminosity;
- } else {
- composeFn = composeSMaskAlpha;
- }
-
- var PIXELS_TO_PROCESS = 1048576;
- var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
-
- for (var row = 0; row < height; row += chunkSize) {
- var chunkHeight = Math.min(chunkSize, height - row);
- var maskData = maskCtx.getImageData(0, row, width, chunkHeight);
- var layerData = layerCtx.getImageData(0, row, width, chunkHeight);
-
- if (hasBackdrop) {
- composeSMaskBackdrop(maskData.data, r0, g0, b0);
- }
-
- composeFn(maskData.data, layerData.data, transferMap);
- maskCtx.putImageData(layerData, 0, row);
- }
- }
-
- function composeSMask(ctx, smask, layerCtx, webGLContext) {
- var mask = smask.canvas;
- var maskCtx = smask.context;
- ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY);
- var backdrop = smask.backdrop || null;
-
- if (!smask.transferMap && webGLContext.isEnabled) {
- const composed = webGLContext.composeSMask({
- layer: layerCtx.canvas,
- mask,
- properties: {
- subtype: smask.subtype,
- backdrop
- }
- });
- ctx.setTransform(1, 0, 0, 1, 0, 0);
- ctx.drawImage(composed, smask.offsetX, smask.offsetY);
- return;
- }
-
- genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap);
- ctx.drawImage(mask, 0, 0);
- }
-
- var LINE_CAP_STYLES = ["butt", "round", "square"];
- var LINE_JOIN_STYLES = ["miter", "round", "bevel"];
- var NORMAL_CLIP = {};
- var EO_CLIP = {};
- CanvasGraphics.prototype = {
- beginDrawing({
- transform,
- viewport,
- transparency = false,
- background = null
- }) {
- var width = this.ctx.canvas.width;
- var height = this.ctx.canvas.height;
- this.ctx.save();
- this.ctx.fillStyle = background || "rgb(255, 255, 255)";
- this.ctx.fillRect(0, 0, width, height);
- this.ctx.restore();
-
- if (transparency) {
- var transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true);
- this.compositeCtx = this.ctx;
- this.transparentCanvas = transparentCanvas.canvas;
- this.ctx = transparentCanvas.context;
- this.ctx.save();
- this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);
- }
-
- this.ctx.save();
- resetCtxToDefault(this.ctx);
-
- if (transform) {
- this.ctx.transform.apply(this.ctx, transform);
- }
-
- this.ctx.transform.apply(this.ctx, viewport.transform);
- this.baseTransform = this.ctx.mozCurrentTransform.slice();
-
- if (this.imageLayer) {
- this.imageLayer.beginLayout();
- }
- },
-
- executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
- var argsArray = operatorList.argsArray;
- var fnArray = operatorList.fnArray;
- var i = executionStartIdx || 0;
- var argsArrayLen = argsArray.length;
-
- if (argsArrayLen === i) {
- return i;
- }
-
- var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
- var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
- var steps = 0;
- var commonObjs = this.commonObjs;
- var objs = this.objs;
- var 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;
- }
- }
- },
- endDrawing: function CanvasGraphics_endDrawing() {
- if (this.current.activeSMask !== null) {
- this.endSMaskGroup();
- }
-
- 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;
- }
-
- this.cachedCanvases.clear();
- this.webGLContext.clear();
-
- if (this.imageLayer) {
- this.imageLayer.endLayout();
- }
- },
- setLineWidth: function CanvasGraphics_setLineWidth(width) {
- this.current.lineWidth = width;
- this.ctx.lineWidth = width;
- },
- setLineCap: function CanvasGraphics_setLineCap(style) {
- this.ctx.lineCap = LINE_CAP_STYLES[style];
- },
- setLineJoin: function CanvasGraphics_setLineJoin(style) {
- this.ctx.lineJoin = LINE_JOIN_STYLES[style];
- },
- setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {
- this.ctx.miterLimit = limit;
- },
- setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
- var ctx = this.ctx;
-
- if (ctx.setLineDash !== undefined) {
- ctx.setLineDash(dashArray);
- ctx.lineDashOffset = dashPhase;
- }
- },
-
- setRenderingIntent(intent) {},
-
- setFlatness(flatness) {},
-
- setGState: function CanvasGraphics_setGState(states) {
- for (var i = 0, ii = states.length; i < ii; i++) {
- var state = states[i];
- var key = state[0];
- var value = state[1];
-
- 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 = state[1];
- break;
-
- case "ca":
- this.current.fillAlpha = state[1];
- this.ctx.globalAlpha = state[1];
- break;
-
- case "BM":
- this.ctx.globalCompositeOperation = value;
- break;
-
- case "SMask":
- if (this.current.activeSMask) {
- if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) {
- this.suspendSMaskGroup();
- } else {
- this.endSMaskGroup();
- }
- }
-
- this.current.activeSMask = value ? this.tempSMask : null;
-
- if (this.current.activeSMask) {
- this.beginSMaskGroup();
- }
-
- this.tempSMask = null;
- break;
- }
- }
- },
- beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {
- var activeSMask = this.current.activeSMask;
- var drawnWidth = activeSMask.canvas.width;
- var drawnHeight = activeSMask.canvas.height;
- var cacheId = "smaskGroupAt" + this.groupLevel;
- var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
- var currentCtx = this.ctx;
- var currentTransform = currentCtx.mozCurrentTransform;
- this.ctx.save();
- var groupCtx = scratchCanvas.context;
- groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);
- groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);
- groupCtx.transform.apply(groupCtx, currentTransform);
- activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse;
- copyCtxState(currentCtx, groupCtx);
- this.ctx = groupCtx;
- this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
- this.groupStack.push(currentCtx);
- this.groupLevel++;
- },
- suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {
- var groupCtx = this.ctx;
- this.groupLevel--;
- this.ctx = this.groupStack.pop();
- composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
- this.ctx.restore();
- this.ctx.save();
- copyCtxState(groupCtx, this.ctx);
- this.current.resumeSMaskCtx = groupCtx;
-
- var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);
-
- this.ctx.transform.apply(this.ctx, deltaTransform);
- groupCtx.save();
- groupCtx.setTransform(1, 0, 0, 1, 0, 0);
- groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);
- groupCtx.restore();
- },
- resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() {
- var groupCtx = this.current.resumeSMaskCtx;
- var currentCtx = this.ctx;
- this.ctx = groupCtx;
- this.groupStack.push(currentCtx);
- this.groupLevel++;
- },
- endSMaskGroup: function CanvasGraphics_endSMaskGroup() {
- var groupCtx = this.ctx;
- this.groupLevel--;
- this.ctx = this.groupStack.pop();
- composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
- this.ctx.restore();
- copyCtxState(groupCtx, this.ctx);
-
- var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);
-
- this.ctx.transform.apply(this.ctx, deltaTransform);
- },
- save: function CanvasGraphics_save() {
- this.ctx.save();
- var old = this.current;
- this.stateStack.push(old);
- this.current = old.clone();
- this.current.resumeSMaskCtx = null;
- },
- restore: function CanvasGraphics_restore() {
- if (this.current.resumeSMaskCtx) {
- this.resumeSMaskGroup();
- }
-
- if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) {
- this.endSMaskGroup();
- }
-
- if (this.stateStack.length !== 0) {
- this.current = this.stateStack.pop();
- this.ctx.restore();
- this.pendingClip = null;
- this._cachedGetSinglePixelWidth = null;
- }
- },
- transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
- this.ctx.transform(a, b, c, d, e, f);
- this._cachedGetSinglePixelWidth = null;
- },
- constructPath: function CanvasGraphics_constructPath(ops, args) {
- var ctx = this.ctx;
- var current = this.current;
- var x = current.x,
- y = current.y;
-
- for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
- switch (ops[i] | 0) {
- case _util.OPS.rectangle:
- x = args[j++];
- y = args[j++];
- var width = args[j++];
- var height = args[j++];
-
- if (width === 0) {
- width = this.getSinglePixelWidth();
- }
-
- if (height === 0) {
- height = this.getSinglePixelWidth();
- }
-
- var xw = x + width;
- var yh = y + height;
- this.ctx.moveTo(x, y);
- this.ctx.lineTo(xw, y);
- this.ctx.lineTo(xw, yh);
- this.ctx.lineTo(x, yh);
- this.ctx.lineTo(x, y);
- this.ctx.closePath();
- break;
-
- case _util.OPS.moveTo:
- x = args[j++];
- y = args[j++];
- ctx.moveTo(x, y);
- break;
-
- case _util.OPS.lineTo:
- x = args[j++];
- y = args[j++];
- ctx.lineTo(x, y);
- break;
-
- case _util.OPS.curveTo:
- x = args[j + 4];
- y = args[j + 5];
- ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
- j += 6;
- break;
-
- case _util.OPS.curveTo2:
- ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
- x = args[j + 2];
- y = args[j + 3];
- j += 4;
- break;
-
- case _util.OPS.curveTo3:
- x = args[j + 2];
- y = args[j + 3];
- ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
- j += 4;
- break;
-
- case _util.OPS.closePath:
- ctx.closePath();
- break;
- }
- }
-
- current.setCurrentPoint(x, y);
- },
- closePath: function CanvasGraphics_closePath() {
- this.ctx.closePath();
- },
- stroke: function CanvasGraphics_stroke(consumePath) {
- consumePath = typeof consumePath !== "undefined" ? consumePath : true;
- var ctx = this.ctx;
- var strokeColor = this.current.strokeColor;
- ctx.globalAlpha = this.current.strokeAlpha;
-
- if (strokeColor && strokeColor.hasOwnProperty("type") && strokeColor.type === "Pattern") {
- ctx.save();
- const transform = ctx.mozCurrentTransform;
-
- const scale = _util.Util.singularValueDecompose2dScale(transform)[0];
-
- ctx.strokeStyle = strokeColor.getPattern(ctx, this);
- ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth * scale);
- ctx.stroke();
- ctx.restore();
- } else {
- ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth);
- ctx.stroke();
- }
-
- if (consumePath) {
- this.consumePath();
- }
-
- ctx.globalAlpha = this.current.fillAlpha;
- },
- closeStroke: function CanvasGraphics_closeStroke() {
- this.closePath();
- this.stroke();
- },
- fill: function CanvasGraphics_fill(consumePath) {
- consumePath = typeof consumePath !== "undefined" ? consumePath : true;
- var ctx = this.ctx;
- var fillColor = this.current.fillColor;
- var isPatternFill = this.current.patternFill;
- var needRestore = false;
-
- if (isPatternFill) {
- ctx.save();
-
- if (this.baseTransform) {
- ctx.setTransform.apply(ctx, this.baseTransform);
- }
-
- ctx.fillStyle = fillColor.getPattern(ctx, this);
- needRestore = true;
- }
-
- if (this.pendingEOFill) {
- ctx.fill("evenodd");
- this.pendingEOFill = false;
- } else {
- ctx.fill();
- }
-
- if (needRestore) {
- ctx.restore();
- }
-
- if (consumePath) {
- this.consumePath();
- }
- },
- eoFill: function CanvasGraphics_eoFill() {
- this.pendingEOFill = true;
- this.fill();
- },
- fillStroke: function CanvasGraphics_fillStroke() {
- this.fill(false);
- this.stroke(false);
- this.consumePath();
- },
- eoFillStroke: function CanvasGraphics_eoFillStroke() {
- this.pendingEOFill = true;
- this.fillStroke();
- },
- closeFillStroke: function CanvasGraphics_closeFillStroke() {
- this.closePath();
- this.fillStroke();
- },
- closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {
- this.pendingEOFill = true;
- this.closePath();
- this.fillStroke();
- },
- endPath: function CanvasGraphics_endPath() {
- this.consumePath();
- },
- clip: function CanvasGraphics_clip() {
- this.pendingClip = NORMAL_CLIP;
- },
- eoClip: function CanvasGraphics_eoClip() {
- this.pendingClip = EO_CLIP;
- },
- beginText: function CanvasGraphics_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: function CanvasGraphics_endText() {
- var paths = this.pendingTextPaths;
- var ctx = this.ctx;
-
- if (paths === undefined) {
- ctx.beginPath();
- return;
- }
-
- ctx.save();
- ctx.beginPath();
-
- for (var i = 0; i < paths.length; i++) {
- var path = paths[i];
- ctx.setTransform.apply(ctx, path.transform);
- ctx.translate(path.x, path.y);
- path.addToPath(ctx, path.fontSize);
- }
-
- ctx.restore();
- ctx.clip();
- ctx.beginPath();
- delete this.pendingTextPaths;
- },
- setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {
- this.current.charSpacing = spacing;
- },
- setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {
- this.current.wordSpacing = spacing;
- },
- setHScale: function CanvasGraphics_setHScale(scale) {
- this.current.textHScale = scale / 100;
- },
- setLeading: function CanvasGraphics_setLeading(leading) {
- this.current.leading = -leading;
- },
- setFont: function CanvasGraphics_setFont(fontRefName, size) {
- var fontObj = this.commonObjs.get(fontRefName);
- var current = this.current;
-
- if (!fontObj) {
- throw new Error(`Can't find font for ${fontRefName}`);
- }
-
- current.fontMatrix = fontObj.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;
- }
-
- var name = fontObj.loadedName || "sans-serif";
- let bold = "normal";
-
- if (fontObj.black) {
- bold = "900";
- } else if (fontObj.bold) {
- bold = "bold";
- }
-
- var italic = fontObj.italic ? "italic" : "normal";
- var typeface = `"${name}", ${fontObj.fallbackName}`;
- 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: function CanvasGraphics_setTextRenderingMode(mode) {
- this.current.textRenderingMode = mode;
- },
- setTextRise: function CanvasGraphics_setTextRise(rise) {
- this.current.textRise = rise;
- },
- moveText: function CanvasGraphics_moveText(x, y) {
- this.current.x = this.current.lineX += x;
- this.current.y = this.current.lineY += y;
- },
- setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {
- this.setLeading(-y);
- this.moveText(x, y);
- },
- setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {
- this.current.textMatrix = [a, b, c, d, e, f];
- this.current.textMatrixScale = Math.sqrt(a * a + b * b);
- this.current.x = this.current.lineX = 0;
- this.current.y = this.current.lineY = 0;
- },
- nextLine: function CanvasGraphics_nextLine() {
- this.moveText(0, this.current.leading);
- },
-
- paintChar(character, x, y, patternTransform) {
- var ctx = this.ctx;
- var current = this.current;
- var font = current.font;
- var textRenderingMode = current.textRenderingMode;
- var fontSize = current.fontSize / current.fontSizeScale;
- var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
- var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
- const patternFill = current.patternFill && !font.missingFile;
- var 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.apply(ctx, 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) {
- var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
- paths.push({
- transform: ctx.mozCurrentTransform,
- 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);
- var data = ctx.getImageData(0, 0, 10, 10).data;
- var enabled = false;
-
- for (var 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: function CanvasGraphics_showText(glyphs) {
- var current = this.current;
- var font = current.font;
-
- if (font.isType3Font) {
- return this.showType3Text(glyphs);
- }
-
- var fontSize = current.fontSize;
-
- if (fontSize === 0) {
- return undefined;
- }
-
- var ctx = this.ctx;
- var fontSizeScale = current.fontSizeScale;
- var charSpacing = current.charSpacing;
- var wordSpacing = current.wordSpacing;
- var fontDirection = current.fontDirection;
- var textHScale = current.textHScale * fontDirection;
- var glyphsLength = glyphs.length;
- var vertical = font.vertical;
- var spacingDir = vertical ? 1 : -1;
- var defaultVMetrics = font.defaultVMetrics;
- var widthAdvanceScale = fontSize * current.fontMatrix[0];
- var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
- ctx.save();
- let patternTransform;
-
- if (current.patternFill) {
- ctx.save();
- const pattern = current.fillColor.getPattern(ctx, this);
- patternTransform = ctx.mozCurrentTransform;
- ctx.restore();
- ctx.fillStyle = pattern;
- }
-
- ctx.transform.apply(ctx, current.textMatrix);
- ctx.translate(current.x, current.y + current.textRise);
-
- if (fontDirection > 0) {
- ctx.scale(textHScale, -1);
- } else {
- ctx.scale(textHScale, 1);
- }
-
- var lineWidth = current.lineWidth;
- var scale = current.textMatrixScale;
-
- if (scale === 0 || lineWidth === 0) {
- var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
-
- if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
- this._cachedGetSinglePixelWidth = null;
- lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;
- }
- } else {
- lineWidth /= scale;
- }
-
- if (fontSizeScale !== 1.0) {
- ctx.scale(fontSizeScale, fontSizeScale);
- lineWidth /= fontSizeScale;
- }
-
- ctx.lineWidth = lineWidth;
- var x = 0,
- i;
-
- for (i = 0; i < glyphsLength; ++i) {
- var glyph = glyphs[i];
-
- if ((0, _util.isNum)(glyph)) {
- x += spacingDir * glyph * fontSize / 1000;
- continue;
- }
-
- var restoreNeeded = false;
- var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
- var character = glyph.fontChar;
- var accent = glyph.accent;
- var scaledX, scaledY, scaledAccentX, scaledAccentY;
- var width = glyph.width;
-
- if (vertical) {
- var vmetric, vx, vy;
- vmetric = glyph.vmetric || defaultVMetrics;
- vx = glyph.vmetric ? vmetric[1] : width * 0.5;
- vx = -vx * widthAdvanceScale;
- 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) {
- var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
-
- if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
- var characterScaleX = width / measuredWidth;
- restoreNeeded = true;
- ctx.save();
- ctx.scale(characterScaleX, 1);
- scaledX /= characterScaleX;
- } else if (width !== measuredWidth) {
- scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
- }
- }
-
- if (glyph.isInFont || font.missingFile) {
- if (simpleFillText && !accent) {
- ctx.fillText(character, scaledX, scaledY);
- } else {
- this.paintChar(character, scaledX, scaledY, patternTransform);
-
- if (accent) {
- scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
- scaledAccentY = scaledY - accent.offset.y / fontSizeScale;
- this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
- }
- }
- }
-
- var charWidth;
-
- if (vertical) {
- charWidth = width * widthAdvanceScale - spacing * fontDirection;
- } else {
- charWidth = width * widthAdvanceScale + spacing * fontDirection;
- }
-
- x += charWidth;
-
- if (restoreNeeded) {
- ctx.restore();
- }
- }
-
- if (vertical) {
- current.y -= x;
- } else {
- current.x += x * textHScale;
- }
-
- ctx.restore();
- },
- showType3Text: function CanvasGraphics_showType3Text(glyphs) {
- var ctx = this.ctx;
- var current = this.current;
- var font = current.font;
- var fontSize = current.fontSize;
- var fontDirection = current.fontDirection;
- var spacingDir = font.vertical ? 1 : -1;
- var charSpacing = current.charSpacing;
- var wordSpacing = current.wordSpacing;
- var textHScale = current.textHScale * fontDirection;
- var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
- var glyphsLength = glyphs.length;
- var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
- var i, glyph, width, spacingLength;
-
- if (isTextInvisible || fontSize === 0) {
- return;
- }
-
- this._cachedGetSinglePixelWidth = null;
- ctx.save();
- ctx.transform.apply(ctx, current.textMatrix);
- ctx.translate(current.x, current.y);
- ctx.scale(textHScale, fontDirection);
-
- for (i = 0; i < glyphsLength; ++i) {
- glyph = glyphs[i];
-
- if ((0, _util.isNum)(glyph)) {
- spacingLength = spacingDir * glyph * fontSize / 1000;
- this.ctx.translate(spacingLength, 0);
- current.x += spacingLength * textHScale;
- continue;
- }
-
- var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
- var operatorList = font.charProcOperatorList[glyph.operatorListId];
-
- if (!operatorList) {
- (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`);
- continue;
- }
-
- this.processingType3 = glyph;
- this.save();
- ctx.scale(fontSize, fontSize);
- ctx.transform.apply(ctx, fontMatrix);
- this.executeOperatorList(operatorList);
- this.restore();
-
- var 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: function CanvasGraphics_setCharWidth(xWidth, yWidth) {},
- setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
- this.ctx.rect(llx, lly, urx - llx, ury - lly);
- this.clip();
- this.endPath();
- },
- getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {
- var pattern;
-
- if (IR[0] === "TilingPattern") {
- var color = IR[1];
- var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
- var canvasGraphicsFactory = {
- createCanvasGraphics: ctx => {
- return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext);
- }
- };
- pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
- } else {
- pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR);
- }
-
- return pattern;
- },
- setStrokeColorN: function CanvasGraphics_setStrokeColorN() {
- this.current.strokeColor = this.getColorN_Pattern(arguments);
- },
- setFillColorN: function CanvasGraphics_setFillColorN() {
- this.current.fillColor = this.getColorN_Pattern(arguments);
- this.current.patternFill = true;
- },
- setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
- var color = _util.Util.makeCssRgb(r, g, b);
-
- this.ctx.strokeStyle = color;
- this.current.strokeColor = color;
- },
- setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
- var color = _util.Util.makeCssRgb(r, g, b);
-
- this.ctx.fillStyle = color;
- this.current.fillColor = color;
- this.current.patternFill = false;
- },
- shadingFill: function CanvasGraphics_shadingFill(patternIR) {
- var ctx = this.ctx;
- this.save();
- var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);
- ctx.fillStyle = pattern.getPattern(ctx, this, true);
- var inv = ctx.mozCurrentTransformInverse;
-
- if (inv) {
- var canvas = ctx.canvas;
- var width = canvas.width;
- var height = canvas.height;
-
- var bl = _util.Util.applyTransform([0, 0], inv);
-
- var br = _util.Util.applyTransform([0, height], inv);
-
- var ul = _util.Util.applyTransform([width, 0], inv);
-
- var ur = _util.Util.applyTransform([width, height], inv);
-
- var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
- var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
- var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
- var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
- this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
- } else {
- this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
- }
-
- this.restore();
- },
- beginInlineImage: function CanvasGraphics_beginInlineImage() {
- (0, _util.unreachable)("Should not call beginInlineImage");
- },
- beginImageData: function CanvasGraphics_beginImageData() {
- (0, _util.unreachable)("Should not call beginImageData");
- },
- paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) {
- this.save();
- this.baseTransformStack.push(this.baseTransform);
-
- if (Array.isArray(matrix) && matrix.length === 6) {
- this.transform.apply(this, matrix);
- }
-
- this.baseTransform = this.ctx.mozCurrentTransform;
-
- if (bbox) {
- var width = bbox[2] - bbox[0];
- var height = bbox[3] - bbox[1];
- this.ctx.rect(bbox[0], bbox[1], width, height);
- this.clip();
- this.endPath();
- }
- },
- paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {
- this.restore();
- this.baseTransform = this.baseTransformStack.pop();
- },
- beginGroup: function CanvasGraphics_beginGroup(group) {
- this.save();
- var currentCtx = this.ctx;
-
- if (!group.isolated) {
- (0, _util.info)("TODO: Support non-isolated groups.");
- }
-
- if (group.knockout) {
- (0, _util.warn)("Knockout groups not supported.");
- }
-
- var currentTransform = currentCtx.mozCurrentTransform;
-
- if (group.matrix) {
- currentCtx.transform.apply(currentCtx, group.matrix);
- }
-
- if (!group.bbox) {
- throw new Error("Bounding box is required.");
- }
-
- var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);
-
- var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
- bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
- var offsetX = Math.floor(bounds[0]);
- var offsetY = Math.floor(bounds[1]);
- var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
- var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
- var 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;
- }
-
- var cacheId = "groupAt" + this.groupLevel;
-
- if (group.smask) {
- cacheId += "_smask_" + this.smaskCounter++ % 2;
- }
-
- var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
- var groupCtx = scratchCanvas.context;
- groupCtx.scale(1 / scaleX, 1 / scaleY);
- groupCtx.translate(-offsetX, -offsetY);
- groupCtx.transform.apply(groupCtx, 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);
- }
-
- copyCtxState(currentCtx, groupCtx);
- this.ctx = groupCtx;
- this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
- this.groupStack.push(currentCtx);
- this.groupLevel++;
- this.current.activeSMask = null;
- },
- endGroup: function CanvasGraphics_endGroup(group) {
- this.groupLevel--;
- var groupCtx = this.ctx;
- this.ctx = this.groupStack.pop();
-
- if (this.ctx.imageSmoothingEnabled !== undefined) {
- this.ctx.imageSmoothingEnabled = false;
- } else {
- this.ctx.mozImageSmoothingEnabled = false;
- }
-
- if (group.smask) {
- this.tempSMask = this.smaskStack.pop();
- } else {
- this.ctx.drawImage(groupCtx.canvas, 0, 0);
- }
-
- this.restore();
- },
- beginAnnotations: function CanvasGraphics_beginAnnotations() {
- this.save();
-
- if (this.baseTransform) {
- this.ctx.setTransform.apply(this.ctx, this.baseTransform);
- }
- },
- endAnnotations: function CanvasGraphics_endAnnotations() {
- this.restore();
- },
- beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) {
- this.save();
- resetCtxToDefault(this.ctx);
- this.current = new CanvasExtraState();
-
- if (Array.isArray(rect) && rect.length === 4) {
- var width = rect[2] - rect[0];
- var height = rect[3] - rect[1];
- this.ctx.rect(rect[0], rect[1], width, height);
- this.clip();
- this.endPath();
- }
-
- this.transform.apply(this, transform);
- this.transform.apply(this, matrix);
- },
- endAnnotation: function CanvasGraphics_endAnnotation() {
- this.restore();
- },
- paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
- var ctx = this.ctx;
- var width = img.width,
- height = img.height;
- var fillColor = this.current.fillColor;
- var isPatternFill = this.current.patternFill;
- var glyph = this.processingType3;
-
- if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
- if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
- glyph.compiled = compileType3Glyph({
- data: img.data,
- width,
- height
- });
- } else {
- glyph.compiled = null;
- }
- }
-
- if (glyph && glyph.compiled) {
- glyph.compiled(ctx);
- return;
- }
-
- var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
- var maskCtx = maskCanvas.context;
- maskCtx.save();
- putBinaryImageMask(maskCtx, img);
- maskCtx.globalCompositeOperation = "source-in";
- maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
- maskCtx.fillRect(0, 0, width, height);
- maskCtx.restore();
- this.paintInlineImageXObject(maskCanvas.canvas);
- },
- paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) {
- var width = imgData.width;
- var height = imgData.height;
- var fillColor = this.current.fillColor;
- var isPatternFill = this.current.patternFill;
- var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
- var maskCtx = maskCanvas.context;
- maskCtx.save();
- putBinaryImageMask(maskCtx, imgData);
- maskCtx.globalCompositeOperation = "source-in";
- maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
- maskCtx.fillRect(0, 0, width, height);
- maskCtx.restore();
- var ctx = this.ctx;
-
- for (var i = 0, ii = positions.length; i < ii; i += 2) {
- ctx.save();
- ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
- ctx.scale(1, -1);
- ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
- ctx.restore();
- }
- },
- paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) {
- var ctx = this.ctx;
- var fillColor = this.current.fillColor;
- var isPatternFill = this.current.patternFill;
-
- for (var i = 0, ii = images.length; i < ii; i++) {
- var image = images[i];
- var width = image.width,
- height = image.height;
- var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
- var maskCtx = maskCanvas.context;
- maskCtx.save();
- putBinaryImageMask(maskCtx, image);
- maskCtx.globalCompositeOperation = "source-in";
- maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
- maskCtx.fillRect(0, 0, width, height);
- maskCtx.restore();
- ctx.save();
- ctx.transform.apply(ctx, image.transform);
- ctx.scale(1, -1);
- ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
- ctx.restore();
- }
- },
- paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
- const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
-
- if (!imgData) {
- (0, _util.warn)("Dependent image isn't ready yet");
- return;
- }
-
- this.paintInlineImageXObject(imgData);
- },
- paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
- const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
-
- if (!imgData) {
- (0, _util.warn)("Dependent image isn't ready yet");
- return;
- }
-
- var width = imgData.width;
- var height = imgData.height;
- var map = [];
-
- for (var 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);
- },
- paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) {
- var width = imgData.width;
- var height = imgData.height;
- var ctx = this.ctx;
- this.save();
- ctx.scale(1 / width, -1 / height);
- var currentTransform = ctx.mozCurrentTransformInverse;
- var a = currentTransform[0],
- b = currentTransform[1];
- var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);
- var c = currentTransform[2],
- d = currentTransform[3];
- var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);
- var imgToPaint, tmpCanvas;
-
- if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
- imgToPaint = imgData;
- } else {
- tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
- var tmpCtx = tmpCanvas.context;
- putBinaryImageData(tmpCtx, imgData);
- imgToPaint = tmpCanvas.canvas;
- }
-
- var paintWidth = width,
- paintHeight = height;
- var tmpCanvasId = "prescale1";
-
- while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
- var newWidth = paintWidth,
- newHeight = paintHeight;
-
- if (widthScale > 2 && paintWidth > 1) {
- newWidth = Math.ceil(paintWidth / 2);
- widthScale /= paintWidth / newWidth;
- }
-
- if (heightScale > 2 && paintHeight > 1) {
- newHeight = 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(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
- imgToPaint = tmpCanvas.canvas;
- paintWidth = newWidth;
- paintHeight = newHeight;
- tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
- }
-
- ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height);
-
- if (this.imageLayer) {
- var position = this.getCanvasPosition(0, -height);
- this.imageLayer.appendImage({
- imgData,
- left: position[0],
- top: position[1],
- width: width / currentTransform[0],
- height: height / currentTransform[3]
- });
- }
-
- this.restore();
- },
- paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {
- var ctx = this.ctx;
- var w = imgData.width;
- var h = imgData.height;
- var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
- var tmpCtx = tmpCanvas.context;
- putBinaryImageData(tmpCtx, imgData);
-
- for (var i = 0, ii = map.length; i < ii; i++) {
- var entry = map[i];
- ctx.save();
- ctx.transform.apply(ctx, entry.transform);
- ctx.scale(1, -1);
- ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
-
- if (this.imageLayer) {
- var position = this.getCanvasPosition(entry.x, entry.y);
- this.imageLayer.appendImage({
- imgData,
- left: position[0],
- top: position[1],
- width: w,
- height: h
- });
- }
-
- ctx.restore();
- }
- },
- paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() {
- this.ctx.fillRect(0, 0, 1, 1);
- },
- paintXObject: function CanvasGraphics_paintXObject() {
- (0, _util.warn)("Unsupported 'paintXObject' command.");
- },
- markPoint: function CanvasGraphics_markPoint(tag) {},
- markPointProps: function CanvasGraphics_markPointProps(tag, properties) {},
- beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {},
- beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {},
- endMarkedContent: function CanvasGraphics_endMarkedContent() {},
- beginCompat: function CanvasGraphics_beginCompat() {},
- endCompat: function CanvasGraphics_endCompat() {},
- consumePath: function CanvasGraphics_consumePath() {
- var ctx = this.ctx;
-
- if (this.pendingClip) {
- if (this.pendingClip === EO_CLIP) {
- ctx.clip("evenodd");
- } else {
- ctx.clip();
- }
-
- this.pendingClip = null;
- }
-
- ctx.beginPath();
- },
-
- getSinglePixelWidth(scale) {
- if (this._cachedGetSinglePixelWidth === null) {
- const inverse = this.ctx.mozCurrentTransformInverse;
- this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3]));
- }
-
- return this._cachedGetSinglePixelWidth;
- },
-
- getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {
- var transform = this.ctx.mozCurrentTransform;
- return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];
- }
- };
-
- for (var op in _util.OPS) {
- CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
- }
-
- return CanvasGraphics;
-}();
-
-exports.CanvasGraphics = CanvasGraphics;
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getShadingPatternFromIR = getShadingPatternFromIR;
-exports.TilingPattern = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var ShadingIRs = {};
-
-function applyBoundingBox(ctx, bbox) {
- if (!bbox || typeof Path2D === "undefined") {
- 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);
-}
-
-ShadingIRs.RadialAxial = {
- fromIR: function RadialAxial_fromIR(raw) {
- var type = raw[1];
- var bbox = raw[2];
- var colorStops = raw[3];
- var p0 = raw[4];
- var p1 = raw[5];
- var r0 = raw[6];
- var r1 = raw[7];
- return {
- type: "Pattern",
- getPattern: function RadialAxial_getPattern(ctx) {
- applyBoundingBox(ctx, bbox);
- var grad;
-
- if (type === "axial") {
- grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
- } else if (type === "radial") {
- grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
- }
-
- for (var i = 0, ii = colorStops.length; i < ii; ++i) {
- var c = colorStops[i];
- grad.addColorStop(c[0], c[1]);
- }
-
- return grad;
- }
- };
- }
-};
-
-var createMeshCanvas = function createMeshCanvasClosure() {
- function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
- var coords = context.coords,
- colors = context.colors;
- var bytes = data.data,
- rowSize = data.width * 4;
- var 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;
- }
-
- var x1 = (coords[p1] + context.offsetX) * context.scaleX;
- var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
- var x2 = (coords[p2] + context.offsetX) * context.scaleX;
- var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
- var x3 = (coords[p3] + context.offsetX) * context.scaleX;
- var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
-
- if (y1 >= y3) {
- return;
- }
-
- var c1r = colors[c1],
- c1g = colors[c1 + 1],
- c1b = colors[c1 + 2];
- var c2r = colors[c2],
- c2g = colors[c2 + 1],
- c2b = colors[c2 + 2];
- var c3r = colors[c3],
- c3g = colors[c3 + 1],
- c3b = colors[c3 + 2];
- var minY = Math.round(y1),
- maxY = Math.round(y3);
- var xa, car, cag, cab;
- var xb, cbr, cbg, cbb;
-
- for (var y = minY; y <= maxY; y++) {
- if (y < y2) {
- let k;
-
- if (y < y1) {
- k = 0;
- } else if (y1 === y2) {
- k = 1;
- } else {
- k = (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;
- var x1_ = Math.round(Math.min(xa, xb));
- var x2_ = Math.round(Math.max(xa, xb));
- var j = rowSize * y + x1_ * 4;
-
- for (var 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) {
- var ps = figure.coords;
- var cs = figure.colors;
- var i, ii;
-
- switch (figure.type) {
- case "lattice":
- var verticesPerRow = figure.verticesPerRow;
- var rows = Math.floor(ps.length / verticesPerRow) - 1;
- var cols = verticesPerRow - 1;
-
- for (i = 0; i < rows; i++) {
- var q = i * verticesPerRow;
-
- for (var 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");
- }
- }
-
- function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {
- var EXPECTED_SCALE = 1.1;
- var MAX_PATTERN_SIZE = 3000;
- var BORDER_SIZE = 2;
- var offsetX = Math.floor(bounds[0]);
- var offsetY = Math.floor(bounds[1]);
- var boundsWidth = Math.ceil(bounds[2]) - offsetX;
- var boundsHeight = Math.ceil(bounds[3]) - offsetY;
- var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
- var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
- var scaleX = boundsWidth / width;
- var scaleY = boundsHeight / height;
- var context = {
- coords,
- colors,
- offsetX: -offsetX,
- offsetY: -offsetY,
- scaleX: 1 / scaleX,
- scaleY: 1 / scaleY
- };
- var paddedWidth = width + BORDER_SIZE * 2;
- var paddedHeight = height + BORDER_SIZE * 2;
- var canvas, tmpCanvas, i, ii;
-
- if (webGLContext.isEnabled) {
- canvas = webGLContext.drawFigures({
- width,
- height,
- backgroundColor,
- figures,
- context
- });
- tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
- tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);
- canvas = tmpCanvas.canvas;
- } else {
- tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
- var tmpCtx = tmpCanvas.context;
- var data = tmpCtx.createImageData(width, height);
-
- if (backgroundColor) {
- var bytes = data.data;
-
- for (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 (i = 0; i < figures.length; i++) {
- drawFigure(data, figures[i], context);
- }
-
- tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
- canvas = tmpCanvas.canvas;
- }
-
- return {
- canvas,
- offsetX: offsetX - BORDER_SIZE * scaleX,
- offsetY: offsetY - BORDER_SIZE * scaleY,
- scaleX,
- scaleY
- };
- }
-
- return createMeshCanvas;
-}();
-
-ShadingIRs.Mesh = {
- fromIR: function Mesh_fromIR(raw) {
- var coords = raw[2];
- var colors = raw[3];
- var figures = raw[4];
- var bounds = raw[5];
- var matrix = raw[6];
- var bbox = raw[7];
- var background = raw[8];
- return {
- type: "Pattern",
- getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
- applyBoundingBox(ctx, bbox);
- var scale;
-
- if (shadingFill) {
- scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
- } else {
- scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
-
- if (matrix) {
- var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);
-
- scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
- }
- }
-
- var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);
-
- if (!shadingFill) {
- ctx.setTransform.apply(ctx, owner.baseTransform);
-
- if (matrix) {
- ctx.transform.apply(ctx, matrix);
- }
- }
-
- ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
- ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
- return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
- }
- };
- }
-};
-ShadingIRs.Dummy = {
- fromIR: function Dummy_fromIR() {
- return {
- type: "Pattern",
- getPattern: function Dummy_fromIR_getPattern() {
- return "hotpink";
- }
- };
- }
-};
-
-function getShadingPatternFromIR(raw) {
- var shadingIR = ShadingIRs[raw[0]];
-
- if (!shadingIR) {
- throw new Error(`Unknown IR type: ${raw[0]}`);
- }
-
- return shadingIR.fromIR(raw);
-}
-
-var TilingPattern = function TilingPatternClosure() {
- var PaintType = {
- COLORED: 1,
- UNCOLORED: 2
- };
- var MAX_PATTERN_SIZE = 3000;
-
- function TilingPattern(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.canvasGraphicsFactory = canvasGraphicsFactory;
- this.baseTransform = baseTransform;
- this.type = "Pattern";
- this.ctx = ctx;
- }
-
- TilingPattern.prototype = {
- createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
- var operatorList = this.operatorList;
- var bbox = this.bbox;
- var xstep = this.xstep;
- var ystep = this.ystep;
- var paintType = this.paintType;
- var tilingType = this.tilingType;
- var color = this.color;
- var canvasGraphicsFactory = this.canvasGraphicsFactory;
- (0, _util.info)("TilingType: " + tilingType);
- var x0 = bbox[0],
- y0 = bbox[1],
- x1 = bbox[2],
- y1 = bbox[3];
-
- var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
-
- var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
-
- var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
- var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
- var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
- var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
- var tmpCtx = tmpCanvas.context;
- var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
- graphics.groupLevel = owner.groupLevel;
- this.setFillAndStrokeStyleToContext(graphics, paintType, color);
- graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
- graphics.transform(1, 0, 0, 1, -x0, -y0);
- this.clipBbox(graphics, bbox, x0, y0, x1, y1);
- graphics.executeOperatorList(operatorList);
- this.ctx.transform(1, 0, 0, 1, x0, y0);
- this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);
- return tmpCanvas.canvas;
- },
- getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {
- step = Math.abs(step);
- var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);
- var size = Math.ceil(step * scale);
-
- if (size >= maxSize) {
- size = maxSize;
- } else {
- scale = size / step;
- }
-
- return {
- scale,
- size
- };
- },
- clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
- if (Array.isArray(bbox) && bbox.length === 4) {
- var bboxWidth = x1 - x0;
- var bboxHeight = y1 - y0;
- graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
- graphics.clip();
- graphics.endPath();
- }
- },
- setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {
- const context = graphics.ctx,
- current = graphics.current;
-
- switch (paintType) {
- case PaintType.COLORED:
- var ctx = this.ctx;
- context.fillStyle = ctx.fillStyle;
- context.strokeStyle = ctx.strokeStyle;
- current.fillColor = ctx.fillStyle;
- current.strokeColor = ctx.strokeStyle;
- break;
-
- case PaintType.UNCOLORED:
- var cssColor = _util.Util.makeCssRgb(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: function TilingPattern_getPattern(ctx, owner) {
- ctx = this.ctx;
- ctx.setTransform.apply(ctx, this.baseTransform);
- ctx.transform.apply(ctx, this.matrix);
- var temporaryPatternCanvas = this.createPatternCanvas(owner);
- return ctx.createPattern(temporaryPatternCanvas, "repeat");
- }
- };
- return TilingPattern;
-}();
-
-exports.TilingPattern = TilingPattern;
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.GlobalWorkerOptions = void 0;
-const GlobalWorkerOptions = Object.create(null);
-exports.GlobalWorkerOptions = GlobalWorkerOptions;
-GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;
-GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc;
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.MessageHandler = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-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 (typeof reason !== "object" || reason === null) {
- return reason;
- }
-
- switch (reason.name) {
- case "AbortException":
- return new _util.AbortException(reason.message);
-
- case "MissingPDFException":
- return new _util.MissingPDFException(reason.message);
-
- case "UnexpectedResponseException":
- return new _util.UnexpectedResponseException(reason.message, reason.status);
-
- case "UnknownErrorException":
- return new _util.UnknownErrorException(reason.message, reason.details);
-
- default:
- return new _util.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.postMessageTransfers = true;
- 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._postMessage({
- sourceName: this.sourceName,
- targetName: this.targetName,
- action: actionName,
- data
- }, transfers);
- }
-
- sendWithPromise(actionName, data, transfers) {
- const callbackId = this.callbackId++;
- const capability = (0, _util.createPromiseCapability)();
- this.callbackCapabilities[callbackId] = capability;
-
- try {
- this._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++;
- const sourceName = this.sourceName;
- const targetName = this.targetName;
- const comObj = this.comObj;
- return new ReadableStream({
- start: controller => {
- const startCapability = (0, _util.createPromiseCapability)();
- this.streamControllers[streamId] = {
- controller,
- startCall: startCapability,
- pullCall: null,
- cancelCall: null,
- isClosed: false
- };
-
- this._postMessage({
- sourceName,
- targetName,
- action: actionName,
- streamId,
- data,
- desiredSize: controller.desiredSize
- }, transfers);
-
- return startCapability.promise;
- },
- pull: controller => {
- const pullCapability = (0, _util.createPromiseCapability)();
- this.streamControllers[streamId].pullCall = pullCapability;
- comObj.postMessage({
- sourceName,
- targetName,
- stream: StreamKind.PULL,
- streamId,
- desiredSize: controller.desiredSize
- });
- return pullCapability.promise;
- },
- cancel: reason => {
- (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
- const cancelCapability = (0, _util.createPromiseCapability)();
- 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 self = this;
- const action = this.actionHandler[data.action];
- const streamId = data.streamId;
- const sourceName = this.sourceName;
- const targetName = data.sourceName;
- const comObj = this.comObj;
- 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 = (0, _util.createPromiseCapability)();
- this.ready = this.sinkCapability.promise;
- }
-
- self._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.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: (0, _util.createPromiseCapability)(),
- 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;
- const sourceName = this.sourceName;
- const targetName = data.sourceName;
- const comObj = this.comObj;
-
- switch (data.stream) {
- case StreamKind.START_COMPLETE:
- if (data.success) {
- this.streamControllers[streamId].startCall.resolve();
- } else {
- this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));
- }
-
- break;
-
- case StreamKind.PULL_COMPLETE:
- if (data.success) {
- this.streamControllers[streamId].pullCall.resolve();
- } else {
- this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));
- }
-
- break;
-
- case StreamKind.PULL:
- if (!this.streamSinks[streamId]) {
- comObj.postMessage({
- sourceName,
- targetName,
- stream: StreamKind.PULL_COMPLETE,
- streamId,
- success: true
- });
- break;
- }
-
- if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {
- this.streamSinks[streamId].sinkCapability.resolve();
- }
-
- this.streamSinks[streamId].desiredSize = data.desiredSize;
- const {
- onPull
- } = this.streamSinks[data.streamId];
- new Promise(function (resolve) {
- resolve(onPull && 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.assert)(this.streamControllers[streamId], "enqueue should have stream controller");
-
- if (this.streamControllers[streamId].isClosed) {
- break;
- }
-
- this.streamControllers[streamId].controller.enqueue(data.chunk);
- break;
-
- case StreamKind.CLOSE:
- (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller");
-
- if (this.streamControllers[streamId].isClosed) {
- break;
- }
-
- this.streamControllers[streamId].isClosed = true;
- this.streamControllers[streamId].controller.close();
-
- this._deleteStreamController(streamId);
-
- break;
-
- case StreamKind.ERROR:
- (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller");
- this.streamControllers[streamId].controller.error(wrapReason(data.reason));
-
- this._deleteStreamController(streamId);
-
- break;
-
- case StreamKind.CANCEL_COMPLETE:
- if (data.success) {
- this.streamControllers[streamId].cancelCall.resolve();
- } else {
- this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));
- }
-
- this._deleteStreamController(streamId);
-
- break;
-
- case StreamKind.CANCEL:
- if (!this.streamSinks[streamId]) {
- break;
- }
-
- const {
- onCancel
- } = this.streamSinks[data.streamId];
- new Promise(function (resolve) {
- resolve(onCancel && 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)
- });
- });
- this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));
- this.streamSinks[streamId].isCancelled = true;
- delete this.streamSinks[streamId];
- break;
-
- default:
- throw new Error("Unexpected stream case");
- }
- }
-
- async _deleteStreamController(streamId) {
- await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {
- return capability && capability.promise;
- }));
- delete this.streamControllers[streamId];
- }
-
- _postMessage(message, transfers) {
- if (transfers && this.postMessageTransfers) {
- this.comObj.postMessage(message, transfers);
- } else {
- this.comObj.postMessage(message);
- }
- }
-
- destroy() {
- this.comObj.removeEventListener("message", this._onComObjOnMessage);
- }
-
-}
-
-exports.MessageHandler = MessageHandler;
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Metadata = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _xml_parser = __w_pdfjs_require__(13);
-
-class Metadata {
- constructor(data) {
- (0, _util.assert)(typeof data === "string", "Metadata: input is not a string");
- data = this._repair(data);
- const parser = new _xml_parser.SimpleXMLParser();
- const xmlDocument = parser.parseFromString(data);
- this._metadataMap = new Map();
-
- if (xmlDocument) {
- this._parse(xmlDocument);
- }
- }
-
- _repair(data) {
- return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) {
- const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
- return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
- }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
- switch (name) {
- case "amp":
- return "&";
-
- case "apos":
- return "'";
-
- case "gt":
- return ">";
-
- case "lt":
- return "<";
-
- case "quot":
- return '"';
- }
-
- throw new Error(`_repair: ${name} isn't defined.`);
- });
- let chars = "";
-
- for (let i = 0, ii = bytes.length; i < ii; i += 2) {
- const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
-
- if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
- chars += String.fromCharCode(code);
- } else {
- chars += "" + (0x10000 + code).toString(16).substring(1) + ";";
- }
- }
-
- return ">" + chars;
- });
- }
-
- _parse(xmlDocument) {
- let rdf = xmlDocument.documentElement;
-
- if (rdf.nodeName.toLowerCase() !== "rdf:rdf") {
- rdf = rdf.firstChild;
-
- while (rdf && rdf.nodeName.toLowerCase() !== "rdf:rdf") {
- rdf = rdf.nextSibling;
- }
- }
-
- const nodeName = rdf ? rdf.nodeName.toLowerCase() : null;
-
- if (!rdf || nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) {
- return;
- }
-
- const children = rdf.childNodes;
-
- for (let i = 0, ii = children.length; i < ii; i++) {
- const desc = children[i];
-
- if (desc.nodeName.toLowerCase() !== "rdf:description") {
- continue;
- }
-
- for (let j = 0, jj = desc.childNodes.length; j < jj; j++) {
- if (desc.childNodes[j].nodeName.toLowerCase() !== "#text") {
- const entry = desc.childNodes[j];
- const name = entry.nodeName.toLowerCase();
-
- this._metadataMap.set(name, entry.textContent.trim());
- }
- }
- }
- }
-
- get(name) {
- return this._metadataMap.has(name) ? this._metadataMap.get(name) : null;
- }
-
- getAll() {
- const obj = Object.create(null);
-
- for (const [key, value] of this._metadataMap) {
- obj[key] = value;
- }
-
- return obj;
- }
-
- has(name) {
- return this._metadataMap.has(name);
- }
-
-}
-
-exports.Metadata = Metadata;
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.SimpleXMLParser = void 0;
-const XMLParserErrorCode = {
- NoError: 0,
- EndOfDocument: -1,
- UnterminatedCdat: -2,
- UnterminatedXmlDeclaration: -3,
- UnterminatedDoctypeDeclaration: -4,
- UnterminatedComment: -5,
- MalformedElement: -6,
- OutOfMemory: -7,
- UnterminatedAttributeValue: -8,
- UnterminatedElement: -9,
- ElementNeverBegun: -10
-};
-
-function isWhitespace(s, index) {
- const ch = s[index];
- return ch === " " || ch === "\n" || ch === "\r" || ch === "\t";
-}
-
-function isWhitespaceString(s) {
- for (let i = 0, ii = s.length; i < ii; i++) {
- if (!isWhitespace(s, i)) {
- return false;
- }
- }
-
- return true;
-}
-
-class XMLParserBase {
- _resolveEntities(s) {
- return s.replace(/&([^;]+);/g, (all, entity) => {
- if (entity.substring(0, 2) === "#x") {
- return String.fromCharCode(parseInt(entity.substring(2), 16));
- } else if (entity.substring(0, 1) === "#") {
- return String.fromCharCode(parseInt(entity.substring(1), 10));
- }
-
- switch (entity) {
- case "lt":
- return "<";
-
- case "gt":
- return ">";
-
- case "amp":
- return "&";
-
- case "quot":
- return '"';
- }
-
- return this.onResolveEntity(entity);
- });
- }
-
- _parseContent(s, start) {
- const attributes = [];
- let pos = start;
-
- function skipWs() {
- while (pos < s.length && isWhitespace(s, pos)) {
- ++pos;
- }
- }
-
- while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
- ++pos;
- }
-
- const name = s.substring(start, pos);
- skipWs();
-
- while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") {
- skipWs();
- let attrName = "",
- attrValue = "";
-
- while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") {
- attrName += s[pos];
- ++pos;
- }
-
- skipWs();
-
- if (s[pos] !== "=") {
- return null;
- }
-
- ++pos;
- skipWs();
- const attrEndChar = s[pos];
-
- if (attrEndChar !== '"' && attrEndChar !== "'") {
- return null;
- }
-
- const attrEndIndex = s.indexOf(attrEndChar, ++pos);
-
- if (attrEndIndex < 0) {
- return null;
- }
-
- attrValue = s.substring(pos, attrEndIndex);
- attributes.push({
- name: attrName,
- value: this._resolveEntities(attrValue)
- });
- pos = attrEndIndex + 1;
- skipWs();
- }
-
- return {
- name,
- attributes,
- parsed: pos - start
- };
- }
-
- _parseProcessingInstruction(s, start) {
- let pos = start;
-
- function skipWs() {
- while (pos < s.length && isWhitespace(s, pos)) {
- ++pos;
- }
- }
-
- while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
- ++pos;
- }
-
- const name = s.substring(start, pos);
- skipWs();
- const attrStart = pos;
-
- while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) {
- ++pos;
- }
-
- const value = s.substring(attrStart, pos);
- return {
- name,
- value,
- parsed: pos - start
- };
- }
-
- parseXml(s) {
- let i = 0;
-
- while (i < s.length) {
- const ch = s[i];
- let j = i;
-
- if (ch === "<") {
- ++j;
- const ch2 = s[j];
- let q;
-
- switch (ch2) {
- case "/":
- ++j;
- q = s.indexOf(">", j);
-
- if (q < 0) {
- this.onError(XMLParserErrorCode.UnterminatedElement);
- return;
- }
-
- this.onEndElement(s.substring(j, q));
- j = q + 1;
- break;
-
- case "?":
- ++j;
-
- const pi = this._parseProcessingInstruction(s, j);
-
- if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") {
- this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
- return;
- }
-
- this.onPi(pi.name, pi.value);
- j += pi.parsed + 2;
- break;
-
- case "!":
- if (s.substring(j + 1, j + 3) === "--") {
- q = s.indexOf("-->", j + 3);
-
- if (q < 0) {
- this.onError(XMLParserErrorCode.UnterminatedComment);
- return;
- }
-
- this.onComment(s.substring(j + 3, q));
- j = q + 3;
- } else if (s.substring(j + 1, j + 8) === "[CDATA[") {
- q = s.indexOf("]]>", j + 8);
-
- if (q < 0) {
- this.onError(XMLParserErrorCode.UnterminatedCdat);
- return;
- }
-
- this.onCdata(s.substring(j + 8, q));
- j = q + 3;
- } else if (s.substring(j + 1, j + 8) === "DOCTYPE") {
- const q2 = s.indexOf("[", j + 8);
- let complexDoctype = false;
- q = s.indexOf(">", j + 8);
-
- if (q < 0) {
- this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
- return;
- }
-
- if (q2 > 0 && q > q2) {
- q = s.indexOf("]>", j + 8);
-
- if (q < 0) {
- this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
- return;
- }
-
- complexDoctype = true;
- }
-
- const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
- this.onDoctype(doctypeContent);
- j = q + (complexDoctype ? 2 : 1);
- } else {
- this.onError(XMLParserErrorCode.MalformedElement);
- return;
- }
-
- break;
-
- default:
- const content = this._parseContent(s, j);
-
- if (content === null) {
- this.onError(XMLParserErrorCode.MalformedElement);
- return;
- }
-
- let isClosed = false;
-
- if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") {
- isClosed = true;
- } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") {
- this.onError(XMLParserErrorCode.UnterminatedElement);
- return;
- }
-
- this.onBeginElement(content.name, content.attributes, isClosed);
- j += content.parsed + (isClosed ? 2 : 1);
- break;
- }
- } else {
- while (j < s.length && s[j] !== "<") {
- j++;
- }
-
- const text = s.substring(i, j);
- this.onText(this._resolveEntities(text));
- }
-
- i = j;
- }
- }
-
- onResolveEntity(name) {
- return `&${name};`;
- }
-
- onPi(name, value) {}
-
- onComment(text) {}
-
- onCdata(text) {}
-
- onDoctype(doctypeContent) {}
-
- onText(text) {}
-
- onBeginElement(name, attributes, isEmpty) {}
-
- onEndElement(name) {}
-
- onError(code) {}
-
-}
-
-class SimpleDOMNode {
- constructor(nodeName, nodeValue) {
- this.nodeName = nodeName;
- this.nodeValue = nodeValue;
- Object.defineProperty(this, "parentNode", {
- value: null,
- writable: true
- });
- }
-
- get firstChild() {
- return this.childNodes && this.childNodes[0];
- }
-
- get nextSibling() {
- const childNodes = this.parentNode.childNodes;
-
- if (!childNodes) {
- return undefined;
- }
-
- const index = childNodes.indexOf(this);
-
- if (index === -1) {
- return undefined;
- }
-
- return childNodes[index + 1];
- }
-
- get textContent() {
- if (!this.childNodes) {
- return this.nodeValue || "";
- }
-
- return this.childNodes.map(function (child) {
- return child.textContent;
- }).join("");
- }
-
- hasChildNodes() {
- return this.childNodes && this.childNodes.length > 0;
- }
-
-}
-
-class SimpleXMLParser extends XMLParserBase {
- constructor() {
- super();
- this._currentFragment = null;
- this._stack = null;
- this._errorCode = XMLParserErrorCode.NoError;
- }
-
- parseFromString(data) {
- this._currentFragment = [];
- this._stack = [];
- this._errorCode = XMLParserErrorCode.NoError;
- this.parseXml(data);
-
- if (this._errorCode !== XMLParserErrorCode.NoError) {
- return undefined;
- }
-
- const [documentElement] = this._currentFragment;
-
- if (!documentElement) {
- return undefined;
- }
-
- return {
- documentElement
- };
- }
-
- onResolveEntity(name) {
- switch (name) {
- case "apos":
- return "'";
- }
-
- return super.onResolveEntity(name);
- }
-
- onText(text) {
- if (isWhitespaceString(text)) {
- return;
- }
-
- const node = new SimpleDOMNode("#text", text);
-
- this._currentFragment.push(node);
- }
-
- onCdata(text) {
- const node = new SimpleDOMNode("#text", text);
-
- this._currentFragment.push(node);
- }
-
- onBeginElement(name, attributes, isEmpty) {
- const node = new SimpleDOMNode(name);
- node.childNodes = [];
-
- this._currentFragment.push(node);
-
- if (isEmpty) {
- return;
- }
-
- this._stack.push(this._currentFragment);
-
- this._currentFragment = node.childNodes;
- }
-
- onEndElement(name) {
- this._currentFragment = this._stack.pop() || [];
- const lastElement = this._currentFragment[this._currentFragment.length - 1];
-
- if (!lastElement) {
- return;
- }
-
- for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) {
- lastElement.childNodes[i].parentNode = lastElement;
- }
- }
-
- onError(code) {
- this._errorCode = code;
- }
-
-}
-
-exports.SimpleXMLParser = SimpleXMLParser;
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFDataTransportStream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-class PDFDataTransportStream {
- constructor(params, pdfDataRangeTransport) {
- (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
- this._queuedChunks = [];
- this._progressiveDone = params.progressiveDone || false;
- const initialData = params.initialData;
-
- if (initialData && initialData.length > 0) {
- const buffer = new Uint8Array(initialData).buffer;
-
- this._queuedChunks.push(buffer);
- }
-
- this._pdfDataRangeTransport = pdfDataRangeTransport;
- this._isStreamingSupported = !params.disableStream;
- this._isRangeSupported = !params.disableRange;
- this._contentLength = params.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(args) {
- const buffer = new Uint8Array(args.chunk).buffer;
-
- if (args.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 !== args.begin) {
- return false;
- }
-
- rangeReader._enqueue(buffer);
-
- return true;
- });
-
- (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
- }
- }
-
- get _progressiveDataLength() {
- return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
- }
-
- _onProgress(evt) {
- if (evt.total === undefined) {
- const firstReader = this._rangeReaders[0];
-
- if (firstReader && firstReader.onProgress) {
- firstReader.onProgress({
- loaded: evt.loaded
- });
- }
- } else {
- const fullReader = this._fullRequestReader;
-
- if (fullReader && fullReader.onProgress) {
- fullReader.onProgress({
- loaded: evt.loaded,
- total: evt.total
- });
- }
- }
- }
-
- _onProgressiveDone() {
- if (this._fullRequestReader) {
- this._fullRequestReader.progressiveDone();
- }
-
- this._progressiveDone = true;
- }
-
- _removeRangeReader(reader) {
- const i = this._rangeReaders.indexOf(reader);
-
- if (i >= 0) {
- this._rangeReaders.splice(i, 1);
- }
- }
-
- getFullReader() {
- (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
- const queuedChunks = this._queuedChunks;
- this._queuedChunks = null;
- return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone);
- }
-
- 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) {
- if (this._fullRequestReader) {
- this._fullRequestReader.cancel(reason);
- }
-
- const readers = this._rangeReaders.slice(0);
-
- readers.forEach(function (rangeReader) {
- rangeReader.cancel(reason);
- });
-
- this._pdfDataRangeTransport.abort();
- }
-
-}
-
-exports.PDFDataTransportStream = PDFDataTransportStream;
-
-class PDFDataTransportStreamReader {
- constructor(stream, queuedChunks, progressiveDone = false) {
- this._stream = stream;
- this._done = progressiveDone || false;
- this._filename = 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 = (0, _util.createPromiseCapability)();
-
- this._requests.push(requestCapability);
-
- return requestCapability.promise;
- }
-
- cancel(reason) {
- this._done = true;
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.resolve({
- value: undefined,
- done: true
- });
- });
-
- this._requests = [];
- }
-
- 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
- });
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.resolve({
- value: undefined,
- done: true
- });
- });
-
- this._requests = [];
- }
-
- 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 = (0, _util.createPromiseCapability)();
-
- this._requests.push(requestCapability);
-
- return requestCapability.promise;
- }
-
- cancel(reason) {
- this._done = true;
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.resolve({
- value: undefined,
- done: true
- });
- });
-
- this._requests = [];
-
- this._stream._removeRangeReader(this);
- }
-
-}
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.WebGLContext = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-class WebGLContext {
- constructor({
- enable = false
- }) {
- this._enabled = enable === true;
- }
-
- get isEnabled() {
- let enabled = this._enabled;
-
- if (enabled) {
- enabled = WebGLUtils.tryInitGL();
- }
-
- return (0, _util.shadow)(this, "isEnabled", enabled);
- }
-
- composeSMask({
- layer,
- mask,
- properties
- }) {
- return WebGLUtils.composeSMask(layer, mask, properties);
- }
-
- drawFigures({
- width,
- height,
- backgroundColor,
- figures,
- context
- }) {
- return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context);
- }
-
- clear() {
- WebGLUtils.cleanup();
- }
-
-}
-
-exports.WebGLContext = WebGLContext;
-
-var WebGLUtils = function WebGLUtilsClosure() {
- function loadShader(gl, code, shaderType) {
- var shader = gl.createShader(shaderType);
- gl.shaderSource(shader, code);
- gl.compileShader(shader);
- var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
-
- if (!compiled) {
- var errorMsg = gl.getShaderInfoLog(shader);
- throw new Error("Error during shader compilation: " + errorMsg);
- }
-
- return shader;
- }
-
- function createVertexShader(gl, code) {
- return loadShader(gl, code, gl.VERTEX_SHADER);
- }
-
- function createFragmentShader(gl, code) {
- return loadShader(gl, code, gl.FRAGMENT_SHADER);
- }
-
- function createProgram(gl, shaders) {
- var program = gl.createProgram();
-
- for (var i = 0, ii = shaders.length; i < ii; ++i) {
- gl.attachShader(program, shaders[i]);
- }
-
- gl.linkProgram(program);
- var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
-
- if (!linked) {
- var errorMsg = gl.getProgramInfoLog(program);
- throw new Error("Error during program linking: " + errorMsg);
- }
-
- return program;
- }
-
- function createTexture(gl, image, textureId) {
- gl.activeTexture(textureId);
- var texture = gl.createTexture();
- gl.bindTexture(gl.TEXTURE_2D, texture);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
- return texture;
- }
-
- var currentGL, currentCanvas;
-
- function generateGL() {
- if (currentGL) {
- return;
- }
-
- currentCanvas = document.createElement("canvas");
- currentGL = currentCanvas.getContext("webgl", {
- premultipliedalpha: false
- });
- }
-
- var smaskVertexShaderCode = "\
- attribute vec2 a_position; \
- attribute vec2 a_texCoord; \
- \
- uniform vec2 u_resolution; \
- \
- varying vec2 v_texCoord; \
- \
- void main() { \
- vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \
- gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \
- \
- v_texCoord = a_texCoord; \
- } ";
- var smaskFragmentShaderCode = "\
- precision mediump float; \
- \
- uniform vec4 u_backdrop; \
- uniform int u_subtype; \
- uniform sampler2D u_image; \
- uniform sampler2D u_mask; \
- \
- varying vec2 v_texCoord; \
- \
- void main() { \
- vec4 imageColor = texture2D(u_image, v_texCoord); \
- vec4 maskColor = texture2D(u_mask, v_texCoord); \
- if (u_backdrop.a > 0.0) { \
- maskColor.rgb = maskColor.rgb * maskColor.a + \
- u_backdrop.rgb * (1.0 - maskColor.a); \
- } \
- float lum; \
- if (u_subtype == 0) { \
- lum = maskColor.a; \
- } else { \
- lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \
- maskColor.b * 0.11; \
- } \
- imageColor.a *= lum; \
- imageColor.rgb *= imageColor.a; \
- gl_FragColor = imageColor; \
- } ";
- var smaskCache = null;
-
- function initSmaskGL() {
- var canvas, gl;
- generateGL();
- canvas = currentCanvas;
- currentCanvas = null;
- gl = currentGL;
- currentGL = null;
- var vertexShader = createVertexShader(gl, smaskVertexShaderCode);
- var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
- var program = createProgram(gl, [vertexShader, fragmentShader]);
- gl.useProgram(program);
- var cache = {};
- cache.gl = gl;
- cache.canvas = canvas;
- cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution");
- cache.positionLocation = gl.getAttribLocation(program, "a_position");
- cache.backdropLocation = gl.getUniformLocation(program, "u_backdrop");
- cache.subtypeLocation = gl.getUniformLocation(program, "u_subtype");
- var texCoordLocation = gl.getAttribLocation(program, "a_texCoord");
- var texLayerLocation = gl.getUniformLocation(program, "u_image");
- var texMaskLocation = gl.getUniformLocation(program, "u_mask");
- var texCoordBuffer = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW);
- gl.enableVertexAttribArray(texCoordLocation);
- gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);
- gl.uniform1i(texLayerLocation, 0);
- gl.uniform1i(texMaskLocation, 1);
- smaskCache = cache;
- }
-
- function composeSMask(layer, mask, properties) {
- var width = layer.width,
- height = layer.height;
-
- if (!smaskCache) {
- initSmaskGL();
- }
-
- var cache = smaskCache,
- canvas = cache.canvas,
- gl = cache.gl;
- canvas.width = width;
- canvas.height = height;
- gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
- gl.uniform2f(cache.resolutionLocation, width, height);
-
- if (properties.backdrop) {
- gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1);
- } else {
- gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);
- }
-
- gl.uniform1i(cache.subtypeLocation, properties.subtype === "Luminosity" ? 1 : 0);
- var texture = createTexture(gl, layer, gl.TEXTURE0);
- var maskTexture = createTexture(gl, mask, gl.TEXTURE1);
- var buffer = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW);
- gl.enableVertexAttribArray(cache.positionLocation);
- gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
- gl.clearColor(0, 0, 0, 0);
- gl.enable(gl.BLEND);
- gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
- gl.clear(gl.COLOR_BUFFER_BIT);
- gl.drawArrays(gl.TRIANGLES, 0, 6);
- gl.flush();
- gl.deleteTexture(texture);
- gl.deleteTexture(maskTexture);
- gl.deleteBuffer(buffer);
- return canvas;
- }
-
- var figuresVertexShaderCode = "\
- attribute vec2 a_position; \
- attribute vec3 a_color; \
- \
- uniform vec2 u_resolution; \
- uniform vec2 u_scale; \
- uniform vec2 u_offset; \
- \
- varying vec4 v_color; \
- \
- void main() { \
- vec2 position = (a_position + u_offset) * u_scale; \
- vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \
- gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \
- \
- v_color = vec4(a_color / 255.0, 1.0); \
- } ";
- var figuresFragmentShaderCode = "\
- precision mediump float; \
- \
- varying vec4 v_color; \
- \
- void main() { \
- gl_FragColor = v_color; \
- } ";
- var figuresCache = null;
-
- function initFiguresGL() {
- var canvas, gl;
- generateGL();
- canvas = currentCanvas;
- currentCanvas = null;
- gl = currentGL;
- currentGL = null;
- var vertexShader = createVertexShader(gl, figuresVertexShaderCode);
- var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
- var program = createProgram(gl, [vertexShader, fragmentShader]);
- gl.useProgram(program);
- var cache = {};
- cache.gl = gl;
- cache.canvas = canvas;
- cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution");
- cache.scaleLocation = gl.getUniformLocation(program, "u_scale");
- cache.offsetLocation = gl.getUniformLocation(program, "u_offset");
- cache.positionLocation = gl.getAttribLocation(program, "a_position");
- cache.colorLocation = gl.getAttribLocation(program, "a_color");
- figuresCache = cache;
- }
-
- function drawFigures(width, height, backgroundColor, figures, context) {
- if (!figuresCache) {
- initFiguresGL();
- }
-
- var cache = figuresCache,
- canvas = cache.canvas,
- gl = cache.gl;
- canvas.width = width;
- canvas.height = height;
- gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
- gl.uniform2f(cache.resolutionLocation, width, height);
- var count = 0;
- var i, ii, rows;
-
- for (i = 0, ii = figures.length; i < ii; i++) {
- switch (figures[i].type) {
- case "lattice":
- rows = figures[i].coords.length / figures[i].verticesPerRow | 0;
- count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;
- break;
-
- case "triangles":
- count += figures[i].coords.length;
- break;
- }
- }
-
- var coords = new Float32Array(count * 2);
- var colors = new Uint8Array(count * 3);
- var coordsMap = context.coords,
- colorsMap = context.colors;
- var pIndex = 0,
- cIndex = 0;
-
- for (i = 0, ii = figures.length; i < ii; i++) {
- var figure = figures[i],
- ps = figure.coords,
- cs = figure.colors;
-
- switch (figure.type) {
- case "lattice":
- var cols = figure.verticesPerRow;
- rows = ps.length / cols | 0;
-
- for (var row = 1; row < rows; row++) {
- var offset = row * cols + 1;
-
- for (var col = 1; col < cols; col++, offset++) {
- coords[pIndex] = coordsMap[ps[offset - cols - 1]];
- coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];
- coords[pIndex + 2] = coordsMap[ps[offset - cols]];
- coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];
- coords[pIndex + 4] = coordsMap[ps[offset - 1]];
- coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];
- colors[cIndex] = colorsMap[cs[offset - cols - 1]];
- colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];
- colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];
- colors[cIndex + 3] = colorsMap[cs[offset - cols]];
- colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];
- colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];
- colors[cIndex + 6] = colorsMap[cs[offset - 1]];
- colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];
- colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];
- coords[pIndex + 6] = coords[pIndex + 2];
- coords[pIndex + 7] = coords[pIndex + 3];
- coords[pIndex + 8] = coords[pIndex + 4];
- coords[pIndex + 9] = coords[pIndex + 5];
- coords[pIndex + 10] = coordsMap[ps[offset]];
- coords[pIndex + 11] = coordsMap[ps[offset] + 1];
- colors[cIndex + 9] = colors[cIndex + 3];
- colors[cIndex + 10] = colors[cIndex + 4];
- colors[cIndex + 11] = colors[cIndex + 5];
- colors[cIndex + 12] = colors[cIndex + 6];
- colors[cIndex + 13] = colors[cIndex + 7];
- colors[cIndex + 14] = colors[cIndex + 8];
- colors[cIndex + 15] = colorsMap[cs[offset]];
- colors[cIndex + 16] = colorsMap[cs[offset] + 1];
- colors[cIndex + 17] = colorsMap[cs[offset] + 2];
- pIndex += 12;
- cIndex += 18;
- }
- }
-
- break;
-
- case "triangles":
- for (var j = 0, jj = ps.length; j < jj; j++) {
- coords[pIndex] = coordsMap[ps[j]];
- coords[pIndex + 1] = coordsMap[ps[j] + 1];
- colors[cIndex] = colorsMap[cs[j]];
- colors[cIndex + 1] = colorsMap[cs[j] + 1];
- colors[cIndex + 2] = colorsMap[cs[j] + 2];
- pIndex += 2;
- cIndex += 3;
- }
-
- break;
- }
- }
-
- if (backgroundColor) {
- gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0);
- } else {
- gl.clearColor(0, 0, 0, 0);
- }
-
- gl.clear(gl.COLOR_BUFFER_BIT);
- var coordsBuffer = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);
- gl.enableVertexAttribArray(cache.positionLocation);
- gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
- var colorsBuffer = gl.createBuffer();
- gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
- gl.enableVertexAttribArray(cache.colorLocation);
- gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0);
- gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);
- gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);
- gl.drawArrays(gl.TRIANGLES, 0, count);
- gl.flush();
- gl.deleteBuffer(coordsBuffer);
- gl.deleteBuffer(colorsBuffer);
- return canvas;
- }
-
- return {
- tryInitGL() {
- try {
- generateGL();
- return !!currentGL;
- } catch (ex) {}
-
- return false;
- },
-
- composeSMask,
- drawFigures,
-
- cleanup() {
- if (smaskCache && smaskCache.canvas) {
- smaskCache.canvas.width = 0;
- smaskCache.canvas.height = 0;
- }
-
- if (figuresCache && figuresCache.canvas) {
- figuresCache.canvas.width = 0;
- figuresCache.canvas.height = 0;
- }
-
- smaskCache = null;
- figuresCache = null;
- }
-
- };
-}();
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.AnnotationLayer = void 0;
-
-var _display_utils = __w_pdfjs_require__(1);
-
-var _util = __w_pdfjs_require__(2);
-
-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);
- }
-
- 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 {
- constructor(parameters, isRenderable = false, ignoreBorder = false) {
- this.isRenderable = isRenderable;
- this.data = parameters.data;
- this.layer = parameters.layer;
- this.page = parameters.page;
- this.viewport = parameters.viewport;
- this.linkService = parameters.linkService;
- this.downloadManager = parameters.downloadManager;
- this.imageResourcesPath = parameters.imageResourcesPath;
- this.renderInteractiveForms = parameters.renderInteractiveForms;
- this.svgFactory = parameters.svgFactory;
-
- if (isRenderable) {
- this.container = this._createContainer(ignoreBorder);
- }
- }
-
- _createContainer(ignoreBorder = false) {
- const data = this.data,
- page = this.page,
- viewport = this.viewport;
- const container = document.createElement("section");
- let width = data.rect[2] - data.rect[0];
- let height = data.rect[3] - data.rect[1];
- container.setAttribute("data-annotation-id", data.id);
-
- 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]]);
-
- container.style.transform = `matrix(${viewport.transform.join(",")})`;
- container.style.transformOrigin = `-${rect[0]}px -${rect[1]}px`;
-
- if (!ignoreBorder && data.borderStyle.width > 0) {
- container.style.borderWidth = `${data.borderStyle.width}px`;
-
- if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {
- width = width - 2 * data.borderStyle.width;
- height = height - 2 * data.borderStyle.width;
- }
-
- const horizontalRadius = data.borderStyle.horizontalCornerRadius;
- const verticalRadius = data.borderStyle.verticalCornerRadius;
-
- if (horizontalRadius > 0 || verticalRadius > 0) {
- const radius = `${horizontalRadius}px / ${verticalRadius}px`;
- 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;
- }
-
- if (data.color) {
- container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);
- } else {
- container.style.borderWidth = 0;
- }
- }
-
- container.style.left = `${rect[0]}px`;
- container.style.top = `${rect[1]}px`;
- container.style.width = `${width}px`;
- container.style.height = `${height}px`;
- return container;
- }
-
- _createPopup(container, trigger, data) {
- if (!trigger) {
- trigger = document.createElement("div");
- trigger.style.height = container.style.height;
- trigger.style.width = container.style.width;
- container.appendChild(trigger);
- }
-
- const popupElement = new PopupElement({
- container,
- trigger,
- color: data.color,
- title: data.title,
- modificationDate: data.modificationDate,
- contents: data.contents,
- hideWrapper: true
- });
- const popup = popupElement.render();
- popup.style.left = container.style.width;
- container.appendChild(popup);
- }
-
- render() {
- (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
- }
-
-}
-
-class LinkAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action);
- super(parameters, isRenderable);
- }
-
- render() {
- this.container.className = "linkAnnotation";
- const {
- data,
- linkService
- } = this;
- const link = document.createElement("a");
-
- if (data.url) {
- (0, _display_utils.addLinkAttributes)(link, {
- url: data.url,
- target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget,
- rel: linkService.externalLinkRel,
- enabled: linkService.externalLinkEnabled
- });
- } else if (data.action) {
- this._bindNamedAction(link, data.action);
- } else {
- this._bindLink(link, data.dest);
- }
-
- this.container.appendChild(link);
- return this.container;
- }
-
- _bindLink(link, destination) {
- link.href = this.linkService.getDestinationHash(destination);
-
- link.onclick = () => {
- if (destination) {
- this.linkService.navigateTo(destination);
- }
-
- return false;
- };
-
- if (destination) {
- link.className = "internalLink";
- }
- }
-
- _bindNamedAction(link, action) {
- link.href = this.linkService.getAnchorUrl("");
-
- link.onclick = () => {
- this.linkService.executeNamedAction(action);
- return false;
- };
-
- link.className = "internalLink";
- }
-
-}
-
-class TextAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable);
- }
-
- render() {
- this.container.className = "textAnnotation";
- const image = document.createElement("img");
- image.style.height = this.container.style.height;
- image.style.width = this.container.style.width;
- image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
- image.alt = "[{{type}} Annotation]";
- image.dataset.l10nId = "text_annotation_type";
- image.dataset.l10nArgs = JSON.stringify({
- type: this.data.name
- });
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, image, this.data);
- }
-
- this.container.appendChild(image);
- return this.container;
- }
-
-}
-
-class WidgetAnnotationElement extends AnnotationElement {
- render() {
- return this.container;
- }
-
-}
-
-class TextWidgetAnnotationElement extends WidgetAnnotationElement {
- constructor(parameters) {
- const isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
- super(parameters, isRenderable);
- }
-
- render() {
- const TEXT_ALIGNMENT = ["left", "center", "right"];
- this.container.className = "textWidgetAnnotation";
- let element = null;
-
- if (this.renderInteractiveForms) {
- if (this.data.multiLine) {
- element = document.createElement("textarea");
- element.textContent = this.data.fieldValue;
- } else {
- element = document.createElement("input");
- element.type = "text";
- element.setAttribute("value", this.data.fieldValue);
- }
-
- element.disabled = this.data.readOnly;
- element.name = this.data.fieldName;
-
- if (this.data.maxLen !== null) {
- element.maxLength = this.data.maxLen;
- }
-
- if (this.data.comb) {
- const fieldWidth = this.data.rect[2] - this.data.rect[0];
- const combWidth = fieldWidth / this.data.maxLen;
- element.classList.add("comb");
- element.style.letterSpacing = `calc(${combWidth}px - 1ch)`;
- }
- } else {
- element = document.createElement("div");
- element.textContent = this.data.fieldValue;
- element.style.verticalAlign = "middle";
- element.style.display = "table-cell";
- let font = null;
-
- if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) {
- font = this.page.commonObjs.get(this.data.fontRefName);
- }
-
- this._setTextStyle(element, font);
- }
-
- if (this.data.textAlignment !== null) {
- element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
- }
-
- this.container.appendChild(element);
- return this.container;
- }
-
- _setTextStyle(element, font) {
- const style = element.style;
- style.fontSize = `${this.data.fontSize}px`;
- style.direction = this.data.fontDirection < 0 ? "rtl" : "ltr";
-
- if (!font) {
- return;
- }
-
- let bold = "normal";
-
- if (font.black) {
- bold = "900";
- } else if (font.bold) {
- bold = "bold";
- }
-
- style.fontWeight = bold;
- style.fontStyle = font.italic ? "italic" : "normal";
- const fontFamily = font.loadedName ? `"${font.loadedName}", ` : "";
- const fallbackName = font.fallbackName || "Helvetica, sans-serif";
- style.fontFamily = fontFamily + fallbackName;
- }
-
-}
-
-class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
- constructor(parameters) {
- super(parameters, parameters.renderInteractiveForms);
- }
-
- render() {
- this.container.className = "buttonWidgetAnnotation checkBox";
- const element = document.createElement("input");
- element.disabled = this.data.readOnly;
- element.type = "checkbox";
- element.name = this.data.fieldName;
-
- if (this.data.fieldValue && this.data.fieldValue !== "Off") {
- element.setAttribute("checked", true);
- }
-
- this.container.appendChild(element);
- return this.container;
- }
-
-}
-
-class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
- constructor(parameters) {
- super(parameters, parameters.renderInteractiveForms);
- }
-
- render() {
- this.container.className = "buttonWidgetAnnotation radioButton";
- const element = document.createElement("input");
- element.disabled = this.data.readOnly;
- element.type = "radio";
- element.name = this.data.fieldName;
-
- if (this.data.fieldValue === this.data.buttonValue) {
- element.setAttribute("checked", true);
- }
-
- this.container.appendChild(element);
- return this.container;
- }
-
-}
-
-class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
- render() {
- const container = super.render();
- container.className = "buttonWidgetAnnotation pushButton";
- return container;
- }
-
-}
-
-class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
- constructor(parameters) {
- super(parameters, parameters.renderInteractiveForms);
- }
-
- render() {
- this.container.className = "choiceWidgetAnnotation";
- const selectElement = document.createElement("select");
- selectElement.disabled = this.data.readOnly;
- selectElement.name = this.data.fieldName;
-
- if (!this.data.combo) {
- selectElement.size = this.data.options.length;
-
- if (this.data.multiSelect) {
- selectElement.multiple = true;
- }
- }
-
- for (const option of this.data.options) {
- const optionElement = document.createElement("option");
- optionElement.textContent = option.displayValue;
- optionElement.value = option.exportValue;
-
- if (this.data.fieldValue.includes(option.displayValue)) {
- optionElement.setAttribute("selected", true);
- }
-
- selectElement.appendChild(optionElement);
- }
-
- this.container.appendChild(selectElement);
- return this.container;
- }
-
-}
-
-class PopupAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable);
- }
-
- render() {
- const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"];
- this.container.className = "popupAnnotation";
-
- if (IGNORE_TYPES.includes(this.data.parentType)) {
- return this.container;
- }
-
- const selector = `[data-annotation-id="${this.data.parentId}"]`;
- const parentElement = this.layer.querySelector(selector);
-
- if (!parentElement) {
- return this.container;
- }
-
- const popup = new PopupElement({
- container: this.container,
- trigger: parentElement,
- color: this.data.color,
- title: this.data.title,
- modificationDate: this.data.modificationDate,
- contents: this.data.contents
- });
- const parentLeft = parseFloat(parentElement.style.left);
- const parentWidth = parseFloat(parentElement.style.width);
- this.container.style.transformOrigin = `-${parentLeft + parentWidth}px -${parentElement.style.top}`;
- this.container.style.left = `${parentLeft + parentWidth}px`;
- this.container.appendChild(popup.render());
- return this.container;
- }
-
-}
-
-class PopupElement {
- constructor(parameters) {
- this.container = parameters.container;
- this.trigger = parameters.trigger;
- this.color = parameters.color;
- this.title = parameters.title;
- this.modificationDate = parameters.modificationDate;
- this.contents = parameters.contents;
- this.hideWrapper = parameters.hideWrapper || false;
- this.pinned = false;
- }
-
- render() {
- const BACKGROUND_ENLIGHT = 0.7;
- const wrapper = document.createElement("div");
- wrapper.className = "popupWrapper";
- this.hideElement = this.hideWrapper ? wrapper : this.container;
- this.hideElement.setAttribute("hidden", true);
- const popup = document.createElement("div");
- popup.className = "popup";
- const color = this.color;
-
- if (color) {
- const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
- const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
- const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
- popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0);
- }
-
- const title = document.createElement("h1");
- title.textContent = this.title;
- popup.appendChild(title);
-
- const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);
-
- if (dateObject) {
- const modificationDate = document.createElement("span");
- modificationDate.textContent = "{{date}}, {{time}}";
- modificationDate.dataset.l10nId = "annotation_date_string";
- modificationDate.dataset.l10nArgs = JSON.stringify({
- date: dateObject.toLocaleDateString(),
- time: dateObject.toLocaleTimeString()
- });
- popup.appendChild(modificationDate);
- }
-
- const contents = this._formatContents(this.contents);
-
- popup.appendChild(contents);
- this.trigger.addEventListener("click", this._toggle.bind(this));
- this.trigger.addEventListener("mouseover", this._show.bind(this, false));
- this.trigger.addEventListener("mouseout", this._hide.bind(this, false));
- popup.addEventListener("click", this._hide.bind(this, true));
- wrapper.appendChild(popup);
- return wrapper;
- }
-
- _formatContents(contents) {
- const p = document.createElement("p");
- const lines = contents.split(/(?:\r\n?|\n)/);
-
- for (let i = 0, ii = lines.length; i < ii; ++i) {
- const line = lines[i];
- p.appendChild(document.createTextNode(line));
-
- if (i < ii - 1) {
- p.appendChild(document.createElement("br"));
- }
- }
-
- return p;
- }
-
- _toggle() {
- if (this.pinned) {
- this._hide(true);
- } else {
- this._show(true);
- }
- }
-
- _show(pin = false) {
- if (pin) {
- this.pinned = true;
- }
-
- if (this.hideElement.hasAttribute("hidden")) {
- this.hideElement.removeAttribute("hidden");
- this.container.style.zIndex += 1;
- }
- }
-
- _hide(unpin = true) {
- if (unpin) {
- this.pinned = false;
- }
-
- if (!this.hideElement.hasAttribute("hidden") && !this.pinned) {
- this.hideElement.setAttribute("hidden", true);
- this.container.style.zIndex -= 1;
- }
- }
-
-}
-
-class FreeTextAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "freeTextAnnotation";
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, null, this.data);
- }
-
- return this.container;
- }
-
-}
-
-class LineAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "lineAnnotation";
- const data = this.data;
- const width = data.rect[2] - data.rect[0];
- const height = data.rect[3] - data.rect[1];
- const svg = this.svgFactory.create(width, height);
- const 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");
- svg.appendChild(line);
- this.container.append(svg);
-
- this._createPopup(this.container, line, data);
-
- return this.container;
- }
-
-}
-
-class SquareAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "squareAnnotation";
- const data = this.data;
- const width = data.rect[2] - data.rect[0];
- const height = data.rect[3] - data.rect[1];
- const svg = this.svgFactory.create(width, height);
- const borderWidth = data.borderStyle.width;
- const 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", "none");
- svg.appendChild(square);
- this.container.append(svg);
-
- this._createPopup(this.container, square, data);
-
- return this.container;
- }
-
-}
-
-class CircleAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "circleAnnotation";
- const data = this.data;
- const width = data.rect[2] - data.rect[0];
- const height = data.rect[3] - data.rect[1];
- const svg = this.svgFactory.create(width, height);
- const borderWidth = data.borderStyle.width;
- const 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", "none");
- svg.appendChild(circle);
- this.container.append(svg);
-
- this._createPopup(this.container, circle, data);
-
- return this.container;
- }
-
-}
-
-class PolylineAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- this.containerClassName = "polylineAnnotation";
- this.svgElementName = "svg:polyline";
- }
-
- render() {
- this.container.className = this.containerClassName;
- const data = this.data;
- const width = data.rect[2] - data.rect[0];
- const height = data.rect[3] - data.rect[1];
- const svg = this.svgFactory.create(width, height);
- 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.svgFactory.createElement(this.svgElementName);
- polyline.setAttribute("points", points);
- polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
- polyline.setAttribute("stroke", "transparent");
- polyline.setAttribute("fill", "none");
- svg.appendChild(polyline);
- this.container.append(svg);
-
- this._createPopup(this.container, polyline, data);
-
- return this.container;
- }
-
-}
-
-class PolygonAnnotationElement extends PolylineAnnotationElement {
- constructor(parameters) {
- super(parameters);
- this.containerClassName = "polygonAnnotation";
- this.svgElementName = "svg:polygon";
- }
-
-}
-
-class CaretAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "caretAnnotation";
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, null, this.data);
- }
-
- return this.container;
- }
-
-}
-
-class InkAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- this.containerClassName = "inkAnnotation";
- this.svgElementName = "svg:polyline";
- }
-
- render() {
- this.container.className = this.containerClassName;
- const data = this.data;
- const width = data.rect[2] - data.rect[0];
- const height = data.rect[3] - data.rect[1];
- const svg = this.svgFactory.create(width, height);
-
- 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);
- polyline.setAttribute("points", points);
- polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
- polyline.setAttribute("stroke", "transparent");
- polyline.setAttribute("fill", "none");
-
- this._createPopup(this.container, polyline, data);
-
- svg.appendChild(polyline);
- }
-
- this.container.append(svg);
- return this.container;
- }
-
-}
-
-class HighlightAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "highlightAnnotation";
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, null, this.data);
- }
-
- return this.container;
- }
-
-}
-
-class UnderlineAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "underlineAnnotation";
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, null, this.data);
- }
-
- return this.container;
- }
-
-}
-
-class SquigglyAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "squigglyAnnotation";
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, null, this.data);
- }
-
- return this.container;
- }
-
-}
-
-class StrikeOutAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "strikeoutAnnotation";
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, null, this.data);
- }
-
- return this.container;
- }
-
-}
-
-class StampAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
- super(parameters, isRenderable, true);
- }
-
- render() {
- this.container.className = "stampAnnotation";
-
- if (!this.data.hasPopup) {
- this._createPopup(this.container, null, this.data);
- }
-
- return this.container;
- }
-
-}
-
-class FileAttachmentAnnotationElement extends AnnotationElement {
- constructor(parameters) {
- super(parameters, true);
- const {
- filename,
- content
- } = this.data.file;
- this.filename = (0, _display_utils.getFilenameFromUrl)(filename);
- this.content = content;
-
- if (this.linkService.eventBus) {
- this.linkService.eventBus.dispatch("fileattachmentannotation", {
- source: this,
- id: (0, _util.stringToPDFString)(filename),
- filename,
- content
- });
- }
- }
-
- render() {
- this.container.className = "fileAttachmentAnnotation";
- const trigger = document.createElement("div");
- trigger.style.height = this.container.style.height;
- trigger.style.width = this.container.style.width;
- trigger.addEventListener("dblclick", this._download.bind(this));
-
- if (!this.data.hasPopup && (this.data.title || this.data.contents)) {
- this._createPopup(this.container, trigger, this.data);
- }
-
- this.container.appendChild(trigger);
- return this.container;
- }
-
- _download() {
- if (!this.downloadManager) {
- (0, _util.warn)("Download cannot be started due to unavailable download manager");
- return;
- }
-
- this.downloadManager.downloadData(this.content, this.filename, "");
- }
-
-}
-
-class AnnotationLayer {
- static render(parameters) {
- const sortedAnnotations = [],
- popupAnnotations = [];
-
- for (const data of parameters.annotations) {
- if (!data) {
- continue;
- }
-
- if (data.annotationType === _util.AnnotationType.POPUP) {
- popupAnnotations.push(data);
- continue;
- }
-
- sortedAnnotations.push(data);
- }
-
- if (popupAnnotations.length) {
- sortedAnnotations.push(...popupAnnotations);
- }
-
- for (const data of sortedAnnotations) {
- const element = AnnotationElementFactory.create({
- data,
- layer: parameters.div,
- page: parameters.page,
- viewport: parameters.viewport,
- linkService: parameters.linkService,
- downloadManager: parameters.downloadManager,
- imageResourcesPath: parameters.imageResourcesPath || "",
- renderInteractiveForms: parameters.renderInteractiveForms || false,
- svgFactory: new _display_utils.DOMSVGFactory()
- });
-
- if (element.isRenderable) {
- parameters.div.appendChild(element.render());
- }
- }
- }
-
- static update(parameters) {
- for (const data of parameters.annotations) {
- const element = parameters.div.querySelector(`[data-annotation-id="${data.id}"]`);
-
- if (element) {
- element.style.transform = `matrix(${parameters.viewport.transform.join(",")})`;
- }
- }
-
- parameters.div.removeAttribute("hidden");
- }
-
-}
-
-exports.AnnotationLayer = AnnotationLayer;
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.renderTextLayer = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var renderTextLayer = function renderTextLayerClosure() {
- var MAX_TEXT_DIVS_TO_RENDER = 100000;
- var NonWhitespaceRegexp = /\S/;
-
- function isAllWhitespace(str) {
- return !NonWhitespaceRegexp.test(str);
- }
-
- function appendText(task, geom, styles) {
- var textDiv = document.createElement("span");
- var textDivProperties = {
- angle: 0,
- canvasWidth: 0,
- isWhitespace: false,
- originalTransform: null,
- paddingBottom: 0,
- paddingLeft: 0,
- paddingRight: 0,
- paddingTop: 0,
- scale: 1
- };
-
- task._textDivs.push(textDiv);
-
- if (isAllWhitespace(geom.str)) {
- textDivProperties.isWhitespace = true;
-
- task._textDivProperties.set(textDiv, textDivProperties);
-
- return;
- }
-
- var tx = _util.Util.transform(task._viewport.transform, geom.transform);
-
- var angle = Math.atan2(tx[1], tx[0]);
- var style = styles[geom.fontName];
-
- if (style.vertical) {
- angle += Math.PI / 2;
- }
-
- var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]);
- var fontAscent = fontHeight;
-
- if (style.ascent) {
- fontAscent = style.ascent * fontAscent;
- } else if (style.descent) {
- fontAscent = (1 + style.descent) * fontAscent;
- }
-
- 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);
- }
-
- textDiv.style.left = `${left}px`;
- textDiv.style.top = `${top}px`;
- textDiv.style.fontSize = `${fontHeight}px`;
- textDiv.style.fontFamily = style.fontFamily;
- textDiv.textContent = geom.str;
-
- if (task._fontInspectorEnabled) {
- textDiv.dataset.fontName = geom.fontName;
- }
-
- if (angle !== 0) {
- textDivProperties.angle = angle * (180 / Math.PI);
- }
-
- let shouldScaleText = false;
-
- if (geom.str.length > 1) {
- shouldScaleText = true;
- } else if (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) {
- if (style.vertical) {
- textDivProperties.canvasWidth = geom.height * task._viewport.scale;
- } else {
- textDivProperties.canvasWidth = geom.width * task._viewport.scale;
- }
- }
-
- task._textDivProperties.set(textDiv, textDivProperties);
-
- if (task._textContentStream) {
- task._layoutText(textDiv);
- }
-
- if (task._enhanceTextSelection) {
- var angleCos = 1,
- angleSin = 0;
-
- if (angle !== 0) {
- angleCos = Math.cos(angle);
- angleSin = Math.sin(angle);
- }
-
- var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
- var divHeight = fontHeight;
- var m, b;
-
- if (angle !== 0) {
- m = [angleCos, angleSin, -angleSin, angleCos, left, top];
- b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);
- } else {
- b = [left, top, left + divWidth, top + divHeight];
- }
-
- task._bounds.push({
- left: b[0],
- top: b[1],
- right: b[2],
- bottom: b[3],
- div: textDiv,
- size: [divWidth, divHeight],
- m
- });
- }
- }
-
- function render(task) {
- if (task._canceled) {
- return;
- }
-
- var textDivs = task._textDivs;
- var capability = task._capability;
- var textDivsLength = textDivs.length;
-
- if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
- task._renderingDone = true;
- capability.resolve();
- return;
- }
-
- if (!task._textContentStream) {
- for (var i = 0; i < textDivsLength; i++) {
- task._layoutText(textDivs[i]);
- }
- }
-
- task._renderingDone = true;
- capability.resolve();
- }
-
- function findPositiveMin(ts, offset, count) {
- let result = 0;
-
- for (let i = 0; i < count; i++) {
- const t = ts[offset++];
-
- if (t > 0) {
- result = result ? Math.min(t, result) : t;
- }
- }
-
- return result;
- }
-
- function expand(task) {
- var bounds = task._bounds;
- var viewport = task._viewport;
- var expanded = expandBounds(viewport.width, viewport.height, bounds);
-
- for (var i = 0; i < expanded.length; i++) {
- var div = bounds[i].div;
-
- var divProperties = task._textDivProperties.get(div);
-
- if (divProperties.angle === 0) {
- divProperties.paddingLeft = bounds[i].left - expanded[i].left;
- divProperties.paddingTop = bounds[i].top - expanded[i].top;
- divProperties.paddingRight = expanded[i].right - bounds[i].right;
- divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;
-
- task._textDivProperties.set(div, divProperties);
-
- continue;
- }
-
- var e = expanded[i],
- b = bounds[i];
- var m = b.m,
- c = m[0],
- s = m[1];
- var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
- var ts = new Float64Array(64);
- points.forEach(function (p, j) {
- var t = _util.Util.applyTransform(p, m);
-
- ts[j + 0] = c && (e.left - t[0]) / c;
- ts[j + 4] = s && (e.top - t[1]) / s;
- ts[j + 8] = c && (e.right - t[0]) / c;
- ts[j + 12] = s && (e.bottom - t[1]) / s;
- ts[j + 16] = s && (e.left - t[0]) / -s;
- ts[j + 20] = c && (e.top - t[1]) / c;
- ts[j + 24] = s && (e.right - t[0]) / -s;
- ts[j + 28] = c && (e.bottom - t[1]) / c;
- ts[j + 32] = c && (e.left - t[0]) / -c;
- ts[j + 36] = s && (e.top - t[1]) / -s;
- ts[j + 40] = c && (e.right - t[0]) / -c;
- ts[j + 44] = s && (e.bottom - t[1]) / -s;
- ts[j + 48] = s && (e.left - t[0]) / s;
- ts[j + 52] = c && (e.top - t[1]) / -c;
- ts[j + 56] = s && (e.right - t[0]) / s;
- ts[j + 60] = c && (e.bottom - t[1]) / -c;
- });
- var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
- divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
- divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;
- divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;
- divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;
-
- task._textDivProperties.set(div, divProperties);
- }
- }
-
- function expandBounds(width, height, boxes) {
- var bounds = boxes.map(function (box, i) {
- return {
- x1: box.left,
- y1: box.top,
- x2: box.right,
- y2: box.bottom,
- index: i,
- x1New: undefined,
- x2New: undefined
- };
- });
- expandBoundsLTR(width, bounds);
- var expanded = new Array(boxes.length);
- bounds.forEach(function (b) {
- var i = b.index;
- expanded[i] = {
- left: b.x1New,
- top: 0,
- right: b.x2New,
- bottom: 0
- };
- });
- boxes.map(function (box, i) {
- var e = expanded[i],
- b = bounds[i];
- b.x1 = box.top;
- b.y1 = width - e.right;
- b.x2 = box.bottom;
- b.y2 = width - e.left;
- b.index = i;
- b.x1New = undefined;
- b.x2New = undefined;
- });
- expandBoundsLTR(height, bounds);
- bounds.forEach(function (b) {
- var i = b.index;
- expanded[i].top = b.x1New;
- expanded[i].bottom = b.x2New;
- });
- return expanded;
- }
-
- function expandBoundsLTR(width, bounds) {
- bounds.sort(function (a, b) {
- return a.x1 - b.x1 || a.index - b.index;
- });
- var fakeBoundary = {
- x1: -Infinity,
- y1: -Infinity,
- x2: 0,
- y2: Infinity,
- index: -1,
- x1New: 0,
- x2New: 0
- };
- var horizon = [{
- start: -Infinity,
- end: Infinity,
- boundary: fakeBoundary
- }];
- bounds.forEach(function (boundary) {
- var i = 0;
-
- while (i < horizon.length && horizon[i].end <= boundary.y1) {
- i++;
- }
-
- var j = horizon.length - 1;
-
- while (j >= 0 && horizon[j].start >= boundary.y2) {
- j--;
- }
-
- var horizonPart, affectedBoundary;
- var q,
- k,
- maxXNew = -Infinity;
-
- for (q = i; q <= j; q++) {
- horizonPart = horizon[q];
- affectedBoundary = horizonPart.boundary;
- var xNew;
-
- if (affectedBoundary.x2 > boundary.x1) {
- xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;
- } else if (affectedBoundary.x2New === undefined) {
- xNew = (affectedBoundary.x2 + boundary.x1) / 2;
- } else {
- xNew = affectedBoundary.x2New;
- }
-
- if (xNew > maxXNew) {
- maxXNew = xNew;
- }
- }
-
- boundary.x1New = maxXNew;
-
- for (q = i; q <= j; q++) {
- horizonPart = horizon[q];
- affectedBoundary = horizonPart.boundary;
-
- if (affectedBoundary.x2New === undefined) {
- if (affectedBoundary.x2 > boundary.x1) {
- if (affectedBoundary.index > boundary.index) {
- affectedBoundary.x2New = affectedBoundary.x2;
- }
- } else {
- affectedBoundary.x2New = maxXNew;
- }
- } else if (affectedBoundary.x2New > maxXNew) {
- affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);
- }
- }
-
- var changedHorizon = [],
- lastBoundary = null;
-
- for (q = i; q <= j; q++) {
- horizonPart = horizon[q];
- affectedBoundary = horizonPart.boundary;
- var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;
-
- if (lastBoundary === useBoundary) {
- changedHorizon[changedHorizon.length - 1].end = horizonPart.end;
- } else {
- changedHorizon.push({
- start: horizonPart.start,
- end: horizonPart.end,
- boundary: useBoundary
- });
- lastBoundary = useBoundary;
- }
- }
-
- if (horizon[i].start < boundary.y1) {
- changedHorizon[0].start = boundary.y1;
- changedHorizon.unshift({
- start: horizon[i].start,
- end: boundary.y1,
- boundary: horizon[i].boundary
- });
- }
-
- if (boundary.y2 < horizon[j].end) {
- changedHorizon[changedHorizon.length - 1].end = boundary.y2;
- changedHorizon.push({
- start: boundary.y2,
- end: horizon[j].end,
- boundary: horizon[j].boundary
- });
- }
-
- for (q = i; q <= j; q++) {
- horizonPart = horizon[q];
- affectedBoundary = horizonPart.boundary;
-
- if (affectedBoundary.x2New !== undefined) {
- continue;
- }
-
- var used = false;
-
- for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {
- used = horizon[k].boundary === affectedBoundary;
- }
-
- for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) {
- used = horizon[k].boundary === affectedBoundary;
- }
-
- for (k = 0; !used && k < changedHorizon.length; k++) {
- used = changedHorizon[k].boundary === affectedBoundary;
- }
-
- if (!used) {
- affectedBoundary.x2New = maxXNew;
- }
- }
-
- Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));
- });
- horizon.forEach(function (horizonPart) {
- var affectedBoundary = horizonPart.boundary;
-
- if (affectedBoundary.x2New === undefined) {
- affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);
- }
- });
- }
-
- function TextLayerRenderTask({
- textContent,
- textContentStream,
- container,
- viewport,
- textDivs,
- textContentItemsStr,
- enhanceTextSelection
- }) {
- this._textContent = textContent;
- this._textContentStream = textContentStream;
- this._container = container;
- this._viewport = viewport;
- this._textDivs = textDivs || [];
- this._textContentItemsStr = textContentItemsStr || [];
- this._enhanceTextSelection = !!enhanceTextSelection;
- this._fontInspectorEnabled = !!(globalThis.FontInspector && globalThis.FontInspector.enabled);
- this._reader = null;
- this._layoutTextLastFontSize = null;
- this._layoutTextLastFontFamily = null;
- this._layoutTextCtx = null;
- this._textDivProperties = new WeakMap();
- this._renderingDone = false;
- this._canceled = false;
- this._capability = (0, _util.createPromiseCapability)();
- this._renderTimer = null;
- this._bounds = [];
-
- this._capability.promise.finally(() => {
- if (this._layoutTextCtx) {
- this._layoutTextCtx.canvas.width = 0;
- this._layoutTextCtx.canvas.height = 0;
- this._layoutTextCtx = null;
- }
- }).catch(() => {});
- }
-
- TextLayerRenderTask.prototype = {
- get promise() {
- return this._capability.promise;
- },
-
- cancel: function TextLayer_cancel() {
- this._canceled = true;
-
- if (this._reader) {
- this._reader.cancel(new _util.AbortException("TextLayer task cancelled."));
-
- this._reader = null;
- }
-
- if (this._renderTimer !== null) {
- clearTimeout(this._renderTimer);
- this._renderTimer = null;
- }
-
- this._capability.reject(new Error("TextLayer task cancelled."));
- },
-
- _processItems(items, styleCache) {
- for (let i = 0, len = items.length; i < len; i++) {
- this._textContentItemsStr.push(items[i].str);
-
- appendText(this, items[i], styleCache);
- }
- },
-
- _layoutText(textDiv) {
- const textDivProperties = this._textDivProperties.get(textDiv);
-
- if (textDivProperties.isWhitespace) {
- return;
- }
-
- let transform = "";
-
- if (textDivProperties.canvasWidth !== 0) {
- const {
- fontSize,
- fontFamily
- } = textDiv.style;
-
- if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {
- this._layoutTextCtx.font = `${fontSize} ${fontFamily}`;
- this._layoutTextLastFontSize = fontSize;
- this._layoutTextLastFontFamily = fontFamily;
- }
-
- const {
- width
- } = this._layoutTextCtx.measureText(textDiv.textContent);
-
- if (width > 0) {
- textDivProperties.scale = textDivProperties.canvasWidth / width;
- transform = `scaleX(${textDivProperties.scale})`;
- }
- }
-
- if (textDivProperties.angle !== 0) {
- transform = `rotate(${textDivProperties.angle}deg) ${transform}`;
- }
-
- if (transform.length > 0) {
- if (this._enhanceTextSelection) {
- textDivProperties.originalTransform = transform;
- }
-
- textDiv.style.transform = transform;
- }
-
- this._textDivProperties.set(textDiv, textDivProperties);
-
- this._container.appendChild(textDiv);
- },
-
- _render: function TextLayer_render(timeout) {
- const capability = (0, _util.createPromiseCapability)();
- let styleCache = Object.create(null);
- const canvas = document.createElement("canvas");
- canvas.mozOpaque = true;
- this._layoutTextCtx = canvas.getContext("2d", {
- alpha: false
- });
-
- if (this._textContent) {
- const textItems = this._textContent.items;
- const textStyles = this._textContent.styles;
-
- this._processItems(textItems, textStyles);
-
- capability.resolve();
- } else if (this._textContentStream) {
- 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._textContentStream.getReader();
- pump();
- } else {
- throw new Error('Neither "textContent" nor "textContentStream"' + " parameters specified.");
- }
-
- capability.promise.then(() => {
- styleCache = null;
-
- if (!timeout) {
- render(this);
- } else {
- this._renderTimer = setTimeout(() => {
- render(this);
- this._renderTimer = null;
- }, timeout);
- }
- }, this._capability.reject);
- },
- expandTextDivs: function TextLayer_expandTextDivs(expandDivs) {
- if (!this._enhanceTextSelection || !this._renderingDone) {
- return;
- }
-
- if (this._bounds !== null) {
- expand(this);
- this._bounds = null;
- }
-
- const transformBuf = [],
- paddingBuf = [];
-
- for (var i = 0, ii = this._textDivs.length; i < ii; i++) {
- const div = this._textDivs[i];
-
- const divProps = this._textDivProperties.get(div);
-
- if (divProps.isWhitespace) {
- continue;
- }
-
- if (expandDivs) {
- transformBuf.length = 0;
- paddingBuf.length = 0;
-
- if (divProps.originalTransform) {
- transformBuf.push(divProps.originalTransform);
- }
-
- if (divProps.paddingTop > 0) {
- paddingBuf.push(`${divProps.paddingTop}px`);
- transformBuf.push(`translateY(${-divProps.paddingTop}px)`);
- } else {
- paddingBuf.push(0);
- }
-
- if (divProps.paddingRight > 0) {
- paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`);
- } else {
- paddingBuf.push(0);
- }
-
- if (divProps.paddingBottom > 0) {
- paddingBuf.push(`${divProps.paddingBottom}px`);
- } else {
- paddingBuf.push(0);
- }
-
- if (divProps.paddingLeft > 0) {
- paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`);
- transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`);
- } else {
- paddingBuf.push(0);
- }
-
- div.style.padding = paddingBuf.join(" ");
-
- if (transformBuf.length) {
- div.style.transform = transformBuf.join(" ");
- }
- } else {
- div.style.padding = null;
- div.style.transform = divProps.originalTransform;
- }
- }
- }
- };
-
- function renderTextLayer(renderParameters) {
- var task = new TextLayerRenderTask({
- textContent: renderParameters.textContent,
- textContentStream: renderParameters.textContentStream,
- container: renderParameters.container,
- viewport: renderParameters.viewport,
- textDivs: renderParameters.textDivs,
- textContentItemsStr: renderParameters.textContentItemsStr,
- enhanceTextSelection: renderParameters.enhanceTextSelection
- });
-
- task._render(renderParameters.timeout);
-
- return task;
- }
-
- return renderTextLayer;
-}();
-
-exports.renderTextLayer = renderTextLayer;
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.SVGGraphics = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _display_utils = __w_pdfjs_require__(1);
-
-var _is_node = __w_pdfjs_require__(4);
-
-let SVGGraphics = function () {
- throw new Error("Not implemented: SVGGraphics");
-};
-
-exports.SVGGraphics = SVGGraphics;
-{
- const SVG_DEFAULTS = {
- fontStyle: "normal",
- fontWeight: "normal",
- fillColor: "#000000"
- };
- const XML_NS = "http://www.w3.org/XML/1998/namespace";
- const XLINK_NS = "http://www.w3.org/1999/xlink";
- const LINE_CAP_STYLES = ["butt", "round", "square"];
- const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
-
- const convertImgDataToPng = function () {
- const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
- const CHUNK_WRAPPER_SIZE = 12;
- const crcTable = new Int32Array(256);
-
- for (let i = 0; i < 256; i++) {
- let c = i;
-
- for (let h = 0; h < 8; h++) {
- if (c & 1) {
- c = 0xedb88320 ^ c >> 1 & 0x7fffffff;
- } else {
- c = c >> 1 & 0x7fffffff;
- }
- }
-
- crcTable[i] = c;
- }
-
- function crc32(data, start, end) {
- let crc = -1;
-
- for (let i = start; i < end; i++) {
- const a = (crc ^ data[i]) & 0xff;
- const b = crcTable[a];
- crc = crc >>> 8 ^ b;
- }
-
- return crc ^ -1;
- }
-
- function writePngChunk(type, body, data, offset) {
- let p = offset;
- const len = body.length;
- data[p] = len >> 24 & 0xff;
- data[p + 1] = len >> 16 & 0xff;
- data[p + 2] = len >> 8 & 0xff;
- data[p + 3] = len & 0xff;
- p += 4;
- data[p] = type.charCodeAt(0) & 0xff;
- data[p + 1] = type.charCodeAt(1) & 0xff;
- data[p + 2] = type.charCodeAt(2) & 0xff;
- data[p + 3] = type.charCodeAt(3) & 0xff;
- p += 4;
- data.set(body, p);
- p += body.length;
- const crc = crc32(data, offset + 4, p);
- data[p] = crc >> 24 & 0xff;
- data[p + 1] = crc >> 16 & 0xff;
- data[p + 2] = crc >> 8 & 0xff;
- data[p + 3] = crc & 0xff;
- }
-
- function adler32(data, start, end) {
- let a = 1;
- let b = 0;
-
- for (let i = start; i < end; ++i) {
- a = (a + (data[i] & 0xff)) % 65521;
- b = (b + a) % 65521;
- }
-
- return b << 16 | a;
- }
-
- function deflateSync(literals) {
- if (!_is_node.isNodeJS) {
- return deflateSyncUncompressed(literals);
- }
-
- try {
- let input;
-
- if (parseInt(process.versions.node) >= 8) {
- input = literals;
- } else {
- input = Buffer.from(literals);
- }
-
- const output = require("zlib").deflateSync(input, {
- level: 9
- });
-
- return output instanceof Uint8Array ? output : new Uint8Array(output);
- } catch (e) {
- (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e);
- }
-
- return deflateSyncUncompressed(literals);
- }
-
- function deflateSyncUncompressed(literals) {
- let len = literals.length;
- const maxBlockLength = 0xffff;
- const deflateBlocks = Math.ceil(len / maxBlockLength);
- const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
- let pi = 0;
- idat[pi++] = 0x78;
- idat[pi++] = 0x9c;
- let pos = 0;
-
- while (len > maxBlockLength) {
- idat[pi++] = 0x00;
- idat[pi++] = 0xff;
- idat[pi++] = 0xff;
- idat[pi++] = 0x00;
- idat[pi++] = 0x00;
- idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
- pi += maxBlockLength;
- pos += maxBlockLength;
- len -= maxBlockLength;
- }
-
- idat[pi++] = 0x01;
- idat[pi++] = len & 0xff;
- idat[pi++] = len >> 8 & 0xff;
- idat[pi++] = ~len & 0xffff & 0xff;
- idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
- idat.set(literals.subarray(pos), pi);
- pi += literals.length - pos;
- const adler = adler32(literals, 0, literals.length);
- idat[pi++] = adler >> 24 & 0xff;
- idat[pi++] = adler >> 16 & 0xff;
- idat[pi++] = adler >> 8 & 0xff;
- idat[pi++] = adler & 0xff;
- return idat;
- }
-
- function encode(imgData, kind, forceDataSchema, isMask) {
- const width = imgData.width;
- const height = imgData.height;
- let bitDepth, colorType, lineSize;
- const bytes = imgData.data;
-
- switch (kind) {
- case _util.ImageKind.GRAYSCALE_1BPP:
- colorType = 0;
- bitDepth = 1;
- lineSize = width + 7 >> 3;
- break;
-
- case _util.ImageKind.RGB_24BPP:
- colorType = 2;
- bitDepth = 8;
- lineSize = width * 3;
- break;
-
- case _util.ImageKind.RGBA_32BPP:
- colorType = 6;
- bitDepth = 8;
- lineSize = width * 4;
- break;
-
- default:
- throw new Error("invalid format");
- }
-
- const literals = new Uint8Array((1 + lineSize) * height);
- let offsetLiterals = 0,
- offsetBytes = 0;
-
- for (let y = 0; y < height; ++y) {
- literals[offsetLiterals++] = 0;
- literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
- offsetBytes += lineSize;
- offsetLiterals += lineSize;
- }
-
- if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
- offsetLiterals = 0;
-
- for (let y = 0; y < height; y++) {
- offsetLiterals++;
-
- for (let i = 0; i < lineSize; i++) {
- literals[offsetLiterals++] ^= 0xff;
- }
- }
- }
-
- const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
- const idat = deflateSync(literals);
- const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
- const data = new Uint8Array(pngLength);
- let offset = 0;
- data.set(PNG_HEADER, offset);
- offset += PNG_HEADER.length;
- writePngChunk("IHDR", ihdr, data, offset);
- offset += CHUNK_WRAPPER_SIZE + ihdr.length;
- writePngChunk("IDATA", idat, data, offset);
- offset += CHUNK_WRAPPER_SIZE + idat.length;
- writePngChunk("IEND", new Uint8Array(0), data, offset);
- return (0, _util.createObjectURL)(data, "image/png", forceDataSchema);
- }
-
- return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
- const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
- return encode(imgData, kind, forceDataSchema, isMask);
- };
- }();
-
- class SVGExtraState {
- constructor() {
- this.fontSizeScale = 1;
- this.fontWeight = SVG_DEFAULTS.fontWeight;
- this.fontSize = 0;
- this.textMatrix = _util.IDENTITY_MATRIX;
- this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
- this.leading = 0;
- this.textRenderingMode = _util.TextRenderingMode.FILL;
- this.textMatrixScale = 1;
- this.x = 0;
- this.y = 0;
- this.lineX = 0;
- this.lineY = 0;
- this.charSpacing = 0;
- this.wordSpacing = 0;
- this.textHScale = 1;
- this.textRise = 0;
- this.fillColor = SVG_DEFAULTS.fillColor;
- this.strokeColor = "#000000";
- this.fillAlpha = 1;
- this.strokeAlpha = 1;
- this.lineWidth = 1;
- this.lineJoin = "";
- this.lineCap = "";
- this.miterLimit = 0;
- this.dashArray = [];
- this.dashPhase = 0;
- this.dependencies = [];
- this.activeClipUrl = null;
- this.clipGroup = null;
- this.maskId = "";
- }
-
- clone() {
- return Object.create(this);
- }
-
- setCurrentPoint(x, y) {
- this.x = x;
- this.y = y;
- }
-
- }
-
- function opListToTree(opList) {
- let opTree = [];
- const tmp = [];
-
- for (const opListElement of opList) {
- if (opListElement.fn === "save") {
- opTree.push({
- fnId: 92,
- fn: "group",
- items: []
- });
- tmp.push(opTree);
- opTree = opTree[opTree.length - 1].items;
- continue;
- }
-
- if (opListElement.fn === "restore") {
- opTree = tmp.pop();
- } else {
- opTree.push(opListElement);
- }
- }
-
- return opTree;
- }
-
- function pf(value) {
- if (Number.isInteger(value)) {
- return value.toString();
- }
-
- const s = value.toFixed(10);
- let i = s.length - 1;
-
- if (s[i] !== "0") {
- return s;
- }
-
- do {
- i--;
- } while (s[i] === "0");
-
- return s.substring(0, s[i] === "." ? i : i + 1);
- }
-
- function pm(m) {
- if (m[4] === 0 && m[5] === 0) {
- if (m[1] === 0 && m[2] === 0) {
- if (m[0] === 1 && m[3] === 1) {
- return "";
- }
-
- return `scale(${pf(m[0])} ${pf(m[3])})`;
- }
-
- if (m[0] === m[3] && m[1] === -m[2]) {
- const a = Math.acos(m[0]) * 180 / Math.PI;
- return `rotate(${pf(a)})`;
- }
- } else {
- if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
- return `translate(${pf(m[4])} ${pf(m[5])})`;
- }
- }
-
- return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`;
- }
-
- let clipCount = 0;
- let maskCount = 0;
- let shadingCount = 0;
- exports.SVGGraphics = SVGGraphics = class SVGGraphics {
- constructor(commonObjs, objs, forceDataSchema = false) {
- this.svgFactory = new _display_utils.DOMSVGFactory();
- this.current = new SVGExtraState();
- this.transformMatrix = _util.IDENTITY_MATRIX;
- this.transformStack = [];
- this.extraStack = [];
- this.commonObjs = commonObjs;
- this.objs = objs;
- this.pendingClip = null;
- this.pendingEOFill = false;
- this.embedFonts = false;
- this.embeddedFonts = Object.create(null);
- this.cssStyle = null;
- this.forceDataSchema = !!forceDataSchema;
- this._operatorIdMapping = [];
-
- for (const op in _util.OPS) {
- this._operatorIdMapping[_util.OPS[op]] = op;
- }
- }
-
- save() {
- this.transformStack.push(this.transformMatrix);
- const old = this.current;
- this.extraStack.push(old);
- this.current = old.clone();
- }
-
- restore() {
- this.transformMatrix = this.transformStack.pop();
- this.current = this.extraStack.pop();
- this.pendingClip = null;
- this.tgrp = null;
- }
-
- group(items) {
- this.save();
- this.executeOpTree(items);
- this.restore();
- }
-
- loadDependencies(operatorList) {
- const fnArray = operatorList.fnArray;
- const argsArray = operatorList.argsArray;
-
- for (let i = 0, ii = fnArray.length; i < ii; i++) {
- if (fnArray[i] !== _util.OPS.dependency) {
- continue;
- }
-
- for (const obj of argsArray[i]) {
- const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs;
- const promise = new Promise(resolve => {
- objsPool.get(obj, resolve);
- });
- this.current.dependencies.push(promise);
- }
- }
-
- return Promise.all(this.current.dependencies);
- }
-
- transform(a, b, c, d, e, f) {
- const transformMatrix = [a, b, c, d, e, f];
- this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
- this.tgrp = null;
- }
-
- getSVG(operatorList, viewport) {
- this.viewport = viewport;
-
- const svgElement = this._initialize(viewport);
-
- return this.loadDependencies(operatorList).then(() => {
- this.transformMatrix = _util.IDENTITY_MATRIX;
- this.executeOpTree(this.convertOpList(operatorList));
- return svgElement;
- });
- }
-
- convertOpList(operatorList) {
- const operatorIdMapping = this._operatorIdMapping;
- const argsArray = operatorList.argsArray;
- const fnArray = operatorList.fnArray;
- const opList = [];
-
- for (let i = 0, ii = fnArray.length; i < ii; i++) {
- const fnId = fnArray[i];
- opList.push({
- fnId,
- fn: operatorIdMapping[fnId],
- args: argsArray[i]
- });
- }
-
- return opListToTree(opList);
- }
-
- executeOpTree(opTree) {
- for (const opTreeElement of opTree) {
- const fn = opTreeElement.fn;
- const fnId = opTreeElement.fnId;
- const args = opTreeElement.args;
-
- switch (fnId | 0) {
- case _util.OPS.beginText:
- this.beginText();
- break;
-
- case _util.OPS.dependency:
- break;
-
- case _util.OPS.setLeading:
- this.setLeading(args);
- break;
-
- case _util.OPS.setLeadingMoveText:
- this.setLeadingMoveText(args[0], args[1]);
- break;
-
- case _util.OPS.setFont:
- this.setFont(args);
- break;
-
- case _util.OPS.showText:
- this.showText(args[0]);
- break;
-
- case _util.OPS.showSpacedText:
- this.showText(args[0]);
- break;
-
- case _util.OPS.endText:
- this.endText();
- break;
-
- case _util.OPS.moveText:
- this.moveText(args[0], args[1]);
- break;
-
- case _util.OPS.setCharSpacing:
- this.setCharSpacing(args[0]);
- break;
-
- case _util.OPS.setWordSpacing:
- this.setWordSpacing(args[0]);
- break;
-
- case _util.OPS.setHScale:
- this.setHScale(args[0]);
- break;
-
- case _util.OPS.setTextMatrix:
- this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
- break;
-
- case _util.OPS.setTextRise:
- this.setTextRise(args[0]);
- break;
-
- case _util.OPS.setTextRenderingMode:
- this.setTextRenderingMode(args[0]);
- break;
-
- case _util.OPS.setLineWidth:
- this.setLineWidth(args[0]);
- break;
-
- case _util.OPS.setLineJoin:
- this.setLineJoin(args[0]);
- break;
-
- case _util.OPS.setLineCap:
- this.setLineCap(args[0]);
- break;
-
- case _util.OPS.setMiterLimit:
- this.setMiterLimit(args[0]);
- break;
-
- case _util.OPS.setFillRGBColor:
- this.setFillRGBColor(args[0], args[1], args[2]);
- break;
-
- case _util.OPS.setStrokeRGBColor:
- this.setStrokeRGBColor(args[0], args[1], args[2]);
- break;
-
- case _util.OPS.setStrokeColorN:
- this.setStrokeColorN(args);
- break;
-
- case _util.OPS.setFillColorN:
- this.setFillColorN(args);
- break;
-
- case _util.OPS.shadingFill:
- this.shadingFill(args[0]);
- break;
-
- case _util.OPS.setDash:
- this.setDash(args[0], args[1]);
- break;
-
- case _util.OPS.setRenderingIntent:
- this.setRenderingIntent(args[0]);
- break;
-
- case _util.OPS.setFlatness:
- this.setFlatness(args[0]);
- break;
-
- case _util.OPS.setGState:
- this.setGState(args[0]);
- break;
-
- case _util.OPS.fill:
- this.fill();
- break;
-
- case _util.OPS.eoFill:
- this.eoFill();
- break;
-
- case _util.OPS.stroke:
- this.stroke();
- break;
-
- case _util.OPS.fillStroke:
- this.fillStroke();
- break;
-
- case _util.OPS.eoFillStroke:
- this.eoFillStroke();
- break;
-
- case _util.OPS.clip:
- this.clip("nonzero");
- break;
-
- case _util.OPS.eoClip:
- this.clip("evenodd");
- break;
-
- case _util.OPS.paintSolidColorImageMask:
- this.paintSolidColorImageMask();
- break;
-
- case _util.OPS.paintImageXObject:
- this.paintImageXObject(args[0]);
- break;
-
- case _util.OPS.paintInlineImageXObject:
- this.paintInlineImageXObject(args[0]);
- break;
-
- case _util.OPS.paintImageMaskXObject:
- this.paintImageMaskXObject(args[0]);
- break;
-
- case _util.OPS.paintFormXObjectBegin:
- this.paintFormXObjectBegin(args[0], args[1]);
- break;
-
- case _util.OPS.paintFormXObjectEnd:
- this.paintFormXObjectEnd();
- break;
-
- case _util.OPS.closePath:
- this.closePath();
- break;
-
- case _util.OPS.closeStroke:
- this.closeStroke();
- break;
-
- case _util.OPS.closeFillStroke:
- this.closeFillStroke();
- break;
-
- case _util.OPS.closeEOFillStroke:
- this.closeEOFillStroke();
- break;
-
- case _util.OPS.nextLine:
- this.nextLine();
- break;
-
- case _util.OPS.transform:
- this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
- break;
-
- case _util.OPS.constructPath:
- this.constructPath(args[0], args[1]);
- break;
-
- case _util.OPS.endPath:
- this.endPath();
- break;
-
- case 92:
- this.group(opTreeElement.items);
- break;
-
- default:
- (0, _util.warn)(`Unimplemented operator ${fn}`);
- break;
- }
- }
- }
-
- setWordSpacing(wordSpacing) {
- this.current.wordSpacing = wordSpacing;
- }
-
- setCharSpacing(charSpacing) {
- this.current.charSpacing = charSpacing;
- }
-
- nextLine() {
- this.moveText(0, this.current.leading);
- }
-
- setTextMatrix(a, b, c, d, e, f) {
- const current = this.current;
- current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
- current.textMatrixScale = Math.sqrt(a * a + b * b);
- current.x = current.lineX = 0;
- current.y = current.lineY = 0;
- current.xcoords = [];
- current.ycoords = [];
- current.tspan = this.svgFactory.createElement("svg:tspan");
- current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
- current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
- current.tspan.setAttributeNS(null, "y", pf(-current.y));
- current.txtElement = this.svgFactory.createElement("svg:text");
- current.txtElement.appendChild(current.tspan);
- }
-
- beginText() {
- const current = this.current;
- current.x = current.lineX = 0;
- current.y = current.lineY = 0;
- current.textMatrix = _util.IDENTITY_MATRIX;
- current.lineMatrix = _util.IDENTITY_MATRIX;
- current.textMatrixScale = 1;
- current.tspan = this.svgFactory.createElement("svg:tspan");
- current.txtElement = this.svgFactory.createElement("svg:text");
- current.txtgrp = this.svgFactory.createElement("svg:g");
- current.xcoords = [];
- current.ycoords = [];
- }
-
- moveText(x, y) {
- const current = this.current;
- current.x = current.lineX += x;
- current.y = current.lineY += y;
- current.xcoords = [];
- current.ycoords = [];
- current.tspan = this.svgFactory.createElement("svg:tspan");
- current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
- current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
- current.tspan.setAttributeNS(null, "y", pf(-current.y));
- }
-
- showText(glyphs) {
- const current = this.current;
- const font = current.font;
- const fontSize = current.fontSize;
-
- if (fontSize === 0) {
- return;
- }
-
- const fontSizeScale = current.fontSizeScale;
- const charSpacing = current.charSpacing;
- const wordSpacing = current.wordSpacing;
- const fontDirection = current.fontDirection;
- const textHScale = current.textHScale * fontDirection;
- const vertical = font.vertical;
- const spacingDir = vertical ? 1 : -1;
- const defaultVMetrics = font.defaultVMetrics;
- const widthAdvanceScale = fontSize * current.fontMatrix[0];
- let x = 0;
-
- for (const glyph of glyphs) {
- if (glyph === null) {
- x += fontDirection * wordSpacing;
- continue;
- } else if ((0, _util.isNum)(glyph)) {
- x += spacingDir * glyph * fontSize / 1000;
- continue;
- }
-
- const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
- const character = glyph.fontChar;
- let scaledX, scaledY;
- let width = glyph.width;
-
- if (vertical) {
- let vx;
- const vmetric = glyph.vmetric || defaultVMetrics;
- vx = glyph.vmetric ? vmetric[1] : width * 0.5;
- vx = -vx * 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 (glyph.isInFont || font.missingFile) {
- current.xcoords.push(current.x + scaledX);
-
- if (vertical) {
- current.ycoords.push(-current.y + scaledY);
- }
-
- current.tspan.textContent += character;
- } else {}
-
- let charWidth;
-
- if (vertical) {
- charWidth = width * widthAdvanceScale - spacing * fontDirection;
- } else {
- charWidth = width * widthAdvanceScale + spacing * fontDirection;
- }
-
- x += charWidth;
- }
-
- current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
-
- if (vertical) {
- current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
- } else {
- current.tspan.setAttributeNS(null, "y", pf(-current.y));
- }
-
- if (vertical) {
- current.y -= x;
- } else {
- current.x += x * textHScale;
- }
-
- current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
- current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
-
- if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
- current.tspan.setAttributeNS(null, "font-style", current.fontStyle);
- }
-
- if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
- current.tspan.setAttributeNS(null, "font-weight", current.fontWeight);
- }
-
- const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
-
- if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
- if (current.fillColor !== SVG_DEFAULTS.fillColor) {
- current.tspan.setAttributeNS(null, "fill", current.fillColor);
- }
-
- if (current.fillAlpha < 1) {
- current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha);
- }
- } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
- current.tspan.setAttributeNS(null, "fill", "transparent");
- } else {
- current.tspan.setAttributeNS(null, "fill", "none");
- }
-
- if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
- const lineWidthScale = 1 / (current.textMatrixScale || 1);
-
- this._setStrokeAttributes(current.tspan, lineWidthScale);
- }
-
- let textMatrix = current.textMatrix;
-
- if (current.textRise !== 0) {
- textMatrix = textMatrix.slice();
- textMatrix[5] += current.textRise;
- }
-
- current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`);
- current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve");
- current.txtElement.appendChild(current.tspan);
- current.txtgrp.appendChild(current.txtElement);
-
- this._ensureTransformGroup().appendChild(current.txtElement);
- }
-
- setLeadingMoveText(x, y) {
- this.setLeading(-y);
- this.moveText(x, y);
- }
-
- addFontStyle(fontObj) {
- if (!fontObj.data) {
- throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
- }
-
- if (!this.cssStyle) {
- this.cssStyle = this.svgFactory.createElement("svg:style");
- this.cssStyle.setAttributeNS(null, "type", "text/css");
- this.defs.appendChild(this.cssStyle);
- }
-
- const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);
- this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`;
- }
-
- setFont(details) {
- const current = this.current;
- const fontObj = this.commonObjs.get(details[0]);
- let size = details[1];
- current.font = fontObj;
-
- if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
- this.addFontStyle(fontObj);
- this.embeddedFonts[fontObj.loadedName] = fontObj;
- }
-
- current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
- let bold = "normal";
-
- if (fontObj.black) {
- bold = "900";
- } else if (fontObj.bold) {
- bold = "bold";
- }
-
- const italic = fontObj.italic ? "italic" : "normal";
-
- if (size < 0) {
- size = -size;
- current.fontDirection = -1;
- } else {
- current.fontDirection = 1;
- }
-
- current.fontSize = size;
- current.fontFamily = fontObj.loadedName;
- current.fontWeight = bold;
- current.fontStyle = italic;
- current.tspan = this.svgFactory.createElement("svg:tspan");
- current.tspan.setAttributeNS(null, "y", pf(-current.y));
- current.xcoords = [];
- current.ycoords = [];
- }
-
- endText() {
- const current = this.current;
-
- if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) {
- current.element = current.txtElement;
- this.clip("nonzero");
- this.endPath();
- }
- }
-
- setLineWidth(width) {
- if (width > 0) {
- this.current.lineWidth = width;
- }
- }
-
- setLineCap(style) {
- this.current.lineCap = LINE_CAP_STYLES[style];
- }
-
- setLineJoin(style) {
- this.current.lineJoin = LINE_JOIN_STYLES[style];
- }
-
- setMiterLimit(limit) {
- this.current.miterLimit = limit;
- }
-
- setStrokeAlpha(strokeAlpha) {
- this.current.strokeAlpha = strokeAlpha;
- }
-
- setStrokeRGBColor(r, g, b) {
- this.current.strokeColor = _util.Util.makeCssRgb(r, g, b);
- }
-
- setFillAlpha(fillAlpha) {
- this.current.fillAlpha = fillAlpha;
- }
-
- setFillRGBColor(r, g, b) {
- this.current.fillColor = _util.Util.makeCssRgb(r, g, b);
- this.current.tspan = this.svgFactory.createElement("svg:tspan");
- this.current.xcoords = [];
- this.current.ycoords = [];
- }
-
- setStrokeColorN(args) {
- this.current.strokeColor = this._makeColorN_Pattern(args);
- }
-
- setFillColorN(args) {
- this.current.fillColor = this._makeColorN_Pattern(args);
- }
-
- shadingFill(args) {
- const width = this.viewport.width;
- const height = this.viewport.height;
-
- const inv = _util.Util.inverseTransform(this.transformMatrix);
-
- const bl = _util.Util.applyTransform([0, 0], inv);
-
- const br = _util.Util.applyTransform([0, height], inv);
-
- const ul = _util.Util.applyTransform([width, 0], inv);
-
- const ur = _util.Util.applyTransform([width, height], inv);
-
- const x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
- const y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
- const x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
- const y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
- const rect = this.svgFactory.createElement("svg:rect");
- rect.setAttributeNS(null, "x", x0);
- rect.setAttributeNS(null, "y", y0);
- rect.setAttributeNS(null, "width", x1 - x0);
- rect.setAttributeNS(null, "height", y1 - y0);
- rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));
-
- if (this.current.fillAlpha < 1) {
- rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
- }
-
- this._ensureTransformGroup().appendChild(rect);
- }
-
- _makeColorN_Pattern(args) {
- if (args[0] === "TilingPattern") {
- return this._makeTilingPattern(args);
- }
-
- return this._makeShadingPattern(args);
- }
-
- _makeTilingPattern(args) {
- const color = args[1];
- const operatorList = args[2];
- const matrix = args[3] || _util.IDENTITY_MATRIX;
- const [x0, y0, x1, y1] = args[4];
- const xstep = args[5];
- const ystep = args[6];
- const paintType = args[7];
- const tilingId = `shading${shadingCount++}`;
-
- const [tx0, ty0] = _util.Util.applyTransform([x0, y0], matrix);
-
- const [tx1, ty1] = _util.Util.applyTransform([x1, y1], matrix);
-
- const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix);
-
- const txstep = xstep * xscale;
- const tystep = ystep * yscale;
- const tiling = this.svgFactory.createElement("svg:pattern");
- tiling.setAttributeNS(null, "id", tilingId);
- tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse");
- tiling.setAttributeNS(null, "width", txstep);
- tiling.setAttributeNS(null, "height", tystep);
- tiling.setAttributeNS(null, "x", `${tx0}`);
- tiling.setAttributeNS(null, "y", `${ty0}`);
- const svg = this.svg;
- const transformMatrix = this.transformMatrix;
- const fillColor = this.current.fillColor;
- const strokeColor = this.current.strokeColor;
- const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);
- this.svg = bbox;
- this.transformMatrix = matrix;
-
- if (paintType === 2) {
- const cssColor = _util.Util.makeCssRgb(...color);
-
- this.current.fillColor = cssColor;
- this.current.strokeColor = cssColor;
- }
-
- this.executeOpTree(this.convertOpList(operatorList));
- this.svg = svg;
- this.transformMatrix = transformMatrix;
- this.current.fillColor = fillColor;
- this.current.strokeColor = strokeColor;
- tiling.appendChild(bbox.childNodes[0]);
- this.defs.appendChild(tiling);
- return `url(#${tilingId})`;
- }
-
- _makeShadingPattern(args) {
- switch (args[0]) {
- case "RadialAxial":
- const shadingId = `shading${shadingCount++}`;
- const colorStops = args[3];
- let gradient;
-
- switch (args[1]) {
- case "axial":
- const point0 = args[4];
- const point1 = args[5];
- gradient = this.svgFactory.createElement("svg:linearGradient");
- gradient.setAttributeNS(null, "id", shadingId);
- gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
- gradient.setAttributeNS(null, "x1", point0[0]);
- gradient.setAttributeNS(null, "y1", point0[1]);
- gradient.setAttributeNS(null, "x2", point1[0]);
- gradient.setAttributeNS(null, "y2", point1[1]);
- break;
-
- case "radial":
- const focalPoint = args[4];
- const circlePoint = args[5];
- const focalRadius = args[6];
- const circleRadius = args[7];
- gradient = this.svgFactory.createElement("svg:radialGradient");
- gradient.setAttributeNS(null, "id", shadingId);
- gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
- gradient.setAttributeNS(null, "cx", circlePoint[0]);
- gradient.setAttributeNS(null, "cy", circlePoint[1]);
- gradient.setAttributeNS(null, "r", circleRadius);
- gradient.setAttributeNS(null, "fx", focalPoint[0]);
- gradient.setAttributeNS(null, "fy", focalPoint[1]);
- gradient.setAttributeNS(null, "fr", focalRadius);
- break;
-
- default:
- throw new Error(`Unknown RadialAxial type: ${args[1]}`);
- }
-
- for (const colorStop of colorStops) {
- const stop = this.svgFactory.createElement("svg:stop");
- stop.setAttributeNS(null, "offset", colorStop[0]);
- stop.setAttributeNS(null, "stop-color", colorStop[1]);
- gradient.appendChild(stop);
- }
-
- this.defs.appendChild(gradient);
- return `url(#${shadingId})`;
-
- case "Mesh":
- (0, _util.warn)("Unimplemented pattern Mesh");
- return null;
-
- case "Dummy":
- return "hotpink";
-
- default:
- throw new Error(`Unknown IR type: ${args[0]}`);
- }
- }
-
- setDash(dashArray, dashPhase) {
- this.current.dashArray = dashArray;
- this.current.dashPhase = dashPhase;
- }
-
- constructPath(ops, args) {
- const current = this.current;
- let x = current.x,
- y = current.y;
- let d = [];
- let j = 0;
-
- for (const op of ops) {
- switch (op | 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;
- d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z");
- break;
-
- case _util.OPS.moveTo:
- x = args[j++];
- y = args[j++];
- d.push("M", pf(x), pf(y));
- break;
-
- case _util.OPS.lineTo:
- x = args[j++];
- y = args[j++];
- d.push("L", pf(x), pf(y));
- break;
-
- case _util.OPS.curveTo:
- x = args[j + 4];
- y = args[j + 5];
- d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
- j += 6;
- break;
-
- case _util.OPS.curveTo2:
- d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
- x = args[j + 2];
- y = args[j + 3];
- j += 4;
- break;
-
- case _util.OPS.curveTo3:
- x = args[j + 2];
- y = args[j + 3];
- d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
- j += 4;
- break;
-
- case _util.OPS.closePath:
- d.push("Z");
- break;
- }
- }
-
- d = d.join(" ");
-
- if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {
- d = current.path.getAttributeNS(null, "d") + d;
- } else {
- current.path = this.svgFactory.createElement("svg:path");
-
- this._ensureTransformGroup().appendChild(current.path);
- }
-
- current.path.setAttributeNS(null, "d", d);
- current.path.setAttributeNS(null, "fill", "none");
- current.element = current.path;
- current.setCurrentPoint(x, y);
- }
-
- endPath() {
- const current = this.current;
- current.path = null;
-
- if (!this.pendingClip) {
- return;
- }
-
- if (!current.element) {
- this.pendingClip = null;
- return;
- }
-
- const clipId = `clippath${clipCount++}`;
- const clipPath = this.svgFactory.createElement("svg:clipPath");
- clipPath.setAttributeNS(null, "id", clipId);
- clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix));
- const clipElement = current.element.cloneNode(true);
-
- if (this.pendingClip === "evenodd") {
- clipElement.setAttributeNS(null, "clip-rule", "evenodd");
- } else {
- clipElement.setAttributeNS(null, "clip-rule", "nonzero");
- }
-
- this.pendingClip = null;
- clipPath.appendChild(clipElement);
- this.defs.appendChild(clipPath);
-
- if (current.activeClipUrl) {
- current.clipGroup = null;
- this.extraStack.forEach(function (prev) {
- prev.clipGroup = null;
- });
- clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl);
- }
-
- current.activeClipUrl = `url(#${clipId})`;
- this.tgrp = null;
- }
-
- clip(type) {
- this.pendingClip = type;
- }
-
- closePath() {
- const current = this.current;
-
- if (current.path) {
- const d = `${current.path.getAttributeNS(null, "d")}Z`;
- current.path.setAttributeNS(null, "d", d);
- }
- }
-
- setLeading(leading) {
- this.current.leading = -leading;
- }
-
- setTextRise(textRise) {
- this.current.textRise = textRise;
- }
-
- setTextRenderingMode(textRenderingMode) {
- this.current.textRenderingMode = textRenderingMode;
- }
-
- setHScale(scale) {
- this.current.textHScale = scale / 100;
- }
-
- 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);
- break;
-
- case "CA":
- this.setStrokeAlpha(value);
- break;
-
- case "ca":
- this.setFillAlpha(value);
- break;
-
- default:
- (0, _util.warn)(`Unimplemented graphic state operator ${key}`);
- break;
- }
- }
- }
-
- fill() {
- const current = this.current;
-
- if (current.element) {
- current.element.setAttributeNS(null, "fill", current.fillColor);
- current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha);
- this.endPath();
- }
- }
-
- stroke() {
- const current = this.current;
-
- if (current.element) {
- this._setStrokeAttributes(current.element);
-
- current.element.setAttributeNS(null, "fill", "none");
- this.endPath();
- }
- }
-
- _setStrokeAttributes(element, lineWidthScale = 1) {
- const current = this.current;
- let dashArray = current.dashArray;
-
- if (lineWidthScale !== 1 && dashArray.length > 0) {
- dashArray = dashArray.map(function (value) {
- return lineWidthScale * value;
- });
- }
-
- element.setAttributeNS(null, "stroke", current.strokeColor);
- element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha);
- element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit));
- element.setAttributeNS(null, "stroke-linecap", current.lineCap);
- element.setAttributeNS(null, "stroke-linejoin", current.lineJoin);
- element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px");
- element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" "));
- element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px");
- }
-
- eoFill() {
- if (this.current.element) {
- this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
- }
-
- this.fill();
- }
-
- fillStroke() {
- this.stroke();
- this.fill();
- }
-
- eoFillStroke() {
- if (this.current.element) {
- this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
- }
-
- this.fillStroke();
- }
-
- closeStroke() {
- this.closePath();
- this.stroke();
- }
-
- closeFillStroke() {
- this.closePath();
- this.fillStroke();
- }
-
- closeEOFillStroke() {
- this.closePath();
- this.eoFillStroke();
- }
-
- paintSolidColorImageMask() {
- const rect = this.svgFactory.createElement("svg:rect");
- rect.setAttributeNS(null, "x", "0");
- rect.setAttributeNS(null, "y", "0");
- rect.setAttributeNS(null, "width", "1px");
- rect.setAttributeNS(null, "height", "1px");
- rect.setAttributeNS(null, "fill", this.current.fillColor);
-
- this._ensureTransformGroup().appendChild(rect);
- }
-
- paintImageXObject(objId) {
- const imgData = this.objs.get(objId);
-
- if (!imgData) {
- (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`);
- return;
- }
-
- this.paintInlineImageXObject(imgData);
- }
-
- paintInlineImageXObject(imgData, mask) {
- const width = imgData.width;
- const height = imgData.height;
- const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
- const cliprect = this.svgFactory.createElement("svg:rect");
- cliprect.setAttributeNS(null, "x", "0");
- cliprect.setAttributeNS(null, "y", "0");
- cliprect.setAttributeNS(null, "width", pf(width));
- cliprect.setAttributeNS(null, "height", pf(height));
- this.current.element = cliprect;
- this.clip("nonzero");
- const imgEl = this.svgFactory.createElement("svg:image");
- imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc);
- imgEl.setAttributeNS(null, "x", "0");
- imgEl.setAttributeNS(null, "y", pf(-height));
- imgEl.setAttributeNS(null, "width", pf(width) + "px");
- imgEl.setAttributeNS(null, "height", pf(height) + "px");
- imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`);
-
- if (mask) {
- mask.appendChild(imgEl);
- } else {
- this._ensureTransformGroup().appendChild(imgEl);
- }
- }
-
- paintImageMaskXObject(imgData) {
- const current = this.current;
- const width = imgData.width;
- const height = imgData.height;
- const fillColor = current.fillColor;
- current.maskId = `mask${maskCount++}`;
- const mask = this.svgFactory.createElement("svg:mask");
- mask.setAttributeNS(null, "id", current.maskId);
- const rect = this.svgFactory.createElement("svg:rect");
- rect.setAttributeNS(null, "x", "0");
- rect.setAttributeNS(null, "y", "0");
- rect.setAttributeNS(null, "width", pf(width));
- rect.setAttributeNS(null, "height", pf(height));
- rect.setAttributeNS(null, "fill", fillColor);
- rect.setAttributeNS(null, "mask", `url(#${current.maskId})`);
- this.defs.appendChild(mask);
-
- this._ensureTransformGroup().appendChild(rect);
-
- this.paintInlineImageXObject(imgData, mask);
- }
-
- paintFormXObjectBegin(matrix, bbox) {
- if (Array.isArray(matrix) && matrix.length === 6) {
- this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
- }
-
- if (bbox) {
- const width = bbox[2] - bbox[0];
- const height = bbox[3] - bbox[1];
- const cliprect = this.svgFactory.createElement("svg:rect");
- cliprect.setAttributeNS(null, "x", bbox[0]);
- cliprect.setAttributeNS(null, "y", bbox[1]);
- cliprect.setAttributeNS(null, "width", pf(width));
- cliprect.setAttributeNS(null, "height", pf(height));
- this.current.element = cliprect;
- this.clip("nonzero");
- this.endPath();
- }
- }
-
- paintFormXObjectEnd() {}
-
- _initialize(viewport) {
- const svg = this.svgFactory.create(viewport.width, viewport.height);
- const definitions = this.svgFactory.createElement("svg:defs");
- svg.appendChild(definitions);
- this.defs = definitions;
- const rootGroup = this.svgFactory.createElement("svg:g");
- rootGroup.setAttributeNS(null, "transform", pm(viewport.transform));
- svg.appendChild(rootGroup);
- this.svg = rootGroup;
- return svg;
- }
-
- _ensureClipGroup() {
- if (!this.current.clipGroup) {
- const clipGroup = this.svgFactory.createElement("svg:g");
- clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
- this.svg.appendChild(clipGroup);
- this.current.clipGroup = clipGroup;
- }
-
- return this.current.clipGroup;
- }
-
- _ensureTransformGroup() {
- if (!this.tgrp) {
- this.tgrp = this.svgFactory.createElement("svg:g");
- this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
-
- if (this.current.activeClipUrl) {
- this._ensureClipGroup().appendChild(this.tgrp);
- } else {
- this.svg.appendChild(this.tgrp);
- }
- }
-
- return this.tgrp;
- }
-
- };
-}
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFNodeStream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _network_utils = __w_pdfjs_require__(20);
-
-;
-
-const fs = require("fs");
-
-const http = require("http");
-
-const https = require("https");
-
-const url = require("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 ? this._fullRequestReader._loaded : 0;
- }
-
- getFullReader() {
- (0, _util.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) {
- if (this._fullRequestReader) {
- this._fullRequestReader.cancel(reason);
- }
-
- const readers = this._rangeRequestReaders.slice(0);
-
- readers.forEach(function (reader) {
- reader.cancel(reason);
- });
- }
-
-}
-
-exports.PDFNodeStream = PDFNodeStream;
-
-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 = (0, _util.createPromiseCapability)();
- this._headersCapability = (0, _util.createPromiseCapability)();
- }
-
- 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 = (0, _util.createPromiseCapability)();
- return this.read();
- }
-
- this._loaded += chunk.length;
-
- if (this.onProgress) {
- 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 _util.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 = (0, _util.createPromiseCapability)();
- 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 = (0, _util.createPromiseCapability)();
- return this.read();
- }
-
- this._loaded += chunk.length;
-
- if (this.onProgress) {
- 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 _util.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.validateRangeRequestCapabilities)({
- getResponseHeader,
- isHttp: stream.isHttp,
- rangeChunkSize: this._rangeChunkSize,
- disableRange: this._disableRange
- });
- this._isRangeSupported = allowRangeRequests;
- this._contentLength = suggestedLength || this._contentLength;
- this._filename = (0, _network_utils.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 (typeof value === "undefined") {
- continue;
- }
-
- this._httpHeaders[property] = value;
- }
-
- this._httpHeaders.Range = `bytes=${start}-${end - 1}`;
-
- const handleResponse = response => {
- if (response.statusCode === 404) {
- const error = new _util.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 _util.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
- }));
- }
-
-}
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.createResponseStatusError = createResponseStatusError;
-exports.extractFilenameFromHeader = extractFilenameFromHeader;
-exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
-exports.validateResponseStatus = validateResponseStatus;
-
-var _util = __w_pdfjs_require__(2);
-
-var _content_disposition = __w_pdfjs_require__(21);
-
-function validateRangeRequestCapabilities({
- getResponseHeader,
- isHttp,
- rangeChunkSize,
- disableRange
-}) {
- (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero");
- 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 = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);
-
- if (filename.includes("%")) {
- try {
- filename = decodeURIComponent(filename);
- } catch (ex) {}
- }
-
- if (/\.pdf$/i.test(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;
-}
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
-
-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 bytes = Array.from(value, function (ch) {
- return ch.charCodeAt(0) & 0xff;
- });
- value = decoder.decode(new Uint8Array(bytes));
- needsEncodingFixup = false;
- } catch (e) {
- if (/^utf-?8$/i.test(encoding)) {
- try {
- value = decodeURIComponent(escape(value));
- needsEncodingFixup = false;
- } catch (err) {}
- }
- }
- }
-
- 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].replace(/\\(.)/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.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
- if (encoding === "q" || encoding === "Q") {
- text = text.replace(/_/g, " ");
- text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {
- return String.fromCharCode(parseInt(hex, 16));
- });
- return textdecode(charset, text);
- }
-
- try {
- text = atob(text);
- } catch (e) {}
-
- return textdecode(charset, text);
- });
- }
-
- return "";
-}
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFNetworkStream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _network_utils = __w_pdfjs_require__(20);
-
-;
-const OK_RESPONSE = 200;
-const PARTIAL_CONTENT_RESPONSE = 206;
-
-function getArrayBuffer(xhr) {
- const data = xhr.response;
-
- if (typeof data !== "string") {
- return data;
- }
-
- const array = (0, _util.stringToBytes)(data);
- return array.buffer;
-}
-
-class NetworkManager {
- constructor(url, args) {
- this.url = url;
- args = args || {};
- this.isHttp = /^https?:/i.test(url);
- this.httpHeaders = this.isHttp && args.httpHeaders || {};
- this.withCredentials = args.withCredentials || false;
-
- this.getXhr = args.getXhr || function NetworkManager_getXhr() {
- return new XMLHttpRequest();
- };
-
- 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 = this.getXhr();
- 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 (typeof 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;
- }
-
- if (pendingRequest.onProgress) {
- 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) {
- if (pendingRequest.onError) {
- 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) {
- if (pendingRequest.onError) {
- 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 if (pendingRequest.onError) {
- pendingRequest.onError(xhr.status);
- }
- }
-
- hasPendingRequests() {
- for (const xhrId in this.pendingRequests) {
- return true;
- }
-
- return false;
- }
-
- getRequestXhr(xhrId) {
- return this.pendingRequests[xhrId].xhr;
- }
-
- isPendingRequest(xhrId) {
- return xhrId in this.pendingRequests;
- }
-
- abortAllRequests() {
- for (const xhrId in this.pendingRequests) {
- this.abortRequest(xhrId | 0);
- }
- }
-
- 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, _util.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) {
- if (this._fullRequestReader) {
- this._fullRequestReader.cancel(reason);
- }
-
- const readers = this._rangeRequestReaders.slice(0);
-
- readers.forEach(function (reader) {
- reader.cancel(reason);
- });
- }
-
-}
-
-exports.PDFNetworkStream = PDFNetworkStream;
-
-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 = (0, _util.createPromiseCapability)();
- 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.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.extractFilenameFromHeader)(getResponseHeader);
-
- if (this._isRangeSupported) {
- this._manager.abortRequest(fullRequestXhrId);
- }
-
- this._headersReceivedCapability.resolve();
- }
-
- _onDone(args) {
- if (args) {
- if (this._requests.length > 0) {
- const requestCapability = this._requests.shift();
-
- requestCapability.resolve({
- value: args.chunk,
- done: false
- });
- } else {
- this._cachedChunks.push(args.chunk);
- }
- }
-
- this._done = true;
-
- if (this._cachedChunks.length > 0) {
- return;
- }
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.resolve({
- value: undefined,
- done: true
- });
- });
-
- this._requests = [];
- }
-
- _onError(status) {
- const url = this._url;
- const exception = (0, _network_utils.createResponseStatusError)(status, url);
- this._storedError = exception;
-
- this._headersReceivedCapability.reject(exception);
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.reject(exception);
- });
-
- this._requests = [];
- this._cachedChunks = [];
- }
-
- _onProgress(data) {
- if (this.onProgress) {
- this.onProgress({
- loaded: data.loaded,
- total: data.lengthComputable ? data.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 = (0, _util.createPromiseCapability)();
-
- this._requests.push(requestCapability);
-
- return requestCapability.promise;
- }
-
- cancel(reason) {
- this._done = true;
-
- this._headersReceivedCapability.reject(reason);
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.resolve({
- value: undefined,
- done: true
- });
- });
-
- this._requests = [];
-
- 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),
- onProgress: this._onProgress.bind(this)
- };
- this._requestId = manager.requestRange(begin, end, args);
- this._requests = [];
- this._queuedChunk = null;
- this._done = false;
- this.onProgress = null;
- this.onClosed = null;
- }
-
- _close() {
- if (this.onClosed) {
- 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;
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.resolve({
- value: undefined,
- done: true
- });
- });
-
- this._requests = [];
-
- this._close();
- }
-
- _onProgress(evt) {
- if (!this.isStreamingSupported && this.onProgress) {
- this.onProgress({
- loaded: evt.loaded
- });
- }
- }
-
- get isStreamingSupported() {
- return false;
- }
-
- async read() {
- 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 = (0, _util.createPromiseCapability)();
-
- this._requests.push(requestCapability);
-
- return requestCapability.promise;
- }
-
- cancel(reason) {
- this._done = true;
-
- this._requests.forEach(function (requestCapability) {
- requestCapability.resolve({
- value: undefined,
- done: true
- });
- });
-
- this._requests = [];
-
- if (this._manager.isPendingRequest(this._requestId)) {
- this._manager.abortRequest(this._requestId);
- }
-
- this._close();
- }
-
-}
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFFetchStream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _network_utils = __w_pdfjs_require__(20);
-
-;
-
-function createFetchOptions(headers, withCredentials, abortController) {
- return {
- method: "GET",
- headers,
- signal: abortController && 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 (typeof value === "undefined") {
- continue;
- }
-
- headers.append(property, value);
- }
-
- return headers;
-}
-
-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 ? this._fullRequestReader._loaded : 0;
- }
-
- getFullReader() {
- (0, _util.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) {
- if (this._fullRequestReader) {
- this._fullRequestReader.cancel(reason);
- }
-
- const readers = this._rangeRequestReaders.slice(0);
-
- readers.forEach(function (reader) {
- reader.cancel(reason);
- });
- }
-
-}
-
-exports.PDFFetchStream = PDFFetchStream;
-
-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 = (0, _util.createPromiseCapability)();
- this._disableRange = source.disableRange || false;
- this._rangeChunkSize = source.rangeChunkSize;
-
- if (!this._rangeChunkSize && !this._disableRange) {
- this._disableRange = true;
- }
-
- if (typeof AbortController !== "undefined") {
- 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.validateResponseStatus)(response.status)) {
- throw (0, _network_utils.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.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.extractFilenameFromHeader)(getResponseHeader);
-
- if (!this._isStreamingSupported && this._isRangeSupported) {
- this.cancel(new _util.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;
-
- if (this.onProgress) {
- this.onProgress({
- loaded: this._loaded,
- total: this._contentLength
- });
- }
-
- const buffer = new Uint8Array(value).buffer;
- return {
- value: buffer,
- done: false
- };
- }
-
- cancel(reason) {
- if (this._reader) {
- this._reader.cancel(reason);
- }
-
- if (this._abortController) {
- 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 = (0, _util.createPromiseCapability)();
- this._isStreamingSupported = !source.disableStream;
-
- if (typeof AbortController !== "undefined") {
- 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.validateResponseStatus)(response.status)) {
- throw (0, _network_utils.createResponseStatusError)(response.status, url);
- }
-
- this._readCapability.resolve();
-
- this._reader = response.body.getReader();
- });
- 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;
-
- if (this.onProgress) {
- this.onProgress({
- loaded: this._loaded
- });
- }
-
- const buffer = new Uint8Array(value).buffer;
- return {
- value: buffer,
- done: false
- };
- }
-
- cancel(reason) {
- if (this._reader) {
- this._reader.cancel(reason);
- }
-
- if (this._abortController) {
- this._abortController.abort();
- }
- }
-
-}
-
-/***/ })
-/******/ ]);
-});
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2020 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
+ */
+
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define("pdfjs-dist/build/pdf", [], factory);
+ else if(typeof exports === 'object')
+ exports["pdfjs-dist/build/pdf"] = factory();
+ else
+ root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __w_pdfjs_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __w_pdfjs_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __w_pdfjs_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __w_pdfjs_require__.d = function(exports, name, getter) {
+/******/ if(!__w_pdfjs_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __w_pdfjs_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __w_pdfjs_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __w_pdfjs_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __w_pdfjs_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __w_pdfjs_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __w_pdfjs_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __w_pdfjs_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "addLinkAttributes", {
+ enumerable: true,
+ get: function () {
+ return _display_utils.addLinkAttributes;
+ }
+});
+Object.defineProperty(exports, "getFilenameFromUrl", {
+ enumerable: true,
+ get: function () {
+ return _display_utils.getFilenameFromUrl;
+ }
+});
+Object.defineProperty(exports, "LinkTarget", {
+ enumerable: true,
+ get: function () {
+ return _display_utils.LinkTarget;
+ }
+});
+Object.defineProperty(exports, "loadScript", {
+ enumerable: true,
+ get: function () {
+ return _display_utils.loadScript;
+ }
+});
+Object.defineProperty(exports, "PDFDateString", {
+ enumerable: true,
+ get: function () {
+ return _display_utils.PDFDateString;
+ }
+});
+Object.defineProperty(exports, "RenderingCancelledException", {
+ enumerable: true,
+ get: function () {
+ return _display_utils.RenderingCancelledException;
+ }
+});
+Object.defineProperty(exports, "build", {
+ enumerable: true,
+ get: function () {
+ return _api.build;
+ }
+});
+Object.defineProperty(exports, "getDocument", {
+ enumerable: true,
+ get: function () {
+ return _api.getDocument;
+ }
+});
+Object.defineProperty(exports, "LoopbackPort", {
+ enumerable: true,
+ get: function () {
+ return _api.LoopbackPort;
+ }
+});
+Object.defineProperty(exports, "PDFDataRangeTransport", {
+ enumerable: true,
+ get: function () {
+ return _api.PDFDataRangeTransport;
+ }
+});
+Object.defineProperty(exports, "PDFWorker", {
+ enumerable: true,
+ get: function () {
+ return _api.PDFWorker;
+ }
+});
+Object.defineProperty(exports, "version", {
+ enumerable: true,
+ get: function () {
+ return _api.version;
+ }
+});
+Object.defineProperty(exports, "CMapCompressionType", {
+ enumerable: true,
+ get: function () {
+ return _util.CMapCompressionType;
+ }
+});
+Object.defineProperty(exports, "createObjectURL", {
+ enumerable: true,
+ get: function () {
+ return _util.createObjectURL;
+ }
+});
+Object.defineProperty(exports, "createPromiseCapability", {
+ enumerable: true,
+ get: function () {
+ return _util.createPromiseCapability;
+ }
+});
+Object.defineProperty(exports, "createValidAbsoluteUrl", {
+ enumerable: true,
+ get: function () {
+ return _util.createValidAbsoluteUrl;
+ }
+});
+Object.defineProperty(exports, "InvalidPDFException", {
+ enumerable: true,
+ get: function () {
+ return _util.InvalidPDFException;
+ }
+});
+Object.defineProperty(exports, "MissingPDFException", {
+ enumerable: true,
+ get: function () {
+ return _util.MissingPDFException;
+ }
+});
+Object.defineProperty(exports, "OPS", {
+ enumerable: true,
+ get: function () {
+ return _util.OPS;
+ }
+});
+Object.defineProperty(exports, "PasswordResponses", {
+ enumerable: true,
+ get: function () {
+ return _util.PasswordResponses;
+ }
+});
+Object.defineProperty(exports, "PermissionFlag", {
+ enumerable: true,
+ get: function () {
+ return _util.PermissionFlag;
+ }
+});
+Object.defineProperty(exports, "removeNullCharacters", {
+ enumerable: true,
+ get: function () {
+ return _util.removeNullCharacters;
+ }
+});
+Object.defineProperty(exports, "shadow", {
+ enumerable: true,
+ get: function () {
+ return _util.shadow;
+ }
+});
+Object.defineProperty(exports, "UnexpectedResponseException", {
+ enumerable: true,
+ get: function () {
+ return _util.UnexpectedResponseException;
+ }
+});
+Object.defineProperty(exports, "UNSUPPORTED_FEATURES", {
+ enumerable: true,
+ get: function () {
+ return _util.UNSUPPORTED_FEATURES;
+ }
+});
+Object.defineProperty(exports, "Util", {
+ enumerable: true,
+ get: function () {
+ return _util.Util;
+ }
+});
+Object.defineProperty(exports, "VerbosityLevel", {
+ enumerable: true,
+ get: function () {
+ return _util.VerbosityLevel;
+ }
+});
+Object.defineProperty(exports, "AnnotationLayer", {
+ enumerable: true,
+ get: function () {
+ return _annotation_layer.AnnotationLayer;
+ }
+});
+Object.defineProperty(exports, "apiCompatibilityParams", {
+ enumerable: true,
+ get: function () {
+ return _api_compatibility.apiCompatibilityParams;
+ }
+});
+Object.defineProperty(exports, "GlobalWorkerOptions", {
+ enumerable: true,
+ get: function () {
+ return _worker_options.GlobalWorkerOptions;
+ }
+});
+Object.defineProperty(exports, "renderTextLayer", {
+ enumerable: true,
+ get: function () {
+ return _text_layer.renderTextLayer;
+ }
+});
+Object.defineProperty(exports, "SVGGraphics", {
+ enumerable: true,
+ get: function () {
+ return _svg.SVGGraphics;
+ }
+});
+
+var _display_utils = __w_pdfjs_require__(1);
+
+var _api = __w_pdfjs_require__(5);
+
+var _util = __w_pdfjs_require__(2);
+
+var _annotation_layer = __w_pdfjs_require__(16);
+
+var _api_compatibility = __w_pdfjs_require__(7);
+
+var _worker_options = __w_pdfjs_require__(10);
+
+var _text_layer = __w_pdfjs_require__(17);
+
+var _svg = __w_pdfjs_require__(18);
+
+const pdfjsVersion = '2.5.207';
+const pdfjsBuild = '0974d6052';
+{
+ const {
+ isNodeJS
+ } = __w_pdfjs_require__(4);
+
+ if (isNodeJS) {
+ const PDFNodeStream = __w_pdfjs_require__(19).PDFNodeStream;
+
+ (0, _api.setPDFNetworkStreamFactory)(params => {
+ return new PDFNodeStream(params);
+ });
+ } else {
+ const PDFNetworkStream = __w_pdfjs_require__(22).PDFNetworkStream;
+
+ let PDFFetchStream;
+
+ if ((0, _display_utils.isFetchSupported)()) {
+ PDFFetchStream = __w_pdfjs_require__(23).PDFFetchStream;
+ }
+
+ (0, _api.setPDFNetworkStreamFactory)(params => {
+ if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {
+ return new PDFFetchStream(params);
+ }
+
+ return new PDFNetworkStream(params);
+ });
+ }
+}
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.addLinkAttributes = addLinkAttributes;
+exports.getFilenameFromUrl = getFilenameFromUrl;
+exports.isFetchSupported = isFetchSupported;
+exports.isValidFetchUrl = isValidFetchUrl;
+exports.loadScript = loadScript;
+exports.deprecated = deprecated;
+exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+const DEFAULT_LINK_REL = "noopener noreferrer nofollow";
+exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
+const SVG_NS = "http://www.w3.org/2000/svg";
+
+class DOMCanvasFactory {
+ create(width, height) {
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid canvas size");
+ }
+
+ const canvas = document.createElement("canvas");
+ const context = canvas.getContext("2d");
+ canvas.width = width;
+ canvas.height = height;
+ return {
+ canvas,
+ context
+ };
+ }
+
+ 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;
+ }
+
+}
+
+exports.DOMCanvasFactory = DOMCanvasFactory;
+
+class DOMCMapReaderFactory {
+ constructor({
+ baseUrl = null,
+ isCompressed = false
+ }) {
+ 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 ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
+
+ if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) {
+ return fetch(url).then(async response => {
+ if (!response.ok) {
+ throw new Error(response.statusText);
+ }
+
+ let cMapData;
+
+ if (this.isCompressed) {
+ cMapData = new Uint8Array(await response.arrayBuffer());
+ } else {
+ cMapData = (0, _util.stringToBytes)(await response.text());
+ }
+
+ return {
+ cMapData,
+ compressionType
+ };
+ }).catch(reason => {
+ throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
+ });
+ }
+
+ return new Promise((resolve, reject) => {
+ const request = new XMLHttpRequest();
+ request.open("GET", url, true);
+
+ if (this.isCompressed) {
+ request.responseType = "arraybuffer";
+ }
+
+ request.onreadystatechange = () => {
+ if (request.readyState !== XMLHttpRequest.DONE) {
+ return;
+ }
+
+ if (request.status === 200 || request.status === 0) {
+ let cMapData;
+
+ if (this.isCompressed && request.response) {
+ cMapData = new Uint8Array(request.response);
+ } else if (!this.isCompressed && request.responseText) {
+ cMapData = (0, _util.stringToBytes)(request.responseText);
+ }
+
+ if (cMapData) {
+ resolve({
+ cMapData,
+ compressionType
+ });
+ return;
+ }
+ }
+
+ reject(new Error(request.statusText));
+ };
+
+ request.send(null);
+ }).catch(reason => {
+ throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}` + `CMap at: ${url}`);
+ });
+ }
+
+}
+
+exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
+
+class DOMSVGFactory {
+ create(width, height) {
+ (0, _util.assert)(width > 0 && height > 0, "Invalid SVG dimensions");
+ const svg = document.createElementNS(SVG_NS, "svg:svg");
+ svg.setAttribute("version", "1.1");
+ 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) {
+ (0, _util.assert)(typeof type === "string", "Invalid SVG element type");
+ return document.createElementNS(SVG_NS, type);
+ }
+
+}
+
+exports.DOMSVGFactory = DOMSVGFactory;
+
+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 = rotation % 360;
+ rotation = rotation < 0 ? rotation + 360 : rotation;
+
+ 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 = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ } else {
+ offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+ width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ height = Math.abs(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;
+ }
+
+ 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 _util.Util.applyTransform([x, y], this.transform);
+ }
+
+ convertToViewportRectangle(rect) {
+ const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
+
+ const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
+
+ return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
+ }
+
+ convertToPdfPoint(x, y) {
+ return _util.Util.applyInverseTransform([x, y], this.transform);
+ }
+
+}
+
+exports.PageViewport = PageViewport;
+
+class RenderingCancelledException extends _util.BaseException {
+ constructor(msg, type) {
+ super(msg);
+ this.type = type;
+ }
+
+}
+
+exports.RenderingCancelledException = RenderingCancelledException;
+const LinkTarget = {
+ NONE: 0,
+ SELF: 1,
+ BLANK: 2,
+ PARENT: 3,
+ TOP: 4
+};
+exports.LinkTarget = LinkTarget;
+
+function addLinkAttributes(link, {
+ url,
+ target,
+ rel,
+ enabled = true
+} = {}) {
+ (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.');
+ const urlNullRemoved = (0, _util.removeNullCharacters)(url);
+
+ if (enabled) {
+ link.href = link.title = urlNullRemoved;
+ } else {
+ link.href = "";
+ link.title = `Disabled: ${urlNullRemoved}`;
+
+ link.onclick = () => {
+ return false;
+ };
+ }
+
+ let targetStr = "";
+
+ switch (target) {
+ case LinkTarget.NONE:
+ break;
+
+ case LinkTarget.SELF:
+ targetStr = "_self";
+ break;
+
+ case LinkTarget.BLANK:
+ targetStr = "_blank";
+ break;
+
+ case LinkTarget.PARENT:
+ targetStr = "_parent";
+ break;
+
+ case LinkTarget.TOP:
+ targetStr = "_top";
+ break;
+ }
+
+ link.target = targetStr;
+ link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL;
+}
+
+function getFilenameFromUrl(url) {
+ const anchor = url.indexOf("#");
+ const query = url.indexOf("?");
+ const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
+ return url.substring(url.lastIndexOf("/", end) + 1, end);
+}
+
+class StatTimer {
+ constructor() {
+ this.started = Object.create(null);
+ this.times = [];
+ }
+
+ time(name) {
+ if (name in this.started) {
+ (0, _util.warn)(`Timer is already running for ${name}`);
+ }
+
+ this.started[name] = Date.now();
+ }
+
+ timeEnd(name) {
+ if (!(name in this.started)) {
+ (0, _util.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 time of this.times) {
+ const name = time.name;
+
+ if (name.length > longest) {
+ longest = name.length;
+ }
+ }
+
+ for (const time of this.times) {
+ const duration = time.end - time.start;
+ outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`);
+ }
+
+ return outBuf.join("");
+ }
+
+}
+
+exports.StatTimer = StatTimer;
+
+function isFetchSupported() {
+ return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined";
+}
+
+function isValidFetchUrl(url, baseUrl) {
+ try {
+ const {
+ protocol
+ } = baseUrl ? new URL(url, baseUrl) : new URL(url);
+ return protocol === "http:" || protocol === "https:";
+ } catch (ex) {
+ return false;
+ }
+}
+
+function loadScript(src) {
+ return new Promise((resolve, reject) => {
+ const script = document.createElement("script");
+ script.src = src;
+ script.onload = resolve;
+
+ script.onerror = function () {
+ reject(new Error(`Cannot load script at: ${script.src}`));
+ };
+
+ (document.head || document.documentElement).appendChild(script);
+ });
+}
+
+function deprecated(details) {
+ console.log("Deprecated API usage: " + details);
+}
+
+let pdfDateStringRegex;
+
+class PDFDateString {
+ static toDateObject(input) {
+ if (!input || !(0, _util.isString)(input)) {
+ return null;
+ }
+
+ if (!pdfDateStringRegex) {
+ 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));
+ }
+
+}
+
+exports.PDFDateString = PDFDateString;
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.arrayByteLength = arrayByteLength;
+exports.arraysToBytes = arraysToBytes;
+exports.assert = assert;
+exports.bytesToString = bytesToString;
+exports.createPromiseCapability = createPromiseCapability;
+exports.getVerbosityLevel = getVerbosityLevel;
+exports.info = info;
+exports.isArrayBuffer = isArrayBuffer;
+exports.isArrayEqual = isArrayEqual;
+exports.isBool = isBool;
+exports.isEmptyObj = isEmptyObj;
+exports.isNum = isNum;
+exports.isString = isString;
+exports.isSameOrigin = isSameOrigin;
+exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
+exports.removeNullCharacters = removeNullCharacters;
+exports.setVerbosityLevel = setVerbosityLevel;
+exports.shadow = shadow;
+exports.string32 = string32;
+exports.stringToBytes = stringToBytes;
+exports.stringToPDFString = stringToPDFString;
+exports.stringToUTF8String = stringToUTF8String;
+exports.utf8StringToString = utf8StringToString;
+exports.warn = warn;
+exports.unreachable = unreachable;
+exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
+
+__w_pdfjs_require__(3);
+
+const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
+const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
+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
+};
+exports.PermissionFlag = PermissionFlag;
+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
+};
+exports.TextRenderingMode = TextRenderingMode;
+const ImageKind = {
+ GRAYSCALE_1BPP: 1,
+ RGB_24BPP: 2,
+ RGBA_32BPP: 3
+};
+exports.ImageKind = ImageKind;
+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
+};
+exports.AnnotationType = AnnotationType;
+const AnnotationStateModelType = {
+ MARKED: "Marked",
+ REVIEW: "Review"
+};
+exports.AnnotationStateModelType = AnnotationStateModelType;
+const AnnotationMarkedState = {
+ MARKED: "Marked",
+ UNMARKED: "Unmarked"
+};
+exports.AnnotationMarkedState = AnnotationMarkedState;
+const AnnotationReviewState = {
+ ACCEPTED: "Accepted",
+ REJECTED: "Rejected",
+ CANCELLED: "Cancelled",
+ COMPLETED: "Completed",
+ NONE: "None"
+};
+exports.AnnotationReviewState = AnnotationReviewState;
+const AnnotationReplyType = {
+ GROUP: "Group",
+ REPLY: "R"
+};
+exports.AnnotationReplyType = AnnotationReplyType;
+const AnnotationFlag = {
+ INVISIBLE: 0x01,
+ HIDDEN: 0x02,
+ PRINT: 0x04,
+ NOZOOM: 0x08,
+ NOROTATE: 0x10,
+ NOVIEW: 0x20,
+ READONLY: 0x40,
+ LOCKED: 0x80,
+ TOGGLENOVIEW: 0x100,
+ LOCKEDCONTENTS: 0x200
+};
+exports.AnnotationFlag = AnnotationFlag;
+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
+};
+exports.AnnotationFieldFlag = AnnotationFieldFlag;
+const AnnotationBorderStyleType = {
+ SOLID: 1,
+ DASHED: 2,
+ BEVELED: 3,
+ INSET: 4,
+ UNDERLINE: 5
+};
+exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
+const StreamType = {
+ UNKNOWN: "UNKNOWN",
+ FLATE: "FLATE",
+ LZW: "LZW",
+ DCT: "DCT",
+ JPX: "JPX",
+ JBIG: "JBIG",
+ A85: "A85",
+ AHX: "AHX",
+ CCF: "CCF",
+ RLX: "RLX"
+};
+exports.StreamType = StreamType;
+const FontType = {
+ UNKNOWN: "UNKNOWN",
+ TYPE1: "TYPE1",
+ TYPE1C: "TYPE1C",
+ CIDFONTTYPE0: "CIDFONTTYPE0",
+ CIDFONTTYPE0C: "CIDFONTTYPE0C",
+ TRUETYPE: "TRUETYPE",
+ CIDFONTTYPE2: "CIDFONTTYPE2",
+ TYPE3: "TYPE3",
+ OPENTYPE: "OPENTYPE",
+ TYPE0: "TYPE0",
+ MMTYPE1: "MMTYPE1"
+};
+exports.FontType = FontType;
+const VerbosityLevel = {
+ ERRORS: 0,
+ WARNINGS: 1,
+ INFOS: 5
+};
+exports.VerbosityLevel = VerbosityLevel;
+const CMapCompressionType = {
+ NONE: 0,
+ BINARY: 1,
+ STREAM: 2
+};
+exports.CMapCompressionType = CMapCompressionType;
+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,
+ beginAnnotations: 78,
+ endAnnotations: 79,
+ beginAnnotation: 80,
+ endAnnotation: 81,
+ paintJpegXObject: 82,
+ paintImageMaskXObject: 83,
+ paintImageMaskXObjectGroup: 84,
+ paintImageXObject: 85,
+ paintInlineImageXObject: 86,
+ paintInlineImageXObjectGroup: 87,
+ paintImageXObjectRepeat: 88,
+ paintImageMaskXObjectRepeat: 89,
+ paintSolidColorImageMask: 90,
+ constructPath: 91
+};
+exports.OPS = OPS;
+const UNSUPPORTED_FEATURES = {
+ unknown: "unknown",
+ forms: "forms",
+ javaScript: "javaScript",
+ smask: "smask",
+ shadingPattern: "shadingPattern",
+ font: "font",
+ errorTilingPattern: "errorTilingPattern",
+ errorExtGState: "errorExtGState",
+ errorXObject: "errorXObject",
+ errorFontLoadType3: "errorFontLoadType3",
+ errorFontState: "errorFontState",
+ errorFontMissing: "errorFontMissing",
+ errorFontTranslate: "errorFontTranslate",
+ errorColorSpace: "errorColorSpace",
+ errorOperatorList: "errorOperatorList",
+ errorFontToUnicode: "errorFontToUnicode",
+ errorFontLoadNative: "errorFontLoadNative",
+ errorFontGetPath: "errorFontGetPath"
+};
+exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
+const PasswordResponses = {
+ NEED_PASSWORD: 1,
+ INCORRECT_PASSWORD: 2
+};
+exports.PasswordResponses = PasswordResponses;
+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 isSameOrigin(baseUrl, otherUrl) {
+ let base;
+
+ try {
+ base = new URL(baseUrl);
+
+ if (!base.origin || base.origin === "null") {
+ return false;
+ }
+ } catch (e) {
+ return false;
+ }
+
+ const other = new URL(otherUrl, base);
+ return base.origin === other.origin;
+}
+
+function _isValidProtocol(url) {
+ if (!url) {
+ return false;
+ }
+
+ switch (url.protocol) {
+ case "http:":
+ case "https:":
+ case "ftp:":
+ case "mailto:":
+ case "tel:":
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+function createValidAbsoluteUrl(url, baseUrl) {
+ if (!url) {
+ return null;
+ }
+
+ try {
+ const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
+
+ if (_isValidProtocol(absoluteUrl)) {
+ return absoluteUrl;
+ }
+ } catch (ex) {}
+
+ return null;
+}
+
+function shadow(obj, prop, value) {
+ Object.defineProperty(obj, prop, {
+ value,
+ enumerable: true,
+ configurable: true,
+ writable: false
+ });
+ return value;
+}
+
+const BaseException = function BaseExceptionClosure() {
+ function BaseException(message) {
+ if (this.constructor === BaseException) {
+ unreachable("Cannot initialize BaseException.");
+ }
+
+ this.message = message;
+ this.name = this.constructor.name;
+ }
+
+ BaseException.prototype = new Error();
+ BaseException.constructor = BaseException;
+ return BaseException;
+}();
+
+exports.BaseException = BaseException;
+
+class PasswordException extends BaseException {
+ constructor(msg, code) {
+ super(msg);
+ this.code = code;
+ }
+
+}
+
+exports.PasswordException = PasswordException;
+
+class UnknownErrorException extends BaseException {
+ constructor(msg, details) {
+ super(msg);
+ this.details = details;
+ }
+
+}
+
+exports.UnknownErrorException = UnknownErrorException;
+
+class InvalidPDFException extends BaseException {}
+
+exports.InvalidPDFException = InvalidPDFException;
+
+class MissingPDFException extends BaseException {}
+
+exports.MissingPDFException = MissingPDFException;
+
+class UnexpectedResponseException extends BaseException {
+ constructor(msg, status) {
+ super(msg);
+ this.status = status;
+ }
+
+}
+
+exports.UnexpectedResponseException = UnexpectedResponseException;
+
+class FormatError extends BaseException {}
+
+exports.FormatError = FormatError;
+
+class AbortException extends BaseException {}
+
+exports.AbortException = AbortException;
+const NullCharactersRegExp = /\x00/g;
+
+function removeNullCharacters(str) {
+ if (typeof str !== "string") {
+ warn("The argument for removeNullCharacters must be a string.");
+ return str;
+ }
+
+ return str.replace(NullCharactersRegExp, "");
+}
+
+function bytesToString(bytes) {
+ assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "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) {
+ assert(typeof str === "string", "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 arrayByteLength(arr) {
+ if (arr.length !== undefined) {
+ return arr.length;
+ }
+
+ assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
+ return arr.byteLength;
+}
+
+function arraysToBytes(arr) {
+ const length = arr.length;
+
+ if (length === 1 && arr[0] instanceof Uint8Array) {
+ return arr[0];
+ }
+
+ let resultLength = 0;
+
+ for (let i = 0; i < length; i++) {
+ resultLength += arrayByteLength(arr[i]);
+ }
+
+ let pos = 0;
+ const data = new Uint8Array(resultLength);
+
+ for (let i = 0; i < length; i++) {
+ let item = arr[i];
+
+ if (!(item instanceof Uint8Array)) {
+ if (typeof item === "string") {
+ item = stringToBytes(item);
+ } else {
+ item = new Uint8Array(item);
+ }
+ }
+
+ const itemLength = item.byteLength;
+ data.set(item, pos);
+ pos += itemLength;
+ }
+
+ return data;
+}
+
+function string32(value) {
+ return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
+}
+
+function isLittleEndian() {
+ const buffer8 = new Uint8Array(4);
+ buffer8[0] = 1;
+ const view32 = new Uint32Array(buffer8.buffer, 0, 1);
+ return view32[0] === 1;
+}
+
+const IsLittleEndianCached = {
+ get value() {
+ return shadow(this, "value", isLittleEndian());
+ }
+
+};
+exports.IsLittleEndianCached = IsLittleEndianCached;
+
+function isEvalSupported() {
+ try {
+ new Function("");
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+const IsEvalSupportedCached = {
+ get value() {
+ return shadow(this, "value", isEvalSupported());
+ }
+
+};
+exports.IsEvalSupportedCached = IsEvalSupportedCached;
+const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];
+
+class Util {
+ static makeCssRgb(r, g, b) {
+ rgbBuf[1] = r;
+ rgbBuf[3] = g;
+ rgbBuf[5] = b;
+ return rgbBuf.join("");
+ }
+
+ 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 = Util.applyTransform(r, m);
+ const p2 = Util.applyTransform(r.slice(2, 4), m);
+ const p3 = Util.applyTransform([r[0], r[3]], m);
+ const p4 = Util.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 apply3dTransform(m, v) {
+ return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
+ }
+
+ 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) * (a + d) - 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) {
+ function compare(a, b) {
+ return a - b;
+ }
+
+ const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
+ const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
+ const result = [];
+ rect1 = Util.normalizeRect(rect1);
+ rect2 = Util.normalizeRect(rect2);
+
+ if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
+ result[0] = orderedX[1];
+ result[2] = orderedX[2];
+ } else {
+ return null;
+ }
+
+ if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
+ result[1] = orderedY[1];
+ result[3] = orderedY[2];
+ } else {
+ return null;
+ }
+
+ return result;
+ }
+
+}
+
+exports.Util = Util;
+const PDFStringTranslateTable = [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) {
+ const length = str.length,
+ strBuf = [];
+
+ if (str[0] === "\xFE" && str[1] === "\xFF") {
+ for (let i = 2; i < length; i += 2) {
+ strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));
+ }
+ } else if (str[0] === "\xFF" && str[1] === "\xFE") {
+ for (let i = 2; i < length; i += 2) {
+ strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i)));
+ }
+ } else {
+ for (let i = 0; i < length; ++i) {
+ const code = PDFStringTranslateTable[str.charCodeAt(i)];
+ 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 isEmptyObj(obj) {
+ for (const key in obj) {
+ return false;
+ }
+
+ return true;
+}
+
+function isBool(v) {
+ return typeof v === "boolean";
+}
+
+function isNum(v) {
+ return typeof v === "number";
+}
+
+function isString(v) {
+ return typeof v === "string";
+}
+
+function isArrayBuffer(v) {
+ return typeof v === "object" && v !== null && v.byteLength !== undefined;
+}
+
+function isArrayEqual(arr1, arr2) {
+ if (arr1.length !== arr2.length) {
+ return false;
+ }
+
+ return arr1.every(function (element, index) {
+ return element === arr2[index];
+ });
+}
+
+function createPromiseCapability() {
+ const capability = Object.create(null);
+ let isSettled = false;
+ Object.defineProperty(capability, "settled", {
+ get() {
+ return isSettled;
+ }
+
+ });
+ capability.promise = new Promise(function (resolve, reject) {
+ capability.resolve = function (data) {
+ isSettled = true;
+ resolve(data);
+ };
+
+ capability.reject = function (reason) {
+ isSettled = true;
+ reject(reason);
+ };
+ });
+ return capability;
+}
+
+const createObjectURL = function createObjectURLClosure() {
+ const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ return function createObjectURL(data, contentType, forceDataSchema = false) {
+ if (!forceDataSchema && URL.createObjectURL) {
+ const blob = new Blob([data], {
+ type: contentType
+ });
+ return URL.createObjectURL(blob);
+ }
+
+ let buffer = `data:${contentType};base64,`;
+
+ for (let i = 0, ii = data.length; i < ii; i += 3) {
+ const b1 = data[i] & 0xff;
+ const b2 = data[i + 1] & 0xff;
+ const b3 = data[i + 2] & 0xff;
+ const d1 = b1 >> 2,
+ d2 = (b1 & 3) << 4 | b2 >> 4;
+ const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
+ const d4 = i + 2 < ii ? b3 & 0x3f : 64;
+ buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+ }
+
+ return buffer;
+ };
+}();
+
+exports.createObjectURL = createObjectURL;
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+var _is_node = __w_pdfjs_require__(4);
+
+;
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isNodeJS = void 0;
+const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !process.versions.electron;
+exports.isNodeJS = isNodeJS;
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getDocument = getDocument;
+exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
+exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _display_utils = __w_pdfjs_require__(1);
+
+var _font_loader = __w_pdfjs_require__(6);
+
+var _api_compatibility = __w_pdfjs_require__(7);
+
+var _canvas = __w_pdfjs_require__(8);
+
+var _worker_options = __w_pdfjs_require__(10);
+
+var _is_node = __w_pdfjs_require__(4);
+
+var _message_handler = __w_pdfjs_require__(11);
+
+var _metadata = __w_pdfjs_require__(12);
+
+var _transport_stream = __w_pdfjs_require__(14);
+
+var _webgl = __w_pdfjs_require__(15);
+
+const DEFAULT_RANGE_CHUNK_SIZE = 65536;
+const RENDERING_CANCELLED_TIMEOUT = 100;
+let createPDFNetworkStream;
+
+function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
+ createPDFNetworkStream = pdfNetworkStreamFactory;
+}
+
+function getDocument(src) {
+ const task = new PDFDocumentLoadingTask();
+ let source;
+
+ if (typeof src === "string") {
+ source = {
+ url: src
+ };
+ } else if ((0, _util.isArrayBuffer)(src)) {
+ source = {
+ data: src
+ };
+ } else if (src instanceof PDFDataRangeTransport) {
+ source = {
+ range: src
+ };
+ } else {
+ if (typeof src !== "object") {
+ throw new Error("Invalid parameter in getDocument, " + "need either Uint8Array, string or a parameter object");
+ }
+
+ if (!src.url && !src.data && !src.range) {
+ throw new Error("Invalid parameter object: need either .data, .range or .url");
+ }
+
+ source = src;
+ }
+
+ const params = Object.create(null);
+ let rangeTransport = null,
+ worker = null;
+
+ for (const key in source) {
+ if (key === "url" && typeof window !== "undefined") {
+ params[key] = new URL(source[key], window.location).href;
+ continue;
+ } else if (key === "range") {
+ rangeTransport = source[key];
+ continue;
+ } else if (key === "worker") {
+ worker = source[key];
+ continue;
+ } else if (key === "data" && !(source[key] instanceof Uint8Array)) {
+ const pdfBytes = source[key];
+
+ if (typeof pdfBytes === "string") {
+ params[key] = (0, _util.stringToBytes)(pdfBytes);
+ } else if (typeof pdfBytes === "object" && pdfBytes !== null && !isNaN(pdfBytes.length)) {
+ params[key] = new Uint8Array(pdfBytes);
+ } else if ((0, _util.isArrayBuffer)(pdfBytes)) {
+ params[key] = new Uint8Array(pdfBytes);
+ } else {
+ throw new Error("Invalid PDF binary data: either typed array, " + "string or array-like object is expected in the " + "data property.");
+ }
+
+ continue;
+ }
+
+ params[key] = source[key];
+ }
+
+ params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
+ params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;
+ params.ignoreErrors = params.stopAtErrors !== true;
+ params.fontExtraProperties = params.fontExtraProperties === true;
+ params.pdfBug = params.pdfBug === true;
+
+ if (!Number.isInteger(params.maxImageSize)) {
+ params.maxImageSize = -1;
+ }
+
+ if (typeof params.isEvalSupported !== "boolean") {
+ params.isEvalSupported = true;
+ }
+
+ if (typeof params.disableFontFace !== "boolean") {
+ params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;
+ }
+
+ if (typeof params.disableRange !== "boolean") {
+ params.disableRange = false;
+ }
+
+ if (typeof params.disableStream !== "boolean") {
+ params.disableStream = false;
+ }
+
+ if (typeof params.disableAutoFetch !== "boolean") {
+ params.disableAutoFetch = false;
+ }
+
+ (0, _util.setVerbosityLevel)(params.verbosity);
+
+ if (!worker) {
+ const workerParams = {
+ verbosity: params.verbosity,
+ port: _worker_options.GlobalWorkerOptions.workerPort
+ };
+ worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
+ task._worker = worker;
+ }
+
+ const docId = task.docId;
+ worker.promise.then(function () {
+ if (task.destroyed) {
+ throw new Error("Loading aborted");
+ }
+
+ const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);
+
+ const networkStreamPromise = new Promise(function (resolve) {
+ let networkStream;
+
+ if (rangeTransport) {
+ networkStream = new _transport_stream.PDFDataTransportStream({
+ length: params.length,
+ initialData: params.initialData,
+ progressiveDone: params.progressiveDone,
+ disableRange: params.disableRange,
+ disableStream: params.disableStream
+ }, rangeTransport);
+ } else if (!params.data) {
+ networkStream = createPDFNetworkStream({
+ url: params.url,
+ length: params.length,
+ httpHeaders: params.httpHeaders,
+ withCredentials: params.withCredentials,
+ rangeChunkSize: params.rangeChunkSize,
+ disableRange: params.disableRange,
+ disableStream: params.disableStream
+ });
+ }
+
+ resolve(networkStream);
+ });
+ return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) {
+ if (task.destroyed) {
+ throw new Error("Loading aborted");
+ }
+
+ const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
+ messageHandler.postMessageTransfers = worker.postMessageTransfers;
+ const transport = new WorkerTransport(messageHandler, task, networkStream, params);
+ task._transport = transport;
+ messageHandler.send("Ready", null);
+ });
+ }).catch(task._capability.reject);
+ return task;
+}
+
+function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
+ if (worker.destroyed) {
+ return Promise.reject(new Error("Worker was destroyed"));
+ }
+
+ if (pdfDataRangeTransport) {
+ source.length = pdfDataRangeTransport.length;
+ source.initialData = pdfDataRangeTransport.initialData;
+ source.progressiveDone = pdfDataRangeTransport.progressiveDone;
+ }
+
+ return worker.messageHandler.sendWithPromise("GetDocRequest", {
+ docId,
+ apiVersion: '2.5.207',
+ source: {
+ data: source.data,
+ url: source.url,
+ password: source.password,
+ disableAutoFetch: source.disableAutoFetch,
+ rangeChunkSize: source.rangeChunkSize,
+ length: source.length
+ },
+ maxImageSize: source.maxImageSize,
+ disableFontFace: source.disableFontFace,
+ postMessageTransfers: worker.postMessageTransfers,
+ docBaseUrl: source.docBaseUrl,
+ ignoreErrors: source.ignoreErrors,
+ isEvalSupported: source.isEvalSupported,
+ fontExtraProperties: source.fontExtraProperties
+ }).then(function (workerId) {
+ if (worker.destroyed) {
+ throw new Error("Worker was destroyed");
+ }
+
+ return workerId;
+ });
+}
+
+const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
+ let nextDocumentId = 0;
+
+ class PDFDocumentLoadingTask {
+ constructor() {
+ this._capability = (0, _util.createPromiseCapability)();
+ this._transport = null;
+ this._worker = null;
+ this.docId = "d" + nextDocumentId++;
+ this.destroyed = false;
+ this.onPassword = null;
+ this.onProgress = null;
+ this.onUnsupportedFeature = null;
+ }
+
+ get promise() {
+ return this._capability.promise;
+ }
+
+ destroy() {
+ this.destroyed = true;
+ const transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
+ return transportDestroyed.then(() => {
+ this._transport = null;
+
+ if (this._worker) {
+ this._worker.destroy();
+
+ this._worker = null;
+ }
+ });
+ }
+
+ }
+
+ return PDFDocumentLoadingTask;
+}();
+
+class PDFDataRangeTransport {
+ constructor(length, initialData, progressiveDone = false) {
+ this.length = length;
+ this.initialData = initialData;
+ this.progressiveDone = progressiveDone;
+ this._rangeListeners = [];
+ this._progressListeners = [];
+ this._progressiveReadListeners = [];
+ this._progressiveDoneListeners = [];
+ this._readyCapability = (0, _util.createPromiseCapability)();
+ }
+
+ 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, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
+ }
+
+ abort() {}
+
+}
+
+exports.PDFDataRangeTransport = PDFDataRangeTransport;
+
+class PDFDocumentProxy {
+ constructor(pdfInfo, transport) {
+ this._pdfInfo = pdfInfo;
+ this._transport = transport;
+ }
+
+ get numPages() {
+ return this._pdfInfo.numPages;
+ }
+
+ get fingerprint() {
+ return this._pdfInfo.fingerprint;
+ }
+
+ 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();
+ }
+
+ getOpenActionDestination() {
+ (0, _display_utils.deprecated)("getOpenActionDestination, use getOpenAction instead.");
+ return this.getOpenAction().then(function (openAction) {
+ return openAction && openAction.dest ? openAction.dest : null;
+ });
+ }
+
+ getAttachments() {
+ return this._transport.getAttachments();
+ }
+
+ getJavaScript() {
+ return this._transport.getJavaScript();
+ }
+
+ getOutline() {
+ return this._transport.getOutline();
+ }
+
+ getPermissions() {
+ return this._transport.getPermissions();
+ }
+
+ getMetadata() {
+ return this._transport.getMetadata();
+ }
+
+ getData() {
+ return this._transport.getData();
+ }
+
+ getDownloadInfo() {
+ return this._transport.downloadInfoCapability.promise;
+ }
+
+ getStats() {
+ return this._transport.getStats();
+ }
+
+ cleanup() {
+ return this._transport.startCleanup();
+ }
+
+ destroy() {
+ return this.loadingTask.destroy();
+ }
+
+ get loadingParams() {
+ return this._transport.loadingParams;
+ }
+
+ get loadingTask() {
+ return this._transport.loadingTask;
+ }
+
+}
+
+exports.PDFDocumentProxy = PDFDocumentProxy;
+
+class PDFPageProxy {
+ constructor(pageIndex, pageInfo, transport, pdfBug = false) {
+ this._pageIndex = pageIndex;
+ this._pageInfo = pageInfo;
+ this._transport = transport;
+ this._stats = pdfBug ? new _display_utils.StatTimer() : null;
+ this._pdfBug = pdfBug;
+ this.commonObjs = transport.commonObjs;
+ this.objs = new PDFObjects();
+ this.cleanupAfterRender = false;
+ this.pendingCleanup = false;
+ this.intentStates = Object.create(null);
+ 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.PageViewport({
+ viewBox: this.view,
+ scale,
+ rotation,
+ offsetX,
+ offsetY,
+ dontFlip
+ });
+ }
+
+ getAnnotations({
+ intent = null
+ } = {}) {
+ if (!this.annotationsPromise || this.annotationsIntent !== intent) {
+ this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);
+ this.annotationsIntent = intent;
+ }
+
+ return this.annotationsPromise;
+ }
+
+ render({
+ canvasContext,
+ viewport,
+ intent = "display",
+ enableWebGL = false,
+ renderInteractiveForms = false,
+ transform = null,
+ imageLayer = null,
+ canvasFactory = null,
+ background = null
+ }) {
+ if (this._stats) {
+ this._stats.time("Overall");
+ }
+
+ const renderingIntent = intent === "print" ? "print" : "display";
+ this.pendingCleanup = false;
+
+ if (!this.intentStates[renderingIntent]) {
+ this.intentStates[renderingIntent] = Object.create(null);
+ }
+
+ const intentState = this.intentStates[renderingIntent];
+
+ if (intentState.streamReaderCancelTimeout) {
+ clearTimeout(intentState.streamReaderCancelTimeout);
+ intentState.streamReaderCancelTimeout = null;
+ }
+
+ const canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();
+ const webGLContext = new _webgl.WebGLContext({
+ enable: enableWebGL
+ });
+
+ if (!intentState.displayReadyCapability) {
+ intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
+ intentState.operatorList = {
+ fnArray: [],
+ argsArray: [],
+ lastChunk: false
+ };
+
+ if (this._stats) {
+ this._stats.time("Page Request");
+ }
+
+ this._pumpOperatorList({
+ pageIndex: this._pageIndex,
+ intent: renderingIntent,
+ renderInteractiveForms: renderInteractiveForms === true
+ });
+ }
+
+ const complete = error => {
+ const i = intentState.renderTasks.indexOf(internalRenderTask);
+
+ if (i >= 0) {
+ intentState.renderTasks.splice(i, 1);
+ }
+
+ if (this.cleanupAfterRender || renderingIntent === "print") {
+ this.pendingCleanup = true;
+ }
+
+ this._tryCleanup();
+
+ if (error) {
+ internalRenderTask.capability.reject(error);
+
+ this._abortOperatorList({
+ intentState,
+ reason: error
+ });
+ } else {
+ internalRenderTask.capability.resolve();
+ }
+
+ if (this._stats) {
+ this._stats.timeEnd("Rendering");
+
+ this._stats.timeEnd("Overall");
+ }
+ };
+
+ const internalRenderTask = new InternalRenderTask({
+ callback: complete,
+ params: {
+ canvasContext,
+ viewport,
+ transform,
+ imageLayer,
+ background
+ },
+ objs: this.objs,
+ commonObjs: this.commonObjs,
+ operatorList: intentState.operatorList,
+ pageIndex: this._pageIndex,
+ canvasFactory: canvasFactoryInstance,
+ webGLContext,
+ useRequestAnimationFrame: renderingIntent !== "print",
+ pdfBug: this._pdfBug
+ });
+
+ if (!intentState.renderTasks) {
+ intentState.renderTasks = [];
+ }
+
+ intentState.renderTasks.push(internalRenderTask);
+ const renderTask = internalRenderTask.task;
+ intentState.displayReadyCapability.promise.then(transparency => {
+ if (this.pendingCleanup) {
+ complete();
+ return;
+ }
+
+ if (this._stats) {
+ this._stats.time("Rendering");
+ }
+
+ internalRenderTask.initializeGraphics(transparency);
+ internalRenderTask.operatorListChanged();
+ }).catch(complete);
+ return renderTask;
+ }
+
+ getOperatorList() {
+ function operatorListChanged() {
+ if (intentState.operatorList.lastChunk) {
+ intentState.opListReadCapability.resolve(intentState.operatorList);
+ const i = intentState.renderTasks.indexOf(opListTask);
+
+ if (i >= 0) {
+ intentState.renderTasks.splice(i, 1);
+ }
+ }
+ }
+
+ const renderingIntent = "oplist";
+
+ if (!this.intentStates[renderingIntent]) {
+ this.intentStates[renderingIntent] = Object.create(null);
+ }
+
+ const intentState = this.intentStates[renderingIntent];
+ let opListTask;
+
+ if (!intentState.opListReadCapability) {
+ opListTask = {};
+ opListTask.operatorListChanged = operatorListChanged;
+ intentState.opListReadCapability = (0, _util.createPromiseCapability)();
+ intentState.renderTasks = [];
+ intentState.renderTasks.push(opListTask);
+ intentState.operatorList = {
+ fnArray: [],
+ argsArray: [],
+ lastChunk: false
+ };
+
+ if (this._stats) {
+ this._stats.time("Page Request");
+ }
+
+ this._pumpOperatorList({
+ pageIndex: this._pageIndex,
+ intent: renderingIntent
+ });
+ }
+
+ return intentState.opListReadCapability.promise;
+ }
+
+ streamTextContent({
+ normalizeWhitespace = false,
+ disableCombineTextItems = false
+ } = {}) {
+ const TEXT_CONTENT_CHUNK_SIZE = 100;
+ return this._transport.messageHandler.sendWithStream("GetTextContent", {
+ pageIndex: this._pageIndex,
+ normalizeWhitespace: normalizeWhitespace === true,
+ combineTextItems: disableCombineTextItems !== true
+ }, {
+ highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
+
+ size(textContent) {
+ return textContent.items.length;
+ }
+
+ });
+ }
+
+ getTextContent(params = {}) {
+ 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();
+ });
+ }
+
+ _destroy() {
+ this.destroyed = true;
+ this._transport.pageCache[this._pageIndex] = null;
+ const waitOn = [];
+ Object.keys(this.intentStates).forEach(intent => {
+ const intentState = this.intentStates[intent];
+
+ this._abortOperatorList({
+ intentState,
+ reason: new Error("Page was destroyed."),
+ force: true
+ });
+
+ if (intent === "oplist") {
+ return;
+ }
+
+ intentState.renderTasks.forEach(function (renderTask) {
+ const renderCompleted = renderTask.capability.promise.catch(function () {});
+ waitOn.push(renderCompleted);
+ renderTask.cancel();
+ });
+ });
+ this.objs.clear();
+ this.annotationsPromise = null;
+ this.pendingCleanup = false;
+ return Promise.all(waitOn);
+ }
+
+ cleanup(resetStats = false) {
+ this.pendingCleanup = true;
+ return this._tryCleanup(resetStats);
+ }
+
+ _tryCleanup(resetStats = false) {
+ if (!this.pendingCleanup || Object.keys(this.intentStates).some(intent => {
+ const intentState = this.intentStates[intent];
+ return intentState.renderTasks.length !== 0 || !intentState.operatorList.lastChunk;
+ })) {
+ return false;
+ }
+
+ Object.keys(this.intentStates).forEach(intent => {
+ delete this.intentStates[intent];
+ });
+ this.objs.clear();
+ this.annotationsPromise = null;
+
+ if (resetStats && this._stats) {
+ this._stats = new _display_utils.StatTimer();
+ }
+
+ this.pendingCleanup = false;
+ return true;
+ }
+
+ _startRenderPage(transparency, intent) {
+ const intentState = this.intentStates[intent];
+
+ if (!intentState) {
+ return;
+ }
+
+ if (this._stats) {
+ this._stats.timeEnd("Page Request");
+ }
+
+ if (intentState.displayReadyCapability) {
+ 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;
+
+ for (let i = 0; i < intentState.renderTasks.length; i++) {
+ intentState.renderTasks[i].operatorListChanged();
+ }
+
+ if (operatorListChunk.lastChunk) {
+ this._tryCleanup();
+ }
+ }
+
+ _pumpOperatorList(args) {
+ (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected "intent" argument.');
+
+ const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", args);
+
+ const reader = readableStream.getReader();
+ const intentState = this.intentStates[args.intent];
+ 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 (let i = 0; i < intentState.renderTasks.length; i++) {
+ intentState.renderTasks[i].operatorListChanged();
+ }
+
+ this._tryCleanup();
+ }
+
+ if (intentState.displayReadyCapability) {
+ intentState.displayReadyCapability.reject(reason);
+ } else if (intentState.opListReadCapability) {
+ intentState.opListReadCapability.reject(reason);
+ } else {
+ throw reason;
+ }
+ });
+ };
+
+ pump();
+ }
+
+ _abortOperatorList({
+ intentState,
+ reason,
+ force = false
+ }) {
+ (0, _util.assert)(reason instanceof Error || typeof reason === "object" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected "reason" argument.');
+
+ if (!intentState.streamReader) {
+ return;
+ }
+
+ if (!force) {
+ if (intentState.renderTasks.length !== 0) {
+ return;
+ }
+
+ if (reason instanceof _display_utils.RenderingCancelledException) {
+ intentState.streamReaderCancelTimeout = setTimeout(() => {
+ this._abortOperatorList({
+ intentState,
+ reason,
+ force: true
+ });
+
+ intentState.streamReaderCancelTimeout = null;
+ }, RENDERING_CANCELLED_TIMEOUT);
+ return;
+ }
+ }
+
+ intentState.streamReader.cancel(new _util.AbortException(reason && reason.message));
+ intentState.streamReader = null;
+
+ if (this._transport.destroyed) {
+ return;
+ }
+
+ Object.keys(this.intentStates).some(intent => {
+ if (this.intentStates[intent] === intentState) {
+ delete this.intentStates[intent];
+ return true;
+ }
+
+ return false;
+ });
+ this.cleanup();
+ }
+
+ get stats() {
+ return this._stats;
+ }
+
+}
+
+exports.PDFPageProxy = PDFPageProxy;
+
+class LoopbackPort {
+ constructor(defer = true) {
+ this._listeners = [];
+ this._defer = defer;
+ this._deferred = Promise.resolve(undefined);
+ }
+
+ postMessage(obj, transfers) {
+ function cloneValue(value) {
+ if (typeof value !== "object" || value === null) {
+ return value;
+ }
+
+ if (cloned.has(value)) {
+ return cloned.get(value);
+ }
+
+ let buffer, result;
+
+ if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
+ const transferable = transfers && transfers.includes(buffer);
+
+ if (transferable) {
+ result = new value.constructor(buffer, value.byteOffset, value.byteLength);
+ } else {
+ result = new value.constructor(value);
+ }
+
+ cloned.set(value, result);
+ return result;
+ }
+
+ result = Array.isArray(value) ? [] : {};
+ cloned.set(value, result);
+
+ for (const i in value) {
+ let desc,
+ p = value;
+
+ while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
+ p = Object.getPrototypeOf(p);
+ }
+
+ if (typeof desc.value === "undefined") {
+ continue;
+ }
+
+ if (typeof desc.value === "function") {
+ if (value.hasOwnProperty && value.hasOwnProperty(i)) {
+ throw new Error(`LoopbackPort.postMessage - cannot clone: ${value[i]}`);
+ }
+
+ continue;
+ }
+
+ result[i] = cloneValue(desc.value);
+ }
+
+ return result;
+ }
+
+ if (!this._defer) {
+ this._listeners.forEach(listener => {
+ listener.call(this, {
+ data: obj
+ });
+ });
+
+ return;
+ }
+
+ const cloned = new WeakMap();
+ const e = {
+ data: cloneValue(obj)
+ };
+
+ this._deferred.then(() => {
+ this._listeners.forEach(listener => {
+ listener.call(this, e);
+ });
+ });
+ }
+
+ addEventListener(name, listener) {
+ this._listeners.push(listener);
+ }
+
+ removeEventListener(name, listener) {
+ const i = this._listeners.indexOf(listener);
+
+ this._listeners.splice(i, 1);
+ }
+
+ terminate() {
+ this._listeners.length = 0;
+ }
+
+}
+
+exports.LoopbackPort = LoopbackPort;
+
+const PDFWorker = function PDFWorkerClosure() {
+ const pdfWorkerPorts = new WeakMap();
+ let isWorkerDisabled = false;
+ let fallbackWorkerSrc;
+ let nextFakeWorkerId = 0;
+ let fakeWorkerCapability;
+
+ if (_is_node.isNodeJS && typeof require === "function") {
+ isWorkerDisabled = true;
+ fallbackWorkerSrc = "./pdf.worker.js";
+ } else if (typeof document === "object" && "currentScript" in document) {
+ const pdfjsFilePath = document.currentScript && document.currentScript.src;
+
+ if (pdfjsFilePath) {
+ fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
+ }
+ }
+
+ function getWorkerSrc() {
+ if (_worker_options.GlobalWorkerOptions.workerSrc) {
+ return _worker_options.GlobalWorkerOptions.workerSrc;
+ }
+
+ if (typeof fallbackWorkerSrc !== "undefined") {
+ if (!_is_node.isNodeJS) {
+ (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
+ }
+
+ return fallbackWorkerSrc;
+ }
+
+ throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
+ }
+
+ function getMainThreadWorkerMessageHandler() {
+ let mainWorkerMessageHandler;
+
+ try {
+ mainWorkerMessageHandler = globalThis.pdfjsWorker && globalThis.pdfjsWorker.WorkerMessageHandler;
+ } catch (ex) {}
+
+ return mainWorkerMessageHandler || null;
+ }
+
+ function setupFakeWorkerGlobal() {
+ if (fakeWorkerCapability) {
+ return fakeWorkerCapability.promise;
+ }
+
+ fakeWorkerCapability = (0, _util.createPromiseCapability)();
+
+ const loader = async function () {
+ const mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
+
+ if (mainWorkerMessageHandler) {
+ return mainWorkerMessageHandler;
+ }
+
+ if (_is_node.isNodeJS && typeof require === "function") {
+ const worker = eval("require")(getWorkerSrc());
+ return worker.WorkerMessageHandler;
+ }
+
+ await (0, _display_utils.loadScript)(getWorkerSrc());
+ return window.pdfjsWorker.WorkerMessageHandler;
+ };
+
+ loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);
+ return fakeWorkerCapability.promise;
+ }
+
+ function createCDNWrapper(url) {
+ const wrapper = "importScripts('" + url + "');";
+ return URL.createObjectURL(new Blob([wrapper]));
+ }
+
+ class PDFWorker {
+ constructor({
+ name = null,
+ port = null,
+ verbosity = (0, _util.getVerbosityLevel)()
+ } = {}) {
+ if (port && pdfWorkerPorts.has(port)) {
+ throw new Error("Cannot use more than one PDFWorker per port");
+ }
+
+ this.name = name;
+ this.destroyed = false;
+ this.postMessageTransfers = true;
+ this.verbosity = verbosity;
+ this._readyCapability = (0, _util.createPromiseCapability)();
+ this._port = null;
+ this._webWorker = null;
+ this._messageHandler = null;
+
+ if (port) {
+ pdfWorkerPorts.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 _message_handler.MessageHandler("main", "worker", port);
+
+ this._messageHandler.on("ready", function () {});
+
+ this._readyCapability.resolve();
+ }
+
+ _initialize() {
+ if (typeof Worker !== "undefined" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
+ let workerSrc = getWorkerSrc();
+
+ try {
+ if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
+ workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);
+ }
+
+ const worker = new Worker(workerSrc);
+ const messageHandler = new _message_handler.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;
+
+ if (!data.supportTransfers) {
+ this.postMessageTransfers = false;
+ }
+
+ 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 (e) {
+ this._setupFakeWorker();
+ }
+ });
+
+ const sendTest = () => {
+ const testObj = new Uint8Array([this.postMessageTransfers ? 255 : 0]);
+
+ try {
+ messageHandler.send("test", testObj, [testObj.buffer]);
+ } catch (ex) {
+ (0, _util.warn)("Cannot use postMessage transfers.");
+ testObj[0] = 0;
+ messageHandler.send("test", testObj);
+ }
+ };
+
+ sendTest();
+ return;
+ } catch (e) {
+ (0, _util.info)("The worker has been disabled.");
+ }
+ }
+
+ this._setupFakeWorker();
+ }
+
+ _setupFakeWorker() {
+ if (!isWorkerDisabled) {
+ (0, _util.warn)("Setting up fake worker.");
+ isWorkerDisabled = true;
+ }
+
+ 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" + nextFakeWorkerId++;
+ const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
+ WorkerMessageHandler.setup(workerHandler, port);
+ const messageHandler = new _message_handler.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;
+ }
+
+ pdfWorkerPorts.delete(this._port);
+ this._port = null;
+
+ if (this._messageHandler) {
+ this._messageHandler.destroy();
+
+ this._messageHandler = null;
+ }
+ }
+
+ static fromPort(params) {
+ if (!params || !params.port) {
+ throw new Error("PDFWorker.fromPort - invalid method signature.");
+ }
+
+ if (pdfWorkerPorts.has(params.port)) {
+ return pdfWorkerPorts.get(params.port);
+ }
+
+ return new PDFWorker(params);
+ }
+
+ static getWorkerSrc() {
+ return getWorkerSrc();
+ }
+
+ }
+
+ return PDFWorker;
+}();
+
+exports.PDFWorker = PDFWorker;
+
+class WorkerTransport {
+ constructor(messageHandler, loadingTask, networkStream, params) {
+ this.messageHandler = messageHandler;
+ this.loadingTask = loadingTask;
+ this.commonObjs = new PDFObjects();
+ this.fontLoader = new _font_loader.FontLoader({
+ docId: loadingTask.docId,
+ onUnsupportedFeature: this._onUnsupportedFeature.bind(this)
+ });
+ this._params = params;
+ this.CMapReaderFactory = new params.CMapReaderFactory({
+ baseUrl: params.cMapUrl,
+ isCompressed: params.cMapPacked
+ });
+ this.destroyed = false;
+ this.destroyCapability = null;
+ this._passwordCapability = null;
+ this._networkStream = networkStream;
+ this._fullReader = null;
+ this._lastProgress = null;
+ this.pageCache = [];
+ this.pagePromises = [];
+ this.downloadInfoCapability = (0, _util.createPromiseCapability)();
+ this.setupMessageHandler();
+ }
+
+ destroy() {
+ if (this.destroyCapability) {
+ return this.destroyCapability.promise;
+ }
+
+ this.destroyed = true;
+ this.destroyCapability = (0, _util.createPromiseCapability)();
+
+ if (this._passwordCapability) {
+ this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));
+ }
+
+ const waitOn = [];
+ this.pageCache.forEach(function (page) {
+ if (page) {
+ waitOn.push(page._destroy());
+ }
+ });
+ this.pageCache.length = 0;
+ this.pagePromises.length = 0;
+ const terminated = this.messageHandler.sendWithPromise("Terminate", null);
+ waitOn.push(terminated);
+ Promise.all(waitOn).then(() => {
+ this.fontLoader.clear();
+
+ if (this._networkStream) {
+ this._networkStream.cancelAllRequests(new _util.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, _util.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, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer.");
+ sink.enqueue(new Uint8Array(value), 1, [value]);
+ }).catch(reason => {
+ sink.error(reason);
+ });
+ };
+
+ sink.onCancel = reason => {
+ this._fullReader.cancel(reason);
+ };
+ });
+ messageHandler.on("ReaderHeadersReady", data => {
+ const headersCapability = (0, _util.createPromiseCapability)();
+ const fullReader = this._fullReader;
+ fullReader.headersReady.then(() => {
+ if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
+ if (this._lastProgress && loadingTask.onProgress) {
+ loadingTask.onProgress(this._lastProgress);
+ }
+
+ fullReader.onProgress = evt => {
+ if (loadingTask.onProgress) {
+ 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, _util.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, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer.");
+ sink.enqueue(new Uint8Array(value), 1, [value]);
+ }).catch(reason => {
+ sink.error(reason);
+ });
+ };
+
+ sink.onCancel = reason => {
+ rangeReader.cancel(reason);
+ };
+ });
+ messageHandler.on("GetDoc", ({
+ pdfInfo
+ }) => {
+ this._numPages = pdfInfo.numPages;
+
+ loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
+ });
+ messageHandler.on("DocException", function (ex) {
+ let reason;
+
+ switch (ex.name) {
+ case "PasswordException":
+ reason = new _util.PasswordException(ex.message, ex.code);
+ break;
+
+ case "InvalidPDFException":
+ reason = new _util.InvalidPDFException(ex.message);
+ break;
+
+ case "MissingPDFException":
+ reason = new _util.MissingPDFException(ex.message);
+ break;
+
+ case "UnexpectedResponseException":
+ reason = new _util.UnexpectedResponseException(ex.message, ex.status);
+ break;
+
+ case "UnknownErrorException":
+ reason = new _util.UnknownErrorException(ex.message, ex.details);
+ break;
+ }
+
+ loadingTask._capability.reject(reason);
+ });
+ messageHandler.on("PasswordRequest", exception => {
+ this._passwordCapability = (0, _util.createPromiseCapability)();
+
+ if (loadingTask.onPassword) {
+ const updatePassword = password => {
+ this._passwordCapability.resolve({
+ password
+ });
+ };
+
+ try {
+ loadingTask.onPassword(updatePassword, exception.code);
+ } catch (ex) {
+ this._passwordCapability.reject(ex);
+ }
+ } else {
+ this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
+ }
+
+ return this._passwordCapability.promise;
+ });
+ messageHandler.on("DataLoaded", data => {
+ if (loadingTask.onProgress) {
+ loadingTask.onProgress({
+ loaded: data.length,
+ total: data.length
+ });
+ }
+
+ this.downloadInfoCapability.resolve(data);
+ });
+ messageHandler.on("StartRenderPage", data => {
+ if (this.destroyed) {
+ return;
+ }
+
+ const page = this.pageCache[data.pageIndex];
+
+ page._startRenderPage(data.transparency, data.intent);
+ });
+ messageHandler.on("commonobj", data => {
+ if (this.destroyed) {
+ return;
+ }
+
+ const [id, type, exportedData] = data;
+
+ if (this.commonObjs.has(id)) {
+ return;
+ }
+
+ switch (type) {
+ case "Font":
+ const params = this._params;
+
+ if ("error" in exportedData) {
+ const exportedError = exportedData.error;
+ (0, _util.warn)(`Error during font loading: ${exportedError}`);
+ this.commonObjs.resolve(id, exportedError);
+ break;
+ }
+
+ let fontRegistry = null;
+
+ if (params.pdfBug && globalThis.FontInspector && globalThis.FontInspector.enabled) {
+ fontRegistry = {
+ registerFont(font, url) {
+ globalThis.FontInspector.fontAdded(font, url);
+ }
+
+ };
+ }
+
+ const font = new _font_loader.FontFaceObject(exportedData, {
+ isEvalSupported: params.isEvalSupported,
+ disableFontFace: params.disableFontFace,
+ ignoreErrors: params.ignoreErrors,
+ onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
+ fontRegistry
+ });
+ 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 "FontPath":
+ case "FontType3Res":
+ case "Image":
+ this.commonObjs.resolve(id, exportedData);
+ break;
+
+ default:
+ throw new Error(`Got unknown common object type ${type}`);
+ }
+ });
+ messageHandler.on("obj", data => {
+ if (this.destroyed) {
+ return undefined;
+ }
+
+ const [id, pageIndex, type, imageData] = data;
+ const pageProxy = this.pageCache[pageIndex];
+
+ if (pageProxy.objs.has(id)) {
+ return undefined;
+ }
+
+ switch (type) {
+ case "Image":
+ pageProxy.objs.resolve(id, imageData);
+ const MAX_IMAGE_SIZE_TO_STORE = 8000000;
+
+ if (imageData && "data" in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
+ pageProxy.cleanupAfterRender = true;
+ }
+
+ break;
+
+ default:
+ throw new Error(`Got unknown object type ${type}`);
+ }
+
+ return undefined;
+ });
+ messageHandler.on("DocProgress", data => {
+ if (this.destroyed) {
+ return;
+ }
+
+ if (loadingTask.onProgress) {
+ loadingTask.onProgress({
+ loaded: data.loaded,
+ total: data.total
+ });
+ }
+ });
+ messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
+ messageHandler.on("FetchBuiltInCMap", (data, sink) => {
+ if (this.destroyed) {
+ sink.error(new Error("Worker was destroyed"));
+ return;
+ }
+
+ let fetched = false;
+
+ sink.onPull = () => {
+ if (fetched) {
+ sink.close();
+ return;
+ }
+
+ fetched = true;
+ this.CMapReaderFactory.fetch(data).then(function (builtInCMap) {
+ sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);
+ }).catch(function (reason) {
+ sink.error(reason);
+ });
+ };
+ });
+ }
+
+ _onUnsupportedFeature({
+ featureId
+ }) {
+ if (this.destroyed) {
+ return;
+ }
+
+ if (this.loadingTask.onUnsupportedFeature) {
+ this.loadingTask.onUnsupportedFeature(featureId);
+ }
+ }
+
+ getData() {
+ return this.messageHandler.sendWithPromise("GetData", null);
+ }
+
+ getPage(pageNumber) {
+ if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
+ return Promise.reject(new Error("Invalid page request"));
+ }
+
+ const pageIndex = pageNumber - 1;
+
+ if (pageIndex in this.pagePromises) {
+ return this.pagePromises[pageIndex];
+ }
+
+ 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[pageIndex] = page;
+ return page;
+ });
+ this.pagePromises[pageIndex] = promise;
+ return promise;
+ }
+
+ getPageIndex(ref) {
+ return this.messageHandler.sendWithPromise("GetPageIndex", {
+ ref
+ }).catch(function (reason) {
+ return Promise.reject(new Error(reason));
+ });
+ }
+
+ getAnnotations(pageIndex, intent) {
+ return this.messageHandler.sendWithPromise("GetAnnotations", {
+ pageIndex,
+ intent
+ });
+ }
+
+ 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);
+ }
+
+ getJavaScript() {
+ return this.messageHandler.sendWithPromise("GetJavaScript", null);
+ }
+
+ getOutline() {
+ return this.messageHandler.sendWithPromise("GetOutline", null);
+ }
+
+ getPermissions() {
+ return this.messageHandler.sendWithPromise("GetPermissions", null);
+ }
+
+ getMetadata() {
+ return this.messageHandler.sendWithPromise("GetMetadata", null).then(results => {
+ return {
+ info: results[0],
+ metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
+ contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
+ };
+ });
+ }
+
+ getStats() {
+ return this.messageHandler.sendWithPromise("GetStats", null);
+ }
+
+ startCleanup() {
+ return this.messageHandler.sendWithPromise("Cleanup", null).then(() => {
+ for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
+ const page = this.pageCache[i];
+
+ if (page) {
+ const cleanupSuccessful = page.cleanup();
+
+ if (!cleanupSuccessful) {
+ throw new Error(`startCleanup: Page ${i + 1} is currently rendering.`);
+ }
+ }
+ }
+
+ this.commonObjs.clear();
+ this.fontLoader.clear();
+ });
+ }
+
+ get loadingParams() {
+ const params = this._params;
+ return (0, _util.shadow)(this, "loadingParams", {
+ disableAutoFetch: params.disableAutoFetch,
+ disableFontFace: params.disableFontFace
+ });
+ }
+
+}
+
+class PDFObjects {
+ constructor() {
+ this._objs = Object.create(null);
+ }
+
+ _ensureObj(objId) {
+ if (this._objs[objId]) {
+ return this._objs[objId];
+ }
+
+ return this._objs[objId] = {
+ capability: (0, _util.createPromiseCapability)(),
+ data: null,
+ resolved: false
+ };
+ }
+
+ get(objId, callback = null) {
+ if (callback) {
+ this._ensureObj(objId).capability.promise.then(callback);
+
+ return null;
+ }
+
+ const obj = this._objs[objId];
+
+ if (!obj || !obj.resolved) {
+ throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
+ }
+
+ return obj.data;
+ }
+
+ has(objId) {
+ const obj = this._objs[objId];
+ return obj ? obj.resolved : false;
+ }
+
+ resolve(objId, data) {
+ const obj = this._ensureObj(objId);
+
+ obj.resolved = true;
+ obj.data = data;
+ obj.capability.resolve(data);
+ }
+
+ clear() {
+ this._objs = Object.create(null);
+ }
+
+}
+
+class RenderTask {
+ constructor(internalRenderTask) {
+ this._internalRenderTask = internalRenderTask;
+ this.onContinue = null;
+ }
+
+ get promise() {
+ return this._internalRenderTask.capability.promise;
+ }
+
+ cancel() {
+ this._internalRenderTask.cancel();
+ }
+
+}
+
+const InternalRenderTask = function InternalRenderTaskClosure() {
+ const canvasInRendering = new WeakSet();
+
+ class InternalRenderTask {
+ constructor({
+ callback,
+ params,
+ objs,
+ commonObjs,
+ operatorList,
+ pageIndex,
+ canvasFactory,
+ webGLContext,
+ useRequestAnimationFrame = false,
+ pdfBug = false
+ }) {
+ this.callback = callback;
+ this.params = params;
+ this.objs = objs;
+ this.commonObjs = commonObjs;
+ this.operatorListIdx = null;
+ this.operatorList = operatorList;
+ this._pageIndex = pageIndex;
+ this.canvasFactory = canvasFactory;
+ this.webGLContext = webGLContext;
+ this._pdfBug = pdfBug;
+ this.running = false;
+ this.graphicsReadyCallback = null;
+ this.graphicsReady = false;
+ this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
+ this.cancelled = false;
+ this.capability = (0, _util.createPromiseCapability)();
+ this.task = new RenderTask(this);
+ this._continueBound = this._continue.bind(this);
+ this._scheduleNextBound = this._scheduleNext.bind(this);
+ this._nextBound = this._next.bind(this);
+ this._canvas = params.canvasContext.canvas;
+ }
+
+ initializeGraphics(transparency = false) {
+ if (this.cancelled) {
+ return;
+ }
+
+ if (this._canvas) {
+ if (canvasInRendering.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.");
+ }
+
+ canvasInRendering.add(this._canvas);
+ }
+
+ if (this._pdfBug && globalThis.StepperManager && 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,
+ imageLayer,
+ background
+ } = this.params;
+ this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer);
+ this.gfx.beginDrawing({
+ transform,
+ viewport,
+ transparency,
+ background
+ });
+ this.operatorListIdx = 0;
+ this.graphicsReady = true;
+
+ if (this.graphicsReadyCallback) {
+ this.graphicsReadyCallback();
+ }
+ }
+
+ cancel(error = null) {
+ this.running = false;
+ this.cancelled = true;
+
+ if (this.gfx) {
+ this.gfx.endDrawing();
+ }
+
+ if (this._canvas) {
+ canvasInRendering.delete(this._canvas);
+ }
+
+ this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas"));
+ }
+
+ operatorListChanged() {
+ if (!this.graphicsReady) {
+ if (!this.graphicsReadyCallback) {
+ this.graphicsReadyCallback = this._continueBound;
+ }
+
+ return;
+ }
+
+ if (this.stepper) {
+ 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.cancel.bind(this));
+ });
+ } else {
+ Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this));
+ }
+ }
+
+ 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();
+
+ if (this._canvas) {
+ canvasInRendering.delete(this._canvas);
+ }
+
+ this.callback();
+ }
+ }
+ }
+
+ }
+
+ return InternalRenderTask;
+}();
+
+const version = '2.5.207';
+exports.version = version;
+const build = '0974d6052';
+exports.build = build;
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FontLoader = exports.FontFaceObject = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+class BaseFontLoader {
+ constructor({
+ docId,
+ onUnsupportedFeature
+ }) {
+ if (this.constructor === BaseFontLoader) {
+ (0, _util.unreachable)("Cannot initialize BaseFontLoader.");
+ }
+
+ this.docId = docId;
+ this._onUnsupportedFeature = onUnsupportedFeature;
+ this.nativeFontFaces = [];
+ this.styleElement = null;
+ }
+
+ addNativeFontFace(nativeFontFace) {
+ this.nativeFontFaces.push(nativeFontFace);
+ document.fonts.add(nativeFontFace);
+ }
+
+ insertRule(rule) {
+ let styleElement = this.styleElement;
+
+ if (!styleElement) {
+ styleElement = this.styleElement = document.createElement("style");
+ styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
+ document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
+ }
+
+ const styleSheet = styleElement.sheet;
+ styleSheet.insertRule(rule, styleSheet.cssRules.length);
+ }
+
+ clear() {
+ this.nativeFontFaces.forEach(function (nativeFontFace) {
+ document.fonts.delete(nativeFontFace);
+ });
+ this.nativeFontFaces.length = 0;
+
+ if (this.styleElement) {
+ this.styleElement.remove();
+ this.styleElement = null;
+ }
+ }
+
+ async bind(font) {
+ if (font.attached || font.missingFile) {
+ return;
+ }
+
+ font.attached = true;
+
+ if (this.isFontLoadingAPISupported) {
+ const nativeFontFace = font.createNativeFontFace();
+
+ if (nativeFontFace) {
+ this.addNativeFontFace(nativeFontFace);
+
+ try {
+ await nativeFontFace.loaded;
+ } catch (ex) {
+ this._onUnsupportedFeature({
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
+ });
+
+ (0, _util.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([rule], [font], request);
+ });
+ }
+ }
+
+ _queueLoadingCallback(callback) {
+ (0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
+ }
+
+ get isFontLoadingAPISupported() {
+ const supported = typeof document !== "undefined" && !!document.fonts;
+ return (0, _util.shadow)(this, "isFontLoadingAPISupported", supported);
+ }
+
+ get isSyncFontLoadingSupported() {
+ (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
+ }
+
+ get _loadTestFont() {
+ (0, _util.unreachable)("Abstract method `_loadTestFont`.");
+ }
+
+ _prepareFontLoadEvent(rules, fontsToLoad, request) {
+ (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
+ }
+
+}
+
+let FontLoader;
+exports.FontLoader = FontLoader;
+{
+ exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader {
+ constructor(docId) {
+ super(docId);
+ this.loadingContext = {
+ requests: [],
+ nextRequestId: 0
+ };
+ this.loadTestFontId = 0;
+ }
+
+ get isSyncFontLoadingSupported() {
+ let supported = false;
+
+ if (typeof navigator === "undefined") {
+ supported = true;
+ } else {
+ const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
+
+ if (m && m[1] >= 14) {
+ supported = true;
+ }
+ }
+
+ return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
+ }
+
+ _queueLoadingCallback(callback) {
+ function completeRequest() {
+ (0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
+ request.done = true;
+
+ while (context.requests.length > 0 && context.requests[0].done) {
+ const otherRequest = context.requests.shift();
+ setTimeout(otherRequest.callback, 0);
+ }
+ }
+
+ const context = this.loadingContext;
+ const request = {
+ id: `pdfjs-font-loading-${context.nextRequestId++}`,
+ done: false,
+ complete: completeRequest,
+ callback
+ };
+ context.requests.push(request);
+ return request;
+ }
+
+ get _loadTestFont() {
+ const getLoadTestFont = function () {
+ return 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, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
+ }
+
+ _prepareFontLoadEvent(rules, fonts, 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 = document.createElement("canvas");
+ canvas.width = 1;
+ canvas.height = 1;
+ const ctx = canvas.getContext("2d");
+ let called = 0;
+
+ function isFontReady(name, callback) {
+ called++;
+
+ if (called > 30) {
+ (0, _util.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, _util.string32)(checksum));
+ const url = `url(data:font/opentype;base64,${btoa(data)});`;
+ const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
+ this.insertRule(rule);
+ const names = [];
+
+ for (i = 0, ii = fonts.length; i < ii; i++) {
+ names.push(fonts[i].loadedName);
+ }
+
+ names.push(loadTestFontId);
+ const div = 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 (i = 0, ii = names.length; i < ii; ++i) {
+ const span = document.createElement("span");
+ span.textContent = "Hi";
+ span.style.fontFamily = names[i];
+ div.appendChild(span);
+ }
+
+ document.body.appendChild(div);
+ isFontReady(loadTestFontId, function () {
+ document.body.removeChild(div);
+ request.complete();
+ });
+ }
+
+ };
+}
+
+class FontFaceObject {
+ constructor(translatedData, {
+ isEvalSupported = true,
+ disableFontFace = false,
+ ignoreErrors = false,
+ onUnsupportedFeature = null,
+ fontRegistry = 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._onUnsupportedFeature = onUnsupportedFeature;
+ this.fontRegistry = fontRegistry;
+ }
+
+ createNativeFontFace() {
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+
+ const nativeFontFace = new FontFace(this.loadedName, this.data, {});
+
+ if (this.fontRegistry) {
+ this.fontRegistry.registerFont(this);
+ }
+
+ return nativeFontFace;
+ }
+
+ createFontFaceRule() {
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+
+ const data = (0, _util.bytesToString)(new Uint8Array(this.data));
+ const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
+ const rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
+
+ if (this.fontRegistry) {
+ this.fontRegistry.registerFont(this, url);
+ }
+
+ return rule;
+ }
+
+ getPathGenerator(objs, character) {
+ if (this.compiledGlyphs[character] !== undefined) {
+ return this.compiledGlyphs[character];
+ }
+
+ let cmds, current;
+
+ try {
+ cmds = objs.get(this.loadedName + "_path_" + character);
+ } catch (ex) {
+ if (!this.ignoreErrors) {
+ throw ex;
+ }
+
+ if (this._onUnsupportedFeature) {
+ this._onUnsupportedFeature({
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
+ });
+ }
+
+ (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
+ return this.compiledGlyphs[character] = function (c, size) {};
+ }
+
+ if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
+ let args,
+ js = "";
+
+ for (let i = 0, ii = cmds.length; i < ii; i++) {
+ current = cmds[i];
+
+ if (current.args !== undefined) {
+ args = current.args.join(",");
+ } else {
+ args = "";
+ }
+
+ js += "c." + current.cmd + "(" + args + ");\n";
+ }
+
+ return this.compiledGlyphs[character] = new Function("c", "size", js);
+ }
+
+ return this.compiledGlyphs[character] = function (c, size) {
+ for (let i = 0, ii = cmds.length; i < ii; i++) {
+ current = cmds[i];
+
+ if (current.cmd === "scale") {
+ current.args = [size, -size];
+ }
+
+ c[current.cmd].apply(c, current.args);
+ }
+ };
+ }
+
+}
+
+exports.FontFaceObject = FontFaceObject;
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.apiCompatibilityParams = void 0;
+
+var _is_node = __w_pdfjs_require__(4);
+
+const compatibilityParams = Object.create(null);
+{
+ (function checkFontFace() {
+ if (_is_node.isNodeJS) {
+ compatibilityParams.disableFontFace = true;
+ }
+ })();
+}
+const apiCompatibilityParams = Object.freeze(compatibilityParams);
+exports.apiCompatibilityParams = apiCompatibilityParams;
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.CanvasGraphics = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _pattern_helper = __w_pdfjs_require__(9);
+
+var MIN_FONT_SIZE = 16;
+var MAX_FONT_SIZE = 100;
+var MAX_GROUP_SIZE = 4096;
+var MIN_WIDTH_FACTOR = 0.65;
+var COMPILE_TYPE3_GLYPHS = true;
+var MAX_SIZE_TO_COMPILE = 1000;
+var FULL_CHUNK_HEIGHT = 16;
+
+function addContextCurrentTransform(ctx) {
+ if (!ctx.mozCurrentTransform) {
+ 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._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
+ ctx._transformStack = [];
+ Object.defineProperty(ctx, "mozCurrentTransform", {
+ get: function getCurrentTransform() {
+ return this._transformMatrix;
+ }
+ });
+ Object.defineProperty(ctx, "mozCurrentTransformInverse", {
+ get: function getCurrentTransformInverse() {
+ var m = this._transformMatrix;
+ var a = m[0],
+ b = m[1],
+ c = m[2],
+ d = m[3],
+ e = m[4],
+ f = m[5];
+ var ad_bc = a * d - b * c;
+ var bc_ad = b * c - a * d;
+ return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];
+ }
+ });
+
+ ctx.save = function ctxSave() {
+ var old = this._transformMatrix;
+
+ this._transformStack.push(old);
+
+ this._transformMatrix = old.slice(0, 6);
+
+ this._originalSave();
+ };
+
+ ctx.restore = function ctxRestore() {
+ var prev = this._transformStack.pop();
+
+ if (prev) {
+ this._transformMatrix = prev;
+
+ this._originalRestore();
+ }
+ };
+
+ ctx.translate = function ctxTranslate(x, y) {
+ var m = this._transformMatrix;
+ m[4] = m[0] * x + m[2] * y + m[4];
+ m[5] = m[1] * x + m[3] * y + m[5];
+
+ this._originalTranslate(x, y);
+ };
+
+ ctx.scale = function ctxScale(x, y) {
+ var m = this._transformMatrix;
+ m[0] = m[0] * x;
+ m[1] = m[1] * x;
+ m[2] = m[2] * y;
+ m[3] = m[3] * y;
+
+ this._originalScale(x, y);
+ };
+
+ ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+ var m = this._transformMatrix;
+ this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];
+
+ ctx._originalTransform(a, b, c, d, e, f);
+ };
+
+ ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
+ this._transformMatrix = [a, b, c, d, e, f];
+
+ ctx._originalSetTransform(a, b, c, d, e, f);
+ };
+
+ ctx.rotate = function ctxRotate(angle) {
+ var cosValue = Math.cos(angle);
+ var sinValue = Math.sin(angle);
+ var m = this._transformMatrix;
+ this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];
+
+ this._originalRotate(angle);
+ };
+ }
+}
+
+var CachedCanvases = function CachedCanvasesClosure() {
+ function CachedCanvases(canvasFactory) {
+ this.canvasFactory = canvasFactory;
+ this.cache = Object.create(null);
+ }
+
+ CachedCanvases.prototype = {
+ getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) {
+ var canvasEntry;
+
+ if (this.cache[id] !== undefined) {
+ canvasEntry = this.cache[id];
+ this.canvasFactory.reset(canvasEntry, width, height);
+ canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
+ } else {
+ canvasEntry = this.canvasFactory.create(width, height);
+ this.cache[id] = canvasEntry;
+ }
+
+ if (trackTransform) {
+ addContextCurrentTransform(canvasEntry.context);
+ }
+
+ return canvasEntry;
+ },
+
+ clear() {
+ for (var id in this.cache) {
+ var canvasEntry = this.cache[id];
+ this.canvasFactory.destroy(canvasEntry);
+ delete this.cache[id];
+ }
+ }
+
+ };
+ return CachedCanvases;
+}();
+
+function compileType3Glyph(imgData) {
+ var POINT_TO_PROCESS_LIMIT = 1000;
+ var width = imgData.width,
+ height = imgData.height;
+ var i,
+ j,
+ j0,
+ width1 = width + 1;
+ var points = new Uint8Array(width1 * (height + 1));
+ var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
+ var lineSize = width + 7 & ~7,
+ data0 = imgData.data;
+ var data = new Uint8Array(lineSize * height),
+ pos = 0,
+ ii;
+
+ for (i = 0, ii = data0.length; i < ii; i++) {
+ var mask = 128,
+ elem = data0[i];
+
+ while (mask > 0) {
+ data[pos++] = elem & mask ? 0 : 255;
+ mask >>= 1;
+ }
+ }
+
+ var 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;
+ }
+
+ var 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;
+ }
+
+ var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
+ var outlines = [];
+
+ for (i = 0; count && i <= height; i++) {
+ var p = i * width1;
+ var end = p + width;
+
+ while (p < end && !points[p]) {
+ p++;
+ }
+
+ if (p === end) {
+ continue;
+ }
+
+ var coords = [p % width1, i];
+ var type = points[p],
+ p0 = p,
+ pp;
+
+ do {
+ var step = steps[type];
+
+ do {
+ p += step;
+ } while (!points[p]);
+
+ 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;
+ }
+
+ coords.push(p % width1);
+ coords.push(p / width1 | 0);
+
+ if (!points[p]) {
+ --count;
+ }
+ } while (p0 !== p);
+
+ outlines.push(coords);
+ --i;
+ }
+
+ var drawOutline = function (c) {
+ c.save();
+ c.scale(1 / width, -1 / height);
+ c.translate(0, -height);
+ c.beginPath();
+
+ for (let k = 0, kk = outlines.length; k < kk; k++) {
+ var o = outlines[k];
+ c.moveTo(o[0], o[1]);
+
+ for (let l = 2, ll = o.length; l < ll; l += 2) {
+ c.lineTo(o[l], o[l + 1]);
+ }
+ }
+
+ c.fill();
+ c.beginPath();
+ c.restore();
+ };
+
+ return drawOutline;
+}
+
+var CanvasExtraState = function CanvasExtraStateClosure() {
+ function CanvasExtraState() {
+ 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.resumeSMaskCtx = null;
+ }
+
+ CanvasExtraState.prototype = {
+ clone: function CanvasExtraState_clone() {
+ return Object.create(this);
+ },
+ setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+ };
+ return CanvasExtraState;
+}();
+
+var CanvasGraphics = function CanvasGraphicsClosure() {
+ var EXECUTION_TIME = 15;
+ var EXECUTION_STEPS = 10;
+
+ function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer) {
+ this.ctx = canvasCtx;
+ this.current = new CanvasExtraState();
+ this.stateStack = [];
+ this.pendingClip = null;
+ this.pendingEOFill = false;
+ this.res = null;
+ this.xobjs = null;
+ this.commonObjs = commonObjs;
+ this.objs = objs;
+ this.canvasFactory = canvasFactory;
+ this.webGLContext = webGLContext;
+ this.imageLayer = imageLayer;
+ this.groupStack = [];
+ this.processingType3 = null;
+ this.baseTransform = null;
+ this.baseTransformStack = [];
+ this.groupLevel = 0;
+ this.smaskStack = [];
+ this.smaskCounter = 0;
+ this.tempSMask = null;
+ this.cachedCanvases = new CachedCanvases(this.canvasFactory);
+
+ if (canvasCtx) {
+ addContextCurrentTransform(canvasCtx);
+ }
+
+ this._cachedGetSinglePixelWidth = null;
+ }
+
+ function putBinaryImageData(ctx, imgData) {
+ if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
+ ctx.putImageData(imgData, 0, 0);
+ return;
+ }
+
+ var height = imgData.height,
+ width = imgData.width;
+ var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+ var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+ var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+ var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+ var srcPos = 0,
+ destPos;
+ var src = imgData.data;
+ var dest = chunkImgData.data;
+ var i, j, thisChunkHeight, elemsInThisChunk;
+
+ if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
+ var srcLength = src.byteLength;
+ var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
+ var dest32DataLength = dest32.length;
+ var fullSrcDiff = width + 7 >> 3;
+ var white = 0xffffffff;
+ var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;
+
+ for (i = 0; i < totalChunks; i++) {
+ thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+ destPos = 0;
+
+ for (j = 0; j < thisChunkHeight; j++) {
+ var srcDiff = srcLength - srcPos;
+ var k = 0;
+ var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
+ var kEndUnrolled = kEnd & ~7;
+ var mask = 0;
+ var 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) {
+ var height = imgData.height,
+ width = imgData.width;
+ var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+ var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+ var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+ var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+ var srcPos = 0;
+ var src = imgData.data;
+ var dest = chunkImgData.data;
+
+ for (var i = 0; i < totalChunks; i++) {
+ var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+ var destPos = 3;
+
+ for (var j = 0; j < thisChunkHeight; j++) {
+ var mask = 0;
+
+ for (var k = 0; k < width; k++) {
+ if (!mask) {
+ var elem = src[srcPos++];
+ mask = 128;
+ }
+
+ dest[destPos] = elem & mask ? 0 : 255;
+ destPos += 4;
+ mask >>= 1;
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+ }
+ }
+
+ function copyCtxState(sourceCtx, destCtx) {
+ var properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"];
+
+ for (var i = 0, ii = properties.length; i < ii; i++) {
+ var property = properties[i];
+
+ 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 = "#000000";
+ 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;
+ }
+ }
+
+ function composeSMaskBackdrop(bytes, r0, g0, b0) {
+ var length = bytes.length;
+
+ for (var i = 3; i < length; i += 4) {
+ var alpha = bytes[i];
+
+ if (alpha === 0) {
+ bytes[i - 3] = r0;
+ bytes[i - 2] = g0;
+ bytes[i - 1] = b0;
+ } else if (alpha < 255) {
+ var 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) {
+ var length = maskData.length;
+ var scale = 1 / 255;
+
+ for (var i = 3; i < length; i += 4) {
+ var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
+ layerData[i] = layerData[i] * alpha * scale | 0;
+ }
+ }
+
+ function composeSMaskLuminosity(maskData, layerData, transferMap) {
+ var length = maskData.length;
+
+ for (var i = 3; i < length; i += 4) {
+ var 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) {
+ var hasBackdrop = !!backdrop;
+ var r0 = hasBackdrop ? backdrop[0] : 0;
+ var g0 = hasBackdrop ? backdrop[1] : 0;
+ var b0 = hasBackdrop ? backdrop[2] : 0;
+ var composeFn;
+
+ if (subtype === "Luminosity") {
+ composeFn = composeSMaskLuminosity;
+ } else {
+ composeFn = composeSMaskAlpha;
+ }
+
+ var PIXELS_TO_PROCESS = 1048576;
+ var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
+
+ for (var row = 0; row < height; row += chunkSize) {
+ var chunkHeight = Math.min(chunkSize, height - row);
+ var maskData = maskCtx.getImageData(0, row, width, chunkHeight);
+ var layerData = layerCtx.getImageData(0, row, width, chunkHeight);
+
+ if (hasBackdrop) {
+ composeSMaskBackdrop(maskData.data, r0, g0, b0);
+ }
+
+ composeFn(maskData.data, layerData.data, transferMap);
+ maskCtx.putImageData(layerData, 0, row);
+ }
+ }
+
+ function composeSMask(ctx, smask, layerCtx, webGLContext) {
+ var mask = smask.canvas;
+ var maskCtx = smask.context;
+ ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY);
+ var backdrop = smask.backdrop || null;
+
+ if (!smask.transferMap && webGLContext.isEnabled) {
+ const composed = webGLContext.composeSMask({
+ layer: layerCtx.canvas,
+ mask,
+ properties: {
+ subtype: smask.subtype,
+ backdrop
+ }
+ });
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.drawImage(composed, smask.offsetX, smask.offsetY);
+ return;
+ }
+
+ genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap);
+ ctx.drawImage(mask, 0, 0);
+ }
+
+ var LINE_CAP_STYLES = ["butt", "round", "square"];
+ var LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+ var NORMAL_CLIP = {};
+ var EO_CLIP = {};
+ CanvasGraphics.prototype = {
+ beginDrawing({
+ transform,
+ viewport,
+ transparency = false,
+ background = null
+ }) {
+ var width = this.ctx.canvas.width;
+ var height = this.ctx.canvas.height;
+ this.ctx.save();
+ this.ctx.fillStyle = background || "rgb(255, 255, 255)";
+ this.ctx.fillRect(0, 0, width, height);
+ this.ctx.restore();
+
+ if (transparency) {
+ var transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true);
+ this.compositeCtx = this.ctx;
+ this.transparentCanvas = transparentCanvas.canvas;
+ this.ctx = transparentCanvas.context;
+ this.ctx.save();
+ this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);
+ }
+
+ this.ctx.save();
+ resetCtxToDefault(this.ctx);
+
+ if (transform) {
+ this.ctx.transform.apply(this.ctx, transform);
+ }
+
+ this.ctx.transform.apply(this.ctx, viewport.transform);
+ this.baseTransform = this.ctx.mozCurrentTransform.slice();
+
+ if (this.imageLayer) {
+ this.imageLayer.beginLayout();
+ }
+ },
+
+ executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
+ var argsArray = operatorList.argsArray;
+ var fnArray = operatorList.fnArray;
+ var i = executionStartIdx || 0;
+ var argsArrayLen = argsArray.length;
+
+ if (argsArrayLen === i) {
+ return i;
+ }
+
+ var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
+ var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
+ var steps = 0;
+ var commonObjs = this.commonObjs;
+ var objs = this.objs;
+ var 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;
+ }
+ }
+ },
+ endDrawing: function CanvasGraphics_endDrawing() {
+ if (this.current.activeSMask !== null) {
+ this.endSMaskGroup();
+ }
+
+ 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;
+ }
+
+ this.cachedCanvases.clear();
+ this.webGLContext.clear();
+
+ if (this.imageLayer) {
+ this.imageLayer.endLayout();
+ }
+ },
+ setLineWidth: function CanvasGraphics_setLineWidth(width) {
+ this.current.lineWidth = width;
+ this.ctx.lineWidth = width;
+ },
+ setLineCap: function CanvasGraphics_setLineCap(style) {
+ this.ctx.lineCap = LINE_CAP_STYLES[style];
+ },
+ setLineJoin: function CanvasGraphics_setLineJoin(style) {
+ this.ctx.lineJoin = LINE_JOIN_STYLES[style];
+ },
+ setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {
+ this.ctx.miterLimit = limit;
+ },
+ setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
+ var ctx = this.ctx;
+
+ if (ctx.setLineDash !== undefined) {
+ ctx.setLineDash(dashArray);
+ ctx.lineDashOffset = dashPhase;
+ }
+ },
+
+ setRenderingIntent(intent) {},
+
+ setFlatness(flatness) {},
+
+ setGState: function CanvasGraphics_setGState(states) {
+ for (var i = 0, ii = states.length; i < ii; i++) {
+ var state = states[i];
+ var key = state[0];
+ var value = state[1];
+
+ 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 = state[1];
+ break;
+
+ case "ca":
+ this.current.fillAlpha = state[1];
+ this.ctx.globalAlpha = state[1];
+ break;
+
+ case "BM":
+ this.ctx.globalCompositeOperation = value;
+ break;
+
+ case "SMask":
+ if (this.current.activeSMask) {
+ if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) {
+ this.suspendSMaskGroup();
+ } else {
+ this.endSMaskGroup();
+ }
+ }
+
+ this.current.activeSMask = value ? this.tempSMask : null;
+
+ if (this.current.activeSMask) {
+ this.beginSMaskGroup();
+ }
+
+ this.tempSMask = null;
+ break;
+ }
+ }
+ },
+ beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {
+ var activeSMask = this.current.activeSMask;
+ var drawnWidth = activeSMask.canvas.width;
+ var drawnHeight = activeSMask.canvas.height;
+ var cacheId = "smaskGroupAt" + this.groupLevel;
+ var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+ var currentCtx = this.ctx;
+ var currentTransform = currentCtx.mozCurrentTransform;
+ this.ctx.save();
+ var groupCtx = scratchCanvas.context;
+ groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);
+ groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);
+ groupCtx.transform.apply(groupCtx, currentTransform);
+ activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse;
+ copyCtxState(currentCtx, groupCtx);
+ this.ctx = groupCtx;
+ this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
+ this.groupStack.push(currentCtx);
+ this.groupLevel++;
+ },
+ suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {
+ var groupCtx = this.ctx;
+ this.groupLevel--;
+ this.ctx = this.groupStack.pop();
+ composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
+ this.ctx.restore();
+ this.ctx.save();
+ copyCtxState(groupCtx, this.ctx);
+ this.current.resumeSMaskCtx = groupCtx;
+
+ var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);
+
+ this.ctx.transform.apply(this.ctx, deltaTransform);
+ groupCtx.save();
+ groupCtx.setTransform(1, 0, 0, 1, 0, 0);
+ groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);
+ groupCtx.restore();
+ },
+ resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() {
+ var groupCtx = this.current.resumeSMaskCtx;
+ var currentCtx = this.ctx;
+ this.ctx = groupCtx;
+ this.groupStack.push(currentCtx);
+ this.groupLevel++;
+ },
+ endSMaskGroup: function CanvasGraphics_endSMaskGroup() {
+ var groupCtx = this.ctx;
+ this.groupLevel--;
+ this.ctx = this.groupStack.pop();
+ composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
+ this.ctx.restore();
+ copyCtxState(groupCtx, this.ctx);
+
+ var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);
+
+ this.ctx.transform.apply(this.ctx, deltaTransform);
+ },
+ save: function CanvasGraphics_save() {
+ this.ctx.save();
+ var old = this.current;
+ this.stateStack.push(old);
+ this.current = old.clone();
+ this.current.resumeSMaskCtx = null;
+ },
+ restore: function CanvasGraphics_restore() {
+ if (this.current.resumeSMaskCtx) {
+ this.resumeSMaskGroup();
+ }
+
+ if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) {
+ this.endSMaskGroup();
+ }
+
+ if (this.stateStack.length !== 0) {
+ this.current = this.stateStack.pop();
+ this.ctx.restore();
+ this.pendingClip = null;
+ this._cachedGetSinglePixelWidth = null;
+ }
+ },
+ transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
+ this.ctx.transform(a, b, c, d, e, f);
+ this._cachedGetSinglePixelWidth = null;
+ },
+ constructPath: function CanvasGraphics_constructPath(ops, args) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var x = current.x,
+ y = current.y;
+
+ for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
+ switch (ops[i] | 0) {
+ case _util.OPS.rectangle:
+ x = args[j++];
+ y = args[j++];
+ var width = args[j++];
+ var height = args[j++];
+
+ if (width === 0) {
+ width = this.getSinglePixelWidth();
+ }
+
+ if (height === 0) {
+ height = this.getSinglePixelWidth();
+ }
+
+ var xw = x + width;
+ var yh = y + height;
+ this.ctx.moveTo(x, y);
+ this.ctx.lineTo(xw, y);
+ this.ctx.lineTo(xw, yh);
+ this.ctx.lineTo(x, yh);
+ this.ctx.lineTo(x, y);
+ this.ctx.closePath();
+ break;
+
+ case _util.OPS.moveTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.moveTo(x, y);
+ break;
+
+ case _util.OPS.lineTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.lineTo(x, y);
+ break;
+
+ case _util.OPS.curveTo:
+ x = args[j + 4];
+ y = args[j + 5];
+ ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
+ j += 6;
+ break;
+
+ case _util.OPS.curveTo2:
+ ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
+ x = args[j + 2];
+ y = args[j + 3];
+ j += 4;
+ break;
+
+ case _util.OPS.curveTo3:
+ x = args[j + 2];
+ y = args[j + 3];
+ ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
+ j += 4;
+ break;
+
+ case _util.OPS.closePath:
+ ctx.closePath();
+ break;
+ }
+ }
+
+ current.setCurrentPoint(x, y);
+ },
+ closePath: function CanvasGraphics_closePath() {
+ this.ctx.closePath();
+ },
+ stroke: function CanvasGraphics_stroke(consumePath) {
+ consumePath = typeof consumePath !== "undefined" ? consumePath : true;
+ var ctx = this.ctx;
+ var strokeColor = this.current.strokeColor;
+ ctx.globalAlpha = this.current.strokeAlpha;
+
+ if (strokeColor && strokeColor.hasOwnProperty("type") && strokeColor.type === "Pattern") {
+ ctx.save();
+ const transform = ctx.mozCurrentTransform;
+
+ const scale = _util.Util.singularValueDecompose2dScale(transform)[0];
+
+ ctx.strokeStyle = strokeColor.getPattern(ctx, this);
+ ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth * scale);
+ ctx.stroke();
+ ctx.restore();
+ } else {
+ ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth);
+ ctx.stroke();
+ }
+
+ if (consumePath) {
+ this.consumePath();
+ }
+
+ ctx.globalAlpha = this.current.fillAlpha;
+ },
+ closeStroke: function CanvasGraphics_closeStroke() {
+ this.closePath();
+ this.stroke();
+ },
+ fill: function CanvasGraphics_fill(consumePath) {
+ consumePath = typeof consumePath !== "undefined" ? consumePath : true;
+ var ctx = this.ctx;
+ var fillColor = this.current.fillColor;
+ var isPatternFill = this.current.patternFill;
+ var needRestore = false;
+
+ if (isPatternFill) {
+ ctx.save();
+
+ if (this.baseTransform) {
+ ctx.setTransform.apply(ctx, this.baseTransform);
+ }
+
+ ctx.fillStyle = fillColor.getPattern(ctx, this);
+ needRestore = true;
+ }
+
+ if (this.pendingEOFill) {
+ ctx.fill("evenodd");
+ this.pendingEOFill = false;
+ } else {
+ ctx.fill();
+ }
+
+ if (needRestore) {
+ ctx.restore();
+ }
+
+ if (consumePath) {
+ this.consumePath();
+ }
+ },
+ eoFill: function CanvasGraphics_eoFill() {
+ this.pendingEOFill = true;
+ this.fill();
+ },
+ fillStroke: function CanvasGraphics_fillStroke() {
+ this.fill(false);
+ this.stroke(false);
+ this.consumePath();
+ },
+ eoFillStroke: function CanvasGraphics_eoFillStroke() {
+ this.pendingEOFill = true;
+ this.fillStroke();
+ },
+ closeFillStroke: function CanvasGraphics_closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ },
+ closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {
+ this.pendingEOFill = true;
+ this.closePath();
+ this.fillStroke();
+ },
+ endPath: function CanvasGraphics_endPath() {
+ this.consumePath();
+ },
+ clip: function CanvasGraphics_clip() {
+ this.pendingClip = NORMAL_CLIP;
+ },
+ eoClip: function CanvasGraphics_eoClip() {
+ this.pendingClip = EO_CLIP;
+ },
+ beginText: function CanvasGraphics_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: function CanvasGraphics_endText() {
+ var paths = this.pendingTextPaths;
+ var ctx = this.ctx;
+
+ if (paths === undefined) {
+ ctx.beginPath();
+ return;
+ }
+
+ ctx.save();
+ ctx.beginPath();
+
+ for (var i = 0; i < paths.length; i++) {
+ var path = paths[i];
+ ctx.setTransform.apply(ctx, path.transform);
+ ctx.translate(path.x, path.y);
+ path.addToPath(ctx, path.fontSize);
+ }
+
+ ctx.restore();
+ ctx.clip();
+ ctx.beginPath();
+ delete this.pendingTextPaths;
+ },
+ setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {
+ this.current.charSpacing = spacing;
+ },
+ setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {
+ this.current.wordSpacing = spacing;
+ },
+ setHScale: function CanvasGraphics_setHScale(scale) {
+ this.current.textHScale = scale / 100;
+ },
+ setLeading: function CanvasGraphics_setLeading(leading) {
+ this.current.leading = -leading;
+ },
+ setFont: function CanvasGraphics_setFont(fontRefName, size) {
+ var fontObj = this.commonObjs.get(fontRefName);
+ var current = this.current;
+
+ if (!fontObj) {
+ throw new Error(`Can't find font for ${fontRefName}`);
+ }
+
+ current.fontMatrix = fontObj.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;
+ }
+
+ var name = fontObj.loadedName || "sans-serif";
+ let bold = "normal";
+
+ if (fontObj.black) {
+ bold = "900";
+ } else if (fontObj.bold) {
+ bold = "bold";
+ }
+
+ var italic = fontObj.italic ? "italic" : "normal";
+ var typeface = `"${name}", ${fontObj.fallbackName}`;
+ 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: function CanvasGraphics_setTextRenderingMode(mode) {
+ this.current.textRenderingMode = mode;
+ },
+ setTextRise: function CanvasGraphics_setTextRise(rise) {
+ this.current.textRise = rise;
+ },
+ moveText: function CanvasGraphics_moveText(x, y) {
+ this.current.x = this.current.lineX += x;
+ this.current.y = this.current.lineY += y;
+ },
+ setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {
+ this.setLeading(-y);
+ this.moveText(x, y);
+ },
+ setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {
+ this.current.textMatrix = [a, b, c, d, e, f];
+ this.current.textMatrixScale = Math.sqrt(a * a + b * b);
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ },
+ nextLine: function CanvasGraphics_nextLine() {
+ this.moveText(0, this.current.leading);
+ },
+
+ paintChar(character, x, y, patternTransform) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var font = current.font;
+ var textRenderingMode = current.textRenderingMode;
+ var fontSize = current.fontSize / current.fontSizeScale;
+ var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+ var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
+ const patternFill = current.patternFill && !font.missingFile;
+ var 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.apply(ctx, 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) {
+ var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
+ paths.push({
+ transform: ctx.mozCurrentTransform,
+ 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);
+ var data = ctx.getImageData(0, 0, 10, 10).data;
+ var enabled = false;
+
+ for (var 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: function CanvasGraphics_showText(glyphs) {
+ var current = this.current;
+ var font = current.font;
+
+ if (font.isType3Font) {
+ return this.showType3Text(glyphs);
+ }
+
+ var fontSize = current.fontSize;
+
+ if (fontSize === 0) {
+ return undefined;
+ }
+
+ var ctx = this.ctx;
+ var fontSizeScale = current.fontSizeScale;
+ var charSpacing = current.charSpacing;
+ var wordSpacing = current.wordSpacing;
+ var fontDirection = current.fontDirection;
+ var textHScale = current.textHScale * fontDirection;
+ var glyphsLength = glyphs.length;
+ var vertical = font.vertical;
+ var spacingDir = vertical ? 1 : -1;
+ var defaultVMetrics = font.defaultVMetrics;
+ var widthAdvanceScale = fontSize * current.fontMatrix[0];
+ var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
+ ctx.save();
+ let patternTransform;
+
+ if (current.patternFill) {
+ ctx.save();
+ const pattern = current.fillColor.getPattern(ctx, this);
+ patternTransform = ctx.mozCurrentTransform;
+ ctx.restore();
+ ctx.fillStyle = pattern;
+ }
+
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.translate(current.x, current.y + current.textRise);
+
+ if (fontDirection > 0) {
+ ctx.scale(textHScale, -1);
+ } else {
+ ctx.scale(textHScale, 1);
+ }
+
+ var lineWidth = current.lineWidth;
+ var scale = current.textMatrixScale;
+
+ if (scale === 0 || lineWidth === 0) {
+ var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ this._cachedGetSinglePixelWidth = null;
+ lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;
+ }
+ } else {
+ lineWidth /= scale;
+ }
+
+ if (fontSizeScale !== 1.0) {
+ ctx.scale(fontSizeScale, fontSizeScale);
+ lineWidth /= fontSizeScale;
+ }
+
+ ctx.lineWidth = lineWidth;
+ var x = 0,
+ i;
+
+ for (i = 0; i < glyphsLength; ++i) {
+ var glyph = glyphs[i];
+
+ if ((0, _util.isNum)(glyph)) {
+ x += spacingDir * glyph * fontSize / 1000;
+ continue;
+ }
+
+ var restoreNeeded = false;
+ var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ var character = glyph.fontChar;
+ var accent = glyph.accent;
+ var scaledX, scaledY, scaledAccentX, scaledAccentY;
+ var width = glyph.width;
+
+ if (vertical) {
+ var vmetric, vx, vy;
+ vmetric = glyph.vmetric || defaultVMetrics;
+ vx = glyph.vmetric ? vmetric[1] : width * 0.5;
+ vx = -vx * widthAdvanceScale;
+ 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) {
+ var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
+
+ if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
+ var characterScaleX = width / measuredWidth;
+ restoreNeeded = true;
+ ctx.save();
+ ctx.scale(characterScaleX, 1);
+ scaledX /= characterScaleX;
+ } else if (width !== measuredWidth) {
+ scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
+ }
+ }
+
+ if (glyph.isInFont || font.missingFile) {
+ if (simpleFillText && !accent) {
+ ctx.fillText(character, scaledX, scaledY);
+ } else {
+ this.paintChar(character, scaledX, scaledY, patternTransform);
+
+ if (accent) {
+ scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
+ scaledAccentY = scaledY - accent.offset.y / fontSizeScale;
+ this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
+ }
+ }
+ }
+
+ var charWidth;
+
+ if (vertical) {
+ charWidth = width * widthAdvanceScale - spacing * fontDirection;
+ } else {
+ charWidth = width * widthAdvanceScale + spacing * fontDirection;
+ }
+
+ x += charWidth;
+
+ if (restoreNeeded) {
+ ctx.restore();
+ }
+ }
+
+ if (vertical) {
+ current.y -= x;
+ } else {
+ current.x += x * textHScale;
+ }
+
+ ctx.restore();
+ },
+ showType3Text: function CanvasGraphics_showType3Text(glyphs) {
+ var ctx = this.ctx;
+ var current = this.current;
+ var font = current.font;
+ var fontSize = current.fontSize;
+ var fontDirection = current.fontDirection;
+ var spacingDir = font.vertical ? 1 : -1;
+ var charSpacing = current.charSpacing;
+ var wordSpacing = current.wordSpacing;
+ var textHScale = current.textHScale * fontDirection;
+ var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ var glyphsLength = glyphs.length;
+ var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
+ var i, glyph, width, spacingLength;
+
+ if (isTextInvisible || fontSize === 0) {
+ return;
+ }
+
+ this._cachedGetSinglePixelWidth = null;
+ ctx.save();
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.translate(current.x, current.y);
+ ctx.scale(textHScale, fontDirection);
+
+ for (i = 0; i < glyphsLength; ++i) {
+ glyph = glyphs[i];
+
+ if ((0, _util.isNum)(glyph)) {
+ spacingLength = spacingDir * glyph * fontSize / 1000;
+ this.ctx.translate(spacingLength, 0);
+ current.x += spacingLength * textHScale;
+ continue;
+ }
+
+ var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ var operatorList = font.charProcOperatorList[glyph.operatorListId];
+
+ if (!operatorList) {
+ (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`);
+ continue;
+ }
+
+ this.processingType3 = glyph;
+ this.save();
+ ctx.scale(fontSize, fontSize);
+ ctx.transform.apply(ctx, fontMatrix);
+ this.executeOperatorList(operatorList);
+ this.restore();
+
+ var 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: function CanvasGraphics_setCharWidth(xWidth, yWidth) {},
+ setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
+ this.ctx.rect(llx, lly, urx - llx, ury - lly);
+ this.clip();
+ this.endPath();
+ },
+ getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {
+ var pattern;
+
+ if (IR[0] === "TilingPattern") {
+ var color = IR[1];
+ var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
+ var canvasGraphicsFactory = {
+ createCanvasGraphics: ctx => {
+ return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext);
+ }
+ };
+ pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
+ } else {
+ pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR);
+ }
+
+ return pattern;
+ },
+ setStrokeColorN: function CanvasGraphics_setStrokeColorN() {
+ this.current.strokeColor = this.getColorN_Pattern(arguments);
+ },
+ setFillColorN: function CanvasGraphics_setFillColorN() {
+ this.current.fillColor = this.getColorN_Pattern(arguments);
+ this.current.patternFill = true;
+ },
+ setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
+ var color = _util.Util.makeCssRgb(r, g, b);
+
+ this.ctx.strokeStyle = color;
+ this.current.strokeColor = color;
+ },
+ setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
+ var color = _util.Util.makeCssRgb(r, g, b);
+
+ this.ctx.fillStyle = color;
+ this.current.fillColor = color;
+ this.current.patternFill = false;
+ },
+ shadingFill: function CanvasGraphics_shadingFill(patternIR) {
+ var ctx = this.ctx;
+ this.save();
+ var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);
+ ctx.fillStyle = pattern.getPattern(ctx, this, true);
+ var inv = ctx.mozCurrentTransformInverse;
+
+ if (inv) {
+ var canvas = ctx.canvas;
+ var width = canvas.width;
+ var height = canvas.height;
+
+ var bl = _util.Util.applyTransform([0, 0], inv);
+
+ var br = _util.Util.applyTransform([0, height], inv);
+
+ var ul = _util.Util.applyTransform([width, 0], inv);
+
+ var ur = _util.Util.applyTransform([width, height], inv);
+
+ var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+ var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+ var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+ var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+ this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
+ } else {
+ this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
+ }
+
+ this.restore();
+ },
+ beginInlineImage: function CanvasGraphics_beginInlineImage() {
+ (0, _util.unreachable)("Should not call beginInlineImage");
+ },
+ beginImageData: function CanvasGraphics_beginImageData() {
+ (0, _util.unreachable)("Should not call beginImageData");
+ },
+ paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) {
+ this.save();
+ this.baseTransformStack.push(this.baseTransform);
+
+ if (Array.isArray(matrix) && matrix.length === 6) {
+ this.transform.apply(this, matrix);
+ }
+
+ this.baseTransform = this.ctx.mozCurrentTransform;
+
+ if (bbox) {
+ var width = bbox[2] - bbox[0];
+ var height = bbox[3] - bbox[1];
+ this.ctx.rect(bbox[0], bbox[1], width, height);
+ this.clip();
+ this.endPath();
+ }
+ },
+ paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {
+ this.restore();
+ this.baseTransform = this.baseTransformStack.pop();
+ },
+ beginGroup: function CanvasGraphics_beginGroup(group) {
+ this.save();
+ var currentCtx = this.ctx;
+
+ if (!group.isolated) {
+ (0, _util.info)("TODO: Support non-isolated groups.");
+ }
+
+ if (group.knockout) {
+ (0, _util.warn)("Knockout groups not supported.");
+ }
+
+ var currentTransform = currentCtx.mozCurrentTransform;
+
+ if (group.matrix) {
+ currentCtx.transform.apply(currentCtx, group.matrix);
+ }
+
+ if (!group.bbox) {
+ throw new Error("Bounding box is required.");
+ }
+
+ var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);
+
+ var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
+ bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
+ var offsetX = Math.floor(bounds[0]);
+ var offsetY = Math.floor(bounds[1]);
+ var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
+ var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
+ var 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;
+ }
+
+ var cacheId = "groupAt" + this.groupLevel;
+
+ if (group.smask) {
+ cacheId += "_smask_" + this.smaskCounter++ % 2;
+ }
+
+ var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+ var groupCtx = scratchCanvas.context;
+ groupCtx.scale(1 / scaleX, 1 / scaleY);
+ groupCtx.translate(-offsetX, -offsetY);
+ groupCtx.transform.apply(groupCtx, 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);
+ }
+
+ copyCtxState(currentCtx, groupCtx);
+ this.ctx = groupCtx;
+ this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
+ this.groupStack.push(currentCtx);
+ this.groupLevel++;
+ this.current.activeSMask = null;
+ },
+ endGroup: function CanvasGraphics_endGroup(group) {
+ this.groupLevel--;
+ var groupCtx = this.ctx;
+ this.ctx = this.groupStack.pop();
+
+ if (this.ctx.imageSmoothingEnabled !== undefined) {
+ this.ctx.imageSmoothingEnabled = false;
+ } else {
+ this.ctx.mozImageSmoothingEnabled = false;
+ }
+
+ if (group.smask) {
+ this.tempSMask = this.smaskStack.pop();
+ } else {
+ this.ctx.drawImage(groupCtx.canvas, 0, 0);
+ }
+
+ this.restore();
+ },
+ beginAnnotations: function CanvasGraphics_beginAnnotations() {
+ this.save();
+
+ if (this.baseTransform) {
+ this.ctx.setTransform.apply(this.ctx, this.baseTransform);
+ }
+ },
+ endAnnotations: function CanvasGraphics_endAnnotations() {
+ this.restore();
+ },
+ beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) {
+ this.save();
+ resetCtxToDefault(this.ctx);
+ this.current = new CanvasExtraState();
+
+ if (Array.isArray(rect) && rect.length === 4) {
+ var width = rect[2] - rect[0];
+ var height = rect[3] - rect[1];
+ this.ctx.rect(rect[0], rect[1], width, height);
+ this.clip();
+ this.endPath();
+ }
+
+ this.transform.apply(this, transform);
+ this.transform.apply(this, matrix);
+ },
+ endAnnotation: function CanvasGraphics_endAnnotation() {
+ this.restore();
+ },
+ paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
+ var ctx = this.ctx;
+ var width = img.width,
+ height = img.height;
+ var fillColor = this.current.fillColor;
+ var isPatternFill = this.current.patternFill;
+ var glyph = this.processingType3;
+
+ if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
+ if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
+ glyph.compiled = compileType3Glyph({
+ data: img.data,
+ width,
+ height
+ });
+ } else {
+ glyph.compiled = null;
+ }
+ }
+
+ if (glyph && glyph.compiled) {
+ glyph.compiled(ctx);
+ return;
+ }
+
+ var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+ var maskCtx = maskCanvas.context;
+ maskCtx.save();
+ putBinaryImageMask(maskCtx, img);
+ maskCtx.globalCompositeOperation = "source-in";
+ maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
+ maskCtx.fillRect(0, 0, width, height);
+ maskCtx.restore();
+ this.paintInlineImageXObject(maskCanvas.canvas);
+ },
+ paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) {
+ var width = imgData.width;
+ var height = imgData.height;
+ var fillColor = this.current.fillColor;
+ var isPatternFill = this.current.patternFill;
+ var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+ var maskCtx = maskCanvas.context;
+ maskCtx.save();
+ putBinaryImageMask(maskCtx, imgData);
+ maskCtx.globalCompositeOperation = "source-in";
+ maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
+ maskCtx.fillRect(0, 0, width, height);
+ maskCtx.restore();
+ var ctx = this.ctx;
+
+ for (var i = 0, ii = positions.length; i < ii; i += 2) {
+ ctx.save();
+ ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
+ ctx.scale(1, -1);
+ ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
+ ctx.restore();
+ }
+ },
+ paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) {
+ var ctx = this.ctx;
+ var fillColor = this.current.fillColor;
+ var isPatternFill = this.current.patternFill;
+
+ for (var i = 0, ii = images.length; i < ii; i++) {
+ var image = images[i];
+ var width = image.width,
+ height = image.height;
+ var maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+ var maskCtx = maskCanvas.context;
+ maskCtx.save();
+ putBinaryImageMask(maskCtx, image);
+ maskCtx.globalCompositeOperation = "source-in";
+ maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
+ maskCtx.fillRect(0, 0, width, height);
+ maskCtx.restore();
+ ctx.save();
+ ctx.transform.apply(ctx, image.transform);
+ ctx.scale(1, -1);
+ ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
+ ctx.restore();
+ }
+ },
+ paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
+ const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)("Dependent image isn't ready yet");
+ return;
+ }
+
+ this.paintInlineImageXObject(imgData);
+ },
+ paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
+ const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)("Dependent image isn't ready yet");
+ return;
+ }
+
+ var width = imgData.width;
+ var height = imgData.height;
+ var map = [];
+
+ for (var 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);
+ },
+ paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) {
+ var width = imgData.width;
+ var height = imgData.height;
+ var ctx = this.ctx;
+ this.save();
+ ctx.scale(1 / width, -1 / height);
+ var currentTransform = ctx.mozCurrentTransformInverse;
+ var a = currentTransform[0],
+ b = currentTransform[1];
+ var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);
+ var c = currentTransform[2],
+ d = currentTransform[3];
+ var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);
+ var imgToPaint, tmpCanvas;
+
+ if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
+ imgToPaint = imgData;
+ } else {
+ tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
+ var tmpCtx = tmpCanvas.context;
+ putBinaryImageData(tmpCtx, imgData);
+ imgToPaint = tmpCanvas.canvas;
+ }
+
+ var paintWidth = width,
+ paintHeight = height;
+ var tmpCanvasId = "prescale1";
+
+ while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
+ var newWidth = paintWidth,
+ newHeight = paintHeight;
+
+ if (widthScale > 2 && paintWidth > 1) {
+ newWidth = Math.ceil(paintWidth / 2);
+ widthScale /= paintWidth / newWidth;
+ }
+
+ if (heightScale > 2 && paintHeight > 1) {
+ newHeight = 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(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
+ imgToPaint = tmpCanvas.canvas;
+ paintWidth = newWidth;
+ paintHeight = newHeight;
+ tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
+ }
+
+ ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height);
+
+ if (this.imageLayer) {
+ var position = this.getCanvasPosition(0, -height);
+ this.imageLayer.appendImage({
+ imgData,
+ left: position[0],
+ top: position[1],
+ width: width / currentTransform[0],
+ height: height / currentTransform[3]
+ });
+ }
+
+ this.restore();
+ },
+ paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {
+ var ctx = this.ctx;
+ var w = imgData.width;
+ var h = imgData.height;
+ var tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
+ var tmpCtx = tmpCanvas.context;
+ putBinaryImageData(tmpCtx, imgData);
+
+ for (var i = 0, ii = map.length; i < ii; i++) {
+ var entry = map[i];
+ ctx.save();
+ ctx.transform.apply(ctx, entry.transform);
+ ctx.scale(1, -1);
+ ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
+
+ if (this.imageLayer) {
+ var position = this.getCanvasPosition(entry.x, entry.y);
+ this.imageLayer.appendImage({
+ imgData,
+ left: position[0],
+ top: position[1],
+ width: w,
+ height: h
+ });
+ }
+
+ ctx.restore();
+ }
+ },
+ paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() {
+ this.ctx.fillRect(0, 0, 1, 1);
+ },
+ paintXObject: function CanvasGraphics_paintXObject() {
+ (0, _util.warn)("Unsupported 'paintXObject' command.");
+ },
+ markPoint: function CanvasGraphics_markPoint(tag) {},
+ markPointProps: function CanvasGraphics_markPointProps(tag, properties) {},
+ beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {},
+ beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {},
+ endMarkedContent: function CanvasGraphics_endMarkedContent() {},
+ beginCompat: function CanvasGraphics_beginCompat() {},
+ endCompat: function CanvasGraphics_endCompat() {},
+ consumePath: function CanvasGraphics_consumePath() {
+ var ctx = this.ctx;
+
+ if (this.pendingClip) {
+ if (this.pendingClip === EO_CLIP) {
+ ctx.clip("evenodd");
+ } else {
+ ctx.clip();
+ }
+
+ this.pendingClip = null;
+ }
+
+ ctx.beginPath();
+ },
+
+ getSinglePixelWidth(scale) {
+ if (this._cachedGetSinglePixelWidth === null) {
+ const inverse = this.ctx.mozCurrentTransformInverse;
+ this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3]));
+ }
+
+ return this._cachedGetSinglePixelWidth;
+ },
+
+ getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {
+ var transform = this.ctx.mozCurrentTransform;
+ return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];
+ }
+ };
+
+ for (var op in _util.OPS) {
+ CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
+ }
+
+ return CanvasGraphics;
+}();
+
+exports.CanvasGraphics = CanvasGraphics;
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getShadingPatternFromIR = getShadingPatternFromIR;
+exports.TilingPattern = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var ShadingIRs = {};
+
+function applyBoundingBox(ctx, bbox) {
+ if (!bbox || typeof Path2D === "undefined") {
+ 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);
+}
+
+ShadingIRs.RadialAxial = {
+ fromIR: function RadialAxial_fromIR(raw) {
+ var type = raw[1];
+ var bbox = raw[2];
+ var colorStops = raw[3];
+ var p0 = raw[4];
+ var p1 = raw[5];
+ var r0 = raw[6];
+ var r1 = raw[7];
+ return {
+ type: "Pattern",
+ getPattern: function RadialAxial_getPattern(ctx) {
+ applyBoundingBox(ctx, bbox);
+ var grad;
+
+ if (type === "axial") {
+ grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
+ } else if (type === "radial") {
+ grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
+ }
+
+ for (var i = 0, ii = colorStops.length; i < ii; ++i) {
+ var c = colorStops[i];
+ grad.addColorStop(c[0], c[1]);
+ }
+
+ return grad;
+ }
+ };
+ }
+};
+
+var createMeshCanvas = function createMeshCanvasClosure() {
+ function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
+ var coords = context.coords,
+ colors = context.colors;
+ var bytes = data.data,
+ rowSize = data.width * 4;
+ var 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;
+ }
+
+ var x1 = (coords[p1] + context.offsetX) * context.scaleX;
+ var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
+ var x2 = (coords[p2] + context.offsetX) * context.scaleX;
+ var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
+ var x3 = (coords[p3] + context.offsetX) * context.scaleX;
+ var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
+
+ if (y1 >= y3) {
+ return;
+ }
+
+ var c1r = colors[c1],
+ c1g = colors[c1 + 1],
+ c1b = colors[c1 + 2];
+ var c2r = colors[c2],
+ c2g = colors[c2 + 1],
+ c2b = colors[c2 + 2];
+ var c3r = colors[c3],
+ c3g = colors[c3 + 1],
+ c3b = colors[c3 + 2];
+ var minY = Math.round(y1),
+ maxY = Math.round(y3);
+ var xa, car, cag, cab;
+ var xb, cbr, cbg, cbb;
+
+ for (var y = minY; y <= maxY; y++) {
+ if (y < y2) {
+ let k;
+
+ if (y < y1) {
+ k = 0;
+ } else if (y1 === y2) {
+ k = 1;
+ } else {
+ k = (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;
+ var x1_ = Math.round(Math.min(xa, xb));
+ var x2_ = Math.round(Math.max(xa, xb));
+ var j = rowSize * y + x1_ * 4;
+
+ for (var 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) {
+ var ps = figure.coords;
+ var cs = figure.colors;
+ var i, ii;
+
+ switch (figure.type) {
+ case "lattice":
+ var verticesPerRow = figure.verticesPerRow;
+ var rows = Math.floor(ps.length / verticesPerRow) - 1;
+ var cols = verticesPerRow - 1;
+
+ for (i = 0; i < rows; i++) {
+ var q = i * verticesPerRow;
+
+ for (var 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");
+ }
+ }
+
+ function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {
+ var EXPECTED_SCALE = 1.1;
+ var MAX_PATTERN_SIZE = 3000;
+ var BORDER_SIZE = 2;
+ var offsetX = Math.floor(bounds[0]);
+ var offsetY = Math.floor(bounds[1]);
+ var boundsWidth = Math.ceil(bounds[2]) - offsetX;
+ var boundsHeight = Math.ceil(bounds[3]) - offsetY;
+ var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+ var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+ var scaleX = boundsWidth / width;
+ var scaleY = boundsHeight / height;
+ var context = {
+ coords,
+ colors,
+ offsetX: -offsetX,
+ offsetY: -offsetY,
+ scaleX: 1 / scaleX,
+ scaleY: 1 / scaleY
+ };
+ var paddedWidth = width + BORDER_SIZE * 2;
+ var paddedHeight = height + BORDER_SIZE * 2;
+ var canvas, tmpCanvas, i, ii;
+
+ if (webGLContext.isEnabled) {
+ canvas = webGLContext.drawFigures({
+ width,
+ height,
+ backgroundColor,
+ figures,
+ context
+ });
+ tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
+ tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);
+ canvas = tmpCanvas.canvas;
+ } else {
+ tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
+ var tmpCtx = tmpCanvas.context;
+ var data = tmpCtx.createImageData(width, height);
+
+ if (backgroundColor) {
+ var bytes = data.data;
+
+ for (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 (i = 0; i < figures.length; i++) {
+ drawFigure(data, figures[i], context);
+ }
+
+ tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
+ canvas = tmpCanvas.canvas;
+ }
+
+ return {
+ canvas,
+ offsetX: offsetX - BORDER_SIZE * scaleX,
+ offsetY: offsetY - BORDER_SIZE * scaleY,
+ scaleX,
+ scaleY
+ };
+ }
+
+ return createMeshCanvas;
+}();
+
+ShadingIRs.Mesh = {
+ fromIR: function Mesh_fromIR(raw) {
+ var coords = raw[2];
+ var colors = raw[3];
+ var figures = raw[4];
+ var bounds = raw[5];
+ var matrix = raw[6];
+ var bbox = raw[7];
+ var background = raw[8];
+ return {
+ type: "Pattern",
+ getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
+ applyBoundingBox(ctx, bbox);
+ var scale;
+
+ if (shadingFill) {
+ scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
+ } else {
+ scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
+
+ if (matrix) {
+ var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);
+
+ scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
+ }
+ }
+
+ var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);
+
+ if (!shadingFill) {
+ ctx.setTransform.apply(ctx, owner.baseTransform);
+
+ if (matrix) {
+ ctx.transform.apply(ctx, matrix);
+ }
+ }
+
+ ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
+ ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
+ return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
+ }
+ };
+ }
+};
+ShadingIRs.Dummy = {
+ fromIR: function Dummy_fromIR() {
+ return {
+ type: "Pattern",
+ getPattern: function Dummy_fromIR_getPattern() {
+ return "hotpink";
+ }
+ };
+ }
+};
+
+function getShadingPatternFromIR(raw) {
+ var shadingIR = ShadingIRs[raw[0]];
+
+ if (!shadingIR) {
+ throw new Error(`Unknown IR type: ${raw[0]}`);
+ }
+
+ return shadingIR.fromIR(raw);
+}
+
+var TilingPattern = function TilingPatternClosure() {
+ var PaintType = {
+ COLORED: 1,
+ UNCOLORED: 2
+ };
+ var MAX_PATTERN_SIZE = 3000;
+
+ function TilingPattern(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.canvasGraphicsFactory = canvasGraphicsFactory;
+ this.baseTransform = baseTransform;
+ this.type = "Pattern";
+ this.ctx = ctx;
+ }
+
+ TilingPattern.prototype = {
+ createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
+ var operatorList = this.operatorList;
+ var bbox = this.bbox;
+ var xstep = this.xstep;
+ var ystep = this.ystep;
+ var paintType = this.paintType;
+ var tilingType = this.tilingType;
+ var color = this.color;
+ var canvasGraphicsFactory = this.canvasGraphicsFactory;
+ (0, _util.info)("TilingType: " + tilingType);
+ var x0 = bbox[0],
+ y0 = bbox[1],
+ x1 = bbox[2],
+ y1 = bbox[3];
+
+ var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
+
+ var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
+
+ var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
+ var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
+ var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
+ var tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
+ var tmpCtx = tmpCanvas.context;
+ var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
+ graphics.groupLevel = owner.groupLevel;
+ this.setFillAndStrokeStyleToContext(graphics, paintType, color);
+ graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
+ graphics.transform(1, 0, 0, 1, -x0, -y0);
+ this.clipBbox(graphics, bbox, x0, y0, x1, y1);
+ graphics.executeOperatorList(operatorList);
+ this.ctx.transform(1, 0, 0, 1, x0, y0);
+ this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);
+ return tmpCanvas.canvas;
+ },
+ getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {
+ step = Math.abs(step);
+ var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);
+ var size = Math.ceil(step * scale);
+
+ if (size >= maxSize) {
+ size = maxSize;
+ } else {
+ scale = size / step;
+ }
+
+ return {
+ scale,
+ size
+ };
+ },
+ clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
+ if (Array.isArray(bbox) && bbox.length === 4) {
+ var bboxWidth = x1 - x0;
+ var bboxHeight = y1 - y0;
+ graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
+ graphics.clip();
+ graphics.endPath();
+ }
+ },
+ setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {
+ const context = graphics.ctx,
+ current = graphics.current;
+
+ switch (paintType) {
+ case PaintType.COLORED:
+ var ctx = this.ctx;
+ context.fillStyle = ctx.fillStyle;
+ context.strokeStyle = ctx.strokeStyle;
+ current.fillColor = ctx.fillStyle;
+ current.strokeColor = ctx.strokeStyle;
+ break;
+
+ case PaintType.UNCOLORED:
+ var cssColor = _util.Util.makeCssRgb(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: function TilingPattern_getPattern(ctx, owner) {
+ ctx = this.ctx;
+ ctx.setTransform.apply(ctx, this.baseTransform);
+ ctx.transform.apply(ctx, this.matrix);
+ var temporaryPatternCanvas = this.createPatternCanvas(owner);
+ return ctx.createPattern(temporaryPatternCanvas, "repeat");
+ }
+ };
+ return TilingPattern;
+}();
+
+exports.TilingPattern = TilingPattern;
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.GlobalWorkerOptions = void 0;
+const GlobalWorkerOptions = Object.create(null);
+exports.GlobalWorkerOptions = GlobalWorkerOptions;
+GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;
+GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc;
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.MessageHandler = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+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 (typeof reason !== "object" || reason === null) {
+ return reason;
+ }
+
+ switch (reason.name) {
+ case "AbortException":
+ return new _util.AbortException(reason.message);
+
+ case "MissingPDFException":
+ return new _util.MissingPDFException(reason.message);
+
+ case "UnexpectedResponseException":
+ return new _util.UnexpectedResponseException(reason.message, reason.status);
+
+ case "UnknownErrorException":
+ return new _util.UnknownErrorException(reason.message, reason.details);
+
+ default:
+ return new _util.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.postMessageTransfers = true;
+ 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._postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ data
+ }, transfers);
+ }
+
+ sendWithPromise(actionName, data, transfers) {
+ const callbackId = this.callbackId++;
+ const capability = (0, _util.createPromiseCapability)();
+ this.callbackCapabilities[callbackId] = capability;
+
+ try {
+ this._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++;
+ const sourceName = this.sourceName;
+ const targetName = this.targetName;
+ const comObj = this.comObj;
+ return new ReadableStream({
+ start: controller => {
+ const startCapability = (0, _util.createPromiseCapability)();
+ this.streamControllers[streamId] = {
+ controller,
+ startCall: startCapability,
+ pullCall: null,
+ cancelCall: null,
+ isClosed: false
+ };
+
+ this._postMessage({
+ sourceName,
+ targetName,
+ action: actionName,
+ streamId,
+ data,
+ desiredSize: controller.desiredSize
+ }, transfers);
+
+ return startCapability.promise;
+ },
+ pull: controller => {
+ const pullCapability = (0, _util.createPromiseCapability)();
+ this.streamControllers[streamId].pullCall = pullCapability;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL,
+ streamId,
+ desiredSize: controller.desiredSize
+ });
+ return pullCapability.promise;
+ },
+ cancel: reason => {
+ (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
+ const cancelCapability = (0, _util.createPromiseCapability)();
+ 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 self = this;
+ const action = this.actionHandler[data.action];
+ const streamId = data.streamId;
+ const sourceName = this.sourceName;
+ const targetName = data.sourceName;
+ const comObj = this.comObj;
+ 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 = (0, _util.createPromiseCapability)();
+ this.ready = this.sinkCapability.promise;
+ }
+
+ self._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.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: (0, _util.createPromiseCapability)(),
+ 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;
+ const sourceName = this.sourceName;
+ const targetName = data.sourceName;
+ const comObj = this.comObj;
+
+ switch (data.stream) {
+ case StreamKind.START_COMPLETE:
+ if (data.success) {
+ this.streamControllers[streamId].startCall.resolve();
+ } else {
+ this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL_COMPLETE:
+ if (data.success) {
+ this.streamControllers[streamId].pullCall.resolve();
+ } else {
+ this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL:
+ if (!this.streamSinks[streamId]) {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId,
+ success: true
+ });
+ break;
+ }
+
+ if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {
+ this.streamSinks[streamId].sinkCapability.resolve();
+ }
+
+ this.streamSinks[streamId].desiredSize = data.desiredSize;
+ const {
+ onPull
+ } = this.streamSinks[data.streamId];
+ new Promise(function (resolve) {
+ resolve(onPull && 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.assert)(this.streamControllers[streamId], "enqueue should have stream controller");
+
+ if (this.streamControllers[streamId].isClosed) {
+ break;
+ }
+
+ this.streamControllers[streamId].controller.enqueue(data.chunk);
+ break;
+
+ case StreamKind.CLOSE:
+ (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller");
+
+ if (this.streamControllers[streamId].isClosed) {
+ break;
+ }
+
+ this.streamControllers[streamId].isClosed = true;
+ this.streamControllers[streamId].controller.close();
+
+ this._deleteStreamController(streamId);
+
+ break;
+
+ case StreamKind.ERROR:
+ (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller");
+ this.streamControllers[streamId].controller.error(wrapReason(data.reason));
+
+ this._deleteStreamController(streamId);
+
+ break;
+
+ case StreamKind.CANCEL_COMPLETE:
+ if (data.success) {
+ this.streamControllers[streamId].cancelCall.resolve();
+ } else {
+ this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));
+ }
+
+ this._deleteStreamController(streamId);
+
+ break;
+
+ case StreamKind.CANCEL:
+ if (!this.streamSinks[streamId]) {
+ break;
+ }
+
+ const {
+ onCancel
+ } = this.streamSinks[data.streamId];
+ new Promise(function (resolve) {
+ resolve(onCancel && 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)
+ });
+ });
+ this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));
+ this.streamSinks[streamId].isCancelled = true;
+ delete this.streamSinks[streamId];
+ break;
+
+ default:
+ throw new Error("Unexpected stream case");
+ }
+ }
+
+ async _deleteStreamController(streamId) {
+ await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {
+ return capability && capability.promise;
+ }));
+ delete this.streamControllers[streamId];
+ }
+
+ _postMessage(message, transfers) {
+ if (transfers && this.postMessageTransfers) {
+ this.comObj.postMessage(message, transfers);
+ } else {
+ this.comObj.postMessage(message);
+ }
+ }
+
+ destroy() {
+ this.comObj.removeEventListener("message", this._onComObjOnMessage);
+ }
+
+}
+
+exports.MessageHandler = MessageHandler;
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Metadata = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _xml_parser = __w_pdfjs_require__(13);
+
+class Metadata {
+ constructor(data) {
+ (0, _util.assert)(typeof data === "string", "Metadata: input is not a string");
+ data = this._repair(data);
+ const parser = new _xml_parser.SimpleXMLParser();
+ const xmlDocument = parser.parseFromString(data);
+ this._metadataMap = new Map();
+
+ if (xmlDocument) {
+ this._parse(xmlDocument);
+ }
+ }
+
+ _repair(data) {
+ return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) {
+ const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
+ return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
+ }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
+ switch (name) {
+ case "amp":
+ return "&";
+
+ case "apos":
+ return "'";
+
+ case "gt":
+ return ">";
+
+ case "lt":
+ return "<";
+
+ case "quot":
+ return '"';
+ }
+
+ throw new Error(`_repair: ${name} isn't defined.`);
+ });
+ let chars = "";
+
+ for (let i = 0, ii = bytes.length; i < ii; i += 2) {
+ const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
+
+ if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
+ chars += String.fromCharCode(code);
+ } else {
+ chars += "" + (0x10000 + code).toString(16).substring(1) + ";";
+ }
+ }
+
+ return ">" + chars;
+ });
+ }
+
+ _parse(xmlDocument) {
+ let rdf = xmlDocument.documentElement;
+
+ if (rdf.nodeName.toLowerCase() !== "rdf:rdf") {
+ rdf = rdf.firstChild;
+
+ while (rdf && rdf.nodeName.toLowerCase() !== "rdf:rdf") {
+ rdf = rdf.nextSibling;
+ }
+ }
+
+ const nodeName = rdf ? rdf.nodeName.toLowerCase() : null;
+
+ if (!rdf || nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) {
+ return;
+ }
+
+ const children = rdf.childNodes;
+
+ for (let i = 0, ii = children.length; i < ii; i++) {
+ const desc = children[i];
+
+ if (desc.nodeName.toLowerCase() !== "rdf:description") {
+ continue;
+ }
+
+ for (let j = 0, jj = desc.childNodes.length; j < jj; j++) {
+ if (desc.childNodes[j].nodeName.toLowerCase() !== "#text") {
+ const entry = desc.childNodes[j];
+ const name = entry.nodeName.toLowerCase();
+
+ this._metadataMap.set(name, entry.textContent.trim());
+ }
+ }
+ }
+ }
+
+ get(name) {
+ return this._metadataMap.has(name) ? this._metadataMap.get(name) : null;
+ }
+
+ getAll() {
+ const obj = Object.create(null);
+
+ for (const [key, value] of this._metadataMap) {
+ obj[key] = value;
+ }
+
+ return obj;
+ }
+
+ has(name) {
+ return this._metadataMap.has(name);
+ }
+
+}
+
+exports.Metadata = Metadata;
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.SimpleXMLParser = void 0;
+const XMLParserErrorCode = {
+ NoError: 0,
+ EndOfDocument: -1,
+ UnterminatedCdat: -2,
+ UnterminatedXmlDeclaration: -3,
+ UnterminatedDoctypeDeclaration: -4,
+ UnterminatedComment: -5,
+ MalformedElement: -6,
+ OutOfMemory: -7,
+ UnterminatedAttributeValue: -8,
+ UnterminatedElement: -9,
+ ElementNeverBegun: -10
+};
+
+function isWhitespace(s, index) {
+ const ch = s[index];
+ return ch === " " || ch === "\n" || ch === "\r" || ch === "\t";
+}
+
+function isWhitespaceString(s) {
+ for (let i = 0, ii = s.length; i < ii; i++) {
+ if (!isWhitespace(s, i)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+class XMLParserBase {
+ _resolveEntities(s) {
+ return s.replace(/&([^;]+);/g, (all, entity) => {
+ if (entity.substring(0, 2) === "#x") {
+ return String.fromCharCode(parseInt(entity.substring(2), 16));
+ } else if (entity.substring(0, 1) === "#") {
+ return String.fromCharCode(parseInt(entity.substring(1), 10));
+ }
+
+ switch (entity) {
+ case "lt":
+ return "<";
+
+ case "gt":
+ return ">";
+
+ case "amp":
+ return "&";
+
+ case "quot":
+ return '"';
+ }
+
+ return this.onResolveEntity(entity);
+ });
+ }
+
+ _parseContent(s, start) {
+ const attributes = [];
+ let pos = start;
+
+ function skipWs() {
+ while (pos < s.length && isWhitespace(s, pos)) {
+ ++pos;
+ }
+ }
+
+ while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
+ ++pos;
+ }
+
+ const name = s.substring(start, pos);
+ skipWs();
+
+ while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") {
+ skipWs();
+ let attrName = "",
+ attrValue = "";
+
+ while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") {
+ attrName += s[pos];
+ ++pos;
+ }
+
+ skipWs();
+
+ if (s[pos] !== "=") {
+ return null;
+ }
+
+ ++pos;
+ skipWs();
+ const attrEndChar = s[pos];
+
+ if (attrEndChar !== '"' && attrEndChar !== "'") {
+ return null;
+ }
+
+ const attrEndIndex = s.indexOf(attrEndChar, ++pos);
+
+ if (attrEndIndex < 0) {
+ return null;
+ }
+
+ attrValue = s.substring(pos, attrEndIndex);
+ attributes.push({
+ name: attrName,
+ value: this._resolveEntities(attrValue)
+ });
+ pos = attrEndIndex + 1;
+ skipWs();
+ }
+
+ return {
+ name,
+ attributes,
+ parsed: pos - start
+ };
+ }
+
+ _parseProcessingInstruction(s, start) {
+ let pos = start;
+
+ function skipWs() {
+ while (pos < s.length && isWhitespace(s, pos)) {
+ ++pos;
+ }
+ }
+
+ while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
+ ++pos;
+ }
+
+ const name = s.substring(start, pos);
+ skipWs();
+ const attrStart = pos;
+
+ while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) {
+ ++pos;
+ }
+
+ const value = s.substring(attrStart, pos);
+ return {
+ name,
+ value,
+ parsed: pos - start
+ };
+ }
+
+ parseXml(s) {
+ let i = 0;
+
+ while (i < s.length) {
+ const ch = s[i];
+ let j = i;
+
+ if (ch === "<") {
+ ++j;
+ const ch2 = s[j];
+ let q;
+
+ switch (ch2) {
+ case "/":
+ ++j;
+ q = s.indexOf(">", j);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedElement);
+ return;
+ }
+
+ this.onEndElement(s.substring(j, q));
+ j = q + 1;
+ break;
+
+ case "?":
+ ++j;
+
+ const pi = this._parseProcessingInstruction(s, j);
+
+ if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") {
+ this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
+ return;
+ }
+
+ this.onPi(pi.name, pi.value);
+ j += pi.parsed + 2;
+ break;
+
+ case "!":
+ if (s.substring(j + 1, j + 3) === "--") {
+ q = s.indexOf("-->", j + 3);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedComment);
+ return;
+ }
+
+ this.onComment(s.substring(j + 3, q));
+ j = q + 3;
+ } else if (s.substring(j + 1, j + 8) === "[CDATA[") {
+ q = s.indexOf("]]>", j + 8);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedCdat);
+ return;
+ }
+
+ this.onCdata(s.substring(j + 8, q));
+ j = q + 3;
+ } else if (s.substring(j + 1, j + 8) === "DOCTYPE") {
+ const q2 = s.indexOf("[", j + 8);
+ let complexDoctype = false;
+ q = s.indexOf(">", j + 8);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
+ return;
+ }
+
+ if (q2 > 0 && q > q2) {
+ q = s.indexOf("]>", j + 8);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
+ return;
+ }
+
+ complexDoctype = true;
+ }
+
+ const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
+ this.onDoctype(doctypeContent);
+ j = q + (complexDoctype ? 2 : 1);
+ } else {
+ this.onError(XMLParserErrorCode.MalformedElement);
+ return;
+ }
+
+ break;
+
+ default:
+ const content = this._parseContent(s, j);
+
+ if (content === null) {
+ this.onError(XMLParserErrorCode.MalformedElement);
+ return;
+ }
+
+ let isClosed = false;
+
+ if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") {
+ isClosed = true;
+ } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") {
+ this.onError(XMLParserErrorCode.UnterminatedElement);
+ return;
+ }
+
+ this.onBeginElement(content.name, content.attributes, isClosed);
+ j += content.parsed + (isClosed ? 2 : 1);
+ break;
+ }
+ } else {
+ while (j < s.length && s[j] !== "<") {
+ j++;
+ }
+
+ const text = s.substring(i, j);
+ this.onText(this._resolveEntities(text));
+ }
+
+ i = j;
+ }
+ }
+
+ onResolveEntity(name) {
+ return `&${name};`;
+ }
+
+ onPi(name, value) {}
+
+ onComment(text) {}
+
+ onCdata(text) {}
+
+ onDoctype(doctypeContent) {}
+
+ onText(text) {}
+
+ onBeginElement(name, attributes, isEmpty) {}
+
+ onEndElement(name) {}
+
+ onError(code) {}
+
+}
+
+class SimpleDOMNode {
+ constructor(nodeName, nodeValue) {
+ this.nodeName = nodeName;
+ this.nodeValue = nodeValue;
+ Object.defineProperty(this, "parentNode", {
+ value: null,
+ writable: true
+ });
+ }
+
+ get firstChild() {
+ return this.childNodes && this.childNodes[0];
+ }
+
+ get nextSibling() {
+ const childNodes = this.parentNode.childNodes;
+
+ if (!childNodes) {
+ return undefined;
+ }
+
+ const index = childNodes.indexOf(this);
+
+ if (index === -1) {
+ return undefined;
+ }
+
+ return childNodes[index + 1];
+ }
+
+ get textContent() {
+ if (!this.childNodes) {
+ return this.nodeValue || "";
+ }
+
+ return this.childNodes.map(function (child) {
+ return child.textContent;
+ }).join("");
+ }
+
+ hasChildNodes() {
+ return this.childNodes && this.childNodes.length > 0;
+ }
+
+}
+
+class SimpleXMLParser extends XMLParserBase {
+ constructor() {
+ super();
+ this._currentFragment = null;
+ this._stack = null;
+ this._errorCode = XMLParserErrorCode.NoError;
+ }
+
+ parseFromString(data) {
+ this._currentFragment = [];
+ this._stack = [];
+ this._errorCode = XMLParserErrorCode.NoError;
+ this.parseXml(data);
+
+ if (this._errorCode !== XMLParserErrorCode.NoError) {
+ return undefined;
+ }
+
+ const [documentElement] = this._currentFragment;
+
+ if (!documentElement) {
+ return undefined;
+ }
+
+ return {
+ documentElement
+ };
+ }
+
+ onResolveEntity(name) {
+ switch (name) {
+ case "apos":
+ return "'";
+ }
+
+ return super.onResolveEntity(name);
+ }
+
+ onText(text) {
+ if (isWhitespaceString(text)) {
+ return;
+ }
+
+ const node = new SimpleDOMNode("#text", text);
+
+ this._currentFragment.push(node);
+ }
+
+ onCdata(text) {
+ const node = new SimpleDOMNode("#text", text);
+
+ this._currentFragment.push(node);
+ }
+
+ onBeginElement(name, attributes, isEmpty) {
+ const node = new SimpleDOMNode(name);
+ node.childNodes = [];
+
+ this._currentFragment.push(node);
+
+ if (isEmpty) {
+ return;
+ }
+
+ this._stack.push(this._currentFragment);
+
+ this._currentFragment = node.childNodes;
+ }
+
+ onEndElement(name) {
+ this._currentFragment = this._stack.pop() || [];
+ const lastElement = this._currentFragment[this._currentFragment.length - 1];
+
+ if (!lastElement) {
+ return;
+ }
+
+ for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) {
+ lastElement.childNodes[i].parentNode = lastElement;
+ }
+ }
+
+ onError(code) {
+ this._errorCode = code;
+ }
+
+}
+
+exports.SimpleXMLParser = SimpleXMLParser;
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFDataTransportStream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+class PDFDataTransportStream {
+ constructor(params, pdfDataRangeTransport) {
+ (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
+ this._queuedChunks = [];
+ this._progressiveDone = params.progressiveDone || false;
+ const initialData = params.initialData;
+
+ if (initialData && initialData.length > 0) {
+ const buffer = new Uint8Array(initialData).buffer;
+
+ this._queuedChunks.push(buffer);
+ }
+
+ this._pdfDataRangeTransport = pdfDataRangeTransport;
+ this._isStreamingSupported = !params.disableStream;
+ this._isRangeSupported = !params.disableRange;
+ this._contentLength = params.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(args) {
+ const buffer = new Uint8Array(args.chunk).buffer;
+
+ if (args.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 !== args.begin) {
+ return false;
+ }
+
+ rangeReader._enqueue(buffer);
+
+ return true;
+ });
+
+ (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
+ }
+ }
+
+ get _progressiveDataLength() {
+ return this._fullRequestReader ? this._fullRequestReader._loaded : 0;
+ }
+
+ _onProgress(evt) {
+ if (evt.total === undefined) {
+ const firstReader = this._rangeReaders[0];
+
+ if (firstReader && firstReader.onProgress) {
+ firstReader.onProgress({
+ loaded: evt.loaded
+ });
+ }
+ } else {
+ const fullReader = this._fullRequestReader;
+
+ if (fullReader && fullReader.onProgress) {
+ fullReader.onProgress({
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ }
+ }
+ }
+
+ _onProgressiveDone() {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.progressiveDone();
+ }
+
+ this._progressiveDone = true;
+ }
+
+ _removeRangeReader(reader) {
+ const i = this._rangeReaders.indexOf(reader);
+
+ if (i >= 0) {
+ this._rangeReaders.splice(i, 1);
+ }
+ }
+
+ getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
+ const queuedChunks = this._queuedChunks;
+ this._queuedChunks = null;
+ return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone);
+ }
+
+ 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) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ const readers = this._rangeReaders.slice(0);
+
+ readers.forEach(function (rangeReader) {
+ rangeReader.cancel(reason);
+ });
+
+ this._pdfDataRangeTransport.abort();
+ }
+
+}
+
+exports.PDFDataTransportStream = PDFDataTransportStream;
+
+class PDFDataTransportStreamReader {
+ constructor(stream, queuedChunks, progressiveDone = false) {
+ this._stream = stream;
+ this._done = progressiveDone || false;
+ this._filename = 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 = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ });
+
+ this._requests = [];
+ }
+
+ 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
+ });
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ });
+
+ this._requests = [];
+ }
+
+ 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 = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ });
+
+ this._requests = [];
+
+ this._stream._removeRangeReader(this);
+ }
+
+}
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.WebGLContext = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+class WebGLContext {
+ constructor({
+ enable = false
+ }) {
+ this._enabled = enable === true;
+ }
+
+ get isEnabled() {
+ let enabled = this._enabled;
+
+ if (enabled) {
+ enabled = WebGLUtils.tryInitGL();
+ }
+
+ return (0, _util.shadow)(this, "isEnabled", enabled);
+ }
+
+ composeSMask({
+ layer,
+ mask,
+ properties
+ }) {
+ return WebGLUtils.composeSMask(layer, mask, properties);
+ }
+
+ drawFigures({
+ width,
+ height,
+ backgroundColor,
+ figures,
+ context
+ }) {
+ return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context);
+ }
+
+ clear() {
+ WebGLUtils.cleanup();
+ }
+
+}
+
+exports.WebGLContext = WebGLContext;
+
+var WebGLUtils = function WebGLUtilsClosure() {
+ function loadShader(gl, code, shaderType) {
+ var shader = gl.createShader(shaderType);
+ gl.shaderSource(shader, code);
+ gl.compileShader(shader);
+ var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
+
+ if (!compiled) {
+ var errorMsg = gl.getShaderInfoLog(shader);
+ throw new Error("Error during shader compilation: " + errorMsg);
+ }
+
+ return shader;
+ }
+
+ function createVertexShader(gl, code) {
+ return loadShader(gl, code, gl.VERTEX_SHADER);
+ }
+
+ function createFragmentShader(gl, code) {
+ return loadShader(gl, code, gl.FRAGMENT_SHADER);
+ }
+
+ function createProgram(gl, shaders) {
+ var program = gl.createProgram();
+
+ for (var i = 0, ii = shaders.length; i < ii; ++i) {
+ gl.attachShader(program, shaders[i]);
+ }
+
+ gl.linkProgram(program);
+ var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+
+ if (!linked) {
+ var errorMsg = gl.getProgramInfoLog(program);
+ throw new Error("Error during program linking: " + errorMsg);
+ }
+
+ return program;
+ }
+
+ function createTexture(gl, image, textureId) {
+ gl.activeTexture(textureId);
+ var texture = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
+ return texture;
+ }
+
+ var currentGL, currentCanvas;
+
+ function generateGL() {
+ if (currentGL) {
+ return;
+ }
+
+ currentCanvas = document.createElement("canvas");
+ currentGL = currentCanvas.getContext("webgl", {
+ premultipliedalpha: false
+ });
+ }
+
+ var smaskVertexShaderCode = "\
+ attribute vec2 a_position; \
+ attribute vec2 a_texCoord; \
+ \
+ uniform vec2 u_resolution; \
+ \
+ varying vec2 v_texCoord; \
+ \
+ void main() { \
+ vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \
+ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \
+ \
+ v_texCoord = a_texCoord; \
+ } ";
+ var smaskFragmentShaderCode = "\
+ precision mediump float; \
+ \
+ uniform vec4 u_backdrop; \
+ uniform int u_subtype; \
+ uniform sampler2D u_image; \
+ uniform sampler2D u_mask; \
+ \
+ varying vec2 v_texCoord; \
+ \
+ void main() { \
+ vec4 imageColor = texture2D(u_image, v_texCoord); \
+ vec4 maskColor = texture2D(u_mask, v_texCoord); \
+ if (u_backdrop.a > 0.0) { \
+ maskColor.rgb = maskColor.rgb * maskColor.a + \
+ u_backdrop.rgb * (1.0 - maskColor.a); \
+ } \
+ float lum; \
+ if (u_subtype == 0) { \
+ lum = maskColor.a; \
+ } else { \
+ lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \
+ maskColor.b * 0.11; \
+ } \
+ imageColor.a *= lum; \
+ imageColor.rgb *= imageColor.a; \
+ gl_FragColor = imageColor; \
+ } ";
+ var smaskCache = null;
+
+ function initSmaskGL() {
+ var canvas, gl;
+ generateGL();
+ canvas = currentCanvas;
+ currentCanvas = null;
+ gl = currentGL;
+ currentGL = null;
+ var vertexShader = createVertexShader(gl, smaskVertexShaderCode);
+ var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
+ var program = createProgram(gl, [vertexShader, fragmentShader]);
+ gl.useProgram(program);
+ var cache = {};
+ cache.gl = gl;
+ cache.canvas = canvas;
+ cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution");
+ cache.positionLocation = gl.getAttribLocation(program, "a_position");
+ cache.backdropLocation = gl.getUniformLocation(program, "u_backdrop");
+ cache.subtypeLocation = gl.getUniformLocation(program, "u_subtype");
+ var texCoordLocation = gl.getAttribLocation(program, "a_texCoord");
+ var texLayerLocation = gl.getUniformLocation(program, "u_image");
+ var texMaskLocation = gl.getUniformLocation(program, "u_mask");
+ var texCoordBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW);
+ gl.enableVertexAttribArray(texCoordLocation);
+ gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);
+ gl.uniform1i(texLayerLocation, 0);
+ gl.uniform1i(texMaskLocation, 1);
+ smaskCache = cache;
+ }
+
+ function composeSMask(layer, mask, properties) {
+ var width = layer.width,
+ height = layer.height;
+
+ if (!smaskCache) {
+ initSmaskGL();
+ }
+
+ var cache = smaskCache,
+ canvas = cache.canvas,
+ gl = cache.gl;
+ canvas.width = width;
+ canvas.height = height;
+ gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
+ gl.uniform2f(cache.resolutionLocation, width, height);
+
+ if (properties.backdrop) {
+ gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1);
+ } else {
+ gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);
+ }
+
+ gl.uniform1i(cache.subtypeLocation, properties.subtype === "Luminosity" ? 1 : 0);
+ var texture = createTexture(gl, layer, gl.TEXTURE0);
+ var maskTexture = createTexture(gl, mask, gl.TEXTURE1);
+ var buffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW);
+ gl.enableVertexAttribArray(cache.positionLocation);
+ gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
+ gl.clearColor(0, 0, 0, 0);
+ gl.enable(gl.BLEND);
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
+ gl.flush();
+ gl.deleteTexture(texture);
+ gl.deleteTexture(maskTexture);
+ gl.deleteBuffer(buffer);
+ return canvas;
+ }
+
+ var figuresVertexShaderCode = "\
+ attribute vec2 a_position; \
+ attribute vec3 a_color; \
+ \
+ uniform vec2 u_resolution; \
+ uniform vec2 u_scale; \
+ uniform vec2 u_offset; \
+ \
+ varying vec4 v_color; \
+ \
+ void main() { \
+ vec2 position = (a_position + u_offset) * u_scale; \
+ vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \
+ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \
+ \
+ v_color = vec4(a_color / 255.0, 1.0); \
+ } ";
+ var figuresFragmentShaderCode = "\
+ precision mediump float; \
+ \
+ varying vec4 v_color; \
+ \
+ void main() { \
+ gl_FragColor = v_color; \
+ } ";
+ var figuresCache = null;
+
+ function initFiguresGL() {
+ var canvas, gl;
+ generateGL();
+ canvas = currentCanvas;
+ currentCanvas = null;
+ gl = currentGL;
+ currentGL = null;
+ var vertexShader = createVertexShader(gl, figuresVertexShaderCode);
+ var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
+ var program = createProgram(gl, [vertexShader, fragmentShader]);
+ gl.useProgram(program);
+ var cache = {};
+ cache.gl = gl;
+ cache.canvas = canvas;
+ cache.resolutionLocation = gl.getUniformLocation(program, "u_resolution");
+ cache.scaleLocation = gl.getUniformLocation(program, "u_scale");
+ cache.offsetLocation = gl.getUniformLocation(program, "u_offset");
+ cache.positionLocation = gl.getAttribLocation(program, "a_position");
+ cache.colorLocation = gl.getAttribLocation(program, "a_color");
+ figuresCache = cache;
+ }
+
+ function drawFigures(width, height, backgroundColor, figures, context) {
+ if (!figuresCache) {
+ initFiguresGL();
+ }
+
+ var cache = figuresCache,
+ canvas = cache.canvas,
+ gl = cache.gl;
+ canvas.width = width;
+ canvas.height = height;
+ gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
+ gl.uniform2f(cache.resolutionLocation, width, height);
+ var count = 0;
+ var i, ii, rows;
+
+ for (i = 0, ii = figures.length; i < ii; i++) {
+ switch (figures[i].type) {
+ case "lattice":
+ rows = figures[i].coords.length / figures[i].verticesPerRow | 0;
+ count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;
+ break;
+
+ case "triangles":
+ count += figures[i].coords.length;
+ break;
+ }
+ }
+
+ var coords = new Float32Array(count * 2);
+ var colors = new Uint8Array(count * 3);
+ var coordsMap = context.coords,
+ colorsMap = context.colors;
+ var pIndex = 0,
+ cIndex = 0;
+
+ for (i = 0, ii = figures.length; i < ii; i++) {
+ var figure = figures[i],
+ ps = figure.coords,
+ cs = figure.colors;
+
+ switch (figure.type) {
+ case "lattice":
+ var cols = figure.verticesPerRow;
+ rows = ps.length / cols | 0;
+
+ for (var row = 1; row < rows; row++) {
+ var offset = row * cols + 1;
+
+ for (var col = 1; col < cols; col++, offset++) {
+ coords[pIndex] = coordsMap[ps[offset - cols - 1]];
+ coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];
+ coords[pIndex + 2] = coordsMap[ps[offset - cols]];
+ coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];
+ coords[pIndex + 4] = coordsMap[ps[offset - 1]];
+ coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];
+ colors[cIndex] = colorsMap[cs[offset - cols - 1]];
+ colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];
+ colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];
+ colors[cIndex + 3] = colorsMap[cs[offset - cols]];
+ colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];
+ colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];
+ colors[cIndex + 6] = colorsMap[cs[offset - 1]];
+ colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];
+ colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];
+ coords[pIndex + 6] = coords[pIndex + 2];
+ coords[pIndex + 7] = coords[pIndex + 3];
+ coords[pIndex + 8] = coords[pIndex + 4];
+ coords[pIndex + 9] = coords[pIndex + 5];
+ coords[pIndex + 10] = coordsMap[ps[offset]];
+ coords[pIndex + 11] = coordsMap[ps[offset] + 1];
+ colors[cIndex + 9] = colors[cIndex + 3];
+ colors[cIndex + 10] = colors[cIndex + 4];
+ colors[cIndex + 11] = colors[cIndex + 5];
+ colors[cIndex + 12] = colors[cIndex + 6];
+ colors[cIndex + 13] = colors[cIndex + 7];
+ colors[cIndex + 14] = colors[cIndex + 8];
+ colors[cIndex + 15] = colorsMap[cs[offset]];
+ colors[cIndex + 16] = colorsMap[cs[offset] + 1];
+ colors[cIndex + 17] = colorsMap[cs[offset] + 2];
+ pIndex += 12;
+ cIndex += 18;
+ }
+ }
+
+ break;
+
+ case "triangles":
+ for (var j = 0, jj = ps.length; j < jj; j++) {
+ coords[pIndex] = coordsMap[ps[j]];
+ coords[pIndex + 1] = coordsMap[ps[j] + 1];
+ colors[cIndex] = colorsMap[cs[j]];
+ colors[cIndex + 1] = colorsMap[cs[j] + 1];
+ colors[cIndex + 2] = colorsMap[cs[j] + 2];
+ pIndex += 2;
+ cIndex += 3;
+ }
+
+ break;
+ }
+ }
+
+ if (backgroundColor) {
+ gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0);
+ } else {
+ gl.clearColor(0, 0, 0, 0);
+ }
+
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ var coordsBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);
+ gl.enableVertexAttribArray(cache.positionLocation);
+ gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
+ var colorsBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
+ gl.enableVertexAttribArray(cache.colorLocation);
+ gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0);
+ gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);
+ gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);
+ gl.drawArrays(gl.TRIANGLES, 0, count);
+ gl.flush();
+ gl.deleteBuffer(coordsBuffer);
+ gl.deleteBuffer(colorsBuffer);
+ return canvas;
+ }
+
+ return {
+ tryInitGL() {
+ try {
+ generateGL();
+ return !!currentGL;
+ } catch (ex) {}
+
+ return false;
+ },
+
+ composeSMask,
+ drawFigures,
+
+ cleanup() {
+ if (smaskCache && smaskCache.canvas) {
+ smaskCache.canvas.width = 0;
+ smaskCache.canvas.height = 0;
+ }
+
+ if (figuresCache && figuresCache.canvas) {
+ figuresCache.canvas.width = 0;
+ figuresCache.canvas.height = 0;
+ }
+
+ smaskCache = null;
+ figuresCache = null;
+ }
+
+ };
+}();
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.AnnotationLayer = void 0;
+
+var _display_utils = __w_pdfjs_require__(1);
+
+var _util = __w_pdfjs_require__(2);
+
+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);
+ }
+
+ 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 {
+ constructor(parameters, isRenderable = false, ignoreBorder = false) {
+ this.isRenderable = isRenderable;
+ this.data = parameters.data;
+ this.layer = parameters.layer;
+ this.page = parameters.page;
+ this.viewport = parameters.viewport;
+ this.linkService = parameters.linkService;
+ this.downloadManager = parameters.downloadManager;
+ this.imageResourcesPath = parameters.imageResourcesPath;
+ this.renderInteractiveForms = parameters.renderInteractiveForms;
+ this.svgFactory = parameters.svgFactory;
+
+ if (isRenderable) {
+ this.container = this._createContainer(ignoreBorder);
+ }
+ }
+
+ _createContainer(ignoreBorder = false) {
+ const data = this.data,
+ page = this.page,
+ viewport = this.viewport;
+ const container = document.createElement("section");
+ let width = data.rect[2] - data.rect[0];
+ let height = data.rect[3] - data.rect[1];
+ container.setAttribute("data-annotation-id", data.id);
+
+ 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]]);
+
+ container.style.transform = `matrix(${viewport.transform.join(",")})`;
+ container.style.transformOrigin = `-${rect[0]}px -${rect[1]}px`;
+
+ if (!ignoreBorder && data.borderStyle.width > 0) {
+ container.style.borderWidth = `${data.borderStyle.width}px`;
+
+ if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {
+ width = width - 2 * data.borderStyle.width;
+ height = height - 2 * data.borderStyle.width;
+ }
+
+ const horizontalRadius = data.borderStyle.horizontalCornerRadius;
+ const verticalRadius = data.borderStyle.verticalCornerRadius;
+
+ if (horizontalRadius > 0 || verticalRadius > 0) {
+ const radius = `${horizontalRadius}px / ${verticalRadius}px`;
+ 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;
+ }
+
+ if (data.color) {
+ container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);
+ } else {
+ container.style.borderWidth = 0;
+ }
+ }
+
+ container.style.left = `${rect[0]}px`;
+ container.style.top = `${rect[1]}px`;
+ container.style.width = `${width}px`;
+ container.style.height = `${height}px`;
+ return container;
+ }
+
+ _createPopup(container, trigger, data) {
+ if (!trigger) {
+ trigger = document.createElement("div");
+ trigger.style.height = container.style.height;
+ trigger.style.width = container.style.width;
+ container.appendChild(trigger);
+ }
+
+ const popupElement = new PopupElement({
+ container,
+ trigger,
+ color: data.color,
+ title: data.title,
+ modificationDate: data.modificationDate,
+ contents: data.contents,
+ hideWrapper: true
+ });
+ const popup = popupElement.render();
+ popup.style.left = container.style.width;
+ container.appendChild(popup);
+ }
+
+ render() {
+ (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
+ }
+
+}
+
+class LinkAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action);
+ super(parameters, isRenderable);
+ }
+
+ render() {
+ this.container.className = "linkAnnotation";
+ const {
+ data,
+ linkService
+ } = this;
+ const link = document.createElement("a");
+
+ if (data.url) {
+ (0, _display_utils.addLinkAttributes)(link, {
+ url: data.url,
+ target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget,
+ rel: linkService.externalLinkRel,
+ enabled: linkService.externalLinkEnabled
+ });
+ } else if (data.action) {
+ this._bindNamedAction(link, data.action);
+ } else {
+ this._bindLink(link, data.dest);
+ }
+
+ this.container.appendChild(link);
+ return this.container;
+ }
+
+ _bindLink(link, destination) {
+ link.href = this.linkService.getDestinationHash(destination);
+
+ link.onclick = () => {
+ if (destination) {
+ this.linkService.navigateTo(destination);
+ }
+
+ return false;
+ };
+
+ if (destination) {
+ link.className = "internalLink";
+ }
+ }
+
+ _bindNamedAction(link, action) {
+ link.href = this.linkService.getAnchorUrl("");
+
+ link.onclick = () => {
+ this.linkService.executeNamedAction(action);
+ return false;
+ };
+
+ link.className = "internalLink";
+ }
+
+}
+
+class TextAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable);
+ }
+
+ render() {
+ this.container.className = "textAnnotation";
+ const image = document.createElement("img");
+ image.style.height = this.container.style.height;
+ image.style.width = this.container.style.width;
+ image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
+ image.alt = "[{{type}} Annotation]";
+ image.dataset.l10nId = "text_annotation_type";
+ image.dataset.l10nArgs = JSON.stringify({
+ type: this.data.name
+ });
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, image, this.data);
+ }
+
+ this.container.appendChild(image);
+ return this.container;
+ }
+
+}
+
+class WidgetAnnotationElement extends AnnotationElement {
+ render() {
+ return this.container;
+ }
+
+}
+
+class TextWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ const isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
+ super(parameters, isRenderable);
+ }
+
+ render() {
+ const TEXT_ALIGNMENT = ["left", "center", "right"];
+ this.container.className = "textWidgetAnnotation";
+ let element = null;
+
+ if (this.renderInteractiveForms) {
+ if (this.data.multiLine) {
+ element = document.createElement("textarea");
+ element.textContent = this.data.fieldValue;
+ } else {
+ element = document.createElement("input");
+ element.type = "text";
+ element.setAttribute("value", this.data.fieldValue);
+ }
+
+ element.disabled = this.data.readOnly;
+ element.name = this.data.fieldName;
+
+ if (this.data.maxLen !== null) {
+ element.maxLength = this.data.maxLen;
+ }
+
+ if (this.data.comb) {
+ const fieldWidth = this.data.rect[2] - this.data.rect[0];
+ const combWidth = fieldWidth / this.data.maxLen;
+ element.classList.add("comb");
+ element.style.letterSpacing = `calc(${combWidth}px - 1ch)`;
+ }
+ } else {
+ element = document.createElement("div");
+ element.textContent = this.data.fieldValue;
+ element.style.verticalAlign = "middle";
+ element.style.display = "table-cell";
+ let font = null;
+
+ if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) {
+ font = this.page.commonObjs.get(this.data.fontRefName);
+ }
+
+ this._setTextStyle(element, font);
+ }
+
+ if (this.data.textAlignment !== null) {
+ element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
+ }
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+
+ _setTextStyle(element, font) {
+ const style = element.style;
+ style.fontSize = `${this.data.fontSize}px`;
+ style.direction = this.data.fontDirection < 0 ? "rtl" : "ltr";
+
+ if (!font) {
+ return;
+ }
+
+ let bold = "normal";
+
+ if (font.black) {
+ bold = "900";
+ } else if (font.bold) {
+ bold = "bold";
+ }
+
+ style.fontWeight = bold;
+ style.fontStyle = font.italic ? "italic" : "normal";
+ const fontFamily = font.loadedName ? `"${font.loadedName}", ` : "";
+ const fallbackName = font.fallbackName || "Helvetica, sans-serif";
+ style.fontFamily = fontFamily + fallbackName;
+ }
+
+}
+
+class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ super(parameters, parameters.renderInteractiveForms);
+ }
+
+ render() {
+ this.container.className = "buttonWidgetAnnotation checkBox";
+ const element = document.createElement("input");
+ element.disabled = this.data.readOnly;
+ element.type = "checkbox";
+ element.name = this.data.fieldName;
+
+ if (this.data.fieldValue && this.data.fieldValue !== "Off") {
+ element.setAttribute("checked", true);
+ }
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+
+}
+
+class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ super(parameters, parameters.renderInteractiveForms);
+ }
+
+ render() {
+ this.container.className = "buttonWidgetAnnotation radioButton";
+ const element = document.createElement("input");
+ element.disabled = this.data.readOnly;
+ element.type = "radio";
+ element.name = this.data.fieldName;
+
+ if (this.data.fieldValue === this.data.buttonValue) {
+ element.setAttribute("checked", true);
+ }
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+
+}
+
+class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
+ render() {
+ const container = super.render();
+ container.className = "buttonWidgetAnnotation pushButton";
+ return container;
+ }
+
+}
+
+class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ super(parameters, parameters.renderInteractiveForms);
+ }
+
+ render() {
+ this.container.className = "choiceWidgetAnnotation";
+ const selectElement = document.createElement("select");
+ selectElement.disabled = this.data.readOnly;
+ selectElement.name = this.data.fieldName;
+
+ if (!this.data.combo) {
+ selectElement.size = this.data.options.length;
+
+ if (this.data.multiSelect) {
+ selectElement.multiple = true;
+ }
+ }
+
+ for (const option of this.data.options) {
+ const optionElement = document.createElement("option");
+ optionElement.textContent = option.displayValue;
+ optionElement.value = option.exportValue;
+
+ if (this.data.fieldValue.includes(option.displayValue)) {
+ optionElement.setAttribute("selected", true);
+ }
+
+ selectElement.appendChild(optionElement);
+ }
+
+ this.container.appendChild(selectElement);
+ return this.container;
+ }
+
+}
+
+class PopupAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable);
+ }
+
+ render() {
+ const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"];
+ this.container.className = "popupAnnotation";
+
+ if (IGNORE_TYPES.includes(this.data.parentType)) {
+ return this.container;
+ }
+
+ const selector = `[data-annotation-id="${this.data.parentId}"]`;
+ const parentElement = this.layer.querySelector(selector);
+
+ if (!parentElement) {
+ return this.container;
+ }
+
+ const popup = new PopupElement({
+ container: this.container,
+ trigger: parentElement,
+ color: this.data.color,
+ title: this.data.title,
+ modificationDate: this.data.modificationDate,
+ contents: this.data.contents
+ });
+ const parentLeft = parseFloat(parentElement.style.left);
+ const parentWidth = parseFloat(parentElement.style.width);
+ this.container.style.transformOrigin = `-${parentLeft + parentWidth}px -${parentElement.style.top}`;
+ this.container.style.left = `${parentLeft + parentWidth}px`;
+ this.container.appendChild(popup.render());
+ return this.container;
+ }
+
+}
+
+class PopupElement {
+ constructor(parameters) {
+ this.container = parameters.container;
+ this.trigger = parameters.trigger;
+ this.color = parameters.color;
+ this.title = parameters.title;
+ this.modificationDate = parameters.modificationDate;
+ this.contents = parameters.contents;
+ this.hideWrapper = parameters.hideWrapper || false;
+ this.pinned = false;
+ }
+
+ render() {
+ const BACKGROUND_ENLIGHT = 0.7;
+ const wrapper = document.createElement("div");
+ wrapper.className = "popupWrapper";
+ this.hideElement = this.hideWrapper ? wrapper : this.container;
+ this.hideElement.setAttribute("hidden", true);
+ const popup = document.createElement("div");
+ popup.className = "popup";
+ const color = this.color;
+
+ if (color) {
+ const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
+ const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
+ const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
+ popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0);
+ }
+
+ const title = document.createElement("h1");
+ title.textContent = this.title;
+ popup.appendChild(title);
+
+ const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);
+
+ if (dateObject) {
+ const modificationDate = document.createElement("span");
+ modificationDate.textContent = "{{date}}, {{time}}";
+ modificationDate.dataset.l10nId = "annotation_date_string";
+ modificationDate.dataset.l10nArgs = JSON.stringify({
+ date: dateObject.toLocaleDateString(),
+ time: dateObject.toLocaleTimeString()
+ });
+ popup.appendChild(modificationDate);
+ }
+
+ const contents = this._formatContents(this.contents);
+
+ popup.appendChild(contents);
+ this.trigger.addEventListener("click", this._toggle.bind(this));
+ this.trigger.addEventListener("mouseover", this._show.bind(this, false));
+ this.trigger.addEventListener("mouseout", this._hide.bind(this, false));
+ popup.addEventListener("click", this._hide.bind(this, true));
+ wrapper.appendChild(popup);
+ return wrapper;
+ }
+
+ _formatContents(contents) {
+ const p = document.createElement("p");
+ const lines = contents.split(/(?:\r\n?|\n)/);
+
+ for (let i = 0, ii = lines.length; i < ii; ++i) {
+ const line = lines[i];
+ p.appendChild(document.createTextNode(line));
+
+ if (i < ii - 1) {
+ p.appendChild(document.createElement("br"));
+ }
+ }
+
+ return p;
+ }
+
+ _toggle() {
+ if (this.pinned) {
+ this._hide(true);
+ } else {
+ this._show(true);
+ }
+ }
+
+ _show(pin = false) {
+ if (pin) {
+ this.pinned = true;
+ }
+
+ if (this.hideElement.hasAttribute("hidden")) {
+ this.hideElement.removeAttribute("hidden");
+ this.container.style.zIndex += 1;
+ }
+ }
+
+ _hide(unpin = true) {
+ if (unpin) {
+ this.pinned = false;
+ }
+
+ if (!this.hideElement.hasAttribute("hidden") && !this.pinned) {
+ this.hideElement.setAttribute("hidden", true);
+ this.container.style.zIndex -= 1;
+ }
+ }
+
+}
+
+class FreeTextAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "freeTextAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class LineAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "lineAnnotation";
+ const data = this.data;
+ const width = data.rect[2] - data.rect[0];
+ const height = data.rect[3] - data.rect[1];
+ const svg = this.svgFactory.create(width, height);
+ const 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");
+ svg.appendChild(line);
+ this.container.append(svg);
+
+ this._createPopup(this.container, line, data);
+
+ return this.container;
+ }
+
+}
+
+class SquareAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "squareAnnotation";
+ const data = this.data;
+ const width = data.rect[2] - data.rect[0];
+ const height = data.rect[3] - data.rect[1];
+ const svg = this.svgFactory.create(width, height);
+ const borderWidth = data.borderStyle.width;
+ const 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", "none");
+ svg.appendChild(square);
+ this.container.append(svg);
+
+ this._createPopup(this.container, square, data);
+
+ return this.container;
+ }
+
+}
+
+class CircleAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "circleAnnotation";
+ const data = this.data;
+ const width = data.rect[2] - data.rect[0];
+ const height = data.rect[3] - data.rect[1];
+ const svg = this.svgFactory.create(width, height);
+ const borderWidth = data.borderStyle.width;
+ const 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", "none");
+ svg.appendChild(circle);
+ this.container.append(svg);
+
+ this._createPopup(this.container, circle, data);
+
+ return this.container;
+ }
+
+}
+
+class PolylineAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ this.containerClassName = "polylineAnnotation";
+ this.svgElementName = "svg:polyline";
+ }
+
+ render() {
+ this.container.className = this.containerClassName;
+ const data = this.data;
+ const width = data.rect[2] - data.rect[0];
+ const height = data.rect[3] - data.rect[1];
+ const svg = this.svgFactory.create(width, height);
+ 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.svgFactory.createElement(this.svgElementName);
+ polyline.setAttribute("points", points);
+ polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
+ polyline.setAttribute("stroke", "transparent");
+ polyline.setAttribute("fill", "none");
+ svg.appendChild(polyline);
+ this.container.append(svg);
+
+ this._createPopup(this.container, polyline, data);
+
+ return this.container;
+ }
+
+}
+
+class PolygonAnnotationElement extends PolylineAnnotationElement {
+ constructor(parameters) {
+ super(parameters);
+ this.containerClassName = "polygonAnnotation";
+ this.svgElementName = "svg:polygon";
+ }
+
+}
+
+class CaretAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "caretAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class InkAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ this.containerClassName = "inkAnnotation";
+ this.svgElementName = "svg:polyline";
+ }
+
+ render() {
+ this.container.className = this.containerClassName;
+ const data = this.data;
+ const width = data.rect[2] - data.rect[0];
+ const height = data.rect[3] - data.rect[1];
+ const svg = this.svgFactory.create(width, height);
+
+ 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);
+ polyline.setAttribute("points", points);
+ polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
+ polyline.setAttribute("stroke", "transparent");
+ polyline.setAttribute("fill", "none");
+
+ this._createPopup(this.container, polyline, data);
+
+ svg.appendChild(polyline);
+ }
+
+ this.container.append(svg);
+ return this.container;
+ }
+
+}
+
+class HighlightAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "highlightAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class UnderlineAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "underlineAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class SquigglyAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "squigglyAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class StrikeOutAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "strikeoutAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class StampAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
+ super(parameters, isRenderable, true);
+ }
+
+ render() {
+ this.container.className = "stampAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(this.container, null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class FileAttachmentAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, true);
+ const {
+ filename,
+ content
+ } = this.data.file;
+ this.filename = (0, _display_utils.getFilenameFromUrl)(filename);
+ this.content = content;
+
+ if (this.linkService.eventBus) {
+ this.linkService.eventBus.dispatch("fileattachmentannotation", {
+ source: this,
+ id: (0, _util.stringToPDFString)(filename),
+ filename,
+ content
+ });
+ }
+ }
+
+ render() {
+ this.container.className = "fileAttachmentAnnotation";
+ const trigger = document.createElement("div");
+ trigger.style.height = this.container.style.height;
+ trigger.style.width = this.container.style.width;
+ trigger.addEventListener("dblclick", this._download.bind(this));
+
+ if (!this.data.hasPopup && (this.data.title || this.data.contents)) {
+ this._createPopup(this.container, trigger, this.data);
+ }
+
+ this.container.appendChild(trigger);
+ return this.container;
+ }
+
+ _download() {
+ if (!this.downloadManager) {
+ (0, _util.warn)("Download cannot be started due to unavailable download manager");
+ return;
+ }
+
+ this.downloadManager.downloadData(this.content, this.filename, "");
+ }
+
+}
+
+class AnnotationLayer {
+ static render(parameters) {
+ const sortedAnnotations = [],
+ popupAnnotations = [];
+
+ for (const data of parameters.annotations) {
+ if (!data) {
+ continue;
+ }
+
+ if (data.annotationType === _util.AnnotationType.POPUP) {
+ popupAnnotations.push(data);
+ continue;
+ }
+
+ sortedAnnotations.push(data);
+ }
+
+ if (popupAnnotations.length) {
+ sortedAnnotations.push(...popupAnnotations);
+ }
+
+ for (const data of sortedAnnotations) {
+ const element = AnnotationElementFactory.create({
+ data,
+ layer: parameters.div,
+ page: parameters.page,
+ viewport: parameters.viewport,
+ linkService: parameters.linkService,
+ downloadManager: parameters.downloadManager,
+ imageResourcesPath: parameters.imageResourcesPath || "",
+ renderInteractiveForms: parameters.renderInteractiveForms || false,
+ svgFactory: new _display_utils.DOMSVGFactory()
+ });
+
+ if (element.isRenderable) {
+ parameters.div.appendChild(element.render());
+ }
+ }
+ }
+
+ static update(parameters) {
+ for (const data of parameters.annotations) {
+ const element = parameters.div.querySelector(`[data-annotation-id="${data.id}"]`);
+
+ if (element) {
+ element.style.transform = `matrix(${parameters.viewport.transform.join(",")})`;
+ }
+ }
+
+ parameters.div.removeAttribute("hidden");
+ }
+
+}
+
+exports.AnnotationLayer = AnnotationLayer;
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.renderTextLayer = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var renderTextLayer = function renderTextLayerClosure() {
+ var MAX_TEXT_DIVS_TO_RENDER = 100000;
+ var NonWhitespaceRegexp = /\S/;
+
+ function isAllWhitespace(str) {
+ return !NonWhitespaceRegexp.test(str);
+ }
+
+ function appendText(task, geom, styles) {
+ var textDiv = document.createElement("span");
+ var textDivProperties = {
+ angle: 0,
+ canvasWidth: 0,
+ isWhitespace: false,
+ originalTransform: null,
+ paddingBottom: 0,
+ paddingLeft: 0,
+ paddingRight: 0,
+ paddingTop: 0,
+ scale: 1
+ };
+
+ task._textDivs.push(textDiv);
+
+ if (isAllWhitespace(geom.str)) {
+ textDivProperties.isWhitespace = true;
+
+ task._textDivProperties.set(textDiv, textDivProperties);
+
+ return;
+ }
+
+ var tx = _util.Util.transform(task._viewport.transform, geom.transform);
+
+ var angle = Math.atan2(tx[1], tx[0]);
+ var style = styles[geom.fontName];
+
+ if (style.vertical) {
+ angle += Math.PI / 2;
+ }
+
+ var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]);
+ var fontAscent = fontHeight;
+
+ if (style.ascent) {
+ fontAscent = style.ascent * fontAscent;
+ } else if (style.descent) {
+ fontAscent = (1 + style.descent) * fontAscent;
+ }
+
+ 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);
+ }
+
+ textDiv.style.left = `${left}px`;
+ textDiv.style.top = `${top}px`;
+ textDiv.style.fontSize = `${fontHeight}px`;
+ textDiv.style.fontFamily = style.fontFamily;
+ textDiv.textContent = geom.str;
+
+ if (task._fontInspectorEnabled) {
+ textDiv.dataset.fontName = geom.fontName;
+ }
+
+ if (angle !== 0) {
+ textDivProperties.angle = angle * (180 / Math.PI);
+ }
+
+ let shouldScaleText = false;
+
+ if (geom.str.length > 1) {
+ shouldScaleText = true;
+ } else if (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) {
+ if (style.vertical) {
+ textDivProperties.canvasWidth = geom.height * task._viewport.scale;
+ } else {
+ textDivProperties.canvasWidth = geom.width * task._viewport.scale;
+ }
+ }
+
+ task._textDivProperties.set(textDiv, textDivProperties);
+
+ if (task._textContentStream) {
+ task._layoutText(textDiv);
+ }
+
+ if (task._enhanceTextSelection) {
+ var angleCos = 1,
+ angleSin = 0;
+
+ if (angle !== 0) {
+ angleCos = Math.cos(angle);
+ angleSin = Math.sin(angle);
+ }
+
+ var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
+ var divHeight = fontHeight;
+ var m, b;
+
+ if (angle !== 0) {
+ m = [angleCos, angleSin, -angleSin, angleCos, left, top];
+ b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);
+ } else {
+ b = [left, top, left + divWidth, top + divHeight];
+ }
+
+ task._bounds.push({
+ left: b[0],
+ top: b[1],
+ right: b[2],
+ bottom: b[3],
+ div: textDiv,
+ size: [divWidth, divHeight],
+ m
+ });
+ }
+ }
+
+ function render(task) {
+ if (task._canceled) {
+ return;
+ }
+
+ var textDivs = task._textDivs;
+ var capability = task._capability;
+ var textDivsLength = textDivs.length;
+
+ if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
+ task._renderingDone = true;
+ capability.resolve();
+ return;
+ }
+
+ if (!task._textContentStream) {
+ for (var i = 0; i < textDivsLength; i++) {
+ task._layoutText(textDivs[i]);
+ }
+ }
+
+ task._renderingDone = true;
+ capability.resolve();
+ }
+
+ function findPositiveMin(ts, offset, count) {
+ let result = 0;
+
+ for (let i = 0; i < count; i++) {
+ const t = ts[offset++];
+
+ if (t > 0) {
+ result = result ? Math.min(t, result) : t;
+ }
+ }
+
+ return result;
+ }
+
+ function expand(task) {
+ var bounds = task._bounds;
+ var viewport = task._viewport;
+ var expanded = expandBounds(viewport.width, viewport.height, bounds);
+
+ for (var i = 0; i < expanded.length; i++) {
+ var div = bounds[i].div;
+
+ var divProperties = task._textDivProperties.get(div);
+
+ if (divProperties.angle === 0) {
+ divProperties.paddingLeft = bounds[i].left - expanded[i].left;
+ divProperties.paddingTop = bounds[i].top - expanded[i].top;
+ divProperties.paddingRight = expanded[i].right - bounds[i].right;
+ divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;
+
+ task._textDivProperties.set(div, divProperties);
+
+ continue;
+ }
+
+ var e = expanded[i],
+ b = bounds[i];
+ var m = b.m,
+ c = m[0],
+ s = m[1];
+ var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
+ var ts = new Float64Array(64);
+ points.forEach(function (p, j) {
+ var t = _util.Util.applyTransform(p, m);
+
+ ts[j + 0] = c && (e.left - t[0]) / c;
+ ts[j + 4] = s && (e.top - t[1]) / s;
+ ts[j + 8] = c && (e.right - t[0]) / c;
+ ts[j + 12] = s && (e.bottom - t[1]) / s;
+ ts[j + 16] = s && (e.left - t[0]) / -s;
+ ts[j + 20] = c && (e.top - t[1]) / c;
+ ts[j + 24] = s && (e.right - t[0]) / -s;
+ ts[j + 28] = c && (e.bottom - t[1]) / c;
+ ts[j + 32] = c && (e.left - t[0]) / -c;
+ ts[j + 36] = s && (e.top - t[1]) / -s;
+ ts[j + 40] = c && (e.right - t[0]) / -c;
+ ts[j + 44] = s && (e.bottom - t[1]) / -s;
+ ts[j + 48] = s && (e.left - t[0]) / s;
+ ts[j + 52] = c && (e.top - t[1]) / -c;
+ ts[j + 56] = s && (e.right - t[0]) / s;
+ ts[j + 60] = c && (e.bottom - t[1]) / -c;
+ });
+ var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
+ divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
+ divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;
+ divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;
+ divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;
+
+ task._textDivProperties.set(div, divProperties);
+ }
+ }
+
+ function expandBounds(width, height, boxes) {
+ var bounds = boxes.map(function (box, i) {
+ return {
+ x1: box.left,
+ y1: box.top,
+ x2: box.right,
+ y2: box.bottom,
+ index: i,
+ x1New: undefined,
+ x2New: undefined
+ };
+ });
+ expandBoundsLTR(width, bounds);
+ var expanded = new Array(boxes.length);
+ bounds.forEach(function (b) {
+ var i = b.index;
+ expanded[i] = {
+ left: b.x1New,
+ top: 0,
+ right: b.x2New,
+ bottom: 0
+ };
+ });
+ boxes.map(function (box, i) {
+ var e = expanded[i],
+ b = bounds[i];
+ b.x1 = box.top;
+ b.y1 = width - e.right;
+ b.x2 = box.bottom;
+ b.y2 = width - e.left;
+ b.index = i;
+ b.x1New = undefined;
+ b.x2New = undefined;
+ });
+ expandBoundsLTR(height, bounds);
+ bounds.forEach(function (b) {
+ var i = b.index;
+ expanded[i].top = b.x1New;
+ expanded[i].bottom = b.x2New;
+ });
+ return expanded;
+ }
+
+ function expandBoundsLTR(width, bounds) {
+ bounds.sort(function (a, b) {
+ return a.x1 - b.x1 || a.index - b.index;
+ });
+ var fakeBoundary = {
+ x1: -Infinity,
+ y1: -Infinity,
+ x2: 0,
+ y2: Infinity,
+ index: -1,
+ x1New: 0,
+ x2New: 0
+ };
+ var horizon = [{
+ start: -Infinity,
+ end: Infinity,
+ boundary: fakeBoundary
+ }];
+ bounds.forEach(function (boundary) {
+ var i = 0;
+
+ while (i < horizon.length && horizon[i].end <= boundary.y1) {
+ i++;
+ }
+
+ var j = horizon.length - 1;
+
+ while (j >= 0 && horizon[j].start >= boundary.y2) {
+ j--;
+ }
+
+ var horizonPart, affectedBoundary;
+ var q,
+ k,
+ maxXNew = -Infinity;
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+ var xNew;
+
+ if (affectedBoundary.x2 > boundary.x1) {
+ xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;
+ } else if (affectedBoundary.x2New === undefined) {
+ xNew = (affectedBoundary.x2 + boundary.x1) / 2;
+ } else {
+ xNew = affectedBoundary.x2New;
+ }
+
+ if (xNew > maxXNew) {
+ maxXNew = xNew;
+ }
+ }
+
+ boundary.x1New = maxXNew;
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+
+ if (affectedBoundary.x2New === undefined) {
+ if (affectedBoundary.x2 > boundary.x1) {
+ if (affectedBoundary.index > boundary.index) {
+ affectedBoundary.x2New = affectedBoundary.x2;
+ }
+ } else {
+ affectedBoundary.x2New = maxXNew;
+ }
+ } else if (affectedBoundary.x2New > maxXNew) {
+ affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);
+ }
+ }
+
+ var changedHorizon = [],
+ lastBoundary = null;
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+ var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;
+
+ if (lastBoundary === useBoundary) {
+ changedHorizon[changedHorizon.length - 1].end = horizonPart.end;
+ } else {
+ changedHorizon.push({
+ start: horizonPart.start,
+ end: horizonPart.end,
+ boundary: useBoundary
+ });
+ lastBoundary = useBoundary;
+ }
+ }
+
+ if (horizon[i].start < boundary.y1) {
+ changedHorizon[0].start = boundary.y1;
+ changedHorizon.unshift({
+ start: horizon[i].start,
+ end: boundary.y1,
+ boundary: horizon[i].boundary
+ });
+ }
+
+ if (boundary.y2 < horizon[j].end) {
+ changedHorizon[changedHorizon.length - 1].end = boundary.y2;
+ changedHorizon.push({
+ start: boundary.y2,
+ end: horizon[j].end,
+ boundary: horizon[j].boundary
+ });
+ }
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+
+ if (affectedBoundary.x2New !== undefined) {
+ continue;
+ }
+
+ var used = false;
+
+ for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {
+ used = horizon[k].boundary === affectedBoundary;
+ }
+
+ for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) {
+ used = horizon[k].boundary === affectedBoundary;
+ }
+
+ for (k = 0; !used && k < changedHorizon.length; k++) {
+ used = changedHorizon[k].boundary === affectedBoundary;
+ }
+
+ if (!used) {
+ affectedBoundary.x2New = maxXNew;
+ }
+ }
+
+ Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));
+ });
+ horizon.forEach(function (horizonPart) {
+ var affectedBoundary = horizonPart.boundary;
+
+ if (affectedBoundary.x2New === undefined) {
+ affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);
+ }
+ });
+ }
+
+ function TextLayerRenderTask({
+ textContent,
+ textContentStream,
+ container,
+ viewport,
+ textDivs,
+ textContentItemsStr,
+ enhanceTextSelection
+ }) {
+ this._textContent = textContent;
+ this._textContentStream = textContentStream;
+ this._container = container;
+ this._viewport = viewport;
+ this._textDivs = textDivs || [];
+ this._textContentItemsStr = textContentItemsStr || [];
+ this._enhanceTextSelection = !!enhanceTextSelection;
+ this._fontInspectorEnabled = !!(globalThis.FontInspector && globalThis.FontInspector.enabled);
+ this._reader = null;
+ this._layoutTextLastFontSize = null;
+ this._layoutTextLastFontFamily = null;
+ this._layoutTextCtx = null;
+ this._textDivProperties = new WeakMap();
+ this._renderingDone = false;
+ this._canceled = false;
+ this._capability = (0, _util.createPromiseCapability)();
+ this._renderTimer = null;
+ this._bounds = [];
+
+ this._capability.promise.finally(() => {
+ if (this._layoutTextCtx) {
+ this._layoutTextCtx.canvas.width = 0;
+ this._layoutTextCtx.canvas.height = 0;
+ this._layoutTextCtx = null;
+ }
+ }).catch(() => {});
+ }
+
+ TextLayerRenderTask.prototype = {
+ get promise() {
+ return this._capability.promise;
+ },
+
+ cancel: function TextLayer_cancel() {
+ this._canceled = true;
+
+ if (this._reader) {
+ this._reader.cancel(new _util.AbortException("TextLayer task cancelled."));
+
+ this._reader = null;
+ }
+
+ if (this._renderTimer !== null) {
+ clearTimeout(this._renderTimer);
+ this._renderTimer = null;
+ }
+
+ this._capability.reject(new Error("TextLayer task cancelled."));
+ },
+
+ _processItems(items, styleCache) {
+ for (let i = 0, len = items.length; i < len; i++) {
+ this._textContentItemsStr.push(items[i].str);
+
+ appendText(this, items[i], styleCache);
+ }
+ },
+
+ _layoutText(textDiv) {
+ const textDivProperties = this._textDivProperties.get(textDiv);
+
+ if (textDivProperties.isWhitespace) {
+ return;
+ }
+
+ let transform = "";
+
+ if (textDivProperties.canvasWidth !== 0) {
+ const {
+ fontSize,
+ fontFamily
+ } = textDiv.style;
+
+ if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {
+ this._layoutTextCtx.font = `${fontSize} ${fontFamily}`;
+ this._layoutTextLastFontSize = fontSize;
+ this._layoutTextLastFontFamily = fontFamily;
+ }
+
+ const {
+ width
+ } = this._layoutTextCtx.measureText(textDiv.textContent);
+
+ if (width > 0) {
+ textDivProperties.scale = textDivProperties.canvasWidth / width;
+ transform = `scaleX(${textDivProperties.scale})`;
+ }
+ }
+
+ if (textDivProperties.angle !== 0) {
+ transform = `rotate(${textDivProperties.angle}deg) ${transform}`;
+ }
+
+ if (transform.length > 0) {
+ if (this._enhanceTextSelection) {
+ textDivProperties.originalTransform = transform;
+ }
+
+ textDiv.style.transform = transform;
+ }
+
+ this._textDivProperties.set(textDiv, textDivProperties);
+
+ this._container.appendChild(textDiv);
+ },
+
+ _render: function TextLayer_render(timeout) {
+ const capability = (0, _util.createPromiseCapability)();
+ let styleCache = Object.create(null);
+ const canvas = document.createElement("canvas");
+ canvas.mozOpaque = true;
+ this._layoutTextCtx = canvas.getContext("2d", {
+ alpha: false
+ });
+
+ if (this._textContent) {
+ const textItems = this._textContent.items;
+ const textStyles = this._textContent.styles;
+
+ this._processItems(textItems, textStyles);
+
+ capability.resolve();
+ } else if (this._textContentStream) {
+ 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._textContentStream.getReader();
+ pump();
+ } else {
+ throw new Error('Neither "textContent" nor "textContentStream"' + " parameters specified.");
+ }
+
+ capability.promise.then(() => {
+ styleCache = null;
+
+ if (!timeout) {
+ render(this);
+ } else {
+ this._renderTimer = setTimeout(() => {
+ render(this);
+ this._renderTimer = null;
+ }, timeout);
+ }
+ }, this._capability.reject);
+ },
+ expandTextDivs: function TextLayer_expandTextDivs(expandDivs) {
+ if (!this._enhanceTextSelection || !this._renderingDone) {
+ return;
+ }
+
+ if (this._bounds !== null) {
+ expand(this);
+ this._bounds = null;
+ }
+
+ const transformBuf = [],
+ paddingBuf = [];
+
+ for (var i = 0, ii = this._textDivs.length; i < ii; i++) {
+ const div = this._textDivs[i];
+
+ const divProps = this._textDivProperties.get(div);
+
+ if (divProps.isWhitespace) {
+ continue;
+ }
+
+ if (expandDivs) {
+ transformBuf.length = 0;
+ paddingBuf.length = 0;
+
+ if (divProps.originalTransform) {
+ transformBuf.push(divProps.originalTransform);
+ }
+
+ if (divProps.paddingTop > 0) {
+ paddingBuf.push(`${divProps.paddingTop}px`);
+ transformBuf.push(`translateY(${-divProps.paddingTop}px)`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingRight > 0) {
+ paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingBottom > 0) {
+ paddingBuf.push(`${divProps.paddingBottom}px`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingLeft > 0) {
+ paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`);
+ transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ div.style.padding = paddingBuf.join(" ");
+
+ if (transformBuf.length) {
+ div.style.transform = transformBuf.join(" ");
+ }
+ } else {
+ div.style.padding = null;
+ div.style.transform = divProps.originalTransform;
+ }
+ }
+ }
+ };
+
+ function renderTextLayer(renderParameters) {
+ var task = new TextLayerRenderTask({
+ textContent: renderParameters.textContent,
+ textContentStream: renderParameters.textContentStream,
+ container: renderParameters.container,
+ viewport: renderParameters.viewport,
+ textDivs: renderParameters.textDivs,
+ textContentItemsStr: renderParameters.textContentItemsStr,
+ enhanceTextSelection: renderParameters.enhanceTextSelection
+ });
+
+ task._render(renderParameters.timeout);
+
+ return task;
+ }
+
+ return renderTextLayer;
+}();
+
+exports.renderTextLayer = renderTextLayer;
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.SVGGraphics = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _display_utils = __w_pdfjs_require__(1);
+
+var _is_node = __w_pdfjs_require__(4);
+
+let SVGGraphics = function () {
+ throw new Error("Not implemented: SVGGraphics");
+};
+
+exports.SVGGraphics = SVGGraphics;
+{
+ const SVG_DEFAULTS = {
+ fontStyle: "normal",
+ fontWeight: "normal",
+ fillColor: "#000000"
+ };
+ const XML_NS = "http://www.w3.org/XML/1998/namespace";
+ const XLINK_NS = "http://www.w3.org/1999/xlink";
+ const LINE_CAP_STYLES = ["butt", "round", "square"];
+ const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+
+ const convertImgDataToPng = function () {
+ const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
+ const CHUNK_WRAPPER_SIZE = 12;
+ const crcTable = new Int32Array(256);
+
+ for (let i = 0; i < 256; i++) {
+ let c = i;
+
+ for (let h = 0; h < 8; h++) {
+ if (c & 1) {
+ c = 0xedb88320 ^ c >> 1 & 0x7fffffff;
+ } else {
+ c = c >> 1 & 0x7fffffff;
+ }
+ }
+
+ crcTable[i] = c;
+ }
+
+ function crc32(data, start, end) {
+ let crc = -1;
+
+ for (let i = start; i < end; i++) {
+ const a = (crc ^ data[i]) & 0xff;
+ const b = crcTable[a];
+ crc = crc >>> 8 ^ b;
+ }
+
+ return crc ^ -1;
+ }
+
+ function writePngChunk(type, body, data, offset) {
+ let p = offset;
+ const len = body.length;
+ data[p] = len >> 24 & 0xff;
+ data[p + 1] = len >> 16 & 0xff;
+ data[p + 2] = len >> 8 & 0xff;
+ data[p + 3] = len & 0xff;
+ p += 4;
+ data[p] = type.charCodeAt(0) & 0xff;
+ data[p + 1] = type.charCodeAt(1) & 0xff;
+ data[p + 2] = type.charCodeAt(2) & 0xff;
+ data[p + 3] = type.charCodeAt(3) & 0xff;
+ p += 4;
+ data.set(body, p);
+ p += body.length;
+ const crc = crc32(data, offset + 4, p);
+ data[p] = crc >> 24 & 0xff;
+ data[p + 1] = crc >> 16 & 0xff;
+ data[p + 2] = crc >> 8 & 0xff;
+ data[p + 3] = crc & 0xff;
+ }
+
+ function adler32(data, start, end) {
+ let a = 1;
+ let b = 0;
+
+ for (let i = start; i < end; ++i) {
+ a = (a + (data[i] & 0xff)) % 65521;
+ b = (b + a) % 65521;
+ }
+
+ return b << 16 | a;
+ }
+
+ function deflateSync(literals) {
+ if (!_is_node.isNodeJS) {
+ return deflateSyncUncompressed(literals);
+ }
+
+ try {
+ let input;
+
+ if (parseInt(process.versions.node) >= 8) {
+ input = literals;
+ } else {
+ input = Buffer.from(literals);
+ }
+
+ const output = require("zlib").deflateSync(input, {
+ level: 9
+ });
+
+ return output instanceof Uint8Array ? output : new Uint8Array(output);
+ } catch (e) {
+ (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e);
+ }
+
+ return deflateSyncUncompressed(literals);
+ }
+
+ function deflateSyncUncompressed(literals) {
+ let len = literals.length;
+ const maxBlockLength = 0xffff;
+ const deflateBlocks = Math.ceil(len / maxBlockLength);
+ const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
+ let pi = 0;
+ idat[pi++] = 0x78;
+ idat[pi++] = 0x9c;
+ let pos = 0;
+
+ while (len > maxBlockLength) {
+ idat[pi++] = 0x00;
+ idat[pi++] = 0xff;
+ idat[pi++] = 0xff;
+ idat[pi++] = 0x00;
+ idat[pi++] = 0x00;
+ idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
+ pi += maxBlockLength;
+ pos += maxBlockLength;
+ len -= maxBlockLength;
+ }
+
+ idat[pi++] = 0x01;
+ idat[pi++] = len & 0xff;
+ idat[pi++] = len >> 8 & 0xff;
+ idat[pi++] = ~len & 0xffff & 0xff;
+ idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
+ idat.set(literals.subarray(pos), pi);
+ pi += literals.length - pos;
+ const adler = adler32(literals, 0, literals.length);
+ idat[pi++] = adler >> 24 & 0xff;
+ idat[pi++] = adler >> 16 & 0xff;
+ idat[pi++] = adler >> 8 & 0xff;
+ idat[pi++] = adler & 0xff;
+ return idat;
+ }
+
+ function encode(imgData, kind, forceDataSchema, isMask) {
+ const width = imgData.width;
+ const height = imgData.height;
+ let bitDepth, colorType, lineSize;
+ const bytes = imgData.data;
+
+ switch (kind) {
+ case _util.ImageKind.GRAYSCALE_1BPP:
+ colorType = 0;
+ bitDepth = 1;
+ lineSize = width + 7 >> 3;
+ break;
+
+ case _util.ImageKind.RGB_24BPP:
+ colorType = 2;
+ bitDepth = 8;
+ lineSize = width * 3;
+ break;
+
+ case _util.ImageKind.RGBA_32BPP:
+ colorType = 6;
+ bitDepth = 8;
+ lineSize = width * 4;
+ break;
+
+ default:
+ throw new Error("invalid format");
+ }
+
+ const literals = new Uint8Array((1 + lineSize) * height);
+ let offsetLiterals = 0,
+ offsetBytes = 0;
+
+ for (let y = 0; y < height; ++y) {
+ literals[offsetLiterals++] = 0;
+ literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
+ offsetBytes += lineSize;
+ offsetLiterals += lineSize;
+ }
+
+ if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
+ offsetLiterals = 0;
+
+ for (let y = 0; y < height; y++) {
+ offsetLiterals++;
+
+ for (let i = 0; i < lineSize; i++) {
+ literals[offsetLiterals++] ^= 0xff;
+ }
+ }
+ }
+
+ const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
+ const idat = deflateSync(literals);
+ const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
+ const data = new Uint8Array(pngLength);
+ let offset = 0;
+ data.set(PNG_HEADER, offset);
+ offset += PNG_HEADER.length;
+ writePngChunk("IHDR", ihdr, data, offset);
+ offset += CHUNK_WRAPPER_SIZE + ihdr.length;
+ writePngChunk("IDATA", idat, data, offset);
+ offset += CHUNK_WRAPPER_SIZE + idat.length;
+ writePngChunk("IEND", new Uint8Array(0), data, offset);
+ return (0, _util.createObjectURL)(data, "image/png", forceDataSchema);
+ }
+
+ return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
+ const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
+ return encode(imgData, kind, forceDataSchema, isMask);
+ };
+ }();
+
+ class SVGExtraState {
+ constructor() {
+ this.fontSizeScale = 1;
+ this.fontWeight = SVG_DEFAULTS.fontWeight;
+ this.fontSize = 0;
+ this.textMatrix = _util.IDENTITY_MATRIX;
+ this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
+ this.leading = 0;
+ this.textRenderingMode = _util.TextRenderingMode.FILL;
+ this.textMatrixScale = 1;
+ this.x = 0;
+ this.y = 0;
+ this.lineX = 0;
+ this.lineY = 0;
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.textHScale = 1;
+ this.textRise = 0;
+ this.fillColor = SVG_DEFAULTS.fillColor;
+ this.strokeColor = "#000000";
+ this.fillAlpha = 1;
+ this.strokeAlpha = 1;
+ this.lineWidth = 1;
+ this.lineJoin = "";
+ this.lineCap = "";
+ this.miterLimit = 0;
+ this.dashArray = [];
+ this.dashPhase = 0;
+ this.dependencies = [];
+ this.activeClipUrl = null;
+ this.clipGroup = null;
+ this.maskId = "";
+ }
+
+ clone() {
+ return Object.create(this);
+ }
+
+ setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ }
+
+ function opListToTree(opList) {
+ let opTree = [];
+ const tmp = [];
+
+ for (const opListElement of opList) {
+ if (opListElement.fn === "save") {
+ opTree.push({
+ fnId: 92,
+ fn: "group",
+ items: []
+ });
+ tmp.push(opTree);
+ opTree = opTree[opTree.length - 1].items;
+ continue;
+ }
+
+ if (opListElement.fn === "restore") {
+ opTree = tmp.pop();
+ } else {
+ opTree.push(opListElement);
+ }
+ }
+
+ return opTree;
+ }
+
+ function pf(value) {
+ if (Number.isInteger(value)) {
+ return value.toString();
+ }
+
+ const s = value.toFixed(10);
+ let i = s.length - 1;
+
+ if (s[i] !== "0") {
+ return s;
+ }
+
+ do {
+ i--;
+ } while (s[i] === "0");
+
+ return s.substring(0, s[i] === "." ? i : i + 1);
+ }
+
+ function pm(m) {
+ if (m[4] === 0 && m[5] === 0) {
+ if (m[1] === 0 && m[2] === 0) {
+ if (m[0] === 1 && m[3] === 1) {
+ return "";
+ }
+
+ return `scale(${pf(m[0])} ${pf(m[3])})`;
+ }
+
+ if (m[0] === m[3] && m[1] === -m[2]) {
+ const a = Math.acos(m[0]) * 180 / Math.PI;
+ return `rotate(${pf(a)})`;
+ }
+ } else {
+ if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
+ return `translate(${pf(m[4])} ${pf(m[5])})`;
+ }
+ }
+
+ return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`;
+ }
+
+ let clipCount = 0;
+ let maskCount = 0;
+ let shadingCount = 0;
+ exports.SVGGraphics = SVGGraphics = class SVGGraphics {
+ constructor(commonObjs, objs, forceDataSchema = false) {
+ this.svgFactory = new _display_utils.DOMSVGFactory();
+ this.current = new SVGExtraState();
+ this.transformMatrix = _util.IDENTITY_MATRIX;
+ this.transformStack = [];
+ this.extraStack = [];
+ this.commonObjs = commonObjs;
+ this.objs = objs;
+ this.pendingClip = null;
+ this.pendingEOFill = false;
+ this.embedFonts = false;
+ this.embeddedFonts = Object.create(null);
+ this.cssStyle = null;
+ this.forceDataSchema = !!forceDataSchema;
+ this._operatorIdMapping = [];
+
+ for (const op in _util.OPS) {
+ this._operatorIdMapping[_util.OPS[op]] = op;
+ }
+ }
+
+ save() {
+ this.transformStack.push(this.transformMatrix);
+ const old = this.current;
+ this.extraStack.push(old);
+ this.current = old.clone();
+ }
+
+ restore() {
+ this.transformMatrix = this.transformStack.pop();
+ this.current = this.extraStack.pop();
+ this.pendingClip = null;
+ this.tgrp = null;
+ }
+
+ group(items) {
+ this.save();
+ this.executeOpTree(items);
+ this.restore();
+ }
+
+ loadDependencies(operatorList) {
+ const fnArray = operatorList.fnArray;
+ const argsArray = operatorList.argsArray;
+
+ for (let i = 0, ii = fnArray.length; i < ii; i++) {
+ if (fnArray[i] !== _util.OPS.dependency) {
+ continue;
+ }
+
+ for (const obj of argsArray[i]) {
+ const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs;
+ const promise = new Promise(resolve => {
+ objsPool.get(obj, resolve);
+ });
+ this.current.dependencies.push(promise);
+ }
+ }
+
+ return Promise.all(this.current.dependencies);
+ }
+
+ transform(a, b, c, d, e, f) {
+ const transformMatrix = [a, b, c, d, e, f];
+ this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
+ this.tgrp = null;
+ }
+
+ getSVG(operatorList, viewport) {
+ this.viewport = viewport;
+
+ const svgElement = this._initialize(viewport);
+
+ return this.loadDependencies(operatorList).then(() => {
+ this.transformMatrix = _util.IDENTITY_MATRIX;
+ this.executeOpTree(this.convertOpList(operatorList));
+ return svgElement;
+ });
+ }
+
+ convertOpList(operatorList) {
+ const operatorIdMapping = this._operatorIdMapping;
+ const argsArray = operatorList.argsArray;
+ const fnArray = operatorList.fnArray;
+ const opList = [];
+
+ for (let i = 0, ii = fnArray.length; i < ii; i++) {
+ const fnId = fnArray[i];
+ opList.push({
+ fnId,
+ fn: operatorIdMapping[fnId],
+ args: argsArray[i]
+ });
+ }
+
+ return opListToTree(opList);
+ }
+
+ executeOpTree(opTree) {
+ for (const opTreeElement of opTree) {
+ const fn = opTreeElement.fn;
+ const fnId = opTreeElement.fnId;
+ const args = opTreeElement.args;
+
+ switch (fnId | 0) {
+ case _util.OPS.beginText:
+ this.beginText();
+ break;
+
+ case _util.OPS.dependency:
+ break;
+
+ case _util.OPS.setLeading:
+ this.setLeading(args);
+ break;
+
+ case _util.OPS.setLeadingMoveText:
+ this.setLeadingMoveText(args[0], args[1]);
+ break;
+
+ case _util.OPS.setFont:
+ this.setFont(args);
+ break;
+
+ case _util.OPS.showText:
+ this.showText(args[0]);
+ break;
+
+ case _util.OPS.showSpacedText:
+ this.showText(args[0]);
+ break;
+
+ case _util.OPS.endText:
+ this.endText();
+ break;
+
+ case _util.OPS.moveText:
+ this.moveText(args[0], args[1]);
+ break;
+
+ case _util.OPS.setCharSpacing:
+ this.setCharSpacing(args[0]);
+ break;
+
+ case _util.OPS.setWordSpacing:
+ this.setWordSpacing(args[0]);
+ break;
+
+ case _util.OPS.setHScale:
+ this.setHScale(args[0]);
+ break;
+
+ case _util.OPS.setTextMatrix:
+ this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
+ break;
+
+ case _util.OPS.setTextRise:
+ this.setTextRise(args[0]);
+ break;
+
+ case _util.OPS.setTextRenderingMode:
+ this.setTextRenderingMode(args[0]);
+ break;
+
+ case _util.OPS.setLineWidth:
+ this.setLineWidth(args[0]);
+ break;
+
+ case _util.OPS.setLineJoin:
+ this.setLineJoin(args[0]);
+ break;
+
+ case _util.OPS.setLineCap:
+ this.setLineCap(args[0]);
+ break;
+
+ case _util.OPS.setMiterLimit:
+ this.setMiterLimit(args[0]);
+ break;
+
+ case _util.OPS.setFillRGBColor:
+ this.setFillRGBColor(args[0], args[1], args[2]);
+ break;
+
+ case _util.OPS.setStrokeRGBColor:
+ this.setStrokeRGBColor(args[0], args[1], args[2]);
+ break;
+
+ case _util.OPS.setStrokeColorN:
+ this.setStrokeColorN(args);
+ break;
+
+ case _util.OPS.setFillColorN:
+ this.setFillColorN(args);
+ break;
+
+ case _util.OPS.shadingFill:
+ this.shadingFill(args[0]);
+ break;
+
+ case _util.OPS.setDash:
+ this.setDash(args[0], args[1]);
+ break;
+
+ case _util.OPS.setRenderingIntent:
+ this.setRenderingIntent(args[0]);
+ break;
+
+ case _util.OPS.setFlatness:
+ this.setFlatness(args[0]);
+ break;
+
+ case _util.OPS.setGState:
+ this.setGState(args[0]);
+ break;
+
+ case _util.OPS.fill:
+ this.fill();
+ break;
+
+ case _util.OPS.eoFill:
+ this.eoFill();
+ break;
+
+ case _util.OPS.stroke:
+ this.stroke();
+ break;
+
+ case _util.OPS.fillStroke:
+ this.fillStroke();
+ break;
+
+ case _util.OPS.eoFillStroke:
+ this.eoFillStroke();
+ break;
+
+ case _util.OPS.clip:
+ this.clip("nonzero");
+ break;
+
+ case _util.OPS.eoClip:
+ this.clip("evenodd");
+ break;
+
+ case _util.OPS.paintSolidColorImageMask:
+ this.paintSolidColorImageMask();
+ break;
+
+ case _util.OPS.paintImageXObject:
+ this.paintImageXObject(args[0]);
+ break;
+
+ case _util.OPS.paintInlineImageXObject:
+ this.paintInlineImageXObject(args[0]);
+ break;
+
+ case _util.OPS.paintImageMaskXObject:
+ this.paintImageMaskXObject(args[0]);
+ break;
+
+ case _util.OPS.paintFormXObjectBegin:
+ this.paintFormXObjectBegin(args[0], args[1]);
+ break;
+
+ case _util.OPS.paintFormXObjectEnd:
+ this.paintFormXObjectEnd();
+ break;
+
+ case _util.OPS.closePath:
+ this.closePath();
+ break;
+
+ case _util.OPS.closeStroke:
+ this.closeStroke();
+ break;
+
+ case _util.OPS.closeFillStroke:
+ this.closeFillStroke();
+ break;
+
+ case _util.OPS.closeEOFillStroke:
+ this.closeEOFillStroke();
+ break;
+
+ case _util.OPS.nextLine:
+ this.nextLine();
+ break;
+
+ case _util.OPS.transform:
+ this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
+ break;
+
+ case _util.OPS.constructPath:
+ this.constructPath(args[0], args[1]);
+ break;
+
+ case _util.OPS.endPath:
+ this.endPath();
+ break;
+
+ case 92:
+ this.group(opTreeElement.items);
+ break;
+
+ default:
+ (0, _util.warn)(`Unimplemented operator ${fn}`);
+ break;
+ }
+ }
+ }
+
+ setWordSpacing(wordSpacing) {
+ this.current.wordSpacing = wordSpacing;
+ }
+
+ setCharSpacing(charSpacing) {
+ this.current.charSpacing = charSpacing;
+ }
+
+ nextLine() {
+ this.moveText(0, this.current.leading);
+ }
+
+ setTextMatrix(a, b, c, d, e, f) {
+ const current = this.current;
+ current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
+ current.textMatrixScale = Math.sqrt(a * a + b * b);
+ current.x = current.lineX = 0;
+ current.y = current.lineY = 0;
+ current.xcoords = [];
+ current.ycoords = [];
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ current.txtElement = this.svgFactory.createElement("svg:text");
+ current.txtElement.appendChild(current.tspan);
+ }
+
+ beginText() {
+ const current = this.current;
+ current.x = current.lineX = 0;
+ current.y = current.lineY = 0;
+ current.textMatrix = _util.IDENTITY_MATRIX;
+ current.lineMatrix = _util.IDENTITY_MATRIX;
+ current.textMatrixScale = 1;
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.txtElement = this.svgFactory.createElement("svg:text");
+ current.txtgrp = this.svgFactory.createElement("svg:g");
+ current.xcoords = [];
+ current.ycoords = [];
+ }
+
+ moveText(x, y) {
+ const current = this.current;
+ current.x = current.lineX += x;
+ current.y = current.lineY += y;
+ current.xcoords = [];
+ current.ycoords = [];
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ }
+
+ showText(glyphs) {
+ const current = this.current;
+ const font = current.font;
+ const fontSize = current.fontSize;
+
+ if (fontSize === 0) {
+ return;
+ }
+
+ const fontSizeScale = current.fontSizeScale;
+ const charSpacing = current.charSpacing;
+ const wordSpacing = current.wordSpacing;
+ const fontDirection = current.fontDirection;
+ const textHScale = current.textHScale * fontDirection;
+ const vertical = font.vertical;
+ const spacingDir = vertical ? 1 : -1;
+ const defaultVMetrics = font.defaultVMetrics;
+ const widthAdvanceScale = fontSize * current.fontMatrix[0];
+ let x = 0;
+
+ for (const glyph of glyphs) {
+ if (glyph === null) {
+ x += fontDirection * wordSpacing;
+ continue;
+ } else if ((0, _util.isNum)(glyph)) {
+ x += spacingDir * glyph * fontSize / 1000;
+ continue;
+ }
+
+ const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ const character = glyph.fontChar;
+ let scaledX, scaledY;
+ let width = glyph.width;
+
+ if (vertical) {
+ let vx;
+ const vmetric = glyph.vmetric || defaultVMetrics;
+ vx = glyph.vmetric ? vmetric[1] : width * 0.5;
+ vx = -vx * 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 (glyph.isInFont || font.missingFile) {
+ current.xcoords.push(current.x + scaledX);
+
+ if (vertical) {
+ current.ycoords.push(-current.y + scaledY);
+ }
+
+ current.tspan.textContent += character;
+ } else {}
+
+ let charWidth;
+
+ if (vertical) {
+ charWidth = width * widthAdvanceScale - spacing * fontDirection;
+ } else {
+ charWidth = width * widthAdvanceScale + spacing * fontDirection;
+ }
+
+ x += charWidth;
+ }
+
+ current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
+
+ if (vertical) {
+ current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
+ } else {
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ }
+
+ if (vertical) {
+ current.y -= x;
+ } else {
+ current.x += x * textHScale;
+ }
+
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
+
+ if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
+ current.tspan.setAttributeNS(null, "font-style", current.fontStyle);
+ }
+
+ if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
+ current.tspan.setAttributeNS(null, "font-weight", current.fontWeight);
+ }
+
+ const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ if (current.fillColor !== SVG_DEFAULTS.fillColor) {
+ current.tspan.setAttributeNS(null, "fill", current.fillColor);
+ }
+
+ if (current.fillAlpha < 1) {
+ current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha);
+ }
+ } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
+ current.tspan.setAttributeNS(null, "fill", "transparent");
+ } else {
+ current.tspan.setAttributeNS(null, "fill", "none");
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ const lineWidthScale = 1 / (current.textMatrixScale || 1);
+
+ this._setStrokeAttributes(current.tspan, lineWidthScale);
+ }
+
+ let textMatrix = current.textMatrix;
+
+ if (current.textRise !== 0) {
+ textMatrix = textMatrix.slice();
+ textMatrix[5] += current.textRise;
+ }
+
+ current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`);
+ current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve");
+ current.txtElement.appendChild(current.tspan);
+ current.txtgrp.appendChild(current.txtElement);
+
+ this._ensureTransformGroup().appendChild(current.txtElement);
+ }
+
+ setLeadingMoveText(x, y) {
+ this.setLeading(-y);
+ this.moveText(x, y);
+ }
+
+ addFontStyle(fontObj) {
+ if (!fontObj.data) {
+ throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
+ }
+
+ if (!this.cssStyle) {
+ this.cssStyle = this.svgFactory.createElement("svg:style");
+ this.cssStyle.setAttributeNS(null, "type", "text/css");
+ this.defs.appendChild(this.cssStyle);
+ }
+
+ const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);
+ this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`;
+ }
+
+ setFont(details) {
+ const current = this.current;
+ const fontObj = this.commonObjs.get(details[0]);
+ let size = details[1];
+ current.font = fontObj;
+
+ if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
+ this.addFontStyle(fontObj);
+ this.embeddedFonts[fontObj.loadedName] = fontObj;
+ }
+
+ current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
+ let bold = "normal";
+
+ if (fontObj.black) {
+ bold = "900";
+ } else if (fontObj.bold) {
+ bold = "bold";
+ }
+
+ const italic = fontObj.italic ? "italic" : "normal";
+
+ if (size < 0) {
+ size = -size;
+ current.fontDirection = -1;
+ } else {
+ current.fontDirection = 1;
+ }
+
+ current.fontSize = size;
+ current.fontFamily = fontObj.loadedName;
+ current.fontWeight = bold;
+ current.fontStyle = italic;
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ current.xcoords = [];
+ current.ycoords = [];
+ }
+
+ endText() {
+ const current = this.current;
+
+ if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) {
+ current.element = current.txtElement;
+ this.clip("nonzero");
+ this.endPath();
+ }
+ }
+
+ setLineWidth(width) {
+ if (width > 0) {
+ this.current.lineWidth = width;
+ }
+ }
+
+ setLineCap(style) {
+ this.current.lineCap = LINE_CAP_STYLES[style];
+ }
+
+ setLineJoin(style) {
+ this.current.lineJoin = LINE_JOIN_STYLES[style];
+ }
+
+ setMiterLimit(limit) {
+ this.current.miterLimit = limit;
+ }
+
+ setStrokeAlpha(strokeAlpha) {
+ this.current.strokeAlpha = strokeAlpha;
+ }
+
+ setStrokeRGBColor(r, g, b) {
+ this.current.strokeColor = _util.Util.makeCssRgb(r, g, b);
+ }
+
+ setFillAlpha(fillAlpha) {
+ this.current.fillAlpha = fillAlpha;
+ }
+
+ setFillRGBColor(r, g, b) {
+ this.current.fillColor = _util.Util.makeCssRgb(r, g, b);
+ this.current.tspan = this.svgFactory.createElement("svg:tspan");
+ this.current.xcoords = [];
+ this.current.ycoords = [];
+ }
+
+ setStrokeColorN(args) {
+ this.current.strokeColor = this._makeColorN_Pattern(args);
+ }
+
+ setFillColorN(args) {
+ this.current.fillColor = this._makeColorN_Pattern(args);
+ }
+
+ shadingFill(args) {
+ const width = this.viewport.width;
+ const height = this.viewport.height;
+
+ const inv = _util.Util.inverseTransform(this.transformMatrix);
+
+ const bl = _util.Util.applyTransform([0, 0], inv);
+
+ const br = _util.Util.applyTransform([0, height], inv);
+
+ const ul = _util.Util.applyTransform([width, 0], inv);
+
+ const ur = _util.Util.applyTransform([width, height], inv);
+
+ const x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+ const y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+ const x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+ const y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+ const rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", x0);
+ rect.setAttributeNS(null, "y", y0);
+ rect.setAttributeNS(null, "width", x1 - x0);
+ rect.setAttributeNS(null, "height", y1 - y0);
+ rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));
+
+ if (this.current.fillAlpha < 1) {
+ rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
+ }
+
+ this._ensureTransformGroup().appendChild(rect);
+ }
+
+ _makeColorN_Pattern(args) {
+ if (args[0] === "TilingPattern") {
+ return this._makeTilingPattern(args);
+ }
+
+ return this._makeShadingPattern(args);
+ }
+
+ _makeTilingPattern(args) {
+ const color = args[1];
+ const operatorList = args[2];
+ const matrix = args[3] || _util.IDENTITY_MATRIX;
+ const [x0, y0, x1, y1] = args[4];
+ const xstep = args[5];
+ const ystep = args[6];
+ const paintType = args[7];
+ const tilingId = `shading${shadingCount++}`;
+
+ const [tx0, ty0] = _util.Util.applyTransform([x0, y0], matrix);
+
+ const [tx1, ty1] = _util.Util.applyTransform([x1, y1], matrix);
+
+ const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix);
+
+ const txstep = xstep * xscale;
+ const tystep = ystep * yscale;
+ const tiling = this.svgFactory.createElement("svg:pattern");
+ tiling.setAttributeNS(null, "id", tilingId);
+ tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse");
+ tiling.setAttributeNS(null, "width", txstep);
+ tiling.setAttributeNS(null, "height", tystep);
+ tiling.setAttributeNS(null, "x", `${tx0}`);
+ tiling.setAttributeNS(null, "y", `${ty0}`);
+ const svg = this.svg;
+ const transformMatrix = this.transformMatrix;
+ const fillColor = this.current.fillColor;
+ const strokeColor = this.current.strokeColor;
+ const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);
+ this.svg = bbox;
+ this.transformMatrix = matrix;
+
+ if (paintType === 2) {
+ const cssColor = _util.Util.makeCssRgb(...color);
+
+ this.current.fillColor = cssColor;
+ this.current.strokeColor = cssColor;
+ }
+
+ this.executeOpTree(this.convertOpList(operatorList));
+ this.svg = svg;
+ this.transformMatrix = transformMatrix;
+ this.current.fillColor = fillColor;
+ this.current.strokeColor = strokeColor;
+ tiling.appendChild(bbox.childNodes[0]);
+ this.defs.appendChild(tiling);
+ return `url(#${tilingId})`;
+ }
+
+ _makeShadingPattern(args) {
+ switch (args[0]) {
+ case "RadialAxial":
+ const shadingId = `shading${shadingCount++}`;
+ const colorStops = args[3];
+ let gradient;
+
+ switch (args[1]) {
+ case "axial":
+ const point0 = args[4];
+ const point1 = args[5];
+ gradient = this.svgFactory.createElement("svg:linearGradient");
+ gradient.setAttributeNS(null, "id", shadingId);
+ gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
+ gradient.setAttributeNS(null, "x1", point0[0]);
+ gradient.setAttributeNS(null, "y1", point0[1]);
+ gradient.setAttributeNS(null, "x2", point1[0]);
+ gradient.setAttributeNS(null, "y2", point1[1]);
+ break;
+
+ case "radial":
+ const focalPoint = args[4];
+ const circlePoint = args[5];
+ const focalRadius = args[6];
+ const circleRadius = args[7];
+ gradient = this.svgFactory.createElement("svg:radialGradient");
+ gradient.setAttributeNS(null, "id", shadingId);
+ gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
+ gradient.setAttributeNS(null, "cx", circlePoint[0]);
+ gradient.setAttributeNS(null, "cy", circlePoint[1]);
+ gradient.setAttributeNS(null, "r", circleRadius);
+ gradient.setAttributeNS(null, "fx", focalPoint[0]);
+ gradient.setAttributeNS(null, "fy", focalPoint[1]);
+ gradient.setAttributeNS(null, "fr", focalRadius);
+ break;
+
+ default:
+ throw new Error(`Unknown RadialAxial type: ${args[1]}`);
+ }
+
+ for (const colorStop of colorStops) {
+ const stop = this.svgFactory.createElement("svg:stop");
+ stop.setAttributeNS(null, "offset", colorStop[0]);
+ stop.setAttributeNS(null, "stop-color", colorStop[1]);
+ gradient.appendChild(stop);
+ }
+
+ this.defs.appendChild(gradient);
+ return `url(#${shadingId})`;
+
+ case "Mesh":
+ (0, _util.warn)("Unimplemented pattern Mesh");
+ return null;
+
+ case "Dummy":
+ return "hotpink";
+
+ default:
+ throw new Error(`Unknown IR type: ${args[0]}`);
+ }
+ }
+
+ setDash(dashArray, dashPhase) {
+ this.current.dashArray = dashArray;
+ this.current.dashPhase = dashPhase;
+ }
+
+ constructPath(ops, args) {
+ const current = this.current;
+ let x = current.x,
+ y = current.y;
+ let d = [];
+ let j = 0;
+
+ for (const op of ops) {
+ switch (op | 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;
+ d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z");
+ break;
+
+ case _util.OPS.moveTo:
+ x = args[j++];
+ y = args[j++];
+ d.push("M", pf(x), pf(y));
+ break;
+
+ case _util.OPS.lineTo:
+ x = args[j++];
+ y = args[j++];
+ d.push("L", pf(x), pf(y));
+ break;
+
+ case _util.OPS.curveTo:
+ x = args[j + 4];
+ y = args[j + 5];
+ d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
+ j += 6;
+ break;
+
+ case _util.OPS.curveTo2:
+ d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
+ x = args[j + 2];
+ y = args[j + 3];
+ j += 4;
+ break;
+
+ case _util.OPS.curveTo3:
+ x = args[j + 2];
+ y = args[j + 3];
+ d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
+ j += 4;
+ break;
+
+ case _util.OPS.closePath:
+ d.push("Z");
+ break;
+ }
+ }
+
+ d = d.join(" ");
+
+ if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {
+ d = current.path.getAttributeNS(null, "d") + d;
+ } else {
+ current.path = this.svgFactory.createElement("svg:path");
+
+ this._ensureTransformGroup().appendChild(current.path);
+ }
+
+ current.path.setAttributeNS(null, "d", d);
+ current.path.setAttributeNS(null, "fill", "none");
+ current.element = current.path;
+ current.setCurrentPoint(x, y);
+ }
+
+ endPath() {
+ const current = this.current;
+ current.path = null;
+
+ if (!this.pendingClip) {
+ return;
+ }
+
+ if (!current.element) {
+ this.pendingClip = null;
+ return;
+ }
+
+ const clipId = `clippath${clipCount++}`;
+ const clipPath = this.svgFactory.createElement("svg:clipPath");
+ clipPath.setAttributeNS(null, "id", clipId);
+ clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix));
+ const clipElement = current.element.cloneNode(true);
+
+ if (this.pendingClip === "evenodd") {
+ clipElement.setAttributeNS(null, "clip-rule", "evenodd");
+ } else {
+ clipElement.setAttributeNS(null, "clip-rule", "nonzero");
+ }
+
+ this.pendingClip = null;
+ clipPath.appendChild(clipElement);
+ this.defs.appendChild(clipPath);
+
+ if (current.activeClipUrl) {
+ current.clipGroup = null;
+ this.extraStack.forEach(function (prev) {
+ prev.clipGroup = null;
+ });
+ clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl);
+ }
+
+ current.activeClipUrl = `url(#${clipId})`;
+ this.tgrp = null;
+ }
+
+ clip(type) {
+ this.pendingClip = type;
+ }
+
+ closePath() {
+ const current = this.current;
+
+ if (current.path) {
+ const d = `${current.path.getAttributeNS(null, "d")}Z`;
+ current.path.setAttributeNS(null, "d", d);
+ }
+ }
+
+ setLeading(leading) {
+ this.current.leading = -leading;
+ }
+
+ setTextRise(textRise) {
+ this.current.textRise = textRise;
+ }
+
+ setTextRenderingMode(textRenderingMode) {
+ this.current.textRenderingMode = textRenderingMode;
+ }
+
+ setHScale(scale) {
+ this.current.textHScale = scale / 100;
+ }
+
+ 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);
+ break;
+
+ case "CA":
+ this.setStrokeAlpha(value);
+ break;
+
+ case "ca":
+ this.setFillAlpha(value);
+ break;
+
+ default:
+ (0, _util.warn)(`Unimplemented graphic state operator ${key}`);
+ break;
+ }
+ }
+ }
+
+ fill() {
+ const current = this.current;
+
+ if (current.element) {
+ current.element.setAttributeNS(null, "fill", current.fillColor);
+ current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha);
+ this.endPath();
+ }
+ }
+
+ stroke() {
+ const current = this.current;
+
+ if (current.element) {
+ this._setStrokeAttributes(current.element);
+
+ current.element.setAttributeNS(null, "fill", "none");
+ this.endPath();
+ }
+ }
+
+ _setStrokeAttributes(element, lineWidthScale = 1) {
+ const current = this.current;
+ let dashArray = current.dashArray;
+
+ if (lineWidthScale !== 1 && dashArray.length > 0) {
+ dashArray = dashArray.map(function (value) {
+ return lineWidthScale * value;
+ });
+ }
+
+ element.setAttributeNS(null, "stroke", current.strokeColor);
+ element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha);
+ element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit));
+ element.setAttributeNS(null, "stroke-linecap", current.lineCap);
+ element.setAttributeNS(null, "stroke-linejoin", current.lineJoin);
+ element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px");
+ element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" "));
+ element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px");
+ }
+
+ eoFill() {
+ if (this.current.element) {
+ this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
+ }
+
+ this.fill();
+ }
+
+ fillStroke() {
+ this.stroke();
+ this.fill();
+ }
+
+ eoFillStroke() {
+ if (this.current.element) {
+ this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
+ }
+
+ this.fillStroke();
+ }
+
+ closeStroke() {
+ this.closePath();
+ this.stroke();
+ }
+
+ closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ }
+
+ closeEOFillStroke() {
+ this.closePath();
+ this.eoFillStroke();
+ }
+
+ paintSolidColorImageMask() {
+ const rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", "0");
+ rect.setAttributeNS(null, "y", "0");
+ rect.setAttributeNS(null, "width", "1px");
+ rect.setAttributeNS(null, "height", "1px");
+ rect.setAttributeNS(null, "fill", this.current.fillColor);
+
+ this._ensureTransformGroup().appendChild(rect);
+ }
+
+ paintImageXObject(objId) {
+ const imgData = this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`);
+ return;
+ }
+
+ this.paintInlineImageXObject(imgData);
+ }
+
+ paintInlineImageXObject(imgData, mask) {
+ const width = imgData.width;
+ const height = imgData.height;
+ const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
+ const cliprect = this.svgFactory.createElement("svg:rect");
+ cliprect.setAttributeNS(null, "x", "0");
+ cliprect.setAttributeNS(null, "y", "0");
+ cliprect.setAttributeNS(null, "width", pf(width));
+ cliprect.setAttributeNS(null, "height", pf(height));
+ this.current.element = cliprect;
+ this.clip("nonzero");
+ const imgEl = this.svgFactory.createElement("svg:image");
+ imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc);
+ imgEl.setAttributeNS(null, "x", "0");
+ imgEl.setAttributeNS(null, "y", pf(-height));
+ imgEl.setAttributeNS(null, "width", pf(width) + "px");
+ imgEl.setAttributeNS(null, "height", pf(height) + "px");
+ imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`);
+
+ if (mask) {
+ mask.appendChild(imgEl);
+ } else {
+ this._ensureTransformGroup().appendChild(imgEl);
+ }
+ }
+
+ paintImageMaskXObject(imgData) {
+ const current = this.current;
+ const width = imgData.width;
+ const height = imgData.height;
+ const fillColor = current.fillColor;
+ current.maskId = `mask${maskCount++}`;
+ const mask = this.svgFactory.createElement("svg:mask");
+ mask.setAttributeNS(null, "id", current.maskId);
+ const rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", "0");
+ rect.setAttributeNS(null, "y", "0");
+ rect.setAttributeNS(null, "width", pf(width));
+ rect.setAttributeNS(null, "height", pf(height));
+ rect.setAttributeNS(null, "fill", fillColor);
+ rect.setAttributeNS(null, "mask", `url(#${current.maskId})`);
+ this.defs.appendChild(mask);
+
+ this._ensureTransformGroup().appendChild(rect);
+
+ this.paintInlineImageXObject(imgData, mask);
+ }
+
+ paintFormXObjectBegin(matrix, bbox) {
+ if (Array.isArray(matrix) && matrix.length === 6) {
+ this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
+ }
+
+ if (bbox) {
+ const width = bbox[2] - bbox[0];
+ const height = bbox[3] - bbox[1];
+ const cliprect = this.svgFactory.createElement("svg:rect");
+ cliprect.setAttributeNS(null, "x", bbox[0]);
+ cliprect.setAttributeNS(null, "y", bbox[1]);
+ cliprect.setAttributeNS(null, "width", pf(width));
+ cliprect.setAttributeNS(null, "height", pf(height));
+ this.current.element = cliprect;
+ this.clip("nonzero");
+ this.endPath();
+ }
+ }
+
+ paintFormXObjectEnd() {}
+
+ _initialize(viewport) {
+ const svg = this.svgFactory.create(viewport.width, viewport.height);
+ const definitions = this.svgFactory.createElement("svg:defs");
+ svg.appendChild(definitions);
+ this.defs = definitions;
+ const rootGroup = this.svgFactory.createElement("svg:g");
+ rootGroup.setAttributeNS(null, "transform", pm(viewport.transform));
+ svg.appendChild(rootGroup);
+ this.svg = rootGroup;
+ return svg;
+ }
+
+ _ensureClipGroup() {
+ if (!this.current.clipGroup) {
+ const clipGroup = this.svgFactory.createElement("svg:g");
+ clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
+ this.svg.appendChild(clipGroup);
+ this.current.clipGroup = clipGroup;
+ }
+
+ return this.current.clipGroup;
+ }
+
+ _ensureTransformGroup() {
+ if (!this.tgrp) {
+ this.tgrp = this.svgFactory.createElement("svg:g");
+ this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
+
+ if (this.current.activeClipUrl) {
+ this._ensureClipGroup().appendChild(this.tgrp);
+ } else {
+ this.svg.appendChild(this.tgrp);
+ }
+ }
+
+ return this.tgrp;
+ }
+
+ };
+}
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFNodeStream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _network_utils = __w_pdfjs_require__(20);
+
+;
+
+const fs = require("fs");
+
+const http = require("http");
+
+const https = require("https");
+
+const url = require("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 ? this._fullRequestReader._loaded : 0;
+ }
+
+ getFullReader() {
+ (0, _util.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) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ const readers = this._rangeRequestReaders.slice(0);
+
+ readers.forEach(function (reader) {
+ reader.cancel(reason);
+ });
+ }
+
+}
+
+exports.PDFNodeStream = PDFNodeStream;
+
+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 = (0, _util.createPromiseCapability)();
+ this._headersCapability = (0, _util.createPromiseCapability)();
+ }
+
+ 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 = (0, _util.createPromiseCapability)();
+ return this.read();
+ }
+
+ this._loaded += chunk.length;
+
+ if (this.onProgress) {
+ 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 _util.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 = (0, _util.createPromiseCapability)();
+ 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 = (0, _util.createPromiseCapability)();
+ return this.read();
+ }
+
+ this._loaded += chunk.length;
+
+ if (this.onProgress) {
+ 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 _util.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.validateRangeRequestCapabilities)({
+ getResponseHeader,
+ isHttp: stream.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ });
+ this._isRangeSupported = allowRangeRequests;
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = (0, _network_utils.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 (typeof value === "undefined") {
+ continue;
+ }
+
+ this._httpHeaders[property] = value;
+ }
+
+ this._httpHeaders.Range = `bytes=${start}-${end - 1}`;
+
+ const handleResponse = response => {
+ if (response.statusCode === 404) {
+ const error = new _util.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 _util.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
+ }));
+ }
+
+}
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.createResponseStatusError = createResponseStatusError;
+exports.extractFilenameFromHeader = extractFilenameFromHeader;
+exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
+exports.validateResponseStatus = validateResponseStatus;
+
+var _util = __w_pdfjs_require__(2);
+
+var _content_disposition = __w_pdfjs_require__(21);
+
+function validateRangeRequestCapabilities({
+ getResponseHeader,
+ isHttp,
+ rangeChunkSize,
+ disableRange
+}) {
+ (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero");
+ 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 = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);
+
+ if (filename.includes("%")) {
+ try {
+ filename = decodeURIComponent(filename);
+ } catch (ex) {}
+ }
+
+ if (/\.pdf$/i.test(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;
+}
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
+
+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 bytes = Array.from(value, function (ch) {
+ return ch.charCodeAt(0) & 0xff;
+ });
+ value = decoder.decode(new Uint8Array(bytes));
+ needsEncodingFixup = false;
+ } catch (e) {
+ if (/^utf-?8$/i.test(encoding)) {
+ try {
+ value = decodeURIComponent(escape(value));
+ needsEncodingFixup = false;
+ } catch (err) {}
+ }
+ }
+ }
+
+ 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].replace(/\\(.)/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.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
+ if (encoding === "q" || encoding === "Q") {
+ text = text.replace(/_/g, " ");
+ text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {
+ return String.fromCharCode(parseInt(hex, 16));
+ });
+ return textdecode(charset, text);
+ }
+
+ try {
+ text = atob(text);
+ } catch (e) {}
+
+ return textdecode(charset, text);
+ });
+ }
+
+ return "";
+}
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFNetworkStream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _network_utils = __w_pdfjs_require__(20);
+
+;
+const OK_RESPONSE = 200;
+const PARTIAL_CONTENT_RESPONSE = 206;
+
+function getArrayBuffer(xhr) {
+ const data = xhr.response;
+
+ if (typeof data !== "string") {
+ return data;
+ }
+
+ const array = (0, _util.stringToBytes)(data);
+ return array.buffer;
+}
+
+class NetworkManager {
+ constructor(url, args) {
+ this.url = url;
+ args = args || {};
+ this.isHttp = /^https?:/i.test(url);
+ this.httpHeaders = this.isHttp && args.httpHeaders || {};
+ this.withCredentials = args.withCredentials || false;
+
+ this.getXhr = args.getXhr || function NetworkManager_getXhr() {
+ return new XMLHttpRequest();
+ };
+
+ 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 = this.getXhr();
+ 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 (typeof 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;
+ }
+
+ if (pendingRequest.onProgress) {
+ 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) {
+ if (pendingRequest.onError) {
+ 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) {
+ if (pendingRequest.onError) {
+ 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 if (pendingRequest.onError) {
+ pendingRequest.onError(xhr.status);
+ }
+ }
+
+ hasPendingRequests() {
+ for (const xhrId in this.pendingRequests) {
+ return true;
+ }
+
+ return false;
+ }
+
+ getRequestXhr(xhrId) {
+ return this.pendingRequests[xhrId].xhr;
+ }
+
+ isPendingRequest(xhrId) {
+ return xhrId in this.pendingRequests;
+ }
+
+ abortAllRequests() {
+ for (const xhrId in this.pendingRequests) {
+ this.abortRequest(xhrId | 0);
+ }
+ }
+
+ 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, _util.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) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ const readers = this._rangeRequestReaders.slice(0);
+
+ readers.forEach(function (reader) {
+ reader.cancel(reason);
+ });
+ }
+
+}
+
+exports.PDFNetworkStream = PDFNetworkStream;
+
+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 = (0, _util.createPromiseCapability)();
+ 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.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.extractFilenameFromHeader)(getResponseHeader);
+
+ if (this._isRangeSupported) {
+ this._manager.abortRequest(fullRequestXhrId);
+ }
+
+ this._headersReceivedCapability.resolve();
+ }
+
+ _onDone(args) {
+ if (args) {
+ if (this._requests.length > 0) {
+ const requestCapability = this._requests.shift();
+
+ requestCapability.resolve({
+ value: args.chunk,
+ done: false
+ });
+ } else {
+ this._cachedChunks.push(args.chunk);
+ }
+ }
+
+ this._done = true;
+
+ if (this._cachedChunks.length > 0) {
+ return;
+ }
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ });
+
+ this._requests = [];
+ }
+
+ _onError(status) {
+ const url = this._url;
+ const exception = (0, _network_utils.createResponseStatusError)(status, url);
+ this._storedError = exception;
+
+ this._headersReceivedCapability.reject(exception);
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.reject(exception);
+ });
+
+ this._requests = [];
+ this._cachedChunks = [];
+ }
+
+ _onProgress(data) {
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: data.loaded,
+ total: data.lengthComputable ? data.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 = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ this._headersReceivedCapability.reject(reason);
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ });
+
+ this._requests = [];
+
+ 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),
+ onProgress: this._onProgress.bind(this)
+ };
+ this._requestId = manager.requestRange(begin, end, args);
+ this._requests = [];
+ this._queuedChunk = null;
+ this._done = false;
+ this.onProgress = null;
+ this.onClosed = null;
+ }
+
+ _close() {
+ if (this.onClosed) {
+ 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;
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ });
+
+ this._requests = [];
+
+ this._close();
+ }
+
+ _onProgress(evt) {
+ if (!this.isStreamingSupported && this.onProgress) {
+ this.onProgress({
+ loaded: evt.loaded
+ });
+ }
+ }
+
+ get isStreamingSupported() {
+ return false;
+ }
+
+ async read() {
+ 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 = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ this._requests.forEach(function (requestCapability) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ });
+
+ this._requests = [];
+
+ if (this._manager.isPendingRequest(this._requestId)) {
+ this._manager.abortRequest(this._requestId);
+ }
+
+ this._close();
+ }
+
+}
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFFetchStream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _network_utils = __w_pdfjs_require__(20);
+
+;
+
+function createFetchOptions(headers, withCredentials, abortController) {
+ return {
+ method: "GET",
+ headers,
+ signal: abortController && 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 (typeof value === "undefined") {
+ continue;
+ }
+
+ headers.append(property, value);
+ }
+
+ return headers;
+}
+
+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 ? this._fullRequestReader._loaded : 0;
+ }
+
+ getFullReader() {
+ (0, _util.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) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ const readers = this._rangeRequestReaders.slice(0);
+
+ readers.forEach(function (reader) {
+ reader.cancel(reason);
+ });
+ }
+
+}
+
+exports.PDFFetchStream = PDFFetchStream;
+
+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 = (0, _util.createPromiseCapability)();
+ this._disableRange = source.disableRange || false;
+ this._rangeChunkSize = source.rangeChunkSize;
+
+ if (!this._rangeChunkSize && !this._disableRange) {
+ this._disableRange = true;
+ }
+
+ if (typeof AbortController !== "undefined") {
+ 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.validateResponseStatus)(response.status)) {
+ throw (0, _network_utils.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.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.extractFilenameFromHeader)(getResponseHeader);
+
+ if (!this._isStreamingSupported && this._isRangeSupported) {
+ this.cancel(new _util.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;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded,
+ total: this._contentLength
+ });
+ }
+
+ const buffer = new Uint8Array(value).buffer;
+ return {
+ value: buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ if (this._reader) {
+ this._reader.cancel(reason);
+ }
+
+ if (this._abortController) {
+ 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 = (0, _util.createPromiseCapability)();
+ this._isStreamingSupported = !source.disableStream;
+
+ if (typeof AbortController !== "undefined") {
+ 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.validateResponseStatus)(response.status)) {
+ throw (0, _network_utils.createResponseStatusError)(response.status, url);
+ }
+
+ this._readCapability.resolve();
+
+ this._reader = response.body.getReader();
+ });
+ 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;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded
+ });
+ }
+
+ const buffer = new Uint8Array(value).buffer;
+ return {
+ value: buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ if (this._reader) {
+ this._reader.cancel(reason);
+ }
+
+ if (this._abortController) {
+ this._abortController.abort();
+ }
+ }
+
+}
+
+/***/ })
+/******/ ]);
+});
//# sourceMappingURL=pdf.js.map
\ No newline at end of file
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.worker.js b/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.worker.js
index af4e46699bea709da35edd37aa658d3b474b8a49..f7476c97aba5d623c5faad7fda75367bd57c5559 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.worker.js
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/build/pdf.worker.js
@@ -1,45971 +1,45971 @@
-/**
- * @licstart The following is the entire license notice for the
- * Javascript code in this page
- *
- * Copyright 2020 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
- */
-
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define("pdfjs-dist/build/pdf.worker", [], factory);
- else if(typeof exports === 'object')
- exports["pdfjs-dist/build/pdf.worker"] = factory();
- else
- root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory();
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __w_pdfjs_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __w_pdfjs_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __w_pdfjs_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __w_pdfjs_require__.d = function(exports, name, getter) {
-/******/ if(!__w_pdfjs_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __w_pdfjs_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __w_pdfjs_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __w_pdfjs_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __w_pdfjs_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __w_pdfjs_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __w_pdfjs_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __w_pdfjs_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-Object.defineProperty(exports, "WorkerMessageHandler", {
- enumerable: true,
- get: function () {
- return _worker.WorkerMessageHandler;
- }
-});
-
-var _worker = __w_pdfjs_require__(1);
-
-const pdfjsVersion = '2.5.207';
-const pdfjsBuild = '0974d6052';
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.WorkerMessageHandler = exports.WorkerTask = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _pdf_manager = __w_pdfjs_require__(6);
-
-var _is_node = __w_pdfjs_require__(4);
-
-var _message_handler = __w_pdfjs_require__(45);
-
-var _worker_stream = __w_pdfjs_require__(46);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var WorkerTask = function WorkerTaskClosure() {
- function WorkerTask(name) {
- this.name = name;
- this.terminated = false;
- this._capability = (0, _util.createPromiseCapability)();
- }
-
- WorkerTask.prototype = {
- get finished() {
- return this._capability.promise;
- },
-
- finish() {
- this._capability.resolve();
- },
-
- terminate() {
- this.terminated = true;
- },
-
- ensureNotTerminated() {
- if (this.terminated) {
- throw new Error("Worker task was terminated");
- }
- }
-
- };
- return WorkerTask;
-}();
-
-exports.WorkerTask = WorkerTask;
-var WorkerMessageHandler = {
- setup(handler, port) {
- var testMessageProcessed = false;
- handler.on("test", function wphSetupTest(data) {
- if (testMessageProcessed) {
- return;
- }
-
- testMessageProcessed = true;
-
- if (!(data instanceof Uint8Array)) {
- handler.send("test", null);
- return;
- }
-
- const supportTransfers = data[0] === 255;
- handler.postMessageTransfers = supportTransfers;
- handler.send("test", {
- supportTransfers
- });
- });
- handler.on("configure", function wphConfigure(data) {
- (0, _util.setVerbosityLevel)(data.verbosity);
- });
- handler.on("GetDocRequest", function wphSetupDoc(data) {
- return WorkerMessageHandler.createDocumentHandler(data, port);
- });
- },
-
- createDocumentHandler(docParams, port) {
- var pdfManager;
- var terminated = false;
- var cancelXHRs = null;
- var WorkerTasks = [];
- const verbosity = (0, _util.getVerbosityLevel)();
- const apiVersion = docParams.apiVersion;
- const workerVersion = '2.5.207';
-
- if (apiVersion !== workerVersion) {
- throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
- }
-
- const enumerableProperties = [];
-
- for (const property in []) {
- enumerableProperties.push(property);
- }
-
- if (enumerableProperties.length) {
- throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
- }
-
- if (typeof ReadableStream === "undefined" || typeof Promise.allSettled === "undefined") {
- throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. " + "`ReadableStream` and/or `Promise.allSettled`); " + "please use an ES5-compatible build instead.");
- }
-
- var docId = docParams.docId;
- var docBaseUrl = docParams.docBaseUrl;
- var workerHandlerName = docParams.docId + "_worker";
- var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);
- handler.postMessageTransfers = docParams.postMessageTransfers;
-
- function ensureNotTerminated() {
- if (terminated) {
- throw new Error("Worker was terminated");
- }
- }
-
- function startWorkerTask(task) {
- WorkerTasks.push(task);
- }
-
- function finishWorkerTask(task) {
- task.finish();
- var i = WorkerTasks.indexOf(task);
- WorkerTasks.splice(i, 1);
- }
-
- async function loadDocument(recoveryMode) {
- await pdfManager.ensureDoc("checkHeader");
- await pdfManager.ensureDoc("parseStartXRef");
- await pdfManager.ensureDoc("parse", [recoveryMode]);
-
- if (!recoveryMode) {
- await pdfManager.ensureDoc("checkFirstPage");
- }
-
- const [numPages, fingerprint] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprint")]);
- return {
- numPages,
- fingerprint
- };
- }
-
- function getPdfManager(data, evaluatorOptions) {
- var pdfManagerCapability = (0, _util.createPromiseCapability)();
- let newPdfManager;
- var source = data.source;
-
- if (source.data) {
- try {
- newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);
- pdfManagerCapability.resolve(newPdfManager);
- } catch (ex) {
- pdfManagerCapability.reject(ex);
- }
-
- return pdfManagerCapability.promise;
- }
-
- var pdfStream,
- cachedChunks = [];
-
- try {
- pdfStream = new _worker_stream.PDFWorkerStream(handler);
- } catch (ex) {
- pdfManagerCapability.reject(ex);
- return pdfManagerCapability.promise;
- }
-
- var fullRequest = pdfStream.getFullReader();
- fullRequest.headersReady.then(function () {
- if (!fullRequest.isRangeSupported) {
- return;
- }
-
- var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;
- newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {
- msgHandler: handler,
- password: source.password,
- length: fullRequest.contentLength,
- disableAutoFetch,
- rangeChunkSize: source.rangeChunkSize
- }, evaluatorOptions, docBaseUrl);
-
- for (let i = 0; i < cachedChunks.length; i++) {
- newPdfManager.sendProgressiveData(cachedChunks[i]);
- }
-
- cachedChunks = [];
- pdfManagerCapability.resolve(newPdfManager);
- cancelXHRs = null;
- }).catch(function (reason) {
- pdfManagerCapability.reject(reason);
- cancelXHRs = null;
- });
- var loaded = 0;
-
- var flushChunks = function () {
- var pdfFile = (0, _util.arraysToBytes)(cachedChunks);
-
- if (source.length && pdfFile.length !== source.length) {
- (0, _util.warn)("reported HTTP length is different from actual");
- }
-
- try {
- newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);
- pdfManagerCapability.resolve(newPdfManager);
- } catch (ex) {
- pdfManagerCapability.reject(ex);
- }
-
- cachedChunks = [];
- };
-
- var readPromise = new Promise(function (resolve, reject) {
- var readChunk = function ({
- value,
- done
- }) {
- try {
- ensureNotTerminated();
-
- if (done) {
- if (!newPdfManager) {
- flushChunks();
- }
-
- cancelXHRs = null;
- return;
- }
-
- loaded += (0, _util.arrayByteLength)(value);
-
- if (!fullRequest.isStreamingSupported) {
- handler.send("DocProgress", {
- loaded,
- total: Math.max(loaded, fullRequest.contentLength || 0)
- });
- }
-
- if (newPdfManager) {
- newPdfManager.sendProgressiveData(value);
- } else {
- cachedChunks.push(value);
- }
-
- fullRequest.read().then(readChunk, reject);
- } catch (e) {
- reject(e);
- }
- };
-
- fullRequest.read().then(readChunk, reject);
- });
- readPromise.catch(function (e) {
- pdfManagerCapability.reject(e);
- cancelXHRs = null;
- });
-
- cancelXHRs = function (reason) {
- pdfStream.cancelAllRequests(reason);
- };
-
- return pdfManagerCapability.promise;
- }
-
- function setupDoc(data) {
- function onSuccess(doc) {
- ensureNotTerminated();
- handler.send("GetDoc", {
- pdfInfo: doc
- });
- }
-
- function onFailure(ex) {
- ensureNotTerminated();
-
- if (ex instanceof _util.PasswordException) {
- var task = new WorkerTask(`PasswordException: response ${ex.code}`);
- startWorkerTask(task);
- handler.sendWithPromise("PasswordRequest", ex).then(function ({
- password
- }) {
- finishWorkerTask(task);
- pdfManager.updatePassword(password);
- pdfManagerReady();
- }).catch(function () {
- finishWorkerTask(task);
- handler.send("DocException", ex);
- });
- } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) {
- handler.send("DocException", ex);
- } else {
- handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString()));
- }
- }
-
- function pdfManagerReady() {
- ensureNotTerminated();
- loadDocument(false).then(onSuccess, function loadFailure(ex) {
- ensureNotTerminated();
-
- if (!(ex instanceof _core_utils.XRefParseException)) {
- onFailure(ex);
- return;
- }
-
- pdfManager.requestLoadedStream();
- pdfManager.onLoadedStream().then(function () {
- ensureNotTerminated();
- loadDocument(true).then(onSuccess, onFailure);
- });
- }, onFailure);
- }
-
- ensureNotTerminated();
- var evaluatorOptions = {
- maxImageSize: data.maxImageSize,
- disableFontFace: data.disableFontFace,
- ignoreErrors: data.ignoreErrors,
- isEvalSupported: data.isEvalSupported,
- fontExtraProperties: data.fontExtraProperties
- };
- getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {
- if (terminated) {
- newPdfManager.terminate(new _util.AbortException("Worker was terminated."));
- throw new Error("Worker was terminated");
- }
-
- pdfManager = newPdfManager;
- pdfManager.onLoadedStream().then(function (stream) {
- handler.send("DataLoaded", {
- length: stream.bytes.byteLength
- });
- });
- }).then(pdfManagerReady, onFailure);
- }
-
- handler.on("GetPage", function wphSetupGetPage(data) {
- return pdfManager.getPage(data.pageIndex).then(function (page) {
- return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) {
- return {
- rotate,
- ref,
- userUnit,
- view
- };
- });
- });
- });
- handler.on("GetPageIndex", function wphSetupGetPageIndex(data) {
- var ref = _primitives.Ref.get(data.ref.num, data.ref.gen);
-
- var catalog = pdfManager.pdfDocument.catalog;
- return catalog.getPageIndex(ref);
- });
- handler.on("GetDestinations", function wphSetupGetDestinations(data) {
- return pdfManager.ensureCatalog("destinations");
- });
- handler.on("GetDestination", function wphSetupGetDestination(data) {
- return pdfManager.ensureCatalog("getDestination", [data.id]);
- });
- handler.on("GetPageLabels", function wphSetupGetPageLabels(data) {
- return pdfManager.ensureCatalog("pageLabels");
- });
- handler.on("GetPageLayout", function wphSetupGetPageLayout(data) {
- return pdfManager.ensureCatalog("pageLayout");
- });
- handler.on("GetPageMode", function wphSetupGetPageMode(data) {
- return pdfManager.ensureCatalog("pageMode");
- });
- handler.on("GetViewerPreferences", function (data) {
- return pdfManager.ensureCatalog("viewerPreferences");
- });
- handler.on("GetOpenAction", function (data) {
- return pdfManager.ensureCatalog("openAction");
- });
- handler.on("GetAttachments", function wphSetupGetAttachments(data) {
- return pdfManager.ensureCatalog("attachments");
- });
- handler.on("GetJavaScript", function wphSetupGetJavaScript(data) {
- return pdfManager.ensureCatalog("javaScript");
- });
- handler.on("GetOutline", function wphSetupGetOutline(data) {
- return pdfManager.ensureCatalog("documentOutline");
- });
- handler.on("GetPermissions", function (data) {
- return pdfManager.ensureCatalog("permissions");
- });
- handler.on("GetMetadata", function wphSetupGetMetadata(data) {
- return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]);
- });
- handler.on("GetData", function wphSetupGetData(data) {
- pdfManager.requestLoadedStream();
- return pdfManager.onLoadedStream().then(function (stream) {
- return stream.bytes;
- });
- });
- handler.on("GetStats", function wphSetupGetStats(data) {
- return pdfManager.pdfDocument.xref.stats;
- });
- handler.on("GetAnnotations", function ({
- pageIndex,
- intent
- }) {
- return pdfManager.getPage(pageIndex).then(function (page) {
- return page.getAnnotationsData(intent);
- });
- });
- handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) {
- var pageIndex = data.pageIndex;
- pdfManager.getPage(pageIndex).then(function (page) {
- var task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);
- startWorkerTask(task);
- const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
- page.getOperatorList({
- handler,
- sink,
- task,
- intent: data.intent,
- renderInteractiveForms: data.renderInteractiveForms
- }).then(function (operatorListInfo) {
- finishWorkerTask(task);
-
- if (start) {
- (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`);
- }
-
- sink.close();
- }, function (reason) {
- finishWorkerTask(task);
-
- if (task.terminated) {
- return;
- }
-
- handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList
- });
- sink.error(reason);
- });
- });
- }, this);
- handler.on("GetTextContent", function wphExtractText(data, sink) {
- var pageIndex = data.pageIndex;
-
- sink.onPull = function (desiredSize) {};
-
- sink.onCancel = function (reason) {};
-
- pdfManager.getPage(pageIndex).then(function (page) {
- var task = new WorkerTask("GetTextContent: page " + pageIndex);
- startWorkerTask(task);
- const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
- page.extractTextContent({
- handler,
- task,
- sink,
- normalizeWhitespace: data.normalizeWhitespace,
- combineTextItems: data.combineTextItems
- }).then(function () {
- finishWorkerTask(task);
-
- if (start) {
- (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`);
- }
-
- sink.close();
- }, function (reason) {
- finishWorkerTask(task);
-
- if (task.terminated) {
- return;
- }
-
- sink.error(reason);
- });
- });
- });
- handler.on("FontFallback", function (data) {
- return pdfManager.fontFallback(data.id, handler);
- });
- handler.on("Cleanup", function wphCleanup(data) {
- return pdfManager.cleanup(true);
- });
- handler.on("Terminate", function wphTerminate(data) {
- terminated = true;
- const waitOn = [];
-
- if (pdfManager) {
- pdfManager.terminate(new _util.AbortException("Worker was terminated."));
- const cleanupPromise = pdfManager.cleanup();
- waitOn.push(cleanupPromise);
- pdfManager = null;
- } else {
- (0, _primitives.clearPrimitiveCaches)();
- }
-
- if (cancelXHRs) {
- cancelXHRs(new _util.AbortException("Worker was terminated."));
- }
-
- WorkerTasks.forEach(function (task) {
- waitOn.push(task.finished);
- task.terminate();
- });
- return Promise.all(waitOn).then(function () {
- handler.destroy();
- handler = null;
- });
- });
- handler.on("Ready", function wphReady(data) {
- setupDoc(docParams);
- docParams = null;
- });
- return workerHandlerName;
- },
-
- initializeFromPort(port) {
- var handler = new _message_handler.MessageHandler("worker", "main", port);
- WorkerMessageHandler.setup(handler, port);
- handler.send("ready", null);
- }
-
-};
-exports.WorkerMessageHandler = WorkerMessageHandler;
-
-function isMessagePort(maybePort) {
- return typeof maybePort.postMessage === "function" && "onmessage" in maybePort;
-}
-
-if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) {
- WorkerMessageHandler.initializeFromPort(self);
-}
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.arrayByteLength = arrayByteLength;
-exports.arraysToBytes = arraysToBytes;
-exports.assert = assert;
-exports.bytesToString = bytesToString;
-exports.createPromiseCapability = createPromiseCapability;
-exports.getVerbosityLevel = getVerbosityLevel;
-exports.info = info;
-exports.isArrayBuffer = isArrayBuffer;
-exports.isArrayEqual = isArrayEqual;
-exports.isBool = isBool;
-exports.isEmptyObj = isEmptyObj;
-exports.isNum = isNum;
-exports.isString = isString;
-exports.isSameOrigin = isSameOrigin;
-exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
-exports.removeNullCharacters = removeNullCharacters;
-exports.setVerbosityLevel = setVerbosityLevel;
-exports.shadow = shadow;
-exports.string32 = string32;
-exports.stringToBytes = stringToBytes;
-exports.stringToPDFString = stringToPDFString;
-exports.stringToUTF8String = stringToUTF8String;
-exports.utf8StringToString = utf8StringToString;
-exports.warn = warn;
-exports.unreachable = unreachable;
-exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
-
-__w_pdfjs_require__(3);
-
-const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
-exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
-const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
-exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
-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
-};
-exports.PermissionFlag = PermissionFlag;
-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
-};
-exports.TextRenderingMode = TextRenderingMode;
-const ImageKind = {
- GRAYSCALE_1BPP: 1,
- RGB_24BPP: 2,
- RGBA_32BPP: 3
-};
-exports.ImageKind = ImageKind;
-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
-};
-exports.AnnotationType = AnnotationType;
-const AnnotationStateModelType = {
- MARKED: "Marked",
- REVIEW: "Review"
-};
-exports.AnnotationStateModelType = AnnotationStateModelType;
-const AnnotationMarkedState = {
- MARKED: "Marked",
- UNMARKED: "Unmarked"
-};
-exports.AnnotationMarkedState = AnnotationMarkedState;
-const AnnotationReviewState = {
- ACCEPTED: "Accepted",
- REJECTED: "Rejected",
- CANCELLED: "Cancelled",
- COMPLETED: "Completed",
- NONE: "None"
-};
-exports.AnnotationReviewState = AnnotationReviewState;
-const AnnotationReplyType = {
- GROUP: "Group",
- REPLY: "R"
-};
-exports.AnnotationReplyType = AnnotationReplyType;
-const AnnotationFlag = {
- INVISIBLE: 0x01,
- HIDDEN: 0x02,
- PRINT: 0x04,
- NOZOOM: 0x08,
- NOROTATE: 0x10,
- NOVIEW: 0x20,
- READONLY: 0x40,
- LOCKED: 0x80,
- TOGGLENOVIEW: 0x100,
- LOCKEDCONTENTS: 0x200
-};
-exports.AnnotationFlag = AnnotationFlag;
-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
-};
-exports.AnnotationFieldFlag = AnnotationFieldFlag;
-const AnnotationBorderStyleType = {
- SOLID: 1,
- DASHED: 2,
- BEVELED: 3,
- INSET: 4,
- UNDERLINE: 5
-};
-exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
-const StreamType = {
- UNKNOWN: "UNKNOWN",
- FLATE: "FLATE",
- LZW: "LZW",
- DCT: "DCT",
- JPX: "JPX",
- JBIG: "JBIG",
- A85: "A85",
- AHX: "AHX",
- CCF: "CCF",
- RLX: "RLX"
-};
-exports.StreamType = StreamType;
-const FontType = {
- UNKNOWN: "UNKNOWN",
- TYPE1: "TYPE1",
- TYPE1C: "TYPE1C",
- CIDFONTTYPE0: "CIDFONTTYPE0",
- CIDFONTTYPE0C: "CIDFONTTYPE0C",
- TRUETYPE: "TRUETYPE",
- CIDFONTTYPE2: "CIDFONTTYPE2",
- TYPE3: "TYPE3",
- OPENTYPE: "OPENTYPE",
- TYPE0: "TYPE0",
- MMTYPE1: "MMTYPE1"
-};
-exports.FontType = FontType;
-const VerbosityLevel = {
- ERRORS: 0,
- WARNINGS: 1,
- INFOS: 5
-};
-exports.VerbosityLevel = VerbosityLevel;
-const CMapCompressionType = {
- NONE: 0,
- BINARY: 1,
- STREAM: 2
-};
-exports.CMapCompressionType = CMapCompressionType;
-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,
- beginAnnotations: 78,
- endAnnotations: 79,
- beginAnnotation: 80,
- endAnnotation: 81,
- paintJpegXObject: 82,
- paintImageMaskXObject: 83,
- paintImageMaskXObjectGroup: 84,
- paintImageXObject: 85,
- paintInlineImageXObject: 86,
- paintInlineImageXObjectGroup: 87,
- paintImageXObjectRepeat: 88,
- paintImageMaskXObjectRepeat: 89,
- paintSolidColorImageMask: 90,
- constructPath: 91
-};
-exports.OPS = OPS;
-const UNSUPPORTED_FEATURES = {
- unknown: "unknown",
- forms: "forms",
- javaScript: "javaScript",
- smask: "smask",
- shadingPattern: "shadingPattern",
- font: "font",
- errorTilingPattern: "errorTilingPattern",
- errorExtGState: "errorExtGState",
- errorXObject: "errorXObject",
- errorFontLoadType3: "errorFontLoadType3",
- errorFontState: "errorFontState",
- errorFontMissing: "errorFontMissing",
- errorFontTranslate: "errorFontTranslate",
- errorColorSpace: "errorColorSpace",
- errorOperatorList: "errorOperatorList",
- errorFontToUnicode: "errorFontToUnicode",
- errorFontLoadNative: "errorFontLoadNative",
- errorFontGetPath: "errorFontGetPath"
-};
-exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
-const PasswordResponses = {
- NEED_PASSWORD: 1,
- INCORRECT_PASSWORD: 2
-};
-exports.PasswordResponses = PasswordResponses;
-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 isSameOrigin(baseUrl, otherUrl) {
- let base;
-
- try {
- base = new URL(baseUrl);
-
- if (!base.origin || base.origin === "null") {
- return false;
- }
- } catch (e) {
- return false;
- }
-
- const other = new URL(otherUrl, base);
- return base.origin === other.origin;
-}
-
-function _isValidProtocol(url) {
- if (!url) {
- return false;
- }
-
- switch (url.protocol) {
- case "http:":
- case "https:":
- case "ftp:":
- case "mailto:":
- case "tel:":
- return true;
-
- default:
- return false;
- }
-}
-
-function createValidAbsoluteUrl(url, baseUrl) {
- if (!url) {
- return null;
- }
-
- try {
- const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
-
- if (_isValidProtocol(absoluteUrl)) {
- return absoluteUrl;
- }
- } catch (ex) {}
-
- return null;
-}
-
-function shadow(obj, prop, value) {
- Object.defineProperty(obj, prop, {
- value,
- enumerable: true,
- configurable: true,
- writable: false
- });
- return value;
-}
-
-const BaseException = function BaseExceptionClosure() {
- function BaseException(message) {
- if (this.constructor === BaseException) {
- unreachable("Cannot initialize BaseException.");
- }
-
- this.message = message;
- this.name = this.constructor.name;
- }
-
- BaseException.prototype = new Error();
- BaseException.constructor = BaseException;
- return BaseException;
-}();
-
-exports.BaseException = BaseException;
-
-class PasswordException extends BaseException {
- constructor(msg, code) {
- super(msg);
- this.code = code;
- }
-
-}
-
-exports.PasswordException = PasswordException;
-
-class UnknownErrorException extends BaseException {
- constructor(msg, details) {
- super(msg);
- this.details = details;
- }
-
-}
-
-exports.UnknownErrorException = UnknownErrorException;
-
-class InvalidPDFException extends BaseException {}
-
-exports.InvalidPDFException = InvalidPDFException;
-
-class MissingPDFException extends BaseException {}
-
-exports.MissingPDFException = MissingPDFException;
-
-class UnexpectedResponseException extends BaseException {
- constructor(msg, status) {
- super(msg);
- this.status = status;
- }
-
-}
-
-exports.UnexpectedResponseException = UnexpectedResponseException;
-
-class FormatError extends BaseException {}
-
-exports.FormatError = FormatError;
-
-class AbortException extends BaseException {}
-
-exports.AbortException = AbortException;
-const NullCharactersRegExp = /\x00/g;
-
-function removeNullCharacters(str) {
- if (typeof str !== "string") {
- warn("The argument for removeNullCharacters must be a string.");
- return str;
- }
-
- return str.replace(NullCharactersRegExp, "");
-}
-
-function bytesToString(bytes) {
- assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "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) {
- assert(typeof str === "string", "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 arrayByteLength(arr) {
- if (arr.length !== undefined) {
- return arr.length;
- }
-
- assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
- return arr.byteLength;
-}
-
-function arraysToBytes(arr) {
- const length = arr.length;
-
- if (length === 1 && arr[0] instanceof Uint8Array) {
- return arr[0];
- }
-
- let resultLength = 0;
-
- for (let i = 0; i < length; i++) {
- resultLength += arrayByteLength(arr[i]);
- }
-
- let pos = 0;
- const data = new Uint8Array(resultLength);
-
- for (let i = 0; i < length; i++) {
- let item = arr[i];
-
- if (!(item instanceof Uint8Array)) {
- if (typeof item === "string") {
- item = stringToBytes(item);
- } else {
- item = new Uint8Array(item);
- }
- }
-
- const itemLength = item.byteLength;
- data.set(item, pos);
- pos += itemLength;
- }
-
- return data;
-}
-
-function string32(value) {
- return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
-}
-
-function isLittleEndian() {
- const buffer8 = new Uint8Array(4);
- buffer8[0] = 1;
- const view32 = new Uint32Array(buffer8.buffer, 0, 1);
- return view32[0] === 1;
-}
-
-const IsLittleEndianCached = {
- get value() {
- return shadow(this, "value", isLittleEndian());
- }
-
-};
-exports.IsLittleEndianCached = IsLittleEndianCached;
-
-function isEvalSupported() {
- try {
- new Function("");
- return true;
- } catch (e) {
- return false;
- }
-}
-
-const IsEvalSupportedCached = {
- get value() {
- return shadow(this, "value", isEvalSupported());
- }
-
-};
-exports.IsEvalSupportedCached = IsEvalSupportedCached;
-const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];
-
-class Util {
- static makeCssRgb(r, g, b) {
- rgbBuf[1] = r;
- rgbBuf[3] = g;
- rgbBuf[5] = b;
- return rgbBuf.join("");
- }
-
- 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 = Util.applyTransform(r, m);
- const p2 = Util.applyTransform(r.slice(2, 4), m);
- const p3 = Util.applyTransform([r[0], r[3]], m);
- const p4 = Util.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 apply3dTransform(m, v) {
- return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
- }
-
- 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) * (a + d) - 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) {
- function compare(a, b) {
- return a - b;
- }
-
- const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
- const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
- const result = [];
- rect1 = Util.normalizeRect(rect1);
- rect2 = Util.normalizeRect(rect2);
-
- if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
- result[0] = orderedX[1];
- result[2] = orderedX[2];
- } else {
- return null;
- }
-
- if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
- result[1] = orderedY[1];
- result[3] = orderedY[2];
- } else {
- return null;
- }
-
- return result;
- }
-
-}
-
-exports.Util = Util;
-const PDFStringTranslateTable = [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) {
- const length = str.length,
- strBuf = [];
-
- if (str[0] === "\xFE" && str[1] === "\xFF") {
- for (let i = 2; i < length; i += 2) {
- strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));
- }
- } else if (str[0] === "\xFF" && str[1] === "\xFE") {
- for (let i = 2; i < length; i += 2) {
- strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i)));
- }
- } else {
- for (let i = 0; i < length; ++i) {
- const code = PDFStringTranslateTable[str.charCodeAt(i)];
- 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 isEmptyObj(obj) {
- for (const key in obj) {
- return false;
- }
-
- return true;
-}
-
-function isBool(v) {
- return typeof v === "boolean";
-}
-
-function isNum(v) {
- return typeof v === "number";
-}
-
-function isString(v) {
- return typeof v === "string";
-}
-
-function isArrayBuffer(v) {
- return typeof v === "object" && v !== null && v.byteLength !== undefined;
-}
-
-function isArrayEqual(arr1, arr2) {
- if (arr1.length !== arr2.length) {
- return false;
- }
-
- return arr1.every(function (element, index) {
- return element === arr2[index];
- });
-}
-
-function createPromiseCapability() {
- const capability = Object.create(null);
- let isSettled = false;
- Object.defineProperty(capability, "settled", {
- get() {
- return isSettled;
- }
-
- });
- capability.promise = new Promise(function (resolve, reject) {
- capability.resolve = function (data) {
- isSettled = true;
- resolve(data);
- };
-
- capability.reject = function (reason) {
- isSettled = true;
- reject(reason);
- };
- });
- return capability;
-}
-
-const createObjectURL = function createObjectURLClosure() {
- const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- return function createObjectURL(data, contentType, forceDataSchema = false) {
- if (!forceDataSchema && URL.createObjectURL) {
- const blob = new Blob([data], {
- type: contentType
- });
- return URL.createObjectURL(blob);
- }
-
- let buffer = `data:${contentType};base64,`;
-
- for (let i = 0, ii = data.length; i < ii; i += 3) {
- const b1 = data[i] & 0xff;
- const b2 = data[i + 1] & 0xff;
- const b3 = data[i + 2] & 0xff;
- const d1 = b1 >> 2,
- d2 = (b1 & 3) << 4 | b2 >> 4;
- const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
- const d4 = i + 2 < ii ? b3 & 0x3f : 64;
- buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
- }
-
- return buffer;
- };
-}();
-
-exports.createObjectURL = createObjectURL;
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-var _is_node = __w_pdfjs_require__(4);
-
-;
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.isNodeJS = void 0;
-const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !process.versions.electron;
-exports.isNodeJS = isNodeJS;
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.clearPrimitiveCaches = clearPrimitiveCaches;
-exports.isEOF = isEOF;
-exports.isCmd = isCmd;
-exports.isDict = isDict;
-exports.isName = isName;
-exports.isRef = isRef;
-exports.isRefsEqual = isRefsEqual;
-exports.isStream = isStream;
-exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var EOF = {};
-exports.EOF = EOF;
-
-var Name = function NameClosure() {
- let nameCache = Object.create(null);
-
- function Name(name) {
- this.name = name;
- }
-
- Name.prototype = {};
-
- Name.get = function Name_get(name) {
- var nameValue = nameCache[name];
- return nameValue ? nameValue : nameCache[name] = new Name(name);
- };
-
- Name._clearCache = function () {
- nameCache = Object.create(null);
- };
-
- return Name;
-}();
-
-exports.Name = Name;
-
-var Cmd = function CmdClosure() {
- let cmdCache = Object.create(null);
-
- function Cmd(cmd) {
- this.cmd = cmd;
- }
-
- Cmd.prototype = {};
-
- Cmd.get = function Cmd_get(cmd) {
- var cmdValue = cmdCache[cmd];
- return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);
- };
-
- Cmd._clearCache = function () {
- cmdCache = Object.create(null);
- };
-
- return Cmd;
-}();
-
-exports.Cmd = Cmd;
-
-var Dict = function DictClosure() {
- var nonSerializable = function nonSerializableClosure() {
- return nonSerializable;
- };
-
- function Dict(xref) {
- this._map = Object.create(null);
- this.xref = xref;
- this.objId = null;
- this.suppressEncryption = false;
- this.__nonSerializable__ = nonSerializable;
- }
-
- Dict.prototype = {
- assignXref: function Dict_assignXref(newXref) {
- this.xref = newXref;
- },
-
- get(key1, key2, key3) {
- let value = this._map[key1];
-
- if (value === undefined && key2 !== undefined) {
- value = this._map[key2];
-
- if (value === undefined && key3 !== undefined) {
- value = this._map[key3];
- }
- }
-
- if (value instanceof Ref && this.xref) {
- return this.xref.fetch(value, this.suppressEncryption);
- }
-
- return value;
- },
-
- async getAsync(key1, key2, key3) {
- let value = this._map[key1];
-
- if (value === undefined && key2 !== undefined) {
- value = this._map[key2];
-
- if (value === undefined && key3 !== undefined) {
- value = this._map[key3];
- }
- }
-
- if (value instanceof Ref && this.xref) {
- return this.xref.fetchAsync(value, this.suppressEncryption);
- }
-
- return value;
- },
-
- getArray(key1, key2, key3) {
- let value = this.get(key1, key2, key3);
-
- if (!Array.isArray(value) || !this.xref) {
- return value;
- }
-
- value = value.slice();
-
- for (let i = 0, ii = value.length; i < ii; i++) {
- if (!(value[i] instanceof Ref)) {
- continue;
- }
-
- value[i] = this.xref.fetch(value[i], this.suppressEncryption);
- }
-
- return value;
- },
-
- getRaw: function Dict_getRaw(key) {
- return this._map[key];
- },
- getKeys: function Dict_getKeys() {
- return Object.keys(this._map);
- },
- set: function Dict_set(key, value) {
- this._map[key] = value;
- },
- has: function Dict_has(key) {
- return this._map[key] !== undefined;
- },
- forEach: function Dict_forEach(callback) {
- for (var key in this._map) {
- callback(key, this.get(key));
- }
- }
- };
- Dict.empty = new Dict(null);
-
- Dict.merge = function (xref, dictArray) {
- const mergedDict = new Dict(xref);
-
- for (let i = 0, ii = dictArray.length; i < ii; i++) {
- const dict = dictArray[i];
-
- if (!isDict(dict)) {
- continue;
- }
-
- for (const keyName in dict._map) {
- if (mergedDict._map[keyName] !== undefined) {
- continue;
- }
-
- mergedDict._map[keyName] = dict._map[keyName];
- }
- }
-
- return mergedDict;
- };
-
- return Dict;
-}();
-
-exports.Dict = Dict;
-
-var Ref = function RefClosure() {
- let refCache = Object.create(null);
-
- function Ref(num, gen) {
- this.num = num;
- this.gen = gen;
- }
-
- Ref.prototype = {
- toString: function Ref_toString() {
- if (this.gen === 0) {
- return `${this.num}R`;
- }
-
- return `${this.num}R${this.gen}`;
- }
- };
-
- Ref.get = function (num, gen) {
- const key = gen === 0 ? `${num}R` : `${num}R${gen}`;
- const refValue = refCache[key];
- return refValue ? refValue : refCache[key] = new Ref(num, gen);
- };
-
- Ref._clearCache = function () {
- refCache = Object.create(null);
- };
-
- return Ref;
-}();
-
-exports.Ref = Ref;
-
-var RefSet = function RefSetClosure() {
- function RefSet() {
- this.dict = Object.create(null);
- }
-
- RefSet.prototype = {
- has: function RefSet_has(ref) {
- return ref.toString() in this.dict;
- },
- put: function RefSet_put(ref) {
- this.dict[ref.toString()] = true;
- },
- remove: function RefSet_remove(ref) {
- delete this.dict[ref.toString()];
- }
- };
- return RefSet;
-}();
-
-exports.RefSet = RefSet;
-
-var RefSetCache = function RefSetCacheClosure() {
- function RefSetCache() {
- this.dict = Object.create(null);
- }
-
- RefSetCache.prototype = {
- get size() {
- return Object.keys(this.dict).length;
- },
-
- get: function RefSetCache_get(ref) {
- return this.dict[ref.toString()];
- },
- has: function RefSetCache_has(ref) {
- return ref.toString() in this.dict;
- },
- put: function RefSetCache_put(ref, obj) {
- this.dict[ref.toString()] = obj;
- },
- putAlias: function RefSetCache_putAlias(ref, aliasRef) {
- this.dict[ref.toString()] = this.get(aliasRef);
- },
- forEach: function RefSetCache_forEach(callback) {
- for (const i in this.dict) {
- callback(this.dict[i]);
- }
- },
- clear: function RefSetCache_clear() {
- this.dict = Object.create(null);
- }
- };
- return RefSetCache;
-}();
-
-exports.RefSetCache = RefSetCache;
-
-function isEOF(v) {
- return v === EOF;
-}
-
-function isName(v, name) {
- return v instanceof Name && (name === undefined || v.name === name);
-}
-
-function isCmd(v, cmd) {
- return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
-}
-
-function isDict(v, type) {
- return v instanceof Dict && (type === undefined || isName(v.get("Type"), type));
-}
-
-function isRef(v) {
- return v instanceof Ref;
-}
-
-function isRefsEqual(v1, v2) {
- return v1.num === v2.num && v1.gen === v2.gen;
-}
-
-function isStream(v) {
- return typeof v === "object" && v !== null && v.getBytes !== undefined;
-}
-
-function clearPrimitiveCaches() {
- Cmd._clearCache();
-
- Name._clearCache();
-
- Ref._clearCache();
-}
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.NetworkPdfManager = exports.LocalPdfManager = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _chunked_stream = __w_pdfjs_require__(7);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _document = __w_pdfjs_require__(9);
-
-var _stream = __w_pdfjs_require__(12);
-
-class BasePdfManager {
- constructor() {
- if (this.constructor === BasePdfManager) {
- (0, _util.unreachable)("Cannot initialize BasePdfManager.");
- }
- }
-
- get docId() {
- return this._docId;
- }
-
- get password() {
- return this._password;
- }
-
- get docBaseUrl() {
- let docBaseUrl = null;
-
- if (this._docBaseUrl) {
- const absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);
-
- if (absoluteUrl) {
- docBaseUrl = absoluteUrl.href;
- } else {
- (0, _util.warn)(`Invalid absolute docBaseUrl: "${this._docBaseUrl}".`);
- }
- }
-
- return (0, _util.shadow)(this, "docBaseUrl", docBaseUrl);
- }
-
- onLoadedStream() {
- (0, _util.unreachable)("Abstract method `onLoadedStream` called");
- }
-
- ensureDoc(prop, args) {
- return this.ensure(this.pdfDocument, prop, args);
- }
-
- ensureXRef(prop, args) {
- return this.ensure(this.pdfDocument.xref, prop, args);
- }
-
- ensureCatalog(prop, args) {
- return this.ensure(this.pdfDocument.catalog, prop, args);
- }
-
- getPage(pageIndex) {
- return this.pdfDocument.getPage(pageIndex);
- }
-
- fontFallback(id, handler) {
- return this.pdfDocument.fontFallback(id, handler);
- }
-
- cleanup(manuallyTriggered = false) {
- return this.pdfDocument.cleanup(manuallyTriggered);
- }
-
- async ensure(obj, prop, args) {
- (0, _util.unreachable)("Abstract method `ensure` called");
- }
-
- requestRange(begin, end) {
- (0, _util.unreachable)("Abstract method `requestRange` called");
- }
-
- requestLoadedStream() {
- (0, _util.unreachable)("Abstract method `requestLoadedStream` called");
- }
-
- sendProgressiveData(chunk) {
- (0, _util.unreachable)("Abstract method `sendProgressiveData` called");
- }
-
- updatePassword(password) {
- this._password = password;
- }
-
- terminate(reason) {
- (0, _util.unreachable)("Abstract method `terminate` called");
- }
-
-}
-
-class LocalPdfManager extends BasePdfManager {
- constructor(docId, data, password, evaluatorOptions, docBaseUrl) {
- super();
- this._docId = docId;
- this._password = password;
- this._docBaseUrl = docBaseUrl;
- this.evaluatorOptions = evaluatorOptions;
- const stream = new _stream.Stream(data);
- this.pdfDocument = new _document.PDFDocument(this, stream);
- this._loadedStreamPromise = Promise.resolve(stream);
- }
-
- async ensure(obj, prop, args) {
- const value = obj[prop];
-
- if (typeof value === "function") {
- return value.apply(obj, args);
- }
-
- return value;
- }
-
- requestRange(begin, end) {
- return Promise.resolve();
- }
-
- requestLoadedStream() {}
-
- onLoadedStream() {
- return this._loadedStreamPromise;
- }
-
- terminate(reason) {}
-
-}
-
-exports.LocalPdfManager = LocalPdfManager;
-
-class NetworkPdfManager extends BasePdfManager {
- constructor(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {
- super();
- this._docId = docId;
- this._password = args.password;
- this._docBaseUrl = docBaseUrl;
- this.msgHandler = args.msgHandler;
- this.evaluatorOptions = evaluatorOptions;
- this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {
- msgHandler: args.msgHandler,
- length: args.length,
- disableAutoFetch: args.disableAutoFetch,
- rangeChunkSize: args.rangeChunkSize
- });
- this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream());
- }
-
- async ensure(obj, prop, args) {
- try {
- const value = obj[prop];
-
- if (typeof value === "function") {
- return value.apply(obj, args);
- }
-
- return value;
- } catch (ex) {
- if (!(ex instanceof _core_utils.MissingDataException)) {
- throw ex;
- }
-
- await this.requestRange(ex.begin, ex.end);
- return this.ensure(obj, prop, args);
- }
- }
-
- requestRange(begin, end) {
- return this.streamManager.requestRange(begin, end);
- }
-
- requestLoadedStream() {
- this.streamManager.requestAllChunks();
- }
-
- sendProgressiveData(chunk) {
- this.streamManager.onReceiveData({
- chunk
- });
- }
-
- onLoadedStream() {
- return this.streamManager.onLoadedStream();
- }
-
- terminate(reason) {
- this.streamManager.abort(reason);
- }
-
-}
-
-exports.NetworkPdfManager = NetworkPdfManager;
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.ChunkedStreamManager = exports.ChunkedStream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-class ChunkedStream {
- constructor(length, chunkSize, manager) {
- this.bytes = new Uint8Array(length);
- this.start = 0;
- this.pos = 0;
- this.end = length;
- this.chunkSize = chunkSize;
- this.loadedChunks = [];
- this.numChunksLoaded = 0;
- this.numChunks = Math.ceil(length / chunkSize);
- this.manager = manager;
- this.progressiveDataLength = 0;
- this.lastSuccessfulEnsureByteChunk = -1;
- }
-
- getMissingChunks() {
- const chunks = [];
-
- for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) {
- if (!this.loadedChunks[chunk]) {
- chunks.push(chunk);
- }
- }
-
- return chunks;
- }
-
- getBaseStreams() {
- return [this];
- }
-
- allChunksLoaded() {
- return this.numChunksLoaded === this.numChunks;
- }
-
- onReceiveData(begin, chunk) {
- const chunkSize = this.chunkSize;
-
- if (begin % chunkSize !== 0) {
- throw new Error(`Bad begin offset: ${begin}`);
- }
-
- const end = begin + chunk.byteLength;
-
- if (end % chunkSize !== 0 && end !== this.bytes.length) {
- throw new Error(`Bad end offset: ${end}`);
- }
-
- this.bytes.set(new Uint8Array(chunk), begin);
- const beginChunk = Math.floor(begin / chunkSize);
- const endChunk = Math.floor((end - 1) / chunkSize) + 1;
-
- for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
- if (!this.loadedChunks[curChunk]) {
- this.loadedChunks[curChunk] = true;
- ++this.numChunksLoaded;
- }
- }
- }
-
- onReceiveProgressiveData(data) {
- let position = this.progressiveDataLength;
- const beginChunk = Math.floor(position / this.chunkSize);
- this.bytes.set(new Uint8Array(data), position);
- position += data.byteLength;
- this.progressiveDataLength = position;
- const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);
-
- for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
- if (!this.loadedChunks[curChunk]) {
- this.loadedChunks[curChunk] = true;
- ++this.numChunksLoaded;
- }
- }
- }
-
- ensureByte(pos) {
- if (pos < this.progressiveDataLength) {
- return;
- }
-
- const chunk = Math.floor(pos / this.chunkSize);
-
- if (chunk === this.lastSuccessfulEnsureByteChunk) {
- return;
- }
-
- if (!this.loadedChunks[chunk]) {
- throw new _core_utils.MissingDataException(pos, pos + 1);
- }
-
- this.lastSuccessfulEnsureByteChunk = chunk;
- }
-
- ensureRange(begin, end) {
- if (begin >= end) {
- return;
- }
-
- if (end <= this.progressiveDataLength) {
- return;
- }
-
- const chunkSize = this.chunkSize;
- const beginChunk = Math.floor(begin / chunkSize);
- const endChunk = Math.floor((end - 1) / chunkSize) + 1;
-
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
- if (!this.loadedChunks[chunk]) {
- throw new _core_utils.MissingDataException(begin, end);
- }
- }
- }
-
- nextEmptyChunk(beginChunk) {
- const numChunks = this.numChunks;
-
- for (let i = 0; i < numChunks; ++i) {
- const chunk = (beginChunk + i) % numChunks;
-
- if (!this.loadedChunks[chunk]) {
- return chunk;
- }
- }
-
- return null;
- }
-
- hasChunk(chunk) {
- return !!this.loadedChunks[chunk];
- }
-
- get length() {
- return this.end - this.start;
- }
-
- get isEmpty() {
- return this.length === 0;
- }
-
- getByte() {
- const pos = this.pos;
-
- if (pos >= this.end) {
- return -1;
- }
-
- if (pos >= this.progressiveDataLength) {
- this.ensureByte(pos);
- }
-
- return this.bytes[this.pos++];
- }
-
- getUint16() {
- const b0 = this.getByte();
- const b1 = this.getByte();
-
- if (b0 === -1 || b1 === -1) {
- return -1;
- }
-
- return (b0 << 8) + b1;
- }
-
- getInt32() {
- const b0 = this.getByte();
- const b1 = this.getByte();
- const b2 = this.getByte();
- const b3 = this.getByte();
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
- }
-
- getBytes(length, forceClamped = false) {
- const bytes = this.bytes;
- const pos = this.pos;
- const strEnd = this.end;
-
- if (!length) {
- if (strEnd > this.progressiveDataLength) {
- this.ensureRange(pos, strEnd);
- }
-
- const subarray = bytes.subarray(pos, strEnd);
- return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
- }
-
- let end = pos + length;
-
- if (end > strEnd) {
- end = strEnd;
- }
-
- if (end > this.progressiveDataLength) {
- this.ensureRange(pos, end);
- }
-
- this.pos = end;
- const subarray = bytes.subarray(pos, end);
- return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
- }
-
- peekByte() {
- const peekedByte = this.getByte();
-
- if (peekedByte !== -1) {
- this.pos--;
- }
-
- return peekedByte;
- }
-
- peekBytes(length, forceClamped = false) {
- const bytes = this.getBytes(length, forceClamped);
- this.pos -= bytes.length;
- return bytes;
- }
-
- getByteRange(begin, end) {
- if (begin < 0) {
- begin = 0;
- }
-
- if (end > this.end) {
- end = this.end;
- }
-
- if (end > this.progressiveDataLength) {
- this.ensureRange(begin, end);
- }
-
- return this.bytes.subarray(begin, end);
- }
-
- skip(n) {
- if (!n) {
- n = 1;
- }
-
- this.pos += n;
- }
-
- reset() {
- this.pos = this.start;
- }
-
- moveStart() {
- this.start = this.pos;
- }
-
- makeSubStream(start, length, dict) {
- if (length) {
- if (start + length > this.progressiveDataLength) {
- this.ensureRange(start, start + length);
- }
- } else {
- if (start >= this.progressiveDataLength) {
- this.ensureByte(start);
- }
- }
-
- function ChunkedStreamSubstream() {}
-
- ChunkedStreamSubstream.prototype = Object.create(this);
-
- ChunkedStreamSubstream.prototype.getMissingChunks = function () {
- const chunkSize = this.chunkSize;
- const beginChunk = Math.floor(this.start / chunkSize);
- const endChunk = Math.floor((this.end - 1) / chunkSize) + 1;
- const missingChunks = [];
-
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
- if (!this.loadedChunks[chunk]) {
- missingChunks.push(chunk);
- }
- }
-
- return missingChunks;
- };
-
- ChunkedStreamSubstream.prototype.allChunksLoaded = function () {
- if (this.numChunksLoaded === this.numChunks) {
- return true;
- }
-
- return this.getMissingChunks().length === 0;
- };
-
- const subStream = new ChunkedStreamSubstream();
- subStream.pos = subStream.start = start;
- subStream.end = start + length || this.end;
- subStream.dict = dict;
- return subStream;
- }
-
-}
-
-exports.ChunkedStream = ChunkedStream;
-
-class ChunkedStreamManager {
- constructor(pdfNetworkStream, args) {
- this.length = args.length;
- this.chunkSize = args.rangeChunkSize;
- this.stream = new ChunkedStream(this.length, this.chunkSize, this);
- this.pdfNetworkStream = pdfNetworkStream;
- this.disableAutoFetch = args.disableAutoFetch;
- this.msgHandler = args.msgHandler;
- this.currRequestId = 0;
- this.chunksNeededByRequest = Object.create(null);
- this.requestsByChunk = Object.create(null);
- this.promisesByRequest = Object.create(null);
- this.progressiveDataLength = 0;
- this.aborted = false;
- this._loadedStreamCapability = (0, _util.createPromiseCapability)();
- }
-
- onLoadedStream() {
- return this._loadedStreamCapability.promise;
- }
-
- sendRequest(begin, end) {
- const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end);
-
- if (!rangeReader.isStreamingSupported) {
- rangeReader.onProgress = this.onProgress.bind(this);
- }
-
- let chunks = [],
- loaded = 0;
- const promise = new Promise((resolve, reject) => {
- const readChunk = chunk => {
- try {
- if (!chunk.done) {
- const data = chunk.value;
- chunks.push(data);
- loaded += (0, _util.arrayByteLength)(data);
-
- if (rangeReader.isStreamingSupported) {
- this.onProgress({
- loaded
- });
- }
-
- rangeReader.read().then(readChunk, reject);
- return;
- }
-
- const chunkData = (0, _util.arraysToBytes)(chunks);
- chunks = null;
- resolve(chunkData);
- } catch (e) {
- reject(e);
- }
- };
-
- rangeReader.read().then(readChunk, reject);
- });
- promise.then(data => {
- if (this.aborted) {
- return;
- }
-
- this.onReceiveData({
- chunk: data,
- begin
- });
- });
- }
-
- requestAllChunks() {
- const missingChunks = this.stream.getMissingChunks();
-
- this._requestChunks(missingChunks);
-
- return this._loadedStreamCapability.promise;
- }
-
- _requestChunks(chunks) {
- const requestId = this.currRequestId++;
- const chunksNeeded = Object.create(null);
- this.chunksNeededByRequest[requestId] = chunksNeeded;
-
- for (const chunk of chunks) {
- if (!this.stream.hasChunk(chunk)) {
- chunksNeeded[chunk] = true;
- }
- }
-
- if ((0, _util.isEmptyObj)(chunksNeeded)) {
- return Promise.resolve();
- }
-
- const capability = (0, _util.createPromiseCapability)();
- this.promisesByRequest[requestId] = capability;
- const chunksToRequest = [];
-
- for (let chunk in chunksNeeded) {
- chunk = chunk | 0;
-
- if (!(chunk in this.requestsByChunk)) {
- this.requestsByChunk[chunk] = [];
- chunksToRequest.push(chunk);
- }
-
- this.requestsByChunk[chunk].push(requestId);
- }
-
- if (!chunksToRequest.length) {
- return capability.promise;
- }
-
- const groupedChunksToRequest = this.groupChunks(chunksToRequest);
-
- for (const groupedChunk of groupedChunksToRequest) {
- const begin = groupedChunk.beginChunk * this.chunkSize;
- const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
- this.sendRequest(begin, end);
- }
-
- return capability.promise;
- }
-
- getStream() {
- return this.stream;
- }
-
- requestRange(begin, end) {
- end = Math.min(end, this.length);
- const beginChunk = this.getBeginChunk(begin);
- const endChunk = this.getEndChunk(end);
- const chunks = [];
-
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
- chunks.push(chunk);
- }
-
- return this._requestChunks(chunks);
- }
-
- requestRanges(ranges = []) {
- const chunksToRequest = [];
-
- for (const range of ranges) {
- const beginChunk = this.getBeginChunk(range.begin);
- const endChunk = this.getEndChunk(range.end);
-
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
- if (!chunksToRequest.includes(chunk)) {
- chunksToRequest.push(chunk);
- }
- }
- }
-
- chunksToRequest.sort(function (a, b) {
- return a - b;
- });
- return this._requestChunks(chunksToRequest);
- }
-
- groupChunks(chunks) {
- const groupedChunks = [];
- let beginChunk = -1;
- let prevChunk = -1;
-
- for (let i = 0, ii = chunks.length; i < ii; ++i) {
- const chunk = chunks[i];
-
- if (beginChunk < 0) {
- beginChunk = chunk;
- }
-
- if (prevChunk >= 0 && prevChunk + 1 !== chunk) {
- groupedChunks.push({
- beginChunk,
- endChunk: prevChunk + 1
- });
- beginChunk = chunk;
- }
-
- if (i + 1 === chunks.length) {
- groupedChunks.push({
- beginChunk,
- endChunk: chunk + 1
- });
- }
-
- prevChunk = chunk;
- }
-
- return groupedChunks;
- }
-
- onProgress(args) {
- this.msgHandler.send("DocProgress", {
- loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded,
- total: this.length
- });
- }
-
- onReceiveData(args) {
- const chunk = args.chunk;
- const isProgressive = args.begin === undefined;
- const begin = isProgressive ? this.progressiveDataLength : args.begin;
- const end = begin + chunk.byteLength;
- const beginChunk = Math.floor(begin / this.chunkSize);
- const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize);
-
- if (isProgressive) {
- this.stream.onReceiveProgressiveData(chunk);
- this.progressiveDataLength = end;
- } else {
- this.stream.onReceiveData(begin, chunk);
- }
-
- if (this.stream.allChunksLoaded()) {
- this._loadedStreamCapability.resolve(this.stream);
- }
-
- const loadedRequests = [];
-
- for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
- const requestIds = this.requestsByChunk[curChunk] || [];
- delete this.requestsByChunk[curChunk];
-
- for (const requestId of requestIds) {
- const chunksNeeded = this.chunksNeededByRequest[requestId];
-
- if (curChunk in chunksNeeded) {
- delete chunksNeeded[curChunk];
- }
-
- if (!(0, _util.isEmptyObj)(chunksNeeded)) {
- continue;
- }
-
- loadedRequests.push(requestId);
- }
- }
-
- if (!this.disableAutoFetch && (0, _util.isEmptyObj)(this.requestsByChunk)) {
- let nextEmptyChunk;
-
- if (this.stream.numChunksLoaded === 1) {
- const lastChunk = this.stream.numChunks - 1;
-
- if (!this.stream.hasChunk(lastChunk)) {
- nextEmptyChunk = lastChunk;
- }
- } else {
- nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
- }
-
- if (Number.isInteger(nextEmptyChunk)) {
- this._requestChunks([nextEmptyChunk]);
- }
- }
-
- for (const requestId of loadedRequests) {
- const capability = this.promisesByRequest[requestId];
- delete this.promisesByRequest[requestId];
- capability.resolve();
- }
-
- this.msgHandler.send("DocProgress", {
- loaded: this.stream.numChunksLoaded * this.chunkSize,
- total: this.length
- });
- }
-
- onError(err) {
- this._loadedStreamCapability.reject(err);
- }
-
- getBeginChunk(begin) {
- return Math.floor(begin / this.chunkSize);
- }
-
- getEndChunk(end) {
- return Math.floor((end - 1) / this.chunkSize) + 1;
- }
-
- abort(reason) {
- this.aborted = true;
-
- if (this.pdfNetworkStream) {
- this.pdfNetworkStream.cancelAllRequests(reason);
- }
-
- for (const requestId in this.promisesByRequest) {
- this.promisesByRequest[requestId].reject(reason);
- }
- }
-
-}
-
-exports.ChunkedStreamManager = ChunkedStreamManager;
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getLookupTableFactory = getLookupTableFactory;
-exports.getInheritableProperty = getInheritableProperty;
-exports.toRomanNumerals = toRomanNumerals;
-exports.log2 = log2;
-exports.readInt8 = readInt8;
-exports.readUint16 = readUint16;
-exports.readUint32 = readUint32;
-exports.isWhiteSpace = isWhiteSpace;
-exports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-function getLookupTableFactory(initializer) {
- let lookup;
- return function () {
- if (initializer) {
- lookup = Object.create(null);
- initializer(lookup);
- initializer = null;
- }
-
- return lookup;
- };
-}
-
-class MissingDataException extends _util.BaseException {
- constructor(begin, end) {
- super(`Missing data [${begin}, ${end})`);
- this.begin = begin;
- this.end = end;
- }
-
-}
-
-exports.MissingDataException = MissingDataException;
-
-class XRefEntryException extends _util.BaseException {}
-
-exports.XRefEntryException = XRefEntryException;
-
-class XRefParseException extends _util.BaseException {}
-
-exports.XRefParseException = XRefParseException;
-
-function getInheritableProperty({
- dict,
- key,
- getArray = false,
- stopWhenFound = true
-}) {
- const LOOP_LIMIT = 100;
- let loopCount = 0;
- let values;
-
- while (dict) {
- const value = getArray ? dict.getArray(key) : dict.get(key);
-
- if (value !== undefined) {
- if (stopWhenFound) {
- return value;
- }
-
- if (!values) {
- values = [];
- }
-
- values.push(value);
- }
-
- if (++loopCount > LOOP_LIMIT) {
- (0, _util.warn)(`getInheritableProperty: maximum loop count exceeded for "${key}"`);
- break;
- }
-
- dict = dict.get("Parent");
- }
-
- return values;
-}
-
-const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];
-
-function toRomanNumerals(number, lowerCase = false) {
- (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer.");
- const romanBuf = [];
- let pos;
-
- while (number >= 1000) {
- number -= 1000;
- romanBuf.push("M");
- }
-
- pos = number / 100 | 0;
- number %= 100;
- romanBuf.push(ROMAN_NUMBER_MAP[pos]);
- pos = number / 10 | 0;
- number %= 10;
- romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);
- romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);
- const romanStr = romanBuf.join("");
- return lowerCase ? romanStr.toLowerCase() : romanStr;
-}
-
-function log2(x) {
- if (x <= 0) {
- return 0;
- }
-
- return Math.ceil(Math.log2(x));
-}
-
-function readInt8(data, offset) {
- return data[offset] << 24 >> 24;
-}
-
-function readUint16(data, offset) {
- return data[offset] << 8 | data[offset + 1];
-}
-
-function readUint32(data, offset) {
- return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
-}
-
-function isWhiteSpace(ch) {
- return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;
-}
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFDocument = exports.Page = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _obj = __w_pdfjs_require__(10);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _annotation = __w_pdfjs_require__(25);
-
-var _crypto = __w_pdfjs_require__(22);
-
-var _parser = __w_pdfjs_require__(11);
-
-var _operator_list = __w_pdfjs_require__(26);
-
-var _evaluator = __w_pdfjs_require__(27);
-
-var _function = __w_pdfjs_require__(41);
-
-const DEFAULT_USER_UNIT = 1.0;
-const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
-
-function isAnnotationRenderable(annotation, intent) {
- return intent === "display" && annotation.viewable || intent === "print" && annotation.printable;
-}
-
-class Page {
- constructor({
- pdfManager,
- xref,
- pageIndex,
- pageDict,
- ref,
- fontCache,
- builtInCMapCache,
- globalImageCache,
- pdfFunctionFactory
- }) {
- this.pdfManager = pdfManager;
- this.pageIndex = pageIndex;
- this.pageDict = pageDict;
- this.xref = xref;
- this.ref = ref;
- this.fontCache = fontCache;
- this.builtInCMapCache = builtInCMapCache;
- this.globalImageCache = globalImageCache;
- this.pdfFunctionFactory = pdfFunctionFactory;
- this.evaluatorOptions = pdfManager.evaluatorOptions;
- this.resourcesPromise = null;
- const idCounters = {
- obj: 0
- };
- this.idFactory = {
- createObjId() {
- return `p${pageIndex}_${++idCounters.obj}`;
- },
-
- getDocId() {
- return `g_${pdfManager.docId}`;
- }
-
- };
- }
-
- _getInheritableProperty(key, getArray = false) {
- const value = (0, _core_utils.getInheritableProperty)({
- dict: this.pageDict,
- key,
- getArray,
- stopWhenFound: false
- });
-
- if (!Array.isArray(value)) {
- return value;
- }
-
- if (value.length === 1 || !(0, _primitives.isDict)(value[0])) {
- return value[0];
- }
-
- return _primitives.Dict.merge(this.xref, value);
- }
-
- get content() {
- return this.pageDict.get("Contents");
- }
-
- get resources() {
- return (0, _util.shadow)(this, "resources", this._getInheritableProperty("Resources") || _primitives.Dict.empty);
- }
-
- _getBoundingBox(name) {
- const box = this._getInheritableProperty(name, true);
-
- if (Array.isArray(box) && box.length === 4) {
- if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
- return box;
- }
-
- (0, _util.warn)(`Empty /${name} entry.`);
- }
-
- return null;
- }
-
- get mediaBox() {
- return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX);
- }
-
- get cropBox() {
- return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox);
- }
-
- get userUnit() {
- let obj = this.pageDict.get("UserUnit");
-
- if (!(0, _util.isNum)(obj) || obj <= 0) {
- obj = DEFAULT_USER_UNIT;
- }
-
- return (0, _util.shadow)(this, "userUnit", obj);
- }
-
- get view() {
- const {
- cropBox,
- mediaBox
- } = this;
- let view;
-
- if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) {
- view = mediaBox;
- } else {
- const box = _util.Util.intersect(cropBox, mediaBox);
-
- if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
- view = box;
- } else {
- (0, _util.warn)("Empty /CropBox and /MediaBox intersection.");
- }
- }
-
- return (0, _util.shadow)(this, "view", view || mediaBox);
- }
-
- get rotate() {
- let rotate = this._getInheritableProperty("Rotate") || 0;
-
- if (rotate % 90 !== 0) {
- rotate = 0;
- } else if (rotate >= 360) {
- rotate = rotate % 360;
- } else if (rotate < 0) {
- rotate = (rotate % 360 + 360) % 360;
- }
-
- return (0, _util.shadow)(this, "rotate", rotate);
- }
-
- getContentStream() {
- const content = this.content;
- let stream;
-
- if (Array.isArray(content)) {
- const xref = this.xref;
- const streams = [];
-
- for (const subStream of content) {
- streams.push(xref.fetchIfRef(subStream));
- }
-
- stream = new _stream.StreamsSequenceStream(streams);
- } else if ((0, _primitives.isStream)(content)) {
- stream = content;
- } else {
- stream = new _stream.NullStream();
- }
-
- return stream;
- }
-
- loadResources(keys) {
- if (!this.resourcesPromise) {
- this.resourcesPromise = this.pdfManager.ensure(this, "resources");
- }
-
- return this.resourcesPromise.then(() => {
- const objectLoader = new _obj.ObjectLoader(this.resources, keys, this.xref);
- return objectLoader.load();
- });
- }
-
- getOperatorList({
- handler,
- sink,
- task,
- intent,
- renderInteractiveForms
- }) {
- const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream");
- const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]);
- const partialEvaluator = new _evaluator.PartialEvaluator({
- xref: this.xref,
- handler,
- pageIndex: this.pageIndex,
- idFactory: this.idFactory,
- fontCache: this.fontCache,
- builtInCMapCache: this.builtInCMapCache,
- globalImageCache: this.globalImageCache,
- options: this.evaluatorOptions,
- pdfFunctionFactory: this.pdfFunctionFactory
- });
- const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
- const pageListPromise = dataPromises.then(([contentStream]) => {
- const opList = new _operator_list.OperatorList(intent, sink, this.pageIndex);
- handler.send("StartRenderPage", {
- transparency: partialEvaluator.hasBlendModes(this.resources),
- pageIndex: this.pageIndex,
- intent
- });
- return partialEvaluator.getOperatorList({
- stream: contentStream,
- task,
- resources: this.resources,
- operatorList: opList
- }).then(function () {
- return opList;
- });
- });
- return Promise.all([pageListPromise, this._parsedAnnotations]).then(function ([pageOpList, annotations]) {
- if (annotations.length === 0) {
- pageOpList.flush(true);
- return {
- length: pageOpList.totalLength
- };
- }
-
- const opListPromises = [];
-
- for (const annotation of annotations) {
- if (isAnnotationRenderable(annotation, intent)) {
- opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms).catch(function (reason) {
- (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`);
- return null;
- }));
- }
- }
-
- return Promise.all(opListPromises).then(function (opLists) {
- pageOpList.addOp(_util.OPS.beginAnnotations, []);
-
- for (const opList of opLists) {
- pageOpList.addOpList(opList);
- }
-
- pageOpList.addOp(_util.OPS.endAnnotations, []);
- pageOpList.flush(true);
- return {
- length: pageOpList.totalLength
- };
- });
- });
- }
-
- extractTextContent({
- handler,
- task,
- normalizeWhitespace,
- sink,
- combineTextItems
- }) {
- const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream");
- const resourcesPromise = this.loadResources(["ExtGState", "XObject", "Font"]);
- const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
- return dataPromises.then(([contentStream]) => {
- const partialEvaluator = new _evaluator.PartialEvaluator({
- xref: this.xref,
- handler,
- pageIndex: this.pageIndex,
- idFactory: this.idFactory,
- fontCache: this.fontCache,
- builtInCMapCache: this.builtInCMapCache,
- globalImageCache: this.globalImageCache,
- options: this.evaluatorOptions,
- pdfFunctionFactory: this.pdfFunctionFactory
- });
- return partialEvaluator.getTextContent({
- stream: contentStream,
- task,
- resources: this.resources,
- normalizeWhitespace,
- combineTextItems,
- sink
- });
- });
- }
-
- getAnnotationsData(intent) {
- return this._parsedAnnotations.then(function (annotations) {
- const annotationsData = [];
-
- for (let i = 0, ii = annotations.length; i < ii; i++) {
- if (!intent || isAnnotationRenderable(annotations[i], intent)) {
- annotationsData.push(annotations[i].data);
- }
- }
-
- return annotationsData;
- });
- }
-
- get annotations() {
- return (0, _util.shadow)(this, "annotations", this._getInheritableProperty("Annots") || []);
- }
-
- get _parsedAnnotations() {
- const parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(() => {
- const annotationPromises = [];
-
- for (const annotationRef of this.annotations) {
- annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory).catch(function (reason) {
- (0, _util.warn)(`_parsedAnnotations: "${reason}".`);
- return null;
- }));
- }
-
- return Promise.all(annotationPromises).then(function (annotations) {
- return annotations.filter(annotation => !!annotation);
- });
- });
- return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations);
- }
-
-}
-
-exports.Page = Page;
-const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]);
-const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]);
-const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]);
-const FINGERPRINT_FIRST_BYTES = 1024;
-const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
-const PDF_HEADER_VERSION_REGEXP = /^[1-9]\.[0-9]$/;
-
-function find(stream, signature, limit = 1024, backwards = false) {
- const signatureLength = signature.length;
- const scanBytes = stream.peekBytes(limit);
- const scanLength = scanBytes.length - signatureLength;
-
- if (scanLength <= 0) {
- return false;
- }
-
- if (backwards) {
- const signatureEnd = signatureLength - 1;
- let pos = scanBytes.length - 1;
-
- while (pos >= signatureEnd) {
- let j = 0;
-
- while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) {
- j++;
- }
-
- if (j >= signatureLength) {
- stream.pos += pos - signatureEnd;
- return true;
- }
-
- pos--;
- }
- } else {
- let pos = 0;
-
- while (pos <= scanLength) {
- let j = 0;
-
- while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
- j++;
- }
-
- if (j >= signatureLength) {
- stream.pos += pos;
- return true;
- }
-
- pos++;
- }
- }
-
- return false;
-}
-
-class PDFDocument {
- constructor(pdfManager, arg) {
- let stream;
-
- if ((0, _primitives.isStream)(arg)) {
- stream = arg;
- } else if ((0, _util.isArrayBuffer)(arg)) {
- stream = new _stream.Stream(arg);
- } else {
- throw new Error("PDFDocument: Unknown argument type");
- }
-
- if (stream.length <= 0) {
- throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");
- }
-
- this.pdfManager = pdfManager;
- this.stream = stream;
- this.xref = new _obj.XRef(stream, pdfManager);
- this.pdfFunctionFactory = new _function.PDFFunctionFactory({
- xref: this.xref,
- isEvalSupported: pdfManager.evaluatorOptions.isEvalSupported
- });
- this._pagePromises = [];
- }
-
- parse(recoveryMode) {
- this.setup(recoveryMode);
- const version = this.catalog.catDict.get("Version");
-
- if ((0, _primitives.isName)(version)) {
- this.pdfFormatVersion = version.name;
- }
-
- try {
- this.acroForm = this.catalog.catDict.get("AcroForm");
-
- if (this.acroForm) {
- this.xfa = this.acroForm.get("XFA");
- const fields = this.acroForm.get("Fields");
-
- if ((!Array.isArray(fields) || fields.length === 0) && !this.xfa) {
- this.acroForm = null;
- }
- }
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.info)("Cannot fetch AcroForm entry; assuming no AcroForms are present");
- this.acroForm = null;
- }
-
- try {
- const collection = this.catalog.catDict.get("Collection");
-
- if ((0, _primitives.isDict)(collection) && collection.getKeys().length > 0) {
- this.collection = collection;
- }
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.info)("Cannot fetch Collection dictionary.");
- }
- }
-
- get linearization() {
- let linearization = null;
-
- try {
- linearization = _parser.Linearization.create(this.stream);
- } catch (err) {
- if (err instanceof _core_utils.MissingDataException) {
- throw err;
- }
-
- (0, _util.info)(err);
- }
-
- return (0, _util.shadow)(this, "linearization", linearization);
- }
-
- get startXRef() {
- const stream = this.stream;
- let startXRef = 0;
-
- if (this.linearization) {
- stream.reset();
-
- if (find(stream, ENDOBJ_SIGNATURE)) {
- startXRef = stream.pos + 6 - stream.start;
- }
- } else {
- const step = 1024;
- const startXRefLength = STARTXREF_SIGNATURE.length;
- let found = false,
- pos = stream.end;
-
- while (!found && pos > 0) {
- pos -= step - startXRefLength;
-
- if (pos < 0) {
- pos = 0;
- }
-
- stream.pos = pos;
- found = find(stream, STARTXREF_SIGNATURE, step, true);
- }
-
- if (found) {
- stream.skip(9);
- let ch;
-
- do {
- ch = stream.getByte();
- } while ((0, _core_utils.isWhiteSpace)(ch));
-
- let str = "";
-
- while (ch >= 0x20 && ch <= 0x39) {
- str += String.fromCharCode(ch);
- ch = stream.getByte();
- }
-
- startXRef = parseInt(str, 10);
-
- if (isNaN(startXRef)) {
- startXRef = 0;
- }
- }
- }
-
- return (0, _util.shadow)(this, "startXRef", startXRef);
- }
-
- checkHeader() {
- const stream = this.stream;
- stream.reset();
-
- if (!find(stream, PDF_HEADER_SIGNATURE)) {
- return;
- }
-
- stream.moveStart();
- const MAX_PDF_VERSION_LENGTH = 12;
- let version = "",
- ch;
-
- while ((ch = stream.getByte()) > 0x20) {
- if (version.length >= MAX_PDF_VERSION_LENGTH) {
- break;
- }
-
- version += String.fromCharCode(ch);
- }
-
- if (!this.pdfFormatVersion) {
- this.pdfFormatVersion = version.substring(5);
- }
- }
-
- parseStartXRef() {
- this.xref.setStartXRef(this.startXRef);
- }
-
- setup(recoveryMode) {
- this.xref.parse(recoveryMode);
- this.catalog = new _obj.Catalog(this.pdfManager, this.xref);
- }
-
- get numPages() {
- const linearization = this.linearization;
- const num = linearization ? linearization.numPages : this.catalog.numPages;
- return (0, _util.shadow)(this, "numPages", num);
- }
-
- get documentInfo() {
- const DocumentInfoValidators = {
- Title: _util.isString,
- Author: _util.isString,
- Subject: _util.isString,
- Keywords: _util.isString,
- Creator: _util.isString,
- Producer: _util.isString,
- CreationDate: _util.isString,
- ModDate: _util.isString,
- Trapped: _primitives.isName
- };
- let version = this.pdfFormatVersion;
-
- if (typeof version !== "string" || !PDF_HEADER_VERSION_REGEXP.test(version)) {
- (0, _util.warn)(`Invalid PDF header version number: ${version}`);
- version = null;
- }
-
- const docInfo = {
- PDFFormatVersion: version,
- IsLinearized: !!this.linearization,
- IsAcroFormPresent: !!this.acroForm,
- IsXFAPresent: !!this.xfa,
- IsCollectionPresent: !!this.collection
- };
- let infoDict;
-
- try {
- infoDict = this.xref.trailer.get("Info");
- } catch (err) {
- if (err instanceof _core_utils.MissingDataException) {
- throw err;
- }
-
- (0, _util.info)("The document information dictionary is invalid.");
- }
-
- if ((0, _primitives.isDict)(infoDict)) {
- for (const key of infoDict.getKeys()) {
- const value = infoDict.get(key);
-
- if (DocumentInfoValidators[key]) {
- if (DocumentInfoValidators[key](value)) {
- docInfo[key] = typeof value !== "string" ? value : (0, _util.stringToPDFString)(value);
- } else {
- (0, _util.info)(`Bad value in document info for "${key}".`);
- }
- } else if (typeof key === "string") {
- let customValue;
-
- if ((0, _util.isString)(value)) {
- customValue = (0, _util.stringToPDFString)(value);
- } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) {
- customValue = value;
- } else {
- (0, _util.info)(`Unsupported value in document info for (custom) "${key}".`);
- continue;
- }
-
- if (!docInfo.Custom) {
- docInfo.Custom = Object.create(null);
- }
-
- docInfo.Custom[key] = customValue;
- }
- }
- }
-
- return (0, _util.shadow)(this, "documentInfo", docInfo);
- }
-
- get fingerprint() {
- let hash;
- const idArray = this.xref.trailer.get("ID");
-
- if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) {
- hash = (0, _util.stringToBytes)(idArray[0]);
- } else {
- hash = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);
- }
-
- const fingerprintBuf = [];
-
- for (let i = 0, ii = hash.length; i < ii; i++) {
- const hex = hash[i].toString(16);
- fingerprintBuf.push(hex.padStart(2, "0"));
- }
-
- return (0, _util.shadow)(this, "fingerprint", fingerprintBuf.join(""));
- }
-
- _getLinearizationPage(pageIndex) {
- const {
- catalog,
- linearization
- } = this;
-
- const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0);
-
- return this.xref.fetchAsync(ref).then(obj => {
- if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Type") && obj.has("Contents")) {
- if (ref && !catalog.pageKidsCountCache.has(ref)) {
- catalog.pageKidsCountCache.put(ref, 1);
- }
-
- return [obj, ref];
- }
-
- throw new _util.FormatError("The Linearization dictionary doesn't point " + "to a valid Page dictionary.");
- }).catch(reason => {
- (0, _util.info)(reason);
- return catalog.getPageDict(pageIndex);
- });
- }
-
- getPage(pageIndex) {
- if (this._pagePromises[pageIndex] !== undefined) {
- return this._pagePromises[pageIndex];
- }
-
- const {
- catalog,
- linearization
- } = this;
- const promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex);
- return this._pagePromises[pageIndex] = promise.then(([pageDict, ref]) => {
- return new Page({
- pdfManager: this.pdfManager,
- xref: this.xref,
- pageIndex,
- pageDict,
- ref,
- fontCache: catalog.fontCache,
- builtInCMapCache: catalog.builtInCMapCache,
- globalImageCache: catalog.globalImageCache,
- pdfFunctionFactory: this.pdfFunctionFactory
- });
- });
- }
-
- checkFirstPage() {
- return this.getPage(0).catch(async reason => {
- if (reason instanceof _core_utils.XRefEntryException) {
- this._pagePromises.length = 0;
- await this.cleanup();
- throw new _core_utils.XRefParseException();
- }
- });
- }
-
- fontFallback(id, handler) {
- return this.catalog.fontFallback(id, handler);
- }
-
- async cleanup(manuallyTriggered = false) {
- return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)();
- }
-
-}
-
-exports.PDFDocument = PDFDocument;
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _parser = __w_pdfjs_require__(11);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _crypto = __w_pdfjs_require__(22);
-
-var _colorspace = __w_pdfjs_require__(23);
-
-var _image_utils = __w_pdfjs_require__(24);
-
-function fetchDestination(dest) {
- return (0, _primitives.isDict)(dest) ? dest.get("D") : dest;
-}
-
-class Catalog {
- constructor(pdfManager, xref) {
- this.pdfManager = pdfManager;
- this.xref = xref;
- this.catDict = xref.getCatalogObj();
-
- if (!(0, _primitives.isDict)(this.catDict)) {
- throw new _util.FormatError("Catalog object is not a dictionary.");
- }
-
- this.fontCache = new _primitives.RefSetCache();
- this.builtInCMapCache = new Map();
- this.globalImageCache = new _image_utils.GlobalImageCache();
- this.pageKidsCountCache = new _primitives.RefSetCache();
- }
-
- get metadata() {
- const streamRef = this.catDict.getRaw("Metadata");
-
- if (!(0, _primitives.isRef)(streamRef)) {
- return (0, _util.shadow)(this, "metadata", null);
- }
-
- const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);
- const stream = this.xref.fetch(streamRef, suppressEncryption);
- let metadata;
-
- if (stream && (0, _primitives.isDict)(stream.dict)) {
- const type = stream.dict.get("Type");
- const subtype = stream.dict.get("Subtype");
-
- if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) {
- try {
- metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));
- } catch (e) {
- if (e instanceof _core_utils.MissingDataException) {
- throw e;
- }
-
- (0, _util.info)("Skipping invalid metadata.");
- }
- }
- }
-
- return (0, _util.shadow)(this, "metadata", metadata);
- }
-
- get toplevelPagesDict() {
- const pagesObj = this.catDict.get("Pages");
-
- if (!(0, _primitives.isDict)(pagesObj)) {
- throw new _util.FormatError("Invalid top-level pages dictionary.");
- }
-
- return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj);
- }
-
- get documentOutline() {
- let obj = null;
-
- try {
- obj = this._readDocumentOutline();
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)("Unable to read document outline.");
- }
-
- return (0, _util.shadow)(this, "documentOutline", obj);
- }
-
- _readDocumentOutline() {
- let obj = this.catDict.get("Outlines");
-
- if (!(0, _primitives.isDict)(obj)) {
- return null;
- }
-
- obj = obj.getRaw("First");
-
- if (!(0, _primitives.isRef)(obj)) {
- return null;
- }
-
- const root = {
- items: []
- };
- const queue = [{
- obj,
- parent: root
- }];
- const processed = new _primitives.RefSet();
- processed.put(obj);
- const xref = this.xref,
- blackColor = new Uint8ClampedArray(3);
-
- while (queue.length > 0) {
- const i = queue.shift();
- const outlineDict = xref.fetchIfRef(i.obj);
-
- if (outlineDict === null) {
- continue;
- }
-
- if (!outlineDict.has("Title")) {
- throw new _util.FormatError("Invalid outline item encountered.");
- }
-
- const data = {
- url: null,
- dest: null
- };
- Catalog.parseDestDictionary({
- destDict: outlineDict,
- resultObj: data,
- docBaseUrl: this.pdfManager.docBaseUrl
- });
- const title = outlineDict.get("Title");
- const flags = outlineDict.get("F") || 0;
- const color = outlineDict.getArray("C");
- const count = outlineDict.get("Count");
- let rgbColor = blackColor;
-
- if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {
- rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);
- }
-
- const outlineItem = {
- dest: data.dest,
- url: data.url,
- unsafeUrl: data.unsafeUrl,
- newWindow: data.newWindow,
- title: (0, _util.stringToPDFString)(title),
- color: rgbColor,
- count: Number.isInteger(count) ? count : undefined,
- bold: !!(flags & 2),
- italic: !!(flags & 1),
- items: []
- };
- i.parent.items.push(outlineItem);
- obj = outlineDict.getRaw("First");
-
- if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
- queue.push({
- obj,
- parent: outlineItem
- });
- processed.put(obj);
- }
-
- obj = outlineDict.getRaw("Next");
-
- if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
- queue.push({
- obj,
- parent: i.parent
- });
- processed.put(obj);
- }
- }
-
- return root.items.length > 0 ? root.items : null;
- }
-
- get permissions() {
- let permissions = null;
-
- try {
- permissions = this._readPermissions();
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)("Unable to read permissions.");
- }
-
- return (0, _util.shadow)(this, "permissions", permissions);
- }
-
- _readPermissions() {
- const encrypt = this.xref.trailer.get("Encrypt");
-
- if (!(0, _primitives.isDict)(encrypt)) {
- return null;
- }
-
- let flags = encrypt.get("P");
-
- if (!(0, _util.isNum)(flags)) {
- return null;
- }
-
- flags += 2 ** 32;
- const permissions = [];
-
- for (const key in _util.PermissionFlag) {
- const value = _util.PermissionFlag[key];
-
- if (flags & value) {
- permissions.push(value);
- }
- }
-
- return permissions;
- }
-
- get numPages() {
- const obj = this.toplevelPagesDict.get("Count");
-
- if (!Number.isInteger(obj)) {
- throw new _util.FormatError("Page count in top-level pages dictionary is not an integer.");
- }
-
- return (0, _util.shadow)(this, "numPages", obj);
- }
-
- get destinations() {
- const obj = this._readDests(),
- dests = Object.create(null);
-
- if (obj instanceof NameTree) {
- const names = obj.getAll();
-
- for (const name in names) {
- dests[name] = fetchDestination(names[name]);
- }
- } else if (obj instanceof _primitives.Dict) {
- obj.forEach(function (key, value) {
- if (value) {
- dests[key] = fetchDestination(value);
- }
- });
- }
-
- return (0, _util.shadow)(this, "destinations", dests);
- }
-
- getDestination(destinationId) {
- const obj = this._readDests();
-
- if (obj instanceof NameTree || obj instanceof _primitives.Dict) {
- return fetchDestination(obj.get(destinationId) || null);
- }
-
- return null;
- }
-
- _readDests() {
- const obj = this.catDict.get("Names");
-
- if (obj && obj.has("Dests")) {
- return new NameTree(obj.getRaw("Dests"), this.xref);
- } else if (this.catDict.has("Dests")) {
- return this.catDict.get("Dests");
- }
-
- return undefined;
- }
-
- get pageLabels() {
- let obj = null;
-
- try {
- obj = this._readPageLabels();
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)("Unable to read page labels.");
- }
-
- return (0, _util.shadow)(this, "pageLabels", obj);
- }
-
- _readPageLabels() {
- const obj = this.catDict.getRaw("PageLabels");
-
- if (!obj) {
- return null;
- }
-
- const pageLabels = new Array(this.numPages);
- let style = null,
- prefix = "";
- const numberTree = new NumberTree(obj, this.xref);
- const nums = numberTree.getAll();
- let currentLabel = "",
- currentIndex = 1;
-
- for (let i = 0, ii = this.numPages; i < ii; i++) {
- if (i in nums) {
- const labelDict = nums[i];
-
- if (!(0, _primitives.isDict)(labelDict)) {
- throw new _util.FormatError("PageLabel is not a dictionary.");
- }
-
- if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) {
- throw new _util.FormatError("Invalid type in PageLabel dictionary.");
- }
-
- if (labelDict.has("S")) {
- const s = labelDict.get("S");
-
- if (!(0, _primitives.isName)(s)) {
- throw new _util.FormatError("Invalid style in PageLabel dictionary.");
- }
-
- style = s.name;
- } else {
- style = null;
- }
-
- if (labelDict.has("P")) {
- const p = labelDict.get("P");
-
- if (!(0, _util.isString)(p)) {
- throw new _util.FormatError("Invalid prefix in PageLabel dictionary.");
- }
-
- prefix = (0, _util.stringToPDFString)(p);
- } else {
- prefix = "";
- }
-
- if (labelDict.has("St")) {
- const st = labelDict.get("St");
-
- if (!(Number.isInteger(st) && st >= 1)) {
- throw new _util.FormatError("Invalid start in PageLabel dictionary.");
- }
-
- currentIndex = st;
- } else {
- currentIndex = 1;
- }
- }
-
- switch (style) {
- case "D":
- currentLabel = currentIndex;
- break;
-
- case "R":
- case "r":
- currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r");
- break;
-
- case "A":
- case "a":
- const LIMIT = 26;
- const A_UPPER_CASE = 0x41,
- A_LOWER_CASE = 0x61;
- const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE;
- const letterIndex = currentIndex - 1;
- const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);
- const charBuf = [];
-
- for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {
- charBuf.push(character);
- }
-
- currentLabel = charBuf.join("");
- break;
-
- default:
- if (style) {
- throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`);
- }
-
- currentLabel = "";
- }
-
- pageLabels[i] = prefix + currentLabel;
- currentIndex++;
- }
-
- return pageLabels;
- }
-
- get pageLayout() {
- const obj = this.catDict.get("PageLayout");
- let pageLayout = "";
-
- if ((0, _primitives.isName)(obj)) {
- switch (obj.name) {
- case "SinglePage":
- case "OneColumn":
- case "TwoColumnLeft":
- case "TwoColumnRight":
- case "TwoPageLeft":
- case "TwoPageRight":
- pageLayout = obj.name;
- }
- }
-
- return (0, _util.shadow)(this, "pageLayout", pageLayout);
- }
-
- get pageMode() {
- const obj = this.catDict.get("PageMode");
- let pageMode = "UseNone";
-
- if ((0, _primitives.isName)(obj)) {
- switch (obj.name) {
- case "UseNone":
- case "UseOutlines":
- case "UseThumbs":
- case "FullScreen":
- case "UseOC":
- case "UseAttachments":
- pageMode = obj.name;
- }
- }
-
- return (0, _util.shadow)(this, "pageMode", pageMode);
- }
-
- get viewerPreferences() {
- const ViewerPreferencesValidators = {
- HideToolbar: _util.isBool,
- HideMenubar: _util.isBool,
- HideWindowUI: _util.isBool,
- FitWindow: _util.isBool,
- CenterWindow: _util.isBool,
- DisplayDocTitle: _util.isBool,
- NonFullScreenPageMode: _primitives.isName,
- Direction: _primitives.isName,
- ViewArea: _primitives.isName,
- ViewClip: _primitives.isName,
- PrintArea: _primitives.isName,
- PrintClip: _primitives.isName,
- PrintScaling: _primitives.isName,
- Duplex: _primitives.isName,
- PickTrayByPDFSize: _util.isBool,
- PrintPageRange: Array.isArray,
- NumCopies: Number.isInteger
- };
- const obj = this.catDict.get("ViewerPreferences");
- let prefs = null;
-
- if ((0, _primitives.isDict)(obj)) {
- for (const key in ViewerPreferencesValidators) {
- if (!obj.has(key)) {
- continue;
- }
-
- const value = obj.get(key);
-
- if (!ViewerPreferencesValidators[key](value)) {
- (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
- continue;
- }
-
- let prefValue;
-
- switch (key) {
- case "NonFullScreenPageMode":
- switch (value.name) {
- case "UseNone":
- case "UseOutlines":
- case "UseThumbs":
- case "UseOC":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "UseNone";
- }
-
- break;
-
- case "Direction":
- switch (value.name) {
- case "L2R":
- case "R2L":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "L2R";
- }
-
- break;
-
- case "ViewArea":
- case "ViewClip":
- case "PrintArea":
- case "PrintClip":
- switch (value.name) {
- case "MediaBox":
- case "CropBox":
- case "BleedBox":
- case "TrimBox":
- case "ArtBox":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "CropBox";
- }
-
- break;
-
- case "PrintScaling":
- switch (value.name) {
- case "None":
- case "AppDefault":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "AppDefault";
- }
-
- break;
-
- case "Duplex":
- switch (value.name) {
- case "Simplex":
- case "DuplexFlipShortEdge":
- case "DuplexFlipLongEdge":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "None";
- }
-
- break;
-
- case "PrintPageRange":
- const length = value.length;
-
- if (length % 2 !== 0) {
- break;
- }
-
- const isValid = value.every((page, i, arr) => {
- return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages;
- });
-
- if (isValid) {
- prefValue = value;
- }
-
- break;
-
- case "NumCopies":
- if (value > 0) {
- prefValue = value;
- }
-
- break;
-
- default:
- if (typeof value !== "boolean") {
- throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`);
- }
-
- prefValue = value;
- }
-
- if (prefValue !== undefined) {
- if (!prefs) {
- prefs = Object.create(null);
- }
-
- prefs[key] = prefValue;
- } else {
- (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
- }
- }
- }
-
- return (0, _util.shadow)(this, "viewerPreferences", prefs);
- }
-
- get openAction() {
- const obj = this.catDict.get("OpenAction");
- let openAction = null;
-
- if ((0, _primitives.isDict)(obj)) {
- const destDict = new _primitives.Dict(this.xref);
- destDict.set("A", obj);
- const resultObj = {
- url: null,
- dest: null,
- action: null
- };
- Catalog.parseDestDictionary({
- destDict,
- resultObj
- });
-
- if (Array.isArray(resultObj.dest)) {
- if (!openAction) {
- openAction = Object.create(null);
- }
-
- openAction.dest = resultObj.dest;
- } else if (resultObj.action) {
- if (!openAction) {
- openAction = Object.create(null);
- }
-
- openAction.action = resultObj.action;
- }
- } else if (Array.isArray(obj)) {
- if (!openAction) {
- openAction = Object.create(null);
- }
-
- openAction.dest = obj;
- }
-
- return (0, _util.shadow)(this, "openAction", openAction);
- }
-
- get attachments() {
- const obj = this.catDict.get("Names");
- let attachments = null;
-
- if (obj && obj.has("EmbeddedFiles")) {
- const nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
- const names = nameTree.getAll();
-
- for (const name in names) {
- const fs = new FileSpec(names[name], this.xref);
-
- if (!attachments) {
- attachments = Object.create(null);
- }
-
- attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;
- }
- }
-
- return (0, _util.shadow)(this, "attachments", attachments);
- }
-
- get javaScript() {
- const obj = this.catDict.get("Names");
- let javaScript = null;
-
- function appendIfJavaScriptDict(jsDict) {
- const type = jsDict.get("S");
-
- if (!(0, _primitives.isName)(type, "JavaScript")) {
- return;
- }
-
- let js = jsDict.get("JS");
-
- if ((0, _primitives.isStream)(js)) {
- js = (0, _util.bytesToString)(js.getBytes());
- } else if (!(0, _util.isString)(js)) {
- return;
- }
-
- if (!javaScript) {
- javaScript = [];
- }
-
- javaScript.push((0, _util.stringToPDFString)(js));
- }
-
- if (obj && obj.has("JavaScript")) {
- const nameTree = new NameTree(obj.getRaw("JavaScript"), this.xref);
- const names = nameTree.getAll();
-
- for (const name in names) {
- const jsDict = names[name];
-
- if ((0, _primitives.isDict)(jsDict)) {
- appendIfJavaScriptDict(jsDict);
- }
- }
- }
-
- const openAction = this.catDict.get("OpenAction");
-
- if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get("S"), "JavaScript")) {
- appendIfJavaScriptDict(openAction);
- }
-
- return (0, _util.shadow)(this, "javaScript", javaScript);
- }
-
- fontFallback(id, handler) {
- const promises = [];
- this.fontCache.forEach(function (promise) {
- promises.push(promise);
- });
- return Promise.all(promises).then(translatedFonts => {
- for (const translatedFont of translatedFonts) {
- if (translatedFont.loadedName === id) {
- translatedFont.fallback(handler);
- return;
- }
- }
- });
- }
-
- cleanup(manuallyTriggered = false) {
- (0, _primitives.clearPrimitiveCaches)();
- this.globalImageCache.clear(manuallyTriggered);
- this.pageKidsCountCache.clear();
- const promises = [];
- this.fontCache.forEach(function (promise) {
- promises.push(promise);
- });
- return Promise.all(promises).then(translatedFonts => {
- for (const {
- dict
- } of translatedFonts) {
- delete dict.translated;
- }
-
- this.fontCache.clear();
- this.builtInCMapCache.clear();
- });
- }
-
- getPageDict(pageIndex) {
- const capability = (0, _util.createPromiseCapability)();
- const nodesToVisit = [this.catDict.getRaw("Pages")];
- const visitedNodes = new _primitives.RefSet();
- const xref = this.xref,
- pageKidsCountCache = this.pageKidsCountCache;
- let count,
- currentPageIndex = 0;
-
- function next() {
- while (nodesToVisit.length) {
- const currentNode = nodesToVisit.pop();
-
- if ((0, _primitives.isRef)(currentNode)) {
- count = pageKidsCountCache.get(currentNode);
-
- if (count > 0 && currentPageIndex + count < pageIndex) {
- currentPageIndex += count;
- continue;
- }
-
- if (visitedNodes.has(currentNode)) {
- capability.reject(new _util.FormatError("Pages tree contains circular reference."));
- return;
- }
-
- visitedNodes.put(currentNode);
- xref.fetchAsync(currentNode).then(function (obj) {
- if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) {
- if (pageIndex === currentPageIndex) {
- if (currentNode && !pageKidsCountCache.has(currentNode)) {
- pageKidsCountCache.put(currentNode, 1);
- }
-
- capability.resolve([obj, currentNode]);
- } else {
- currentPageIndex++;
- next();
- }
-
- return;
- }
-
- nodesToVisit.push(obj);
- next();
- }, capability.reject);
- return;
- }
-
- if (!(0, _primitives.isDict)(currentNode)) {
- capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object."));
- return;
- }
-
- count = currentNode.get("Count");
-
- if (Number.isInteger(count) && count >= 0) {
- const objId = currentNode.objId;
-
- if (objId && !pageKidsCountCache.has(objId)) {
- pageKidsCountCache.put(objId, count);
- }
-
- if (currentPageIndex + count <= pageIndex) {
- currentPageIndex += count;
- continue;
- }
- }
-
- const kids = currentNode.get("Kids");
-
- if (!Array.isArray(kids)) {
- if ((0, _primitives.isName)(currentNode.get("Type"), "Page") || !currentNode.has("Type") && currentNode.has("Contents")) {
- if (currentPageIndex === pageIndex) {
- capability.resolve([currentNode, null]);
- return;
- }
-
- currentPageIndex++;
- continue;
- }
-
- capability.reject(new _util.FormatError("Page dictionary kids object is not an array."));
- return;
- }
-
- for (let last = kids.length - 1; last >= 0; last--) {
- nodesToVisit.push(kids[last]);
- }
- }
-
- capability.reject(new Error(`Page index ${pageIndex} not found.`));
- }
-
- next();
- return capability.promise;
- }
-
- getPageIndex(pageRef) {
- const xref = this.xref;
-
- function pagesBeforeRef(kidRef) {
- let total = 0,
- parentRef;
- return xref.fetchAsync(kidRef).then(function (node) {
- if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) {
- throw new _util.FormatError("The reference does not point to a /Page dictionary.");
- }
-
- if (!node) {
- return null;
- }
-
- if (!(0, _primitives.isDict)(node)) {
- throw new _util.FormatError("Node must be a dictionary.");
- }
-
- parentRef = node.getRaw("Parent");
- return node.getAsync("Parent");
- }).then(function (parent) {
- if (!parent) {
- return null;
- }
-
- if (!(0, _primitives.isDict)(parent)) {
- throw new _util.FormatError("Parent must be a dictionary.");
- }
-
- return parent.getAsync("Kids");
- }).then(function (kids) {
- if (!kids) {
- return null;
- }
-
- const kidPromises = [];
- let found = false;
-
- for (let i = 0, ii = kids.length; i < ii; i++) {
- const kid = kids[i];
-
- if (!(0, _primitives.isRef)(kid)) {
- throw new _util.FormatError("Kid must be a reference.");
- }
-
- if ((0, _primitives.isRefsEqual)(kid, kidRef)) {
- found = true;
- break;
- }
-
- kidPromises.push(xref.fetchAsync(kid).then(function (obj) {
- if (!(0, _primitives.isDict)(obj)) {
- throw new _util.FormatError("Kid node must be a dictionary.");
- }
-
- if (obj.has("Count")) {
- total += obj.get("Count");
- } else {
- total++;
- }
- }));
- }
-
- if (!found) {
- throw new _util.FormatError("Kid reference not found in parent's kids.");
- }
-
- return Promise.all(kidPromises).then(function () {
- return [total, parentRef];
- });
- });
- }
-
- let total = 0;
-
- function next(ref) {
- return pagesBeforeRef(ref).then(function (args) {
- if (!args) {
- return total;
- }
-
- const [count, parentRef] = args;
- total += count;
- return next(parentRef);
- });
- }
-
- return next(pageRef);
- }
-
- static parseDestDictionary(params) {
- function addDefaultProtocolToUrl(url) {
- return url.startsWith("www.") ? `http://${url}` : url;
- }
-
- function tryConvertUrlEncoding(url) {
- try {
- return (0, _util.stringToUTF8String)(url);
- } catch (e) {
- return url;
- }
- }
-
- const destDict = params.destDict;
-
- if (!(0, _primitives.isDict)(destDict)) {
- (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary.");
- return;
- }
-
- const resultObj = params.resultObj;
-
- if (typeof resultObj !== "object") {
- (0, _util.warn)("parseDestDictionary: `resultObj` must be an object.");
- return;
- }
-
- const docBaseUrl = params.docBaseUrl || null;
- let action = destDict.get("A"),
- url,
- dest;
-
- if (!(0, _primitives.isDict)(action) && destDict.has("Dest")) {
- action = destDict.get("Dest");
- }
-
- if ((0, _primitives.isDict)(action)) {
- const actionType = action.get("S");
-
- if (!(0, _primitives.isName)(actionType)) {
- (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary.");
- return;
- }
-
- const actionName = actionType.name;
-
- switch (actionName) {
- case "URI":
- url = action.get("URI");
-
- if ((0, _primitives.isName)(url)) {
- url = "/" + url.name;
- } else if ((0, _util.isString)(url)) {
- url = addDefaultProtocolToUrl(url);
- }
-
- break;
-
- case "GoTo":
- dest = action.get("D");
- break;
-
- case "Launch":
- case "GoToR":
- const urlDict = action.get("F");
-
- if ((0, _primitives.isDict)(urlDict)) {
- url = urlDict.get("F") || null;
- } else if ((0, _util.isString)(urlDict)) {
- url = urlDict;
- }
-
- let remoteDest = action.get("D");
-
- if (remoteDest) {
- if ((0, _primitives.isName)(remoteDest)) {
- remoteDest = remoteDest.name;
- }
-
- if ((0, _util.isString)(url)) {
- const baseUrl = url.split("#")[0];
-
- if ((0, _util.isString)(remoteDest)) {
- url = baseUrl + "#" + remoteDest;
- } else if (Array.isArray(remoteDest)) {
- url = baseUrl + "#" + JSON.stringify(remoteDest);
- }
- }
- }
-
- const newWindow = action.get("NewWindow");
-
- if ((0, _util.isBool)(newWindow)) {
- resultObj.newWindow = newWindow;
- }
-
- break;
-
- case "Named":
- const namedAction = action.get("N");
-
- if ((0, _primitives.isName)(namedAction)) {
- resultObj.action = namedAction.name;
- }
-
- break;
-
- case "JavaScript":
- const jsAction = action.get("JS");
- let js;
-
- if ((0, _primitives.isStream)(jsAction)) {
- js = (0, _util.bytesToString)(jsAction.getBytes());
- } else if ((0, _util.isString)(jsAction)) {
- js = jsAction;
- }
-
- if (js) {
- const URL_OPEN_METHODS = ["app.launchURL", "window.open"];
- const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i");
- const jsUrl = regex.exec((0, _util.stringToPDFString)(js));
-
- if (jsUrl && jsUrl[2]) {
- url = jsUrl[2];
-
- if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") {
- resultObj.newWindow = true;
- }
-
- break;
- }
- }
-
- default:
- (0, _util.warn)(`parseDestDictionary: unsupported action type "${actionName}".`);
- break;
- }
- } else if (destDict.has("Dest")) {
- dest = destDict.get("Dest");
- }
-
- if ((0, _util.isString)(url)) {
- url = tryConvertUrlEncoding(url);
- const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);
-
- if (absoluteUrl) {
- resultObj.url = absoluteUrl.href;
- }
-
- resultObj.unsafeUrl = url;
- }
-
- if (dest) {
- if ((0, _primitives.isName)(dest)) {
- dest = dest.name;
- }
-
- if ((0, _util.isString)(dest) || Array.isArray(dest)) {
- resultObj.dest = dest;
- }
- }
- }
-
-}
-
-exports.Catalog = Catalog;
-
-var XRef = function XRefClosure() {
- function XRef(stream, pdfManager) {
- this.stream = stream;
- this.pdfManager = pdfManager;
- this.entries = [];
- this.xrefstms = Object.create(null);
- this._cacheMap = new Map();
- this.stats = {
- streamTypes: Object.create(null),
- fontTypes: Object.create(null)
- };
- }
-
- XRef.prototype = {
- setStartXRef: function XRef_setStartXRef(startXRef) {
- this.startXRefQueue = [startXRef];
- },
- parse: function XRef_parse(recoveryMode) {
- var trailerDict;
-
- if (!recoveryMode) {
- trailerDict = this.readXRef();
- } else {
- (0, _util.warn)("Indexing all PDF objects");
- trailerDict = this.indexObjects();
- }
-
- trailerDict.assignXref(this);
- this.trailer = trailerDict;
- let encrypt;
-
- try {
- encrypt = trailerDict.get("Encrypt");
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`);
- }
-
- if ((0, _primitives.isDict)(encrypt)) {
- var ids = trailerDict.get("ID");
- var fileId = ids && ids.length ? ids[0] : "";
- encrypt.suppressEncryption = true;
- this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);
- }
-
- let root;
-
- try {
- root = trailerDict.get("Root");
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`);
- }
-
- if ((0, _primitives.isDict)(root) && root.has("Pages")) {
- this.root = root;
- } else {
- if (!recoveryMode) {
- throw new _core_utils.XRefParseException();
- }
-
- throw new _util.FormatError("Invalid root reference");
- }
- },
- processXRefTable: function XRef_processXRefTable(parser) {
- if (!("tableState" in this)) {
- this.tableState = {
- entryNum: 0,
- streamPos: parser.lexer.stream.pos,
- parserBuf1: parser.buf1,
- parserBuf2: parser.buf2
- };
- }
-
- var obj = this.readXRefTable(parser);
-
- if (!(0, _primitives.isCmd)(obj, "trailer")) {
- throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary");
- }
-
- var dict = parser.getObj();
-
- if (!(0, _primitives.isDict)(dict) && dict.dict) {
- dict = dict.dict;
- }
-
- if (!(0, _primitives.isDict)(dict)) {
- throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary");
- }
-
- delete this.tableState;
- return dict;
- },
- readXRefTable: function XRef_readXRefTable(parser) {
- var stream = parser.lexer.stream;
- var tableState = this.tableState;
- stream.pos = tableState.streamPos;
- parser.buf1 = tableState.parserBuf1;
- parser.buf2 = tableState.parserBuf2;
- var obj;
-
- while (true) {
- if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) {
- if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) {
- break;
- }
-
- tableState.firstEntryNum = obj;
- tableState.entryCount = parser.getObj();
- }
-
- var first = tableState.firstEntryNum;
- var count = tableState.entryCount;
-
- if (!Number.isInteger(first) || !Number.isInteger(count)) {
- throw new _util.FormatError("Invalid XRef table: wrong types in subsection header");
- }
-
- for (var i = tableState.entryNum; i < count; i++) {
- tableState.streamPos = stream.pos;
- tableState.entryNum = i;
- tableState.parserBuf1 = parser.buf1;
- tableState.parserBuf2 = parser.buf2;
- var entry = {};
- entry.offset = parser.getObj();
- entry.gen = parser.getObj();
- var type = parser.getObj();
-
- if (type instanceof _primitives.Cmd) {
- switch (type.cmd) {
- case "f":
- entry.free = true;
- break;
-
- case "n":
- entry.uncompressed = true;
- break;
- }
- }
-
- if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {
- throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`);
- }
-
- if (i === 0 && entry.free && first === 1) {
- first = 0;
- }
-
- if (!this.entries[i + first]) {
- this.entries[i + first] = entry;
- }
- }
-
- tableState.entryNum = 0;
- tableState.streamPos = stream.pos;
- tableState.parserBuf1 = parser.buf1;
- tableState.parserBuf2 = parser.buf2;
- delete tableState.firstEntryNum;
- delete tableState.entryCount;
- }
-
- if (this.entries[0] && !this.entries[0].free) {
- throw new _util.FormatError("Invalid XRef table: unexpected first object");
- }
-
- return obj;
- },
- processXRefStream: function XRef_processXRefStream(stream) {
- if (!("streamState" in this)) {
- var streamParameters = stream.dict;
- var byteWidths = streamParameters.get("W");
- var range = streamParameters.get("Index");
-
- if (!range) {
- range = [0, streamParameters.get("Size")];
- }
-
- this.streamState = {
- entryRanges: range,
- byteWidths,
- entryNum: 0,
- streamPos: stream.pos
- };
- }
-
- this.readXRefStream(stream);
- delete this.streamState;
- return stream.dict;
- },
- readXRefStream: function XRef_readXRefStream(stream) {
- var i, j;
- var streamState = this.streamState;
- stream.pos = streamState.streamPos;
- var byteWidths = streamState.byteWidths;
- var typeFieldWidth = byteWidths[0];
- var offsetFieldWidth = byteWidths[1];
- var generationFieldWidth = byteWidths[2];
- var entryRanges = streamState.entryRanges;
-
- while (entryRanges.length > 0) {
- var first = entryRanges[0];
- var n = entryRanges[1];
-
- if (!Number.isInteger(first) || !Number.isInteger(n)) {
- throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`);
- }
-
- if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {
- throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`);
- }
-
- for (i = streamState.entryNum; i < n; ++i) {
- streamState.entryNum = i;
- streamState.streamPos = stream.pos;
- var type = 0,
- offset = 0,
- generation = 0;
-
- for (j = 0; j < typeFieldWidth; ++j) {
- type = type << 8 | stream.getByte();
- }
-
- if (typeFieldWidth === 0) {
- type = 1;
- }
-
- for (j = 0; j < offsetFieldWidth; ++j) {
- offset = offset << 8 | stream.getByte();
- }
-
- for (j = 0; j < generationFieldWidth; ++j) {
- generation = generation << 8 | stream.getByte();
- }
-
- var entry = {};
- entry.offset = offset;
- entry.gen = generation;
-
- switch (type) {
- case 0:
- entry.free = true;
- break;
-
- case 1:
- entry.uncompressed = true;
- break;
-
- case 2:
- break;
-
- default:
- throw new _util.FormatError(`Invalid XRef entry type: ${type}`);
- }
-
- if (!this.entries[first + i]) {
- this.entries[first + i] = entry;
- }
- }
-
- streamState.entryNum = 0;
- streamState.streamPos = stream.pos;
- entryRanges.splice(0, 2);
- }
- },
- indexObjects: function XRef_indexObjects() {
- var TAB = 0x9,
- LF = 0xa,
- CR = 0xd,
- SPACE = 0x20;
- var PERCENT = 0x25,
- LT = 0x3c;
-
- function readToken(data, offset) {
- var token = "",
- ch = data[offset];
-
- while (ch !== LF && ch !== CR && ch !== LT) {
- if (++offset >= data.length) {
- break;
- }
-
- token += String.fromCharCode(ch);
- ch = data[offset];
- }
-
- return token;
- }
-
- function skipUntil(data, offset, what) {
- var length = what.length,
- dataLength = data.length;
- var skipped = 0;
-
- while (offset < dataLength) {
- var i = 0;
-
- while (i < length && data[offset + i] === what[i]) {
- ++i;
- }
-
- if (i >= length) {
- break;
- }
-
- offset++;
- skipped++;
- }
-
- return skipped;
- }
-
- var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/;
- const endobjRegExp = /\bendobj[\b\s]$/;
- const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/;
- const CHECK_CONTENT_LENGTH = 25;
- var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
- var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);
- const objBytes = new Uint8Array([111, 98, 106]);
- var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
- this.entries.length = 0;
- var stream = this.stream;
- stream.pos = 0;
- var buffer = stream.getBytes();
- var position = stream.start,
- length = buffer.length;
- var trailers = [],
- xrefStms = [];
-
- while (position < length) {
- var ch = buffer[position];
-
- if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {
- ++position;
- continue;
- }
-
- if (ch === PERCENT) {
- do {
- ++position;
-
- if (position >= length) {
- break;
- }
-
- ch = buffer[position];
- } while (ch !== LF && ch !== CR);
-
- continue;
- }
-
- var token = readToken(buffer, position);
- var m;
-
- if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) {
- position += skipUntil(buffer, position, trailerBytes);
- trailers.push(position);
- position += skipUntil(buffer, position, startxrefBytes);
- } else if (m = objRegExp.exec(token)) {
- const num = m[1] | 0,
- gen = m[2] | 0;
-
- if (!this.entries[num] || this.entries[num].gen === gen) {
- this.entries[num] = {
- offset: position - stream.start,
- gen,
- uncompressed: true
- };
- }
-
- let contentLength,
- startPos = position + token.length;
-
- while (startPos < buffer.length) {
- const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4;
- contentLength = endPos - position;
- const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos);
- const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos));
-
- if (endobjRegExp.test(tokenStr)) {
- break;
- } else {
- const objToken = nestedObjRegExp.exec(tokenStr);
-
- if (objToken && objToken[1]) {
- (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.');
- contentLength -= objToken[1].length;
- break;
- }
- }
-
- startPos = endPos;
- }
-
- const content = buffer.subarray(position, position + contentLength);
- var xrefTagOffset = skipUntil(content, 0, xrefBytes);
-
- if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {
- xrefStms.push(position - stream.start);
- this.xrefstms[position - stream.start] = 1;
- }
-
- position += contentLength;
- } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) {
- trailers.push(position);
- position += skipUntil(buffer, position, startxrefBytes);
- } else {
- position += token.length + 1;
- }
- }
-
- var i, ii;
-
- for (i = 0, ii = xrefStms.length; i < ii; ++i) {
- this.startXRefQueue.push(xrefStms[i]);
- this.readXRef(true);
- }
-
- let trailerDict;
-
- for (i = 0, ii = trailers.length; i < ii; ++i) {
- stream.pos = trailers[i];
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true,
- recoveryMode: true
- });
- var obj = parser.getObj();
-
- if (!(0, _primitives.isCmd)(obj, "trailer")) {
- continue;
- }
-
- const dict = parser.getObj();
-
- if (!(0, _primitives.isDict)(dict)) {
- continue;
- }
-
- let rootDict;
-
- try {
- rootDict = dict.get("Root");
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- continue;
- }
-
- if (!(0, _primitives.isDict)(rootDict) || !rootDict.has("Pages")) {
- continue;
- }
-
- if (dict.has("ID")) {
- return dict;
- }
-
- trailerDict = dict;
- }
-
- if (trailerDict) {
- return trailerDict;
- }
-
- throw new _util.InvalidPDFException("Invalid PDF structure.");
- },
- readXRef: function XRef_readXRef(recoveryMode) {
- var stream = this.stream;
- const startXRefParsedCache = Object.create(null);
-
- try {
- while (this.startXRefQueue.length) {
- var startXRef = this.startXRefQueue[0];
-
- if (startXRefParsedCache[startXRef]) {
- (0, _util.warn)("readXRef - skipping XRef table since it was already parsed.");
- this.startXRefQueue.shift();
- continue;
- }
-
- startXRefParsedCache[startXRef] = true;
- stream.pos = startXRef + stream.start;
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true
- });
- var obj = parser.getObj();
- var dict;
-
- if ((0, _primitives.isCmd)(obj, "xref")) {
- dict = this.processXRefTable(parser);
-
- if (!this.topDict) {
- this.topDict = dict;
- }
-
- obj = dict.get("XRefStm");
-
- if (Number.isInteger(obj)) {
- var pos = obj;
-
- if (!(pos in this.xrefstms)) {
- this.xrefstms[pos] = 1;
- this.startXRefQueue.push(pos);
- }
- }
- } else if (Number.isInteger(obj)) {
- if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !(0, _primitives.isStream)(obj = parser.getObj())) {
- throw new _util.FormatError("Invalid XRef stream");
- }
-
- dict = this.processXRefStream(obj);
-
- if (!this.topDict) {
- this.topDict = dict;
- }
-
- if (!dict) {
- throw new _util.FormatError("Failed to read XRef stream");
- }
- } else {
- throw new _util.FormatError("Invalid XRef stream header");
- }
-
- obj = dict.get("Prev");
-
- if (Number.isInteger(obj)) {
- this.startXRefQueue.push(obj);
- } else if ((0, _primitives.isRef)(obj)) {
- this.startXRefQueue.push(obj.num);
- }
-
- this.startXRefQueue.shift();
- }
-
- return this.topDict;
- } catch (e) {
- if (e instanceof _core_utils.MissingDataException) {
- throw e;
- }
-
- (0, _util.info)("(while reading XRef): " + e);
- }
-
- if (recoveryMode) {
- return undefined;
- }
-
- throw new _core_utils.XRefParseException();
- },
- getEntry: function XRef_getEntry(i) {
- var xrefEntry = this.entries[i];
-
- if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
- return xrefEntry;
- }
-
- return null;
- },
- fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) {
- if (obj instanceof _primitives.Ref) {
- return this.fetch(obj, suppressEncryption);
- }
-
- return obj;
- },
- fetch: function XRef_fetch(ref, suppressEncryption) {
- if (!(ref instanceof _primitives.Ref)) {
- throw new Error("ref object is not a reference");
- }
-
- const num = ref.num;
-
- const cacheEntry = this._cacheMap.get(num);
-
- if (cacheEntry !== undefined) {
- if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {
- cacheEntry.objId = ref.toString();
- }
-
- return cacheEntry;
- }
-
- let xrefEntry = this.getEntry(num);
-
- if (xrefEntry === null) {
- this._cacheMap.set(num, xrefEntry);
-
- return xrefEntry;
- }
-
- if (xrefEntry.uncompressed) {
- xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);
- } else {
- xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption);
- }
-
- if ((0, _primitives.isDict)(xrefEntry)) {
- xrefEntry.objId = ref.toString();
- } else if ((0, _primitives.isStream)(xrefEntry)) {
- xrefEntry.dict.objId = ref.toString();
- }
-
- return xrefEntry;
- },
-
- fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {
- var gen = ref.gen;
- var num = ref.num;
-
- if (xrefEntry.gen !== gen) {
- throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`);
- }
-
- var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true
- });
- var obj1 = parser.getObj();
- var obj2 = parser.getObj();
- var obj3 = parser.getObj();
-
- if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) {
- throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
- }
-
- if (obj3.cmd !== "obj") {
- if (obj3.cmd.startsWith("obj")) {
- num = parseInt(obj3.cmd.substring(3), 10);
-
- if (!Number.isNaN(num)) {
- return num;
- }
- }
-
- throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
- }
-
- if (this.encrypt && !suppressEncryption) {
- xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));
- } else {
- xrefEntry = parser.getObj();
- }
-
- if (!(0, _primitives.isStream)(xrefEntry)) {
- this._cacheMap.set(num, xrefEntry);
- }
-
- return xrefEntry;
- },
-
- fetchCompressed(ref, xrefEntry, suppressEncryption = false) {
- const tableOffset = xrefEntry.offset;
- const stream = this.fetch(_primitives.Ref.get(tableOffset, 0));
-
- if (!(0, _primitives.isStream)(stream)) {
- throw new _util.FormatError("bad ObjStm stream");
- }
-
- const first = stream.dict.get("First");
- const n = stream.dict.get("N");
-
- if (!Number.isInteger(first) || !Number.isInteger(n)) {
- throw new _util.FormatError("invalid first and n parameters for ObjStm stream");
- }
-
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true
- });
- const nums = new Array(n);
-
- for (let i = 0; i < n; ++i) {
- const num = parser.getObj();
-
- if (!Number.isInteger(num)) {
- throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`);
- }
-
- const offset = parser.getObj();
-
- if (!Number.isInteger(offset)) {
- throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`);
- }
-
- nums[i] = num;
- }
-
- const entries = new Array(n);
-
- for (let i = 0; i < n; ++i) {
- const obj = parser.getObj();
- entries[i] = obj;
-
- if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === "endobj") {
- parser.shift();
- }
-
- if ((0, _primitives.isStream)(obj)) {
- continue;
- }
-
- const num = nums[i],
- entry = this.entries[num];
-
- if (entry && entry.offset === tableOffset && entry.gen === i) {
- this._cacheMap.set(num, obj);
- }
- }
-
- xrefEntry = entries[xrefEntry.gen];
-
- if (xrefEntry === undefined) {
- throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);
- }
-
- return xrefEntry;
- },
-
- async fetchIfRefAsync(obj, suppressEncryption) {
- if (obj instanceof _primitives.Ref) {
- return this.fetchAsync(obj, suppressEncryption);
- }
-
- return obj;
- },
-
- async fetchAsync(ref, suppressEncryption) {
- try {
- return this.fetch(ref, suppressEncryption);
- } catch (ex) {
- if (!(ex instanceof _core_utils.MissingDataException)) {
- throw ex;
- }
-
- await this.pdfManager.requestRange(ex.begin, ex.end);
- return this.fetchAsync(ref, suppressEncryption);
- }
- },
-
- getCatalogObj: function XRef_getCatalogObj() {
- return this.root;
- }
- };
- return XRef;
-}();
-
-exports.XRef = XRef;
-
-class NameOrNumberTree {
- constructor(root, xref, type) {
- if (this.constructor === NameOrNumberTree) {
- (0, _util.unreachable)("Cannot initialize NameOrNumberTree.");
- }
-
- this.root = root;
- this.xref = xref;
- this._type = type;
- }
-
- getAll() {
- const dict = Object.create(null);
-
- if (!this.root) {
- return dict;
- }
-
- const xref = this.xref;
- const processed = new _primitives.RefSet();
- processed.put(this.root);
- const queue = [this.root];
-
- while (queue.length > 0) {
- const obj = xref.fetchIfRef(queue.shift());
-
- if (!(0, _primitives.isDict)(obj)) {
- continue;
- }
-
- if (obj.has("Kids")) {
- const kids = obj.get("Kids");
-
- for (let i = 0, ii = kids.length; i < ii; i++) {
- const kid = kids[i];
-
- if (processed.has(kid)) {
- throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`);
- }
-
- queue.push(kid);
- processed.put(kid);
- }
-
- continue;
- }
-
- const entries = obj.get(this._type);
-
- if (Array.isArray(entries)) {
- for (let i = 0, ii = entries.length; i < ii; i += 2) {
- dict[xref.fetchIfRef(entries[i])] = xref.fetchIfRef(entries[i + 1]);
- }
- }
- }
-
- return dict;
- }
-
- get(key) {
- if (!this.root) {
- return null;
- }
-
- const xref = this.xref;
- let kidsOrEntries = xref.fetchIfRef(this.root);
- let loopCount = 0;
- const MAX_LEVELS = 10;
-
- while (kidsOrEntries.has("Kids")) {
- if (++loopCount > MAX_LEVELS) {
- (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`);
- return null;
- }
-
- const kids = kidsOrEntries.get("Kids");
-
- if (!Array.isArray(kids)) {
- return null;
- }
-
- let l = 0,
- r = kids.length - 1;
-
- while (l <= r) {
- const m = l + r >> 1;
- const kid = xref.fetchIfRef(kids[m]);
- const limits = kid.get("Limits");
-
- if (key < xref.fetchIfRef(limits[0])) {
- r = m - 1;
- } else if (key > xref.fetchIfRef(limits[1])) {
- l = m + 1;
- } else {
- kidsOrEntries = xref.fetchIfRef(kids[m]);
- break;
- }
- }
-
- if (l > r) {
- return null;
- }
- }
-
- const entries = kidsOrEntries.get(this._type);
-
- if (Array.isArray(entries)) {
- let l = 0,
- r = entries.length - 2;
-
- while (l <= r) {
- const tmp = l + r >> 1,
- m = tmp + (tmp & 1);
- const currentKey = xref.fetchIfRef(entries[m]);
-
- if (key < currentKey) {
- r = m - 2;
- } else if (key > currentKey) {
- l = m + 2;
- } else {
- return xref.fetchIfRef(entries[m + 1]);
- }
- }
-
- (0, _util.info)(`Falling back to an exhaustive search, for key "${key}", ` + `in "${this._type}" tree.`);
-
- for (let m = 0, mm = entries.length; m < mm; m += 2) {
- const currentKey = xref.fetchIfRef(entries[m]);
-
- if (currentKey === key) {
- (0, _util.warn)(`The "${key}" key was found at an incorrect, ` + `i.e. out-of-order, position in "${this._type}" tree.`);
- return xref.fetchIfRef(entries[m + 1]);
- }
- }
- }
-
- return null;
- }
-
-}
-
-class NameTree extends NameOrNumberTree {
- constructor(root, xref) {
- super(root, xref, "Names");
- }
-
-}
-
-class NumberTree extends NameOrNumberTree {
- constructor(root, xref) {
- super(root, xref, "Nums");
- }
-
-}
-
-var FileSpec = function FileSpecClosure() {
- function FileSpec(root, xref) {
- if (!root || !(0, _primitives.isDict)(root)) {
- return;
- }
-
- this.xref = xref;
- this.root = root;
-
- if (root.has("FS")) {
- this.fs = root.get("FS");
- }
-
- this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : "";
-
- if (root.has("RF")) {
- (0, _util.warn)("Related file specifications are not supported");
- }
-
- this.contentAvailable = true;
-
- if (!root.has("EF")) {
- this.contentAvailable = false;
- (0, _util.warn)("Non-embedded file specifications are not supported");
- }
- }
-
- function pickPlatformItem(dict) {
- if (dict.has("UF")) {
- return dict.get("UF");
- } else if (dict.has("F")) {
- return dict.get("F");
- } else if (dict.has("Unix")) {
- return dict.get("Unix");
- } else if (dict.has("Mac")) {
- return dict.get("Mac");
- } else if (dict.has("DOS")) {
- return dict.get("DOS");
- }
-
- return null;
- }
-
- FileSpec.prototype = {
- get filename() {
- if (!this._filename && this.root) {
- var filename = pickPlatformItem(this.root) || "unnamed";
- this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/");
- }
-
- return this._filename;
- },
-
- get content() {
- if (!this.contentAvailable) {
- return null;
- }
-
- if (!this.contentRef && this.root) {
- this.contentRef = pickPlatformItem(this.root.get("EF"));
- }
-
- var content = null;
-
- if (this.contentRef) {
- var xref = this.xref;
- var fileObj = xref.fetchIfRef(this.contentRef);
-
- if (fileObj && (0, _primitives.isStream)(fileObj)) {
- content = fileObj.getBytes();
- } else {
- (0, _util.warn)("Embedded file specification points to non-existing/invalid " + "content");
- }
- } else {
- (0, _util.warn)("Embedded file specification does not have a content");
- }
-
- return content;
- },
-
- get serializable() {
- return {
- filename: this.filename,
- content: this.content
- };
- }
-
- };
- return FileSpec;
-}();
-
-exports.FileSpec = FileSpec;
-
-const ObjectLoader = function () {
- function mayHaveChildren(value) {
- return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value);
- }
-
- function addChildren(node, nodesToVisit) {
- if (node instanceof _primitives.Dict || (0, _primitives.isStream)(node)) {
- const dict = node instanceof _primitives.Dict ? node : node.dict;
- const dictKeys = dict.getKeys();
-
- for (let i = 0, ii = dictKeys.length; i < ii; i++) {
- const rawValue = dict.getRaw(dictKeys[i]);
-
- if (mayHaveChildren(rawValue)) {
- nodesToVisit.push(rawValue);
- }
- }
- } else if (Array.isArray(node)) {
- for (let i = 0, ii = node.length; i < ii; i++) {
- const value = node[i];
-
- if (mayHaveChildren(value)) {
- nodesToVisit.push(value);
- }
- }
- }
- }
-
- function ObjectLoader(dict, keys, xref) {
- this.dict = dict;
- this.keys = keys;
- this.xref = xref;
- this.refSet = null;
- }
-
- ObjectLoader.prototype = {
- async load() {
- if (!this.xref.stream.allChunksLoaded || this.xref.stream.allChunksLoaded()) {
- return undefined;
- }
-
- const {
- keys,
- dict
- } = this;
- this.refSet = new _primitives.RefSet();
- const nodesToVisit = [];
-
- for (let i = 0, ii = keys.length; i < ii; i++) {
- const rawValue = dict.getRaw(keys[i]);
-
- if (rawValue !== undefined) {
- nodesToVisit.push(rawValue);
- }
- }
-
- return this._walk(nodesToVisit);
- },
-
- async _walk(nodesToVisit) {
- const nodesToRevisit = [];
- const pendingRequests = [];
-
- while (nodesToVisit.length) {
- let currentNode = nodesToVisit.pop();
-
- if (currentNode instanceof _primitives.Ref) {
- if (this.refSet.has(currentNode)) {
- continue;
- }
-
- try {
- this.refSet.put(currentNode);
- currentNode = this.xref.fetch(currentNode);
- } catch (ex) {
- if (!(ex instanceof _core_utils.MissingDataException)) {
- throw ex;
- }
-
- nodesToRevisit.push(currentNode);
- pendingRequests.push({
- begin: ex.begin,
- end: ex.end
- });
- }
- }
-
- if (currentNode && currentNode.getBaseStreams) {
- const baseStreams = currentNode.getBaseStreams();
- let foundMissingData = false;
-
- for (let i = 0, ii = baseStreams.length; i < ii; i++) {
- const stream = baseStreams[i];
-
- if (stream.allChunksLoaded && !stream.allChunksLoaded()) {
- foundMissingData = true;
- pendingRequests.push({
- begin: stream.start,
- end: stream.end
- });
- }
- }
-
- if (foundMissingData) {
- nodesToRevisit.push(currentNode);
- }
- }
-
- addChildren(currentNode, nodesToVisit);
- }
-
- if (pendingRequests.length) {
- await this.xref.stream.manager.requestRanges(pendingRequests);
-
- for (let i = 0, ii = nodesToRevisit.length; i < ii; i++) {
- const node = nodesToRevisit[i];
-
- if (node instanceof _primitives.Ref) {
- this.refSet.remove(node);
- }
- }
-
- return this._walk(nodesToRevisit);
- }
-
- this.refSet = null;
- return undefined;
- }
-
- };
- return ObjectLoader;
-}();
-
-exports.ObjectLoader = ObjectLoader;
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Parser = exports.Linearization = exports.Lexer = void 0;
-
-var _stream = __w_pdfjs_require__(12);
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _ccitt_stream = __w_pdfjs_require__(13);
-
-var _jbig2_stream = __w_pdfjs_require__(15);
-
-var _jpeg_stream = __w_pdfjs_require__(18);
-
-var _jpx_stream = __w_pdfjs_require__(20);
-
-const MAX_LENGTH_TO_CACHE = 1000;
-const MAX_ADLER32_LENGTH = 5552;
-
-function computeAdler32(bytes) {
- const bytesLength = bytes.length;
- let a = 1,
- b = 0;
-
- for (let i = 0; i < bytesLength; ++i) {
- a += bytes[i] & 0xff;
- b += a;
- }
-
- return b % 65521 << 16 | a % 65521;
-}
-
-class Parser {
- constructor({
- lexer,
- xref,
- allowStreams = false,
- recoveryMode = false
- }) {
- this.lexer = lexer;
- this.xref = xref;
- this.allowStreams = allowStreams;
- this.recoveryMode = recoveryMode;
- this.imageCache = Object.create(null);
- this.refill();
- }
-
- refill() {
- this.buf1 = this.lexer.getObj();
- this.buf2 = this.lexer.getObj();
- }
-
- shift() {
- if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") {
- this.buf1 = this.buf2;
- this.buf2 = null;
- } else {
- this.buf1 = this.buf2;
- this.buf2 = this.lexer.getObj();
- }
- }
-
- tryShift() {
- try {
- this.shift();
- return true;
- } catch (e) {
- if (e instanceof _core_utils.MissingDataException) {
- throw e;
- }
-
- return false;
- }
- }
-
- getObj(cipherTransform = null) {
- const buf1 = this.buf1;
- this.shift();
-
- if (buf1 instanceof _primitives.Cmd) {
- switch (buf1.cmd) {
- case "BI":
- return this.makeInlineImage(cipherTransform);
-
- case "[":
- const array = [];
-
- while (!(0, _primitives.isCmd)(this.buf1, "]") && !(0, _primitives.isEOF)(this.buf1)) {
- array.push(this.getObj(cipherTransform));
- }
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- if (!this.recoveryMode) {
- throw new _util.FormatError("End of file inside array");
- }
-
- return array;
- }
-
- this.shift();
- return array;
-
- case "<<":
- const dict = new _primitives.Dict(this.xref);
-
- while (!(0, _primitives.isCmd)(this.buf1, ">>") && !(0, _primitives.isEOF)(this.buf1)) {
- if (!(0, _primitives.isName)(this.buf1)) {
- (0, _util.info)("Malformed dictionary: key must be a name object");
- this.shift();
- continue;
- }
-
- const key = this.buf1.name;
- this.shift();
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- break;
- }
-
- dict.set(key, this.getObj(cipherTransform));
- }
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- if (!this.recoveryMode) {
- throw new _util.FormatError("End of file inside dictionary");
- }
-
- return dict;
- }
-
- if ((0, _primitives.isCmd)(this.buf2, "stream")) {
- return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;
- }
-
- this.shift();
- return dict;
-
- default:
- return buf1;
- }
- }
-
- if (Number.isInteger(buf1)) {
- if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) {
- const ref = _primitives.Ref.get(buf1, this.buf1);
-
- this.shift();
- this.shift();
- return ref;
- }
-
- return buf1;
- }
-
- if (typeof buf1 === "string") {
- if (cipherTransform) {
- return cipherTransform.decryptString(buf1);
- }
-
- return buf1;
- }
-
- return buf1;
- }
-
- findDefaultInlineStreamEnd(stream) {
- const E = 0x45,
- I = 0x49,
- SPACE = 0x20,
- LF = 0xa,
- CR = 0xd;
- const n = 10,
- NUL = 0x0;
- const startPos = stream.pos;
- let state = 0,
- ch,
- maybeEIPos;
-
- while ((ch = stream.getByte()) !== -1) {
- if (state === 0) {
- state = ch === E ? 1 : 0;
- } else if (state === 1) {
- state = ch === I ? 2 : 0;
- } else {
- (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state.");
-
- if (ch === SPACE || ch === LF || ch === CR) {
- maybeEIPos = stream.pos;
- const followingBytes = stream.peekBytes(n);
-
- for (let i = 0, ii = followingBytes.length; i < ii; i++) {
- ch = followingBytes[i];
-
- if (ch === NUL && followingBytes[i + 1] !== NUL) {
- continue;
- }
-
- if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {
- state = 0;
- break;
- }
- }
-
- if (state === 2) {
- break;
- }
- } else {
- state = 0;
- }
- }
- }
-
- if (ch === -1) {
- (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker");
-
- if (maybeEIPos) {
- (0, _util.warn)('... trying to recover by using the last "EI" occurrence.');
- stream.skip(-(stream.pos - maybeEIPos));
- }
- }
-
- let endOffset = 4;
- stream.skip(-endOffset);
- ch = stream.peekByte();
- stream.skip(endOffset);
-
- if (!(0, _core_utils.isWhiteSpace)(ch)) {
- endOffset--;
- }
-
- return stream.pos - endOffset - startPos;
- }
-
- findDCTDecodeInlineStreamEnd(stream) {
- const startPos = stream.pos;
- let foundEOI = false,
- b,
- markerLength;
-
- while ((b = stream.getByte()) !== -1) {
- if (b !== 0xff) {
- continue;
- }
-
- switch (stream.getByte()) {
- case 0x00:
- break;
-
- case 0xff:
- stream.skip(-1);
- break;
-
- case 0xd9:
- foundEOI = true;
- break;
-
- case 0xc0:
- case 0xc1:
- case 0xc2:
- case 0xc3:
- case 0xc5:
- case 0xc6:
- case 0xc7:
- case 0xc9:
- case 0xca:
- case 0xcb:
- case 0xcd:
- case 0xce:
- case 0xcf:
- case 0xc4:
- case 0xcc:
- case 0xda:
- case 0xdb:
- case 0xdc:
- case 0xdd:
- case 0xde:
- case 0xdf:
- case 0xe0:
- case 0xe1:
- case 0xe2:
- case 0xe3:
- case 0xe4:
- case 0xe5:
- case 0xe6:
- case 0xe7:
- case 0xe8:
- case 0xe9:
- case 0xea:
- case 0xeb:
- case 0xec:
- case 0xed:
- case 0xee:
- case 0xef:
- case 0xfe:
- markerLength = stream.getUint16();
-
- if (markerLength > 2) {
- stream.skip(markerLength - 2);
- } else {
- stream.skip(-2);
- }
-
- break;
- }
-
- if (foundEOI) {
- break;
- }
- }
-
- const length = stream.pos - startPos;
-
- if (b === -1) {
- (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead.");
- stream.skip(-length);
- return this.findDefaultInlineStreamEnd(stream);
- }
-
- this.inlineStreamSkipEI(stream);
- return length;
- }
-
- findASCII85DecodeInlineStreamEnd(stream) {
- const TILDE = 0x7e,
- GT = 0x3e;
- const startPos = stream.pos;
- let ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (ch === TILDE) {
- const tildePos = stream.pos;
- ch = stream.peekByte();
-
- while ((0, _core_utils.isWhiteSpace)(ch)) {
- stream.skip();
- ch = stream.peekByte();
- }
-
- if (ch === GT) {
- stream.skip();
- break;
- }
-
- if (stream.pos > tildePos) {
- const maybeEI = stream.peekBytes(2);
-
- if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {
- break;
- }
- }
- }
- }
-
- const length = stream.pos - startPos;
-
- if (ch === -1) {
- (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead.");
- stream.skip(-length);
- return this.findDefaultInlineStreamEnd(stream);
- }
-
- this.inlineStreamSkipEI(stream);
- return length;
- }
-
- findASCIIHexDecodeInlineStreamEnd(stream) {
- const GT = 0x3e;
- const startPos = stream.pos;
- let ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (ch === GT) {
- break;
- }
- }
-
- const length = stream.pos - startPos;
-
- if (ch === -1) {
- (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead.");
- stream.skip(-length);
- return this.findDefaultInlineStreamEnd(stream);
- }
-
- this.inlineStreamSkipEI(stream);
- return length;
- }
-
- inlineStreamSkipEI(stream) {
- const E = 0x45,
- I = 0x49;
- let state = 0,
- ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (state === 0) {
- state = ch === E ? 1 : 0;
- } else if (state === 1) {
- state = ch === I ? 2 : 0;
- } else if (state === 2) {
- break;
- }
- }
- }
-
- makeInlineImage(cipherTransform) {
- const lexer = this.lexer;
- const stream = lexer.stream;
- const dict = new _primitives.Dict(this.xref);
- let dictLength;
-
- while (!(0, _primitives.isCmd)(this.buf1, "ID") && !(0, _primitives.isEOF)(this.buf1)) {
- if (!(0, _primitives.isName)(this.buf1)) {
- throw new _util.FormatError("Dictionary key must be a name object");
- }
-
- const key = this.buf1.name;
- this.shift();
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- break;
- }
-
- dict.set(key, this.getObj(cipherTransform));
- }
-
- if (lexer.beginInlineImagePos !== -1) {
- dictLength = stream.pos - lexer.beginInlineImagePos;
- }
-
- const filter = dict.get("Filter", "F");
- let filterName;
-
- if ((0, _primitives.isName)(filter)) {
- filterName = filter.name;
- } else if (Array.isArray(filter)) {
- const filterZero = this.xref.fetchIfRef(filter[0]);
-
- if ((0, _primitives.isName)(filterZero)) {
- filterName = filterZero.name;
- }
- }
-
- const startPos = stream.pos;
- let length;
-
- if (filterName === "DCTDecode" || filterName === "DCT") {
- length = this.findDCTDecodeInlineStreamEnd(stream);
- } else if (filterName === "ASCII85Decode" || filterName === "A85") {
- length = this.findASCII85DecodeInlineStreamEnd(stream);
- } else if (filterName === "ASCIIHexDecode" || filterName === "AHx") {
- length = this.findASCIIHexDecodeInlineStreamEnd(stream);
- } else {
- length = this.findDefaultInlineStreamEnd(stream);
- }
-
- let imageStream = stream.makeSubStream(startPos, length, dict);
- let cacheKey;
-
- if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) {
- const imageBytes = imageStream.getBytes();
- imageStream.reset();
- const initialStreamPos = stream.pos;
- stream.pos = lexer.beginInlineImagePos;
- const dictBytes = stream.getBytes(dictLength);
- stream.pos = initialStreamPos;
- cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes);
- const cacheEntry = this.imageCache[cacheKey];
-
- if (cacheEntry !== undefined) {
- this.buf2 = _primitives.Cmd.get("EI");
- this.shift();
- cacheEntry.reset();
- return cacheEntry;
- }
- }
-
- if (cipherTransform) {
- imageStream = cipherTransform.createStream(imageStream, length);
- }
-
- imageStream = this.filter(imageStream, dict, length);
- imageStream.dict = dict;
-
- if (cacheKey !== undefined) {
- imageStream.cacheKey = `inline_${length}_${cacheKey}`;
- this.imageCache[cacheKey] = imageStream;
- }
-
- this.buf2 = _primitives.Cmd.get("EI");
- this.shift();
- return imageStream;
- }
-
- _findStreamLength(startPos, signature) {
- const {
- stream
- } = this.lexer;
- stream.pos = startPos;
- const SCAN_BLOCK_LENGTH = 2048;
- const signatureLength = signature.length;
-
- while (stream.pos < stream.end) {
- const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
- const scanLength = scanBytes.length - signatureLength;
-
- if (scanLength <= 0) {
- break;
- }
-
- let pos = 0;
-
- while (pos < scanLength) {
- let j = 0;
-
- while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
- j++;
- }
-
- if (j >= signatureLength) {
- stream.pos += pos;
- return stream.pos - startPos;
- }
-
- pos++;
- }
-
- stream.pos += scanLength;
- }
-
- return -1;
- }
-
- makeStream(dict, cipherTransform) {
- const lexer = this.lexer;
- let stream = lexer.stream;
- lexer.skipToNextLine();
- const startPos = stream.pos - 1;
- let length = dict.get("Length");
-
- if (!Number.isInteger(length)) {
- (0, _util.info)(`Bad length "${length}" in stream`);
- length = 0;
- }
-
- stream.pos = startPos + length;
- lexer.nextChar();
-
- if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) {
- this.shift();
- } else {
- const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]);
-
- let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);
-
- if (actualLength < 0) {
- const MAX_TRUNCATION = 1;
-
- for (let i = 1; i <= MAX_TRUNCATION; i++) {
- const end = ENDSTREAM_SIGNATURE.length - i;
- const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);
-
- const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);
-
- if (maybeLength >= 0) {
- const lastByte = stream.peekBytes(end + 1)[end];
-
- if (!(0, _core_utils.isWhiteSpace)(lastByte)) {
- break;
- }
-
- (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command.");
- actualLength = maybeLength;
- break;
- }
- }
-
- if (actualLength < 0) {
- throw new _util.FormatError("Missing endstream command.");
- }
- }
-
- length = actualLength;
- lexer.nextChar();
- this.shift();
- this.shift();
- }
-
- this.shift();
- stream = stream.makeSubStream(startPos, length, dict);
-
- if (cipherTransform) {
- stream = cipherTransform.createStream(stream, length);
- }
-
- stream = this.filter(stream, dict, length);
- stream.dict = dict;
- return stream;
- }
-
- filter(stream, dict, length) {
- let filter = dict.get("Filter", "F");
- let params = dict.get("DecodeParms", "DP");
-
- if ((0, _primitives.isName)(filter)) {
- if (Array.isArray(params)) {
- (0, _util.warn)("/DecodeParms should not contain an Array, " + "when /Filter contains a Name.");
- }
-
- return this.makeFilter(stream, filter.name, length, params);
- }
-
- let maybeLength = length;
-
- if (Array.isArray(filter)) {
- const filterArray = filter;
- const paramsArray = params;
-
- for (let i = 0, ii = filterArray.length; i < ii; ++i) {
- filter = this.xref.fetchIfRef(filterArray[i]);
-
- if (!(0, _primitives.isName)(filter)) {
- throw new _util.FormatError(`Bad filter name "${filter}"`);
- }
-
- params = null;
-
- if (Array.isArray(paramsArray) && i in paramsArray) {
- params = this.xref.fetchIfRef(paramsArray[i]);
- }
-
- stream = this.makeFilter(stream, filter.name, maybeLength, params);
- maybeLength = null;
- }
- }
-
- return stream;
- }
-
- makeFilter(stream, name, maybeLength, params) {
- if (maybeLength === 0) {
- (0, _util.warn)(`Empty "${name}" stream.`);
- return new _stream.NullStream();
- }
-
- try {
- const xrefStreamStats = this.xref.stats.streamTypes;
-
- if (name === "FlateDecode" || name === "Fl") {
- xrefStreamStats[_util.StreamType.FLATE] = true;
-
- if (params) {
- return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params);
- }
-
- return new _stream.FlateStream(stream, maybeLength);
- }
-
- if (name === "LZWDecode" || name === "LZW") {
- xrefStreamStats[_util.StreamType.LZW] = true;
- let earlyChange = 1;
-
- if (params) {
- if (params.has("EarlyChange")) {
- earlyChange = params.get("EarlyChange");
- }
-
- return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);
- }
-
- return new _stream.LZWStream(stream, maybeLength, earlyChange);
- }
-
- if (name === "DCTDecode" || name === "DCT") {
- xrefStreamStats[_util.StreamType.DCT] = true;
- return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params);
- }
-
- if (name === "JPXDecode" || name === "JPX") {
- xrefStreamStats[_util.StreamType.JPX] = true;
- return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params);
- }
-
- if (name === "ASCII85Decode" || name === "A85") {
- xrefStreamStats[_util.StreamType.A85] = true;
- return new _stream.Ascii85Stream(stream, maybeLength);
- }
-
- if (name === "ASCIIHexDecode" || name === "AHx") {
- xrefStreamStats[_util.StreamType.AHX] = true;
- return new _stream.AsciiHexStream(stream, maybeLength);
- }
-
- if (name === "CCITTFaxDecode" || name === "CCF") {
- xrefStreamStats[_util.StreamType.CCF] = true;
- return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);
- }
-
- if (name === "RunLengthDecode" || name === "RL") {
- xrefStreamStats[_util.StreamType.RLX] = true;
- return new _stream.RunLengthStream(stream, maybeLength);
- }
-
- if (name === "JBIG2Decode") {
- xrefStreamStats[_util.StreamType.JBIG] = true;
- return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params);
- }
-
- (0, _util.warn)(`Filter "${name}" is not supported.`);
- return stream;
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)(`Invalid stream: "${ex}"`);
- return new _stream.NullStream();
- }
- }
-
-}
-
-exports.Parser = Parser;
-const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
-
-function toHexDigit(ch) {
- if (ch >= 0x30 && ch <= 0x39) {
- return ch & 0x0f;
- }
-
- if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
- return (ch & 0x0f) + 9;
- }
-
- return -1;
-}
-
-class Lexer {
- constructor(stream, knownCommands = null) {
- this.stream = stream;
- this.nextChar();
- this.strBuf = [];
- this.knownCommands = knownCommands;
- this._hexStringNumWarn = 0;
- this.beginInlineImagePos = -1;
- }
-
- nextChar() {
- return this.currentChar = this.stream.getByte();
- }
-
- peekChar() {
- return this.stream.peekByte();
- }
-
- getNumber() {
- let ch = this.currentChar;
- let eNotation = false;
- let divideBy = 0;
- let sign = 0;
-
- if (ch === 0x2d) {
- sign = -1;
- ch = this.nextChar();
-
- if (ch === 0x2d) {
- ch = this.nextChar();
- }
- } else if (ch === 0x2b) {
- sign = 1;
- ch = this.nextChar();
- }
-
- if (ch === 0x0a || ch === 0x0d) {
- do {
- ch = this.nextChar();
- } while (ch === 0x0a || ch === 0x0d);
- }
-
- if (ch === 0x2e) {
- divideBy = 10;
- ch = this.nextChar();
- }
-
- if (ch < 0x30 || ch > 0x39) {
- if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) {
- (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero.");
- return 0;
- }
-
- throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`);
- }
-
- sign = sign || 1;
- let baseValue = ch - 0x30;
- let powerValue = 0;
- let powerValueSign = 1;
-
- while ((ch = this.nextChar()) >= 0) {
- if (ch >= 0x30 && ch <= 0x39) {
- const currentDigit = ch - 0x30;
-
- if (eNotation) {
- powerValue = powerValue * 10 + currentDigit;
- } else {
- if (divideBy !== 0) {
- divideBy *= 10;
- }
-
- baseValue = baseValue * 10 + currentDigit;
- }
- } else if (ch === 0x2e) {
- if (divideBy === 0) {
- divideBy = 1;
- } else {
- break;
- }
- } else if (ch === 0x2d) {
- (0, _util.warn)("Badly formatted number: minus sign in the middle");
- } else if (ch === 0x45 || ch === 0x65) {
- ch = this.peekChar();
-
- if (ch === 0x2b || ch === 0x2d) {
- powerValueSign = ch === 0x2d ? -1 : 1;
- this.nextChar();
- } else if (ch < 0x30 || ch > 0x39) {
- break;
- }
-
- eNotation = true;
- } else {
- break;
- }
- }
-
- if (divideBy !== 0) {
- baseValue /= divideBy;
- }
-
- if (eNotation) {
- baseValue *= 10 ** (powerValueSign * powerValue);
- }
-
- return sign * baseValue;
- }
-
- getString() {
- let numParen = 1;
- let done = false;
- const strBuf = this.strBuf;
- strBuf.length = 0;
- let ch = this.nextChar();
-
- while (true) {
- let charBuffered = false;
-
- switch (ch | 0) {
- case -1:
- (0, _util.warn)("Unterminated string");
- done = true;
- break;
-
- case 0x28:
- ++numParen;
- strBuf.push("(");
- break;
-
- case 0x29:
- if (--numParen === 0) {
- this.nextChar();
- done = true;
- } else {
- strBuf.push(")");
- }
-
- break;
-
- case 0x5c:
- ch = this.nextChar();
-
- switch (ch) {
- case -1:
- (0, _util.warn)("Unterminated string");
- done = true;
- break;
-
- case 0x6e:
- strBuf.push("\n");
- break;
-
- case 0x72:
- strBuf.push("\r");
- break;
-
- case 0x74:
- strBuf.push("\t");
- break;
-
- case 0x62:
- strBuf.push("\b");
- break;
-
- case 0x66:
- strBuf.push("\f");
- break;
-
- case 0x5c:
- case 0x28:
- case 0x29:
- strBuf.push(String.fromCharCode(ch));
- break;
-
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34:
- case 0x35:
- case 0x36:
- case 0x37:
- let x = ch & 0x0f;
- ch = this.nextChar();
- charBuffered = true;
-
- if (ch >= 0x30 && ch <= 0x37) {
- x = (x << 3) + (ch & 0x0f);
- ch = this.nextChar();
-
- if (ch >= 0x30 && ch <= 0x37) {
- charBuffered = false;
- x = (x << 3) + (ch & 0x0f);
- }
- }
-
- strBuf.push(String.fromCharCode(x));
- break;
-
- case 0x0d:
- if (this.peekChar() === 0x0a) {
- this.nextChar();
- }
-
- break;
-
- case 0x0a:
- break;
-
- default:
- strBuf.push(String.fromCharCode(ch));
- break;
- }
-
- break;
-
- default:
- strBuf.push(String.fromCharCode(ch));
- break;
- }
-
- if (done) {
- break;
- }
-
- if (!charBuffered) {
- ch = this.nextChar();
- }
- }
-
- return strBuf.join("");
- }
-
- getName() {
- let ch, previousCh;
- const strBuf = this.strBuf;
- strBuf.length = 0;
-
- while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
- if (ch === 0x23) {
- ch = this.nextChar();
-
- if (specialChars[ch]) {
- (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number.");
- strBuf.push("#");
- break;
- }
-
- const x = toHexDigit(ch);
-
- if (x !== -1) {
- previousCh = ch;
- ch = this.nextChar();
- const x2 = toHexDigit(ch);
-
- if (x2 === -1) {
- (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number.");
- strBuf.push("#", String.fromCharCode(previousCh));
-
- if (specialChars[ch]) {
- break;
- }
-
- strBuf.push(String.fromCharCode(ch));
- continue;
- }
-
- strBuf.push(String.fromCharCode(x << 4 | x2));
- } else {
- strBuf.push("#", String.fromCharCode(ch));
- }
- } else {
- strBuf.push(String.fromCharCode(ch));
- }
- }
-
- if (strBuf.length > 127) {
- (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`);
- }
-
- return _primitives.Name.get(strBuf.join(""));
- }
-
- _hexStringWarn(ch) {
- const MAX_HEX_STRING_NUM_WARN = 5;
-
- if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {
- (0, _util.warn)("getHexString - ignoring additional invalid characters.");
- return;
- }
-
- if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {
- return;
- }
-
- (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`);
- }
-
- getHexString() {
- const strBuf = this.strBuf;
- strBuf.length = 0;
- let ch = this.currentChar;
- let isFirstHex = true;
- let firstDigit, secondDigit;
- this._hexStringNumWarn = 0;
-
- while (true) {
- if (ch < 0) {
- (0, _util.warn)("Unterminated hex string");
- break;
- } else if (ch === 0x3e) {
- this.nextChar();
- break;
- } else if (specialChars[ch] === 1) {
- ch = this.nextChar();
- continue;
- } else {
- if (isFirstHex) {
- firstDigit = toHexDigit(ch);
-
- if (firstDigit === -1) {
- this._hexStringWarn(ch);
-
- ch = this.nextChar();
- continue;
- }
- } else {
- secondDigit = toHexDigit(ch);
-
- if (secondDigit === -1) {
- this._hexStringWarn(ch);
-
- ch = this.nextChar();
- continue;
- }
-
- strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));
- }
-
- isFirstHex = !isFirstHex;
- ch = this.nextChar();
- }
- }
-
- return strBuf.join("");
- }
-
- getObj() {
- let comment = false;
- let ch = this.currentChar;
-
- while (true) {
- if (ch < 0) {
- return _primitives.EOF;
- }
-
- if (comment) {
- if (ch === 0x0a || ch === 0x0d) {
- comment = false;
- }
- } else if (ch === 0x25) {
- comment = true;
- } else if (specialChars[ch] !== 1) {
- break;
- }
-
- ch = this.nextChar();
- }
-
- switch (ch | 0) {
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34:
- case 0x35:
- case 0x36:
- case 0x37:
- case 0x38:
- case 0x39:
- case 0x2b:
- case 0x2d:
- case 0x2e:
- return this.getNumber();
-
- case 0x28:
- return this.getString();
-
- case 0x2f:
- return this.getName();
-
- case 0x5b:
- this.nextChar();
- return _primitives.Cmd.get("[");
-
- case 0x5d:
- this.nextChar();
- return _primitives.Cmd.get("]");
-
- case 0x3c:
- ch = this.nextChar();
-
- if (ch === 0x3c) {
- this.nextChar();
- return _primitives.Cmd.get("<<");
- }
-
- return this.getHexString();
-
- case 0x3e:
- ch = this.nextChar();
-
- if (ch === 0x3e) {
- this.nextChar();
- return _primitives.Cmd.get(">>");
- }
-
- return _primitives.Cmd.get(">");
-
- case 0x7b:
- this.nextChar();
- return _primitives.Cmd.get("{");
-
- case 0x7d:
- this.nextChar();
- return _primitives.Cmd.get("}");
-
- case 0x29:
- this.nextChar();
- throw new _util.FormatError(`Illegal character: ${ch}`);
- }
-
- let str = String.fromCharCode(ch);
- const knownCommands = this.knownCommands;
- let knownCommandFound = knownCommands && knownCommands[str] !== undefined;
-
- while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
- const possibleCommand = str + String.fromCharCode(ch);
-
- if (knownCommandFound && knownCommands[possibleCommand] === undefined) {
- break;
- }
-
- if (str.length === 128) {
- throw new _util.FormatError(`Command token too long: ${str.length}`);
- }
-
- str = possibleCommand;
- knownCommandFound = knownCommands && knownCommands[str] !== undefined;
- }
-
- if (str === "true") {
- return true;
- }
-
- if (str === "false") {
- return false;
- }
-
- if (str === "null") {
- return null;
- }
-
- if (str === "BI") {
- this.beginInlineImagePos = this.stream.pos;
- }
-
- return _primitives.Cmd.get(str);
- }
-
- skipToNextLine() {
- let ch = this.currentChar;
-
- while (ch >= 0) {
- if (ch === 0x0d) {
- ch = this.nextChar();
-
- if (ch === 0x0a) {
- this.nextChar();
- }
-
- break;
- } else if (ch === 0x0a) {
- this.nextChar();
- break;
- }
-
- ch = this.nextChar();
- }
- }
-
-}
-
-exports.Lexer = Lexer;
-
-class Linearization {
- static create(stream) {
- function getInt(linDict, name, allowZeroValue = false) {
- const obj = linDict.get(name);
-
- if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {
- return obj;
- }
-
- throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid.");
- }
-
- function getHints(linDict) {
- const hints = linDict.get("H");
- let hintsLength;
-
- if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {
- for (let index = 0; index < hintsLength; index++) {
- const hint = hints[index];
-
- if (!(Number.isInteger(hint) && hint > 0)) {
- throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`);
- }
- }
-
- return hints;
- }
-
- throw new Error("Hint array in the linearization dictionary is invalid.");
- }
-
- const parser = new Parser({
- lexer: new Lexer(stream),
- xref: null
- });
- const obj1 = parser.getObj();
- const obj2 = parser.getObj();
- const obj3 = parser.getObj();
- const linDict = parser.getObj();
- let obj, length;
-
- if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) {
- return null;
- } else if ((length = getInt(linDict, "L")) !== stream.length) {
- throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length.");
- }
-
- return {
- length,
- hints: getHints(linDict),
- objectNumberFirst: getInt(linDict, "O"),
- endFirst: getInt(linDict, "E"),
- numPages: getInt(linDict, "N"),
- mainXRefEntriesOffset: getInt(linDict, "T"),
- pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0
- };
- }
-
-}
-
-exports.Linearization = Linearization;
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var Stream = function StreamClosure() {
- function Stream(arrayBuffer, start, length, dict) {
- this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);
- this.start = start || 0;
- this.pos = this.start;
- this.end = start + length || this.bytes.length;
- this.dict = dict;
- }
-
- Stream.prototype = {
- get length() {
- return this.end - this.start;
- },
-
- get isEmpty() {
- return this.length === 0;
- },
-
- getByte: function Stream_getByte() {
- if (this.pos >= this.end) {
- return -1;
- }
-
- return this.bytes[this.pos++];
- },
- getUint16: function Stream_getUint16() {
- var b0 = this.getByte();
- var b1 = this.getByte();
-
- if (b0 === -1 || b1 === -1) {
- return -1;
- }
-
- return (b0 << 8) + b1;
- },
- getInt32: function Stream_getInt32() {
- var b0 = this.getByte();
- var b1 = this.getByte();
- var b2 = this.getByte();
- var b3 = this.getByte();
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
- },
-
- getBytes(length, forceClamped = false) {
- var bytes = this.bytes;
- var pos = this.pos;
- var strEnd = this.end;
-
- if (!length) {
- const subarray = bytes.subarray(pos, strEnd);
- return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
- }
-
- var end = pos + length;
-
- if (end > strEnd) {
- end = strEnd;
- }
-
- this.pos = end;
- const subarray = bytes.subarray(pos, end);
- return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
- },
-
- peekByte: function Stream_peekByte() {
- var peekedByte = this.getByte();
-
- if (peekedByte !== -1) {
- this.pos--;
- }
-
- return peekedByte;
- },
-
- peekBytes(length, forceClamped = false) {
- var bytes = this.getBytes(length, forceClamped);
- this.pos -= bytes.length;
- return bytes;
- },
-
- getByteRange(begin, end) {
- if (begin < 0) {
- begin = 0;
- }
-
- if (end > this.end) {
- end = this.end;
- }
-
- return this.bytes.subarray(begin, end);
- },
-
- skip: function Stream_skip(n) {
- if (!n) {
- n = 1;
- }
-
- this.pos += n;
- },
- reset: function Stream_reset() {
- this.pos = this.start;
- },
- moveStart: function Stream_moveStart() {
- this.start = this.pos;
- },
- makeSubStream: function Stream_makeSubStream(start, length, dict) {
- return new Stream(this.bytes.buffer, start, length, dict);
- }
- };
- return Stream;
-}();
-
-exports.Stream = Stream;
-
-var StringStream = function StringStreamClosure() {
- function StringStream(str) {
- const bytes = (0, _util.stringToBytes)(str);
- Stream.call(this, bytes);
- }
-
- StringStream.prototype = Stream.prototype;
- return StringStream;
-}();
-
-exports.StringStream = StringStream;
-
-var DecodeStream = function DecodeStreamClosure() {
- var emptyBuffer = new Uint8Array(0);
-
- function DecodeStream(maybeMinBufferLength) {
- this._rawMinBufferLength = maybeMinBufferLength || 0;
- this.pos = 0;
- this.bufferLength = 0;
- this.eof = false;
- this.buffer = emptyBuffer;
- this.minBufferLength = 512;
-
- if (maybeMinBufferLength) {
- while (this.minBufferLength < maybeMinBufferLength) {
- this.minBufferLength *= 2;
- }
- }
- }
-
- DecodeStream.prototype = {
- get isEmpty() {
- while (!this.eof && this.bufferLength === 0) {
- this.readBlock();
- }
-
- return this.bufferLength === 0;
- },
-
- ensureBuffer: function DecodeStream_ensureBuffer(requested) {
- var buffer = this.buffer;
-
- if (requested <= buffer.byteLength) {
- return buffer;
- }
-
- var size = this.minBufferLength;
-
- while (size < requested) {
- size *= 2;
- }
-
- var buffer2 = new Uint8Array(size);
- buffer2.set(buffer);
- return this.buffer = buffer2;
- },
- getByte: function DecodeStream_getByte() {
- var pos = this.pos;
-
- while (this.bufferLength <= pos) {
- if (this.eof) {
- return -1;
- }
-
- this.readBlock();
- }
-
- return this.buffer[this.pos++];
- },
- getUint16: function DecodeStream_getUint16() {
- var b0 = this.getByte();
- var b1 = this.getByte();
-
- if (b0 === -1 || b1 === -1) {
- return -1;
- }
-
- return (b0 << 8) + b1;
- },
- getInt32: function DecodeStream_getInt32() {
- var b0 = this.getByte();
- var b1 = this.getByte();
- var b2 = this.getByte();
- var b3 = this.getByte();
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
- },
-
- getBytes(length, forceClamped = false) {
- var end,
- pos = this.pos;
-
- if (length) {
- this.ensureBuffer(pos + length);
- end = pos + length;
-
- while (!this.eof && this.bufferLength < end) {
- this.readBlock();
- }
-
- var bufEnd = this.bufferLength;
-
- if (end > bufEnd) {
- end = bufEnd;
- }
- } else {
- while (!this.eof) {
- this.readBlock();
- }
-
- end = this.bufferLength;
- }
-
- this.pos = end;
- const subarray = this.buffer.subarray(pos, end);
- return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray;
- },
-
- peekByte: function DecodeStream_peekByte() {
- var peekedByte = this.getByte();
-
- if (peekedByte !== -1) {
- this.pos--;
- }
-
- return peekedByte;
- },
-
- peekBytes(length, forceClamped = false) {
- var bytes = this.getBytes(length, forceClamped);
- this.pos -= bytes.length;
- return bytes;
- },
-
- makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {
- var end = start + length;
-
- while (this.bufferLength <= end && !this.eof) {
- this.readBlock();
- }
-
- return new Stream(this.buffer, start, length, dict);
- },
-
- getByteRange(begin, end) {
- (0, _util.unreachable)("Should not call DecodeStream.getByteRange");
- },
-
- skip: function DecodeStream_skip(n) {
- if (!n) {
- n = 1;
- }
-
- this.pos += n;
- },
- reset: function DecodeStream_reset() {
- this.pos = 0;
- },
- getBaseStreams: function DecodeStream_getBaseStreams() {
- if (this.str && this.str.getBaseStreams) {
- return this.str.getBaseStreams();
- }
-
- return [];
- }
- };
- return DecodeStream;
-}();
-
-exports.DecodeStream = DecodeStream;
-
-var StreamsSequenceStream = function StreamsSequenceStreamClosure() {
- function StreamsSequenceStream(streams) {
- this.streams = streams;
- let maybeLength = 0;
-
- for (let i = 0, ii = streams.length; i < ii; i++) {
- const stream = streams[i];
-
- if (stream instanceof DecodeStream) {
- maybeLength += stream._rawMinBufferLength;
- } else {
- maybeLength += stream.length;
- }
- }
-
- DecodeStream.call(this, maybeLength);
- }
-
- StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);
-
- StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() {
- var streams = this.streams;
-
- if (streams.length === 0) {
- this.eof = true;
- return;
- }
-
- var stream = streams.shift();
- var chunk = stream.getBytes();
- var bufferLength = this.bufferLength;
- var newLength = bufferLength + chunk.length;
- var buffer = this.ensureBuffer(newLength);
- buffer.set(chunk, bufferLength);
- this.bufferLength = newLength;
- };
-
- StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() {
- var baseStreams = [];
-
- for (var i = 0, ii = this.streams.length; i < ii; i++) {
- var stream = this.streams[i];
-
- if (stream.getBaseStreams) {
- baseStreams.push(...stream.getBaseStreams());
- }
- }
-
- return baseStreams;
- };
-
- return StreamsSequenceStream;
-}();
-
-exports.StreamsSequenceStream = StreamsSequenceStream;
-
-var FlateStream = function FlateStreamClosure() {
- var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
- var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]);
- var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]);
- var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9];
- var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5];
-
- function FlateStream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- var cmf = str.getByte();
- var flg = str.getByte();
-
- if (cmf === -1 || flg === -1) {
- throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);
- }
-
- if ((cmf & 0x0f) !== 0x08) {
- throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`);
- }
-
- if (((cmf << 8) + flg) % 31 !== 0) {
- throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);
- }
-
- if (flg & 0x20) {
- throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);
- }
-
- this.codeSize = 0;
- this.codeBuf = 0;
- DecodeStream.call(this, maybeLength);
- }
-
- FlateStream.prototype = Object.create(DecodeStream.prototype);
-
- FlateStream.prototype.getBits = function FlateStream_getBits(bits) {
- var str = this.str;
- var codeSize = this.codeSize;
- var codeBuf = this.codeBuf;
- var b;
-
- while (codeSize < bits) {
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad encoding in flate stream");
- }
-
- codeBuf |= b << codeSize;
- codeSize += 8;
- }
-
- b = codeBuf & (1 << bits) - 1;
- this.codeBuf = codeBuf >> bits;
- this.codeSize = codeSize -= bits;
- return b;
- };
-
- FlateStream.prototype.getCode = function FlateStream_getCode(table) {
- var str = this.str;
- var codes = table[0];
- var maxLen = table[1];
- var codeSize = this.codeSize;
- var codeBuf = this.codeBuf;
- var b;
-
- while (codeSize < maxLen) {
- if ((b = str.getByte()) === -1) {
- break;
- }
-
- codeBuf |= b << codeSize;
- codeSize += 8;
- }
-
- var code = codes[codeBuf & (1 << maxLen) - 1];
- var codeLen = code >> 16;
- var codeVal = code & 0xffff;
-
- if (codeLen < 1 || codeSize < codeLen) {
- throw new _util.FormatError("Bad encoding in flate stream");
- }
-
- this.codeBuf = codeBuf >> codeLen;
- this.codeSize = codeSize - codeLen;
- return codeVal;
- };
-
- FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) {
- var n = lengths.length;
- var maxLen = 0;
- var i;
-
- for (i = 0; i < n; ++i) {
- if (lengths[i] > maxLen) {
- maxLen = lengths[i];
- }
- }
-
- var size = 1 << maxLen;
- var codes = new Int32Array(size);
-
- for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {
- for (var val = 0; val < n; ++val) {
- if (lengths[val] === len) {
- var code2 = 0;
- var t = code;
-
- for (i = 0; i < len; ++i) {
- code2 = code2 << 1 | t & 1;
- t >>= 1;
- }
-
- for (i = code2; i < size; i += skip) {
- codes[i] = len << 16 | val;
- }
-
- ++code;
- }
- }
- }
-
- return [codes, maxLen];
- };
-
- FlateStream.prototype.readBlock = function FlateStream_readBlock() {
- var buffer, len;
- var str = this.str;
- var hdr = this.getBits(3);
-
- if (hdr & 1) {
- this.eof = true;
- }
-
- hdr >>= 1;
-
- if (hdr === 0) {
- var b;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- var blockLen = b;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- blockLen |= b << 8;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- var check = b;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- check |= b << 8;
-
- if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {
- throw new _util.FormatError("Bad uncompressed block length in flate stream");
- }
-
- this.codeBuf = 0;
- this.codeSize = 0;
- const bufferLength = this.bufferLength,
- end = bufferLength + blockLen;
- buffer = this.ensureBuffer(end);
- this.bufferLength = end;
-
- if (blockLen === 0) {
- if (str.peekByte() === -1) {
- this.eof = true;
- }
- } else {
- const block = str.getBytes(blockLen);
- buffer.set(block, bufferLength);
-
- if (block.length < blockLen) {
- this.eof = true;
- }
- }
-
- return;
- }
-
- var litCodeTable;
- var distCodeTable;
-
- if (hdr === 1) {
- litCodeTable = fixedLitCodeTab;
- distCodeTable = fixedDistCodeTab;
- } else if (hdr === 2) {
- var numLitCodes = this.getBits(5) + 257;
- var numDistCodes = this.getBits(5) + 1;
- var numCodeLenCodes = this.getBits(4) + 4;
- var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);
- var i;
-
- for (i = 0; i < numCodeLenCodes; ++i) {
- codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);
- }
-
- var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
- len = 0;
- i = 0;
- var codes = numLitCodes + numDistCodes;
- var codeLengths = new Uint8Array(codes);
- var bitsLength, bitsOffset, what;
-
- while (i < codes) {
- var code = this.getCode(codeLenCodeTab);
-
- if (code === 16) {
- bitsLength = 2;
- bitsOffset = 3;
- what = len;
- } else if (code === 17) {
- bitsLength = 3;
- bitsOffset = 3;
- what = len = 0;
- } else if (code === 18) {
- bitsLength = 7;
- bitsOffset = 11;
- what = len = 0;
- } else {
- codeLengths[i++] = len = code;
- continue;
- }
-
- var repeatLength = this.getBits(bitsLength) + bitsOffset;
-
- while (repeatLength-- > 0) {
- codeLengths[i++] = what;
- }
- }
-
- litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));
- distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));
- } else {
- throw new _util.FormatError("Unknown block type in flate stream");
- }
-
- buffer = this.buffer;
- var limit = buffer ? buffer.length : 0;
- var pos = this.bufferLength;
-
- while (true) {
- var code1 = this.getCode(litCodeTable);
-
- if (code1 < 256) {
- if (pos + 1 >= limit) {
- buffer = this.ensureBuffer(pos + 1);
- limit = buffer.length;
- }
-
- buffer[pos++] = code1;
- continue;
- }
-
- if (code1 === 256) {
- this.bufferLength = pos;
- return;
- }
-
- code1 -= 257;
- code1 = lengthDecode[code1];
- var code2 = code1 >> 16;
-
- if (code2 > 0) {
- code2 = this.getBits(code2);
- }
-
- len = (code1 & 0xffff) + code2;
- code1 = this.getCode(distCodeTable);
- code1 = distDecode[code1];
- code2 = code1 >> 16;
-
- if (code2 > 0) {
- code2 = this.getBits(code2);
- }
-
- var dist = (code1 & 0xffff) + code2;
-
- if (pos + len >= limit) {
- buffer = this.ensureBuffer(pos + len);
- limit = buffer.length;
- }
-
- for (var k = 0; k < len; ++k, ++pos) {
- buffer[pos] = buffer[pos - dist];
- }
- }
- };
-
- return FlateStream;
-}();
-
-exports.FlateStream = FlateStream;
-
-var PredictorStream = function PredictorStreamClosure() {
- function PredictorStream(str, maybeLength, params) {
- if (!(0, _primitives.isDict)(params)) {
- return str;
- }
-
- var predictor = this.predictor = params.get("Predictor") || 1;
-
- if (predictor <= 1) {
- return str;
- }
-
- if (predictor !== 2 && (predictor < 10 || predictor > 15)) {
- throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
- }
-
- if (predictor === 2) {
- this.readBlock = this.readBlockTiff;
- } else {
- this.readBlock = this.readBlockPng;
- }
-
- this.str = str;
- this.dict = str.dict;
- var colors = this.colors = params.get("Colors") || 1;
- var bits = this.bits = params.get("BitsPerComponent") || 8;
- var columns = this.columns = params.get("Columns") || 1;
- this.pixBytes = colors * bits + 7 >> 3;
- this.rowBytes = columns * colors * bits + 7 >> 3;
- DecodeStream.call(this, maybeLength);
- return this;
- }
-
- PredictorStream.prototype = Object.create(DecodeStream.prototype);
-
- PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() {
- var rowBytes = this.rowBytes;
- var bufferLength = this.bufferLength;
- var buffer = this.ensureBuffer(bufferLength + rowBytes);
- var bits = this.bits;
- var colors = this.colors;
- var rawBytes = this.str.getBytes(rowBytes);
- this.eof = !rawBytes.length;
-
- if (this.eof) {
- return;
- }
-
- var inbuf = 0,
- outbuf = 0;
- var inbits = 0,
- outbits = 0;
- var pos = bufferLength;
- var i;
-
- if (bits === 1 && colors === 1) {
- for (i = 0; i < rowBytes; ++i) {
- var c = rawBytes[i] ^ inbuf;
- c ^= c >> 1;
- c ^= c >> 2;
- c ^= c >> 4;
- inbuf = (c & 1) << 7;
- buffer[pos++] = c;
- }
- } else if (bits === 8) {
- for (i = 0; i < colors; ++i) {
- buffer[pos++] = rawBytes[i];
- }
-
- for (; i < rowBytes; ++i) {
- buffer[pos] = buffer[pos - colors] + rawBytes[i];
- pos++;
- }
- } else if (bits === 16) {
- var bytesPerPixel = colors * 2;
-
- for (i = 0; i < bytesPerPixel; ++i) {
- buffer[pos++] = rawBytes[i];
- }
-
- for (; i < rowBytes; i += 2) {
- var sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);
- buffer[pos++] = sum >> 8 & 0xff;
- buffer[pos++] = sum & 0xff;
- }
- } else {
- var compArray = new Uint8Array(colors + 1);
- var bitMask = (1 << bits) - 1;
- var j = 0,
- k = bufferLength;
- var columns = this.columns;
-
- for (i = 0; i < columns; ++i) {
- for (var kk = 0; kk < colors; ++kk) {
- if (inbits < bits) {
- inbuf = inbuf << 8 | rawBytes[j++] & 0xff;
- inbits += 8;
- }
-
- compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;
- inbits -= bits;
- outbuf = outbuf << bits | compArray[kk];
- outbits += bits;
-
- if (outbits >= 8) {
- buffer[k++] = outbuf >> outbits - 8 & 0xff;
- outbits -= 8;
- }
- }
- }
-
- if (outbits > 0) {
- buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);
- }
- }
-
- this.bufferLength += rowBytes;
- };
-
- PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() {
- var rowBytes = this.rowBytes;
- var pixBytes = this.pixBytes;
- var predictor = this.str.getByte();
- var rawBytes = this.str.getBytes(rowBytes);
- this.eof = !rawBytes.length;
-
- if (this.eof) {
- return;
- }
-
- var bufferLength = this.bufferLength;
- var buffer = this.ensureBuffer(bufferLength + rowBytes);
- var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
-
- if (prevRow.length === 0) {
- prevRow = new Uint8Array(rowBytes);
- }
-
- var i,
- j = bufferLength,
- up,
- c;
-
- switch (predictor) {
- case 0:
- for (i = 0; i < rowBytes; ++i) {
- buffer[j++] = rawBytes[i];
- }
-
- break;
-
- case 1:
- for (i = 0; i < pixBytes; ++i) {
- buffer[j++] = rawBytes[i];
- }
-
- for (; i < rowBytes; ++i) {
- buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;
- j++;
- }
-
- break;
-
- case 2:
- for (i = 0; i < rowBytes; ++i) {
- buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;
- }
-
- break;
-
- case 3:
- for (i = 0; i < pixBytes; ++i) {
- buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
- }
-
- for (; i < rowBytes; ++i) {
- buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;
- j++;
- }
-
- break;
-
- case 4:
- for (i = 0; i < pixBytes; ++i) {
- up = prevRow[i];
- c = rawBytes[i];
- buffer[j++] = up + c;
- }
-
- for (; i < rowBytes; ++i) {
- up = prevRow[i];
- var upLeft = prevRow[i - pixBytes];
- var left = buffer[j - pixBytes];
- var p = left + up - upLeft;
- var pa = p - left;
-
- if (pa < 0) {
- pa = -pa;
- }
-
- var pb = p - up;
-
- if (pb < 0) {
- pb = -pb;
- }
-
- var pc = p - upLeft;
-
- if (pc < 0) {
- pc = -pc;
- }
-
- c = rawBytes[i];
-
- if (pa <= pb && pa <= pc) {
- buffer[j++] = left + c;
- } else if (pb <= pc) {
- buffer[j++] = up + c;
- } else {
- buffer[j++] = upLeft + c;
- }
- }
-
- break;
-
- default:
- throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
- }
-
- this.bufferLength += rowBytes;
- };
-
- return PredictorStream;
-}();
-
-exports.PredictorStream = PredictorStream;
-
-var DecryptStream = function DecryptStreamClosure() {
- function DecryptStream(str, maybeLength, decrypt) {
- this.str = str;
- this.dict = str.dict;
- this.decrypt = decrypt;
- this.nextChunk = null;
- this.initialized = false;
- DecodeStream.call(this, maybeLength);
- }
-
- var chunkSize = 512;
- DecryptStream.prototype = Object.create(DecodeStream.prototype);
-
- DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {
- var chunk;
-
- if (this.initialized) {
- chunk = this.nextChunk;
- } else {
- chunk = this.str.getBytes(chunkSize);
- this.initialized = true;
- }
-
- if (!chunk || chunk.length === 0) {
- this.eof = true;
- return;
- }
-
- this.nextChunk = this.str.getBytes(chunkSize);
- var hasMoreData = this.nextChunk && this.nextChunk.length > 0;
- var decrypt = this.decrypt;
- chunk = decrypt(chunk, !hasMoreData);
- var bufferLength = this.bufferLength;
- var i,
- n = chunk.length;
- var buffer = this.ensureBuffer(bufferLength + n);
-
- for (i = 0; i < n; i++) {
- buffer[bufferLength++] = chunk[i];
- }
-
- this.bufferLength = bufferLength;
- };
-
- return DecryptStream;
-}();
-
-exports.DecryptStream = DecryptStream;
-
-var Ascii85Stream = function Ascii85StreamClosure() {
- function Ascii85Stream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- this.input = new Uint8Array(5);
-
- if (maybeLength) {
- maybeLength = 0.8 * maybeLength;
- }
-
- DecodeStream.call(this, maybeLength);
- }
-
- Ascii85Stream.prototype = Object.create(DecodeStream.prototype);
-
- Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {
- var TILDA_CHAR = 0x7e;
- var Z_LOWER_CHAR = 0x7a;
- var EOF = -1;
- var str = this.str;
- var c = str.getByte();
-
- while ((0, _core_utils.isWhiteSpace)(c)) {
- c = str.getByte();
- }
-
- if (c === EOF || c === TILDA_CHAR) {
- this.eof = true;
- return;
- }
-
- var bufferLength = this.bufferLength,
- buffer;
- var i;
-
- if (c === Z_LOWER_CHAR) {
- buffer = this.ensureBuffer(bufferLength + 4);
-
- for (i = 0; i < 4; ++i) {
- buffer[bufferLength + i] = 0;
- }
-
- this.bufferLength += 4;
- } else {
- var input = this.input;
- input[0] = c;
-
- for (i = 1; i < 5; ++i) {
- c = str.getByte();
-
- while ((0, _core_utils.isWhiteSpace)(c)) {
- c = str.getByte();
- }
-
- input[i] = c;
-
- if (c === EOF || c === TILDA_CHAR) {
- break;
- }
- }
-
- buffer = this.ensureBuffer(bufferLength + i - 1);
- this.bufferLength += i - 1;
-
- if (i < 5) {
- for (; i < 5; ++i) {
- input[i] = 0x21 + 84;
- }
-
- this.eof = true;
- }
-
- var t = 0;
-
- for (i = 0; i < 5; ++i) {
- t = t * 85 + (input[i] - 0x21);
- }
-
- for (i = 3; i >= 0; --i) {
- buffer[bufferLength + i] = t & 0xff;
- t >>= 8;
- }
- }
- };
-
- return Ascii85Stream;
-}();
-
-exports.Ascii85Stream = Ascii85Stream;
-
-var AsciiHexStream = function AsciiHexStreamClosure() {
- function AsciiHexStream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- this.firstDigit = -1;
-
- if (maybeLength) {
- maybeLength = 0.5 * maybeLength;
- }
-
- DecodeStream.call(this, maybeLength);
- }
-
- AsciiHexStream.prototype = Object.create(DecodeStream.prototype);
-
- AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {
- var UPSTREAM_BLOCK_SIZE = 8000;
- var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);
-
- if (!bytes.length) {
- this.eof = true;
- return;
- }
-
- var maxDecodeLength = bytes.length + 1 >> 1;
- var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);
- var bufferLength = this.bufferLength;
- var firstDigit = this.firstDigit;
-
- for (var i = 0, ii = bytes.length; i < ii; i++) {
- var ch = bytes[i],
- digit;
-
- if (ch >= 0x30 && ch <= 0x39) {
- digit = ch & 0x0f;
- } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
- digit = (ch & 0x0f) + 9;
- } else if (ch === 0x3e) {
- this.eof = true;
- break;
- } else {
- continue;
- }
-
- if (firstDigit < 0) {
- firstDigit = digit;
- } else {
- buffer[bufferLength++] = firstDigit << 4 | digit;
- firstDigit = -1;
- }
- }
-
- if (firstDigit >= 0 && this.eof) {
- buffer[bufferLength++] = firstDigit << 4;
- firstDigit = -1;
- }
-
- this.firstDigit = firstDigit;
- this.bufferLength = bufferLength;
- };
-
- return AsciiHexStream;
-}();
-
-exports.AsciiHexStream = AsciiHexStream;
-
-var RunLengthStream = function RunLengthStreamClosure() {
- function RunLengthStream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- DecodeStream.call(this, maybeLength);
- }
-
- RunLengthStream.prototype = Object.create(DecodeStream.prototype);
-
- RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {
- var repeatHeader = this.str.getBytes(2);
-
- if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {
- this.eof = true;
- return;
- }
-
- var buffer;
- var bufferLength = this.bufferLength;
- var n = repeatHeader[0];
-
- if (n < 128) {
- buffer = this.ensureBuffer(bufferLength + n + 1);
- buffer[bufferLength++] = repeatHeader[1];
-
- if (n > 0) {
- var source = this.str.getBytes(n);
- buffer.set(source, bufferLength);
- bufferLength += n;
- }
- } else {
- n = 257 - n;
- var b = repeatHeader[1];
- buffer = this.ensureBuffer(bufferLength + n + 1);
-
- for (var i = 0; i < n; i++) {
- buffer[bufferLength++] = b;
- }
- }
-
- this.bufferLength = bufferLength;
- };
-
- return RunLengthStream;
-}();
-
-exports.RunLengthStream = RunLengthStream;
-
-var LZWStream = function LZWStreamClosure() {
- function LZWStream(str, maybeLength, earlyChange) {
- this.str = str;
- this.dict = str.dict;
- this.cachedData = 0;
- this.bitsCached = 0;
- var maxLzwDictionarySize = 4096;
- var lzwState = {
- earlyChange,
- codeLength: 9,
- nextCode: 258,
- dictionaryValues: new Uint8Array(maxLzwDictionarySize),
- dictionaryLengths: new Uint16Array(maxLzwDictionarySize),
- dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),
- currentSequence: new Uint8Array(maxLzwDictionarySize),
- currentSequenceLength: 0
- };
-
- for (var i = 0; i < 256; ++i) {
- lzwState.dictionaryValues[i] = i;
- lzwState.dictionaryLengths[i] = 1;
- }
-
- this.lzwState = lzwState;
- DecodeStream.call(this, maybeLength);
- }
-
- LZWStream.prototype = Object.create(DecodeStream.prototype);
-
- LZWStream.prototype.readBits = function LZWStream_readBits(n) {
- var bitsCached = this.bitsCached;
- var cachedData = this.cachedData;
-
- while (bitsCached < n) {
- var c = this.str.getByte();
-
- if (c === -1) {
- this.eof = true;
- return null;
- }
-
- cachedData = cachedData << 8 | c;
- bitsCached += 8;
- }
-
- this.bitsCached = bitsCached -= n;
- this.cachedData = cachedData;
- this.lastCode = null;
- return cachedData >>> bitsCached & (1 << n) - 1;
- };
-
- LZWStream.prototype.readBlock = function LZWStream_readBlock() {
- var blockSize = 512;
- var estimatedDecodedSize = blockSize * 2,
- decodedSizeDelta = blockSize;
- var i, j, q;
- var lzwState = this.lzwState;
-
- if (!lzwState) {
- return;
- }
-
- var earlyChange = lzwState.earlyChange;
- var nextCode = lzwState.nextCode;
- var dictionaryValues = lzwState.dictionaryValues;
- var dictionaryLengths = lzwState.dictionaryLengths;
- var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;
- var codeLength = lzwState.codeLength;
- var prevCode = lzwState.prevCode;
- var currentSequence = lzwState.currentSequence;
- var currentSequenceLength = lzwState.currentSequenceLength;
- var decodedLength = 0;
- var currentBufferLength = this.bufferLength;
- var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
-
- for (i = 0; i < blockSize; i++) {
- var code = this.readBits(codeLength);
- var hasPrev = currentSequenceLength > 0;
-
- if (code < 256) {
- currentSequence[0] = code;
- currentSequenceLength = 1;
- } else if (code >= 258) {
- if (code < nextCode) {
- currentSequenceLength = dictionaryLengths[code];
-
- for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {
- currentSequence[j] = dictionaryValues[q];
- q = dictionaryPrevCodes[q];
- }
- } else {
- currentSequence[currentSequenceLength++] = currentSequence[0];
- }
- } else if (code === 256) {
- codeLength = 9;
- nextCode = 258;
- currentSequenceLength = 0;
- continue;
- } else {
- this.eof = true;
- delete this.lzwState;
- break;
- }
-
- if (hasPrev) {
- dictionaryPrevCodes[nextCode] = prevCode;
- dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;
- dictionaryValues[nextCode] = currentSequence[0];
- nextCode++;
- codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;
- }
-
- prevCode = code;
- decodedLength += currentSequenceLength;
-
- if (estimatedDecodedSize < decodedLength) {
- do {
- estimatedDecodedSize += decodedSizeDelta;
- } while (estimatedDecodedSize < decodedLength);
-
- buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
- }
-
- for (j = 0; j < currentSequenceLength; j++) {
- buffer[currentBufferLength++] = currentSequence[j];
- }
- }
-
- lzwState.nextCode = nextCode;
- lzwState.codeLength = codeLength;
- lzwState.prevCode = prevCode;
- lzwState.currentSequenceLength = currentSequenceLength;
- this.bufferLength = currentBufferLength;
- };
-
- return LZWStream;
-}();
-
-exports.LZWStream = LZWStream;
-
-var NullStream = function NullStreamClosure() {
- function NullStream() {
- Stream.call(this, new Uint8Array(0));
- }
-
- NullStream.prototype = Stream.prototype;
- return NullStream;
-}();
-
-exports.NullStream = NullStream;
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CCITTFaxStream = void 0;
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _ccitt = __w_pdfjs_require__(14);
-
-var _stream = __w_pdfjs_require__(12);
-
-var CCITTFaxStream = function CCITTFaxStreamClosure() {
- function CCITTFaxStream(str, maybeLength, params) {
- this.str = str;
- this.dict = str.dict;
-
- if (!(0, _primitives.isDict)(params)) {
- params = _primitives.Dict.empty;
- }
-
- const source = {
- next() {
- return str.getByte();
- }
-
- };
- this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, {
- K: params.get("K"),
- EndOfLine: params.get("EndOfLine"),
- EncodedByteAlign: params.get("EncodedByteAlign"),
- Columns: params.get("Columns"),
- Rows: params.get("Rows"),
- EndOfBlock: params.get("EndOfBlock"),
- BlackIs1: params.get("BlackIs1")
- });
-
- _stream.DecodeStream.call(this, maybeLength);
- }
-
- CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype);
-
- CCITTFaxStream.prototype.readBlock = function () {
- while (!this.eof) {
- const c = this.ccittFaxDecoder.readNextChar();
-
- if (c === -1) {
- this.eof = true;
- return;
- }
-
- this.ensureBuffer(this.bufferLength + 1);
- this.buffer[this.bufferLength++] = c;
- }
- };
-
- return CCITTFaxStream;
-}();
-
-exports.CCITTFaxStream = CCITTFaxStream;
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CCITTFaxDecoder = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-const CCITTFaxDecoder = function CCITTFaxDecoder() {
- const ccittEOL = -2;
- const ccittEOF = -1;
- const twoDimPass = 0;
- const twoDimHoriz = 1;
- const twoDimVert0 = 2;
- const twoDimVertR1 = 3;
- const twoDimVertL1 = 4;
- const twoDimVertR2 = 5;
- const twoDimVertL2 = 6;
- const twoDimVertR3 = 7;
- const twoDimVertL3 = 8;
- const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];
- const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];
- const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];
- const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];
- const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];
- const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];
-
- function CCITTFaxDecoder(source, options = {}) {
- if (!source || typeof source.next !== "function") {
- throw new Error('CCITTFaxDecoder - invalid "source" parameter.');
- }
-
- this.source = source;
- this.eof = false;
- this.encoding = options.K || 0;
- this.eoline = options.EndOfLine || false;
- this.byteAlign = options.EncodedByteAlign || false;
- this.columns = options.Columns || 1728;
- this.rows = options.Rows || 0;
- let eoblock = options.EndOfBlock;
-
- if (eoblock === null || eoblock === undefined) {
- eoblock = true;
- }
-
- this.eoblock = eoblock;
- this.black = options.BlackIs1 || false;
- this.codingLine = new Uint32Array(this.columns + 1);
- this.refLine = new Uint32Array(this.columns + 2);
- this.codingLine[0] = this.columns;
- this.codingPos = 0;
- this.row = 0;
- this.nextLine2D = this.encoding < 0;
- this.inputBits = 0;
- this.inputBuf = 0;
- this.outputBits = 0;
- this.rowsDone = false;
- let code1;
-
- while ((code1 = this._lookBits(12)) === 0) {
- this._eatBits(1);
- }
-
- if (code1 === 1) {
- this._eatBits(12);
- }
-
- if (this.encoding > 0) {
- this.nextLine2D = !this._lookBits(1);
-
- this._eatBits(1);
- }
- }
-
- CCITTFaxDecoder.prototype = {
- readNextChar() {
- if (this.eof) {
- return -1;
- }
-
- const refLine = this.refLine;
- const codingLine = this.codingLine;
- const columns = this.columns;
- let refPos, blackPixels, bits, i;
-
- if (this.outputBits === 0) {
- if (this.rowsDone) {
- this.eof = true;
- }
-
- if (this.eof) {
- return -1;
- }
-
- this.err = false;
- let code1, code2, code3;
-
- if (this.nextLine2D) {
- for (i = 0; codingLine[i] < columns; ++i) {
- refLine[i] = codingLine[i];
- }
-
- refLine[i++] = columns;
- refLine[i] = columns;
- codingLine[0] = 0;
- this.codingPos = 0;
- refPos = 0;
- blackPixels = 0;
-
- while (codingLine[this.codingPos] < columns) {
- code1 = this._getTwoDimCode();
-
- switch (code1) {
- case twoDimPass:
- this._addPixels(refLine[refPos + 1], blackPixels);
-
- if (refLine[refPos + 1] < columns) {
- refPos += 2;
- }
-
- break;
-
- case twoDimHoriz:
- code1 = code2 = 0;
-
- if (blackPixels) {
- do {
- code1 += code3 = this._getBlackCode();
- } while (code3 >= 64);
-
- do {
- code2 += code3 = this._getWhiteCode();
- } while (code3 >= 64);
- } else {
- do {
- code1 += code3 = this._getWhiteCode();
- } while (code3 >= 64);
-
- do {
- code2 += code3 = this._getBlackCode();
- } while (code3 >= 64);
- }
-
- this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
-
- if (codingLine[this.codingPos] < columns) {
- this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
-
- break;
-
- case twoDimVertR3:
- this._addPixels(refLine[refPos] + 3, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertR2:
- this._addPixels(refLine[refPos] + 2, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertR1:
- this._addPixels(refLine[refPos] + 1, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVert0:
- this._addPixels(refLine[refPos], blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertL3:
- this._addPixelsNeg(refLine[refPos] - 3, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- if (refPos > 0) {
- --refPos;
- } else {
- ++refPos;
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertL2:
- this._addPixelsNeg(refLine[refPos] - 2, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- if (refPos > 0) {
- --refPos;
- } else {
- ++refPos;
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertL1:
- this._addPixelsNeg(refLine[refPos] - 1, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- if (refPos > 0) {
- --refPos;
- } else {
- ++refPos;
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case ccittEOF:
- this._addPixels(columns, 0);
-
- this.eof = true;
- break;
-
- default:
- (0, _util.info)("bad 2d code");
-
- this._addPixels(columns, 0);
-
- this.err = true;
- }
- }
- } else {
- codingLine[0] = 0;
- this.codingPos = 0;
- blackPixels = 0;
-
- while (codingLine[this.codingPos] < columns) {
- code1 = 0;
-
- if (blackPixels) {
- do {
- code1 += code3 = this._getBlackCode();
- } while (code3 >= 64);
- } else {
- do {
- code1 += code3 = this._getWhiteCode();
- } while (code3 >= 64);
- }
-
- this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
-
- blackPixels ^= 1;
- }
- }
-
- let gotEOL = false;
-
- if (this.byteAlign) {
- this.inputBits &= ~7;
- }
-
- if (!this.eoblock && this.row === this.rows - 1) {
- this.rowsDone = true;
- } else {
- code1 = this._lookBits(12);
-
- if (this.eoline) {
- while (code1 !== ccittEOF && code1 !== 1) {
- this._eatBits(1);
-
- code1 = this._lookBits(12);
- }
- } else {
- while (code1 === 0) {
- this._eatBits(1);
-
- code1 = this._lookBits(12);
- }
- }
-
- if (code1 === 1) {
- this._eatBits(12);
-
- gotEOL = true;
- } else if (code1 === ccittEOF) {
- this.eof = true;
- }
- }
-
- if (!this.eof && this.encoding > 0 && !this.rowsDone) {
- this.nextLine2D = !this._lookBits(1);
-
- this._eatBits(1);
- }
-
- if (this.eoblock && gotEOL && this.byteAlign) {
- code1 = this._lookBits(12);
-
- if (code1 === 1) {
- this._eatBits(12);
-
- if (this.encoding > 0) {
- this._lookBits(1);
-
- this._eatBits(1);
- }
-
- if (this.encoding >= 0) {
- for (i = 0; i < 4; ++i) {
- code1 = this._lookBits(12);
-
- if (code1 !== 1) {
- (0, _util.info)("bad rtc code: " + code1);
- }
-
- this._eatBits(12);
-
- if (this.encoding > 0) {
- this._lookBits(1);
-
- this._eatBits(1);
- }
- }
- }
-
- this.eof = true;
- }
- } else if (this.err && this.eoline) {
- while (true) {
- code1 = this._lookBits(13);
-
- if (code1 === ccittEOF) {
- this.eof = true;
- return -1;
- }
-
- if (code1 >> 1 === 1) {
- break;
- }
-
- this._eatBits(1);
- }
-
- this._eatBits(12);
-
- if (this.encoding > 0) {
- this._eatBits(1);
-
- this.nextLine2D = !(code1 & 1);
- }
- }
-
- if (codingLine[0] > 0) {
- this.outputBits = codingLine[this.codingPos = 0];
- } else {
- this.outputBits = codingLine[this.codingPos = 1];
- }
-
- this.row++;
- }
-
- let c;
-
- if (this.outputBits >= 8) {
- c = this.codingPos & 1 ? 0 : 0xff;
- this.outputBits -= 8;
-
- if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {
- this.codingPos++;
- this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
- }
- } else {
- bits = 8;
- c = 0;
-
- do {
- if (this.outputBits > bits) {
- c <<= bits;
-
- if (!(this.codingPos & 1)) {
- c |= 0xff >> 8 - bits;
- }
-
- this.outputBits -= bits;
- bits = 0;
- } else {
- c <<= this.outputBits;
-
- if (!(this.codingPos & 1)) {
- c |= 0xff >> 8 - this.outputBits;
- }
-
- bits -= this.outputBits;
- this.outputBits = 0;
-
- if (codingLine[this.codingPos] < columns) {
- this.codingPos++;
- this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
- } else if (bits > 0) {
- c <<= bits;
- bits = 0;
- }
- }
- } while (bits);
- }
-
- if (this.black) {
- c ^= 0xff;
- }
-
- return c;
- },
-
- _addPixels(a1, blackPixels) {
- const codingLine = this.codingLine;
- let codingPos = this.codingPos;
-
- if (a1 > codingLine[codingPos]) {
- if (a1 > this.columns) {
- (0, _util.info)("row is wrong length");
- this.err = true;
- a1 = this.columns;
- }
-
- if (codingPos & 1 ^ blackPixels) {
- ++codingPos;
- }
-
- codingLine[codingPos] = a1;
- }
-
- this.codingPos = codingPos;
- },
-
- _addPixelsNeg(a1, blackPixels) {
- const codingLine = this.codingLine;
- let codingPos = this.codingPos;
-
- if (a1 > codingLine[codingPos]) {
- if (a1 > this.columns) {
- (0, _util.info)("row is wrong length");
- this.err = true;
- a1 = this.columns;
- }
-
- if (codingPos & 1 ^ blackPixels) {
- ++codingPos;
- }
-
- codingLine[codingPos] = a1;
- } else if (a1 < codingLine[codingPos]) {
- if (a1 < 0) {
- (0, _util.info)("invalid code");
- this.err = true;
- a1 = 0;
- }
-
- while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {
- --codingPos;
- }
-
- codingLine[codingPos] = a1;
- }
-
- this.codingPos = codingPos;
- },
-
- _findTableCode(start, end, table, limit) {
- const limitValue = limit || 0;
-
- for (let i = start; i <= end; ++i) {
- let code = this._lookBits(i);
-
- if (code === ccittEOF) {
- return [true, 1, false];
- }
-
- if (i < end) {
- code <<= end - i;
- }
-
- if (!limitValue || code >= limitValue) {
- const p = table[code - limitValue];
-
- if (p[0] === i) {
- this._eatBits(i);
-
- return [true, p[1], true];
- }
- }
- }
-
- return [false, 0, false];
- },
-
- _getTwoDimCode() {
- let code = 0;
- let p;
-
- if (this.eoblock) {
- code = this._lookBits(7);
- p = twoDimTable[code];
-
- if (p && p[0] > 0) {
- this._eatBits(p[0]);
-
- return p[1];
- }
- } else {
- const result = this._findTableCode(1, 7, twoDimTable);
-
- if (result[0] && result[2]) {
- return result[1];
- }
- }
-
- (0, _util.info)("Bad two dim code");
- return ccittEOF;
- },
-
- _getWhiteCode() {
- let code = 0;
- let p;
-
- if (this.eoblock) {
- code = this._lookBits(12);
-
- if (code === ccittEOF) {
- return 1;
- }
-
- if (code >> 5 === 0) {
- p = whiteTable1[code];
- } else {
- p = whiteTable2[code >> 3];
- }
-
- if (p[0] > 0) {
- this._eatBits(p[0]);
-
- return p[1];
- }
- } else {
- let result = this._findTableCode(1, 9, whiteTable2);
-
- if (result[0]) {
- return result[1];
- }
-
- result = this._findTableCode(11, 12, whiteTable1);
-
- if (result[0]) {
- return result[1];
- }
- }
-
- (0, _util.info)("bad white code");
-
- this._eatBits(1);
-
- return 1;
- },
-
- _getBlackCode() {
- let code, p;
-
- if (this.eoblock) {
- code = this._lookBits(13);
-
- if (code === ccittEOF) {
- return 1;
- }
-
- if (code >> 7 === 0) {
- p = blackTable1[code];
- } else if (code >> 9 === 0 && code >> 7 !== 0) {
- p = blackTable2[(code >> 1) - 64];
- } else {
- p = blackTable3[code >> 7];
- }
-
- if (p[0] > 0) {
- this._eatBits(p[0]);
-
- return p[1];
- }
- } else {
- let result = this._findTableCode(2, 6, blackTable3);
-
- if (result[0]) {
- return result[1];
- }
-
- result = this._findTableCode(7, 12, blackTable2, 64);
-
- if (result[0]) {
- return result[1];
- }
-
- result = this._findTableCode(10, 13, blackTable1);
-
- if (result[0]) {
- return result[1];
- }
- }
-
- (0, _util.info)("bad black code");
-
- this._eatBits(1);
-
- return 1;
- },
-
- _lookBits(n) {
- let c;
-
- while (this.inputBits < n) {
- if ((c = this.source.next()) === -1) {
- if (this.inputBits === 0) {
- return ccittEOF;
- }
-
- return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;
- }
-
- this.inputBuf = this.inputBuf << 8 | c;
- this.inputBits += 8;
- }
-
- return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;
- },
-
- _eatBits(n) {
- if ((this.inputBits -= n) < 0) {
- this.inputBits = 0;
- }
- }
-
- };
- return CCITTFaxDecoder;
-}();
-
-exports.CCITTFaxDecoder = CCITTFaxDecoder;
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Jbig2Stream = void 0;
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _jbig = __w_pdfjs_require__(16);
-
-var _util = __w_pdfjs_require__(2);
-
-const Jbig2Stream = function Jbig2StreamClosure() {
- function Jbig2Stream(stream, maybeLength, dict, params) {
- this.stream = stream;
- this.maybeLength = maybeLength;
- this.dict = dict;
- this.params = params;
-
- _stream.DecodeStream.call(this, maybeLength);
- }
-
- Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype);
- Object.defineProperty(Jbig2Stream.prototype, "bytes", {
- get() {
- return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
- },
-
- configurable: true
- });
-
- Jbig2Stream.prototype.ensureBuffer = function (requested) {};
-
- Jbig2Stream.prototype.readBlock = function () {
- if (this.eof) {
- return;
- }
-
- const jbig2Image = new _jbig.Jbig2Image();
- const chunks = [];
-
- if ((0, _primitives.isDict)(this.params)) {
- const globalsStream = this.params.get("JBIG2Globals");
-
- if ((0, _primitives.isStream)(globalsStream)) {
- const globals = globalsStream.getBytes();
- chunks.push({
- data: globals,
- start: 0,
- end: globals.length
- });
- }
- }
-
- chunks.push({
- data: this.bytes,
- start: 0,
- end: this.bytes.length
- });
- const data = jbig2Image.parseChunks(chunks);
- const dataLength = data.length;
-
- for (let i = 0; i < dataLength; i++) {
- data[i] ^= 0xff;
- }
-
- this.buffer = data;
- this.bufferLength = dataLength;
- this.eof = true;
- };
-
- return Jbig2Stream;
-}();
-
-exports.Jbig2Stream = Jbig2Stream;
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Jbig2Image = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _arithmetic_decoder = __w_pdfjs_require__(17);
-
-var _ccitt = __w_pdfjs_require__(14);
-
-class Jbig2Error extends _util.BaseException {
- constructor(msg) {
- super(`JBIG2 error: ${msg}`);
- }
-
-}
-
-var Jbig2Image = function Jbig2ImageClosure() {
- function ContextCache() {}
-
- ContextCache.prototype = {
- getContexts(id) {
- if (id in this) {
- return this[id];
- }
-
- return this[id] = new Int8Array(1 << 16);
- }
-
- };
-
- function DecodingContext(data, start, end) {
- this.data = data;
- this.start = start;
- this.end = end;
- }
-
- DecodingContext.prototype = {
- get decoder() {
- var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
- return (0, _util.shadow)(this, "decoder", decoder);
- },
-
- get contextCache() {
- var cache = new ContextCache();
- return (0, _util.shadow)(this, "contextCache", cache);
- }
-
- };
-
- function decodeInteger(contextCache, procedure, decoder) {
- var contexts = contextCache.getContexts(procedure);
- var prev = 1;
-
- function readBits(length) {
- var v = 0;
-
- for (var i = 0; i < length; i++) {
- var bit = decoder.readBit(contexts, prev);
- prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;
- v = v << 1 | bit;
- }
-
- return v >>> 0;
- }
-
- var sign = readBits(1);
- var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);
-
- if (sign === 0) {
- return value;
- } else if (value > 0) {
- return -value;
- }
-
- return null;
- }
-
- function decodeIAID(contextCache, decoder, codeLength) {
- var contexts = contextCache.getContexts("IAID");
- var prev = 1;
-
- for (var i = 0; i < codeLength; i++) {
- var bit = decoder.readBit(contexts, prev);
- prev = prev << 1 | bit;
- }
-
- if (codeLength < 31) {
- return prev & (1 << codeLength) - 1;
- }
-
- return prev & 0x7fffffff;
- }
-
- var SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"];
- var CodingTemplates = [[{
- x: -1,
- y: -2
- }, {
- x: 0,
- y: -2
- }, {
- x: 1,
- y: -2
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: 2,
- y: -1
- }, {
- x: -4,
- y: 0
- }, {
- x: -3,
- y: 0
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }], [{
- x: -1,
- y: -2
- }, {
- x: 0,
- y: -2
- }, {
- x: 1,
- y: -2
- }, {
- x: 2,
- y: -2
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: 2,
- y: -1
- }, {
- x: -3,
- y: 0
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }], [{
- x: -1,
- y: -2
- }, {
- x: 0,
- y: -2
- }, {
- x: 1,
- y: -2
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }], [{
- x: -3,
- y: -1
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -4,
- y: 0
- }, {
- x: -3,
- y: 0
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }]];
- var RefinementTemplates = [{
- coding: [{
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -1,
- y: 0
- }],
- reference: [{
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -1,
- y: 0
- }, {
- x: 0,
- y: 0
- }, {
- x: 1,
- y: 0
- }, {
- x: -1,
- y: 1
- }, {
- x: 0,
- y: 1
- }, {
- x: 1,
- y: 1
- }]
- }, {
- coding: [{
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -1,
- y: 0
- }],
- reference: [{
- x: 0,
- y: -1
- }, {
- x: -1,
- y: 0
- }, {
- x: 0,
- y: 0
- }, {
- x: 1,
- y: 0
- }, {
- x: 0,
- y: 1
- }, {
- x: 1,
- y: 1
- }]
- }];
- var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];
- var RefinementReusedContexts = [0x0020, 0x0008];
-
- function decodeBitmapTemplate0(width, height, decodingContext) {
- var decoder = decodingContext.decoder;
- var contexts = decodingContext.contextCache.getContexts("GB");
- var contextLabel,
- i,
- j,
- pixel,
- row,
- row1,
- row2,
- bitmap = [];
- var OLD_PIXEL_MASK = 0x7bf7;
-
- for (i = 0; i < height; i++) {
- row = bitmap[i] = new Uint8Array(width);
- row1 = i < 1 ? row : bitmap[i - 1];
- row2 = i < 2 ? row : bitmap[i - 2];
- contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;
-
- for (j = 0; j < width; j++) {
- row[j] = pixel = decoder.readBit(contexts, contextLabel);
- contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
- }
- }
-
- return bitmap;
- }
-
- function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
- if (mmr) {
- const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
- return decodeMMRBitmap(input, width, height, false);
- }
-
- if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
- return decodeBitmapTemplate0(width, height, decodingContext);
- }
-
- var useskip = !!skip;
- var template = CodingTemplates[templateIndex].concat(at);
- template.sort(function (a, b) {
- return a.y - b.y || a.x - b.x;
- });
- var templateLength = template.length;
- var templateX = new Int8Array(templateLength);
- var templateY = new Int8Array(templateLength);
- var changingTemplateEntries = [];
- var reuseMask = 0,
- minX = 0,
- maxX = 0,
- minY = 0;
- var c, k;
-
- for (k = 0; k < templateLength; k++) {
- templateX[k] = template[k].x;
- templateY[k] = template[k].y;
- minX = Math.min(minX, template[k].x);
- maxX = Math.max(maxX, template[k].x);
- minY = Math.min(minY, template[k].y);
-
- if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {
- reuseMask |= 1 << templateLength - 1 - k;
- } else {
- changingTemplateEntries.push(k);
- }
- }
-
- var changingEntriesLength = changingTemplateEntries.length;
- var changingTemplateX = new Int8Array(changingEntriesLength);
- var changingTemplateY = new Int8Array(changingEntriesLength);
- var changingTemplateBit = new Uint16Array(changingEntriesLength);
-
- for (c = 0; c < changingEntriesLength; c++) {
- k = changingTemplateEntries[c];
- changingTemplateX[c] = template[k].x;
- changingTemplateY[c] = template[k].y;
- changingTemplateBit[c] = 1 << templateLength - 1 - k;
- }
-
- var sbb_left = -minX;
- var sbb_top = -minY;
- var sbb_right = width - maxX;
- var pseudoPixelContext = ReusedContexts[templateIndex];
- var row = new Uint8Array(width);
- var bitmap = [];
- var decoder = decodingContext.decoder;
- var contexts = decodingContext.contextCache.getContexts("GB");
- var ltp = 0,
- j,
- i0,
- j0,
- contextLabel = 0,
- bit,
- shift;
-
- for (var i = 0; i < height; i++) {
- if (prediction) {
- var sltp = decoder.readBit(contexts, pseudoPixelContext);
- ltp ^= sltp;
-
- if (ltp) {
- bitmap.push(row);
- continue;
- }
- }
-
- row = new Uint8Array(row);
- bitmap.push(row);
-
- for (j = 0; j < width; j++) {
- if (useskip && skip[i][j]) {
- row[j] = 0;
- continue;
- }
-
- if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
- contextLabel = contextLabel << 1 & reuseMask;
-
- for (k = 0; k < changingEntriesLength; k++) {
- i0 = i + changingTemplateY[k];
- j0 = j + changingTemplateX[k];
- bit = bitmap[i0][j0];
-
- if (bit) {
- bit = changingTemplateBit[k];
- contextLabel |= bit;
- }
- }
- } else {
- contextLabel = 0;
- shift = templateLength - 1;
-
- for (k = 0; k < templateLength; k++, shift--) {
- j0 = j + templateX[k];
-
- if (j0 >= 0 && j0 < width) {
- i0 = i + templateY[k];
-
- if (i0 >= 0) {
- bit = bitmap[i0][j0];
-
- if (bit) {
- contextLabel |= bit << shift;
- }
- }
- }
- }
- }
-
- var pixel = decoder.readBit(contexts, contextLabel);
- row[j] = pixel;
- }
- }
-
- return bitmap;
- }
-
- function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {
- var codingTemplate = RefinementTemplates[templateIndex].coding;
-
- if (templateIndex === 0) {
- codingTemplate = codingTemplate.concat([at[0]]);
- }
-
- var codingTemplateLength = codingTemplate.length;
- var codingTemplateX = new Int32Array(codingTemplateLength);
- var codingTemplateY = new Int32Array(codingTemplateLength);
- var k;
-
- for (k = 0; k < codingTemplateLength; k++) {
- codingTemplateX[k] = codingTemplate[k].x;
- codingTemplateY[k] = codingTemplate[k].y;
- }
-
- var referenceTemplate = RefinementTemplates[templateIndex].reference;
-
- if (templateIndex === 0) {
- referenceTemplate = referenceTemplate.concat([at[1]]);
- }
-
- var referenceTemplateLength = referenceTemplate.length;
- var referenceTemplateX = new Int32Array(referenceTemplateLength);
- var referenceTemplateY = new Int32Array(referenceTemplateLength);
-
- for (k = 0; k < referenceTemplateLength; k++) {
- referenceTemplateX[k] = referenceTemplate[k].x;
- referenceTemplateY[k] = referenceTemplate[k].y;
- }
-
- var referenceWidth = referenceBitmap[0].length;
- var referenceHeight = referenceBitmap.length;
- var pseudoPixelContext = RefinementReusedContexts[templateIndex];
- var bitmap = [];
- var decoder = decodingContext.decoder;
- var contexts = decodingContext.contextCache.getContexts("GR");
- var ltp = 0;
-
- for (var i = 0; i < height; i++) {
- if (prediction) {
- var sltp = decoder.readBit(contexts, pseudoPixelContext);
- ltp ^= sltp;
-
- if (ltp) {
- throw new Jbig2Error("prediction is not supported");
- }
- }
-
- var row = new Uint8Array(width);
- bitmap.push(row);
-
- for (var j = 0; j < width; j++) {
- var i0, j0;
- var contextLabel = 0;
-
- for (k = 0; k < codingTemplateLength; k++) {
- i0 = i + codingTemplateY[k];
- j0 = j + codingTemplateX[k];
-
- if (i0 < 0 || j0 < 0 || j0 >= width) {
- contextLabel <<= 1;
- } else {
- contextLabel = contextLabel << 1 | bitmap[i0][j0];
- }
- }
-
- for (k = 0; k < referenceTemplateLength; k++) {
- i0 = i + referenceTemplateY[k] - offsetY;
- j0 = j + referenceTemplateX[k] - offsetX;
-
- if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {
- contextLabel <<= 1;
- } else {
- contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];
- }
- }
-
- var pixel = decoder.readBit(contexts, contextLabel);
- row[j] = pixel;
- }
- }
-
- return bitmap;
- }
-
- function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
- if (huffman && refinement) {
- throw new Jbig2Error("symbol refinement with Huffman is not supported");
- }
-
- var newSymbols = [];
- var currentHeight = 0;
- var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);
- var decoder = decodingContext.decoder;
- var contextCache = decodingContext.contextCache;
- let tableB1, symbolWidths;
-
- if (huffman) {
- tableB1 = getStandardTable(1);
- symbolWidths = [];
- symbolCodeLength = Math.max(symbolCodeLength, 1);
- }
-
- while (newSymbols.length < numberOfNewSymbols) {
- var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder);
- currentHeight += deltaHeight;
- let currentWidth = 0,
- totalWidth = 0;
- const firstSymbol = huffman ? symbolWidths.length : 0;
-
- while (true) {
- var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder);
-
- if (deltaWidth === null) {
- break;
- }
-
- currentWidth += deltaWidth;
- totalWidth += currentWidth;
- var bitmap;
-
- if (refinement) {
- var numberOfInstances = decodeInteger(contextCache, "IAAI", decoder);
-
- if (numberOfInstances > 1) {
- bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
- } else {
- var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
- var rdx = decodeInteger(contextCache, "IARDX", decoder);
- var rdy = decodeInteger(contextCache, "IARDY", decoder);
- var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
- bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
- }
-
- newSymbols.push(bitmap);
- } else if (huffman) {
- symbolWidths.push(currentWidth);
- } else {
- bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);
- newSymbols.push(bitmap);
- }
- }
-
- if (huffman && !refinement) {
- const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
- huffmanInput.byteAlign();
- let collectiveBitmap;
-
- if (bitmapSize === 0) {
- collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
- } else {
- const originalEnd = huffmanInput.end;
- const bitmapEnd = huffmanInput.position + bitmapSize;
- huffmanInput.end = bitmapEnd;
- collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);
- huffmanInput.end = originalEnd;
- huffmanInput.position = bitmapEnd;
- }
-
- const numberOfSymbolsDecoded = symbolWidths.length;
-
- if (firstSymbol === numberOfSymbolsDecoded - 1) {
- newSymbols.push(collectiveBitmap);
- } else {
- let i,
- y,
- xMin = 0,
- xMax,
- bitmapWidth,
- symbolBitmap;
-
- for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {
- bitmapWidth = symbolWidths[i];
- xMax = xMin + bitmapWidth;
- symbolBitmap = [];
-
- for (y = 0; y < currentHeight; y++) {
- symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
- }
-
- newSymbols.push(symbolBitmap);
- xMin = xMax;
- }
- }
- }
- }
-
- var exportedSymbols = [];
- var flags = [],
- currentFlag = false;
- var totalSymbolsLength = symbols.length + numberOfNewSymbols;
-
- while (flags.length < totalSymbolsLength) {
- var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder);
-
- while (runLength--) {
- flags.push(currentFlag);
- }
-
- currentFlag = !currentFlag;
- }
-
- for (var i = 0, ii = symbols.length; i < ii; i++) {
- if (flags[i]) {
- exportedSymbols.push(symbols[i]);
- }
- }
-
- for (var j = 0; j < numberOfNewSymbols; i++, j++) {
- if (flags[i]) {
- exportedSymbols.push(newSymbols[j]);
- }
- }
-
- return exportedSymbols;
- }
-
- function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
- if (huffman && refinement) {
- throw new Jbig2Error("refinement with Huffman is not supported");
- }
-
- var bitmap = [];
- var i, row;
-
- for (i = 0; i < height; i++) {
- row = new Uint8Array(width);
-
- if (defaultPixelValue) {
- for (var j = 0; j < width; j++) {
- row[j] = defaultPixelValue;
- }
- }
-
- bitmap.push(row);
- }
-
- var decoder = decodingContext.decoder;
- var contextCache = decodingContext.contextCache;
- var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder);
- var firstS = 0;
- i = 0;
-
- while (i < numberOfSymbolInstances) {
- var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder);
- stripT += deltaT;
- var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder);
- firstS += deltaFirstS;
- var currentS = firstS;
-
- do {
- let currentT = 0;
-
- if (stripSize > 1) {
- currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder);
- }
-
- var t = stripSize * stripT + currentT;
- var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
- var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder));
- var symbolBitmap = inputSymbols[symbolId];
- var symbolWidth = symbolBitmap[0].length;
- var symbolHeight = symbolBitmap.length;
-
- if (applyRefinement) {
- var rdw = decodeInteger(contextCache, "IARDW", decoder);
- var rdh = decodeInteger(contextCache, "IARDH", decoder);
- var rdx = decodeInteger(contextCache, "IARDX", decoder);
- var rdy = decodeInteger(contextCache, "IARDY", decoder);
- symbolWidth += rdw;
- symbolHeight += rdh;
- symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
- }
-
- var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
- var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
- var s2, t2, symbolRow;
-
- if (transposed) {
- for (s2 = 0; s2 < symbolHeight; s2++) {
- row = bitmap[offsetS + s2];
-
- if (!row) {
- continue;
- }
-
- symbolRow = symbolBitmap[s2];
- var maxWidth = Math.min(width - offsetT, symbolWidth);
-
- switch (combinationOperator) {
- case 0:
- for (t2 = 0; t2 < maxWidth; t2++) {
- row[offsetT + t2] |= symbolRow[t2];
- }
-
- break;
-
- case 2:
- for (t2 = 0; t2 < maxWidth; t2++) {
- row[offsetT + t2] ^= symbolRow[t2];
- }
-
- break;
-
- default:
- throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
- }
- }
-
- currentS += symbolHeight - 1;
- } else {
- for (t2 = 0; t2 < symbolHeight; t2++) {
- row = bitmap[offsetT + t2];
-
- if (!row) {
- continue;
- }
-
- symbolRow = symbolBitmap[t2];
-
- switch (combinationOperator) {
- case 0:
- for (s2 = 0; s2 < symbolWidth; s2++) {
- row[offsetS + s2] |= symbolRow[s2];
- }
-
- break;
-
- case 2:
- for (s2 = 0; s2 < symbolWidth; s2++) {
- row[offsetS + s2] ^= symbolRow[s2];
- }
-
- break;
-
- default:
- throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
- }
- }
-
- currentS += symbolWidth - 1;
- }
-
- i++;
- var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder);
-
- if (deltaS === null) {
- break;
- }
-
- currentS += deltaS + dsOffset;
- } while (true);
- }
-
- return bitmap;
- }
-
- function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
- const at = [];
-
- if (!mmr) {
- at.push({
- x: -patternWidth,
- y: 0
- });
-
- if (template === 0) {
- at.push({
- x: -3,
- y: -1
- });
- at.push({
- x: 2,
- y: -2
- });
- at.push({
- x: -2,
- y: -2
- });
- }
- }
-
- const collectiveWidth = (maxPatternIndex + 1) * patternWidth;
- const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
- const patterns = [];
-
- for (let i = 0; i <= maxPatternIndex; i++) {
- const patternBitmap = [];
- const xMin = patternWidth * i;
- const xMax = xMin + patternWidth;
-
- for (let y = 0; y < patternHeight; y++) {
- patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
- }
-
- patterns.push(patternBitmap);
- }
-
- return patterns;
- }
-
- function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
- const skip = null;
-
- if (enableSkip) {
- throw new Jbig2Error("skip is not supported");
- }
-
- if (combinationOperator !== 0) {
- throw new Jbig2Error("operator " + combinationOperator + " is not supported in halftone region");
- }
-
- const regionBitmap = [];
- let i, j, row;
-
- for (i = 0; i < regionHeight; i++) {
- row = new Uint8Array(regionWidth);
-
- if (defaultPixelValue) {
- for (j = 0; j < regionWidth; j++) {
- row[j] = defaultPixelValue;
- }
- }
-
- regionBitmap.push(row);
- }
-
- const numberOfPatterns = patterns.length;
- const pattern0 = patterns[0];
- const patternWidth = pattern0[0].length,
- patternHeight = pattern0.length;
- const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);
- const at = [];
-
- if (!mmr) {
- at.push({
- x: template <= 1 ? 3 : 2,
- y: -1
- });
-
- if (template === 0) {
- at.push({
- x: -3,
- y: -1
- });
- at.push({
- x: 2,
- y: -2
- });
- at.push({
- x: -2,
- y: -2
- });
- }
- }
-
- const grayScaleBitPlanes = [];
- let mmrInput, bitmap;
-
- if (mmr) {
- mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
- }
-
- for (i = bitsPerValue - 1; i >= 0; i--) {
- if (mmr) {
- bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);
- } else {
- bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);
- }
-
- grayScaleBitPlanes[i] = bitmap;
- }
-
- let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
-
- for (mg = 0; mg < gridHeight; mg++) {
- for (ng = 0; ng < gridWidth; ng++) {
- bit = 0;
- patternIndex = 0;
-
- for (j = bitsPerValue - 1; j >= 0; j--) {
- bit = grayScaleBitPlanes[j][mg][ng] ^ bit;
- patternIndex |= bit << j;
- }
-
- patternBitmap = patterns[patternIndex];
- x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;
- y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;
-
- if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {
- for (i = 0; i < patternHeight; i++) {
- regionRow = regionBitmap[y + i];
- patternRow = patternBitmap[i];
-
- for (j = 0; j < patternWidth; j++) {
- regionRow[x + j] |= patternRow[j];
- }
- }
- } else {
- let regionX, regionY;
-
- for (i = 0; i < patternHeight; i++) {
- regionY = y + i;
-
- if (regionY < 0 || regionY >= regionHeight) {
- continue;
- }
-
- regionRow = regionBitmap[regionY];
- patternRow = patternBitmap[i];
-
- for (j = 0; j < patternWidth; j++) {
- regionX = x + j;
-
- if (regionX >= 0 && regionX < regionWidth) {
- regionRow[regionX] |= patternRow[j];
- }
- }
- }
- }
- }
- }
-
- return regionBitmap;
- }
-
- function readSegmentHeader(data, start) {
- var segmentHeader = {};
- segmentHeader.number = (0, _core_utils.readUint32)(data, start);
- var flags = data[start + 4];
- var segmentType = flags & 0x3f;
-
- if (!SegmentTypes[segmentType]) {
- throw new Jbig2Error("invalid segment type: " + segmentType);
- }
-
- segmentHeader.type = segmentType;
- segmentHeader.typeName = SegmentTypes[segmentType];
- segmentHeader.deferredNonRetain = !!(flags & 0x80);
- var pageAssociationFieldSize = !!(flags & 0x40);
- var referredFlags = data[start + 5];
- var referredToCount = referredFlags >> 5 & 7;
- var retainBits = [referredFlags & 31];
- var position = start + 6;
-
- if (referredFlags === 7) {
- referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;
- position += 3;
- var bytes = referredToCount + 7 >> 3;
- retainBits[0] = data[position++];
-
- while (--bytes > 0) {
- retainBits.push(data[position++]);
- }
- } else if (referredFlags === 5 || referredFlags === 6) {
- throw new Jbig2Error("invalid referred-to flags");
- }
-
- segmentHeader.retainBits = retainBits;
- let referredToSegmentNumberSize = 4;
-
- if (segmentHeader.number <= 256) {
- referredToSegmentNumberSize = 1;
- } else if (segmentHeader.number <= 65536) {
- referredToSegmentNumberSize = 2;
- }
-
- var referredTo = [];
- var i, ii;
-
- for (i = 0; i < referredToCount; i++) {
- let number;
-
- if (referredToSegmentNumberSize === 1) {
- number = data[position];
- } else if (referredToSegmentNumberSize === 2) {
- number = (0, _core_utils.readUint16)(data, position);
- } else {
- number = (0, _core_utils.readUint32)(data, position);
- }
-
- referredTo.push(number);
- position += referredToSegmentNumberSize;
- }
-
- segmentHeader.referredTo = referredTo;
-
- if (!pageAssociationFieldSize) {
- segmentHeader.pageAssociation = data[position++];
- } else {
- segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);
- position += 4;
- }
-
- segmentHeader.length = (0, _core_utils.readUint32)(data, position);
- position += 4;
-
- if (segmentHeader.length === 0xffffffff) {
- if (segmentType === 38) {
- var genericRegionInfo = readRegionSegmentInformation(data, position);
- var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
- var genericRegionMmr = !!(genericRegionSegmentFlags & 1);
- var searchPatternLength = 6;
- var searchPattern = new Uint8Array(searchPatternLength);
-
- if (!genericRegionMmr) {
- searchPattern[0] = 0xff;
- searchPattern[1] = 0xac;
- }
-
- searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;
- searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;
- searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;
- searchPattern[5] = genericRegionInfo.height & 0xff;
-
- for (i = position, ii = data.length; i < ii; i++) {
- var j = 0;
-
- while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
- j++;
- }
-
- if (j === searchPatternLength) {
- segmentHeader.length = i + searchPatternLength;
- break;
- }
- }
-
- if (segmentHeader.length === 0xffffffff) {
- throw new Jbig2Error("segment end was not found");
- }
- } else {
- throw new Jbig2Error("invalid unknown segment length");
- }
- }
-
- segmentHeader.headerEnd = position;
- return segmentHeader;
- }
-
- function readSegments(header, data, start, end) {
- var segments = [];
- var position = start;
-
- while (position < end) {
- var segmentHeader = readSegmentHeader(data, position);
- position = segmentHeader.headerEnd;
- var segment = {
- header: segmentHeader,
- data
- };
-
- if (!header.randomAccess) {
- segment.start = position;
- position += segmentHeader.length;
- segment.end = position;
- }
-
- segments.push(segment);
-
- if (segmentHeader.type === 51) {
- break;
- }
- }
-
- if (header.randomAccess) {
- for (var i = 0, ii = segments.length; i < ii; i++) {
- segments[i].start = position;
- position += segments[i].header.length;
- segments[i].end = position;
- }
- }
-
- return segments;
- }
-
- function readRegionSegmentInformation(data, start) {
- return {
- width: (0, _core_utils.readUint32)(data, start),
- height: (0, _core_utils.readUint32)(data, start + 4),
- x: (0, _core_utils.readUint32)(data, start + 8),
- y: (0, _core_utils.readUint32)(data, start + 12),
- combinationOperator: data[start + 16] & 7
- };
- }
-
- var RegionSegmentInformationFieldLength = 17;
-
- function processSegment(segment, visitor) {
- var header = segment.header;
- var data = segment.data,
- position = segment.start,
- end = segment.end;
- var args, at, i, atLength;
-
- switch (header.type) {
- case 0:
- var dictionary = {};
- var dictionaryFlags = (0, _core_utils.readUint16)(data, position);
- dictionary.huffman = !!(dictionaryFlags & 1);
- dictionary.refinement = !!(dictionaryFlags & 2);
- dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
- dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;
- dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;
- dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;
- dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
- dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
- dictionary.template = dictionaryFlags >> 10 & 3;
- dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;
- position += 2;
-
- if (!dictionary.huffman) {
- atLength = dictionary.template === 0 ? 4 : 1;
- at = [];
-
- for (i = 0; i < atLength; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- dictionary.at = at;
- }
-
- if (dictionary.refinement && !dictionary.refinementTemplate) {
- at = [];
-
- for (i = 0; i < 2; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- dictionary.refinementAt = at;
- }
-
- dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);
- position += 4;
- dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);
- position += 4;
- args = [dictionary, header.number, header.referredTo, data, position, end];
- break;
-
- case 6:
- case 7:
- var textRegion = {};
- textRegion.info = readRegionSegmentInformation(data, position);
- position += RegionSegmentInformationFieldLength;
- var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);
- position += 2;
- textRegion.huffman = !!(textRegionSegmentFlags & 1);
- textRegion.refinement = !!(textRegionSegmentFlags & 2);
- textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;
- textRegion.stripSize = 1 << textRegion.logStripSize;
- textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;
- textRegion.transposed = !!(textRegionSegmentFlags & 64);
- textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;
- textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;
- textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;
- textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
-
- if (textRegion.huffman) {
- var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);
- position += 2;
- textRegion.huffmanFS = textRegionHuffmanFlags & 3;
- textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
- textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;
- textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;
- textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;
- textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;
- textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;
- textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);
- }
-
- if (textRegion.refinement && !textRegion.refinementTemplate) {
- at = [];
-
- for (i = 0; i < 2; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- textRegion.refinementAt = at;
- }
-
- textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);
- position += 4;
- args = [textRegion, header.referredTo, data, position, end];
- break;
-
- case 16:
- const patternDictionary = {};
- const patternDictionaryFlags = data[position++];
- patternDictionary.mmr = !!(patternDictionaryFlags & 1);
- patternDictionary.template = patternDictionaryFlags >> 1 & 3;
- patternDictionary.patternWidth = data[position++];
- patternDictionary.patternHeight = data[position++];
- patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);
- position += 4;
- args = [patternDictionary, header.number, data, position, end];
- break;
-
- case 22:
- case 23:
- const halftoneRegion = {};
- halftoneRegion.info = readRegionSegmentInformation(data, position);
- position += RegionSegmentInformationFieldLength;
- const halftoneRegionFlags = data[position++];
- halftoneRegion.mmr = !!(halftoneRegionFlags & 1);
- halftoneRegion.template = halftoneRegionFlags >> 1 & 3;
- halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);
- halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;
- halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;
- halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);
- position += 4;
- halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);
- position += 4;
- halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
- position += 4;
- halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
- position += 4;
- halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);
- position += 2;
- halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);
- position += 2;
- args = [halftoneRegion, header.referredTo, data, position, end];
- break;
-
- case 38:
- case 39:
- var genericRegion = {};
- genericRegion.info = readRegionSegmentInformation(data, position);
- position += RegionSegmentInformationFieldLength;
- var genericRegionSegmentFlags = data[position++];
- genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
- genericRegion.template = genericRegionSegmentFlags >> 1 & 3;
- genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
-
- if (!genericRegion.mmr) {
- atLength = genericRegion.template === 0 ? 4 : 1;
- at = [];
-
- for (i = 0; i < atLength; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- genericRegion.at = at;
- }
-
- args = [genericRegion, data, position, end];
- break;
-
- case 48:
- var pageInfo = {
- width: (0, _core_utils.readUint32)(data, position),
- height: (0, _core_utils.readUint32)(data, position + 4),
- resolutionX: (0, _core_utils.readUint32)(data, position + 8),
- resolutionY: (0, _core_utils.readUint32)(data, position + 12)
- };
-
- if (pageInfo.height === 0xffffffff) {
- delete pageInfo.height;
- }
-
- var pageSegmentFlags = data[position + 16];
- (0, _core_utils.readUint16)(data, position + 17);
- pageInfo.lossless = !!(pageSegmentFlags & 1);
- pageInfo.refinement = !!(pageSegmentFlags & 2);
- pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
- pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;
- pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
- pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
- args = [pageInfo];
- break;
-
- case 49:
- break;
-
- case 50:
- break;
-
- case 51:
- break;
-
- case 53:
- args = [header.number, data, position, end];
- break;
-
- case 62:
- break;
-
- default:
- throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented");
- }
-
- var callbackName = "on" + header.typeName;
-
- if (callbackName in visitor) {
- visitor[callbackName].apply(visitor, args);
- }
- }
-
- function processSegments(segments, visitor) {
- for (var i = 0, ii = segments.length; i < ii; i++) {
- processSegment(segments[i], visitor);
- }
- }
-
- function parseJbig2Chunks(chunks) {
- var visitor = new SimpleSegmentVisitor();
-
- for (var i = 0, ii = chunks.length; i < ii; i++) {
- var chunk = chunks[i];
- var segments = readSegments({}, chunk.data, chunk.start, chunk.end);
- processSegments(segments, visitor);
- }
-
- return visitor.buffer;
- }
-
- function parseJbig2(data) {
- const end = data.length;
- let position = 0;
-
- if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) {
- throw new Jbig2Error("parseJbig2 - invalid header.");
- }
-
- const header = Object.create(null);
- position += 8;
- const flags = data[position++];
- header.randomAccess = !(flags & 1);
-
- if (!(flags & 2)) {
- header.numberOfPages = (0, _core_utils.readUint32)(data, position);
- position += 4;
- }
-
- const segments = readSegments(header, data, position, end);
- const visitor = new SimpleSegmentVisitor();
- processSegments(segments, visitor);
- const {
- width,
- height
- } = visitor.currentPageInfo;
- const bitPacked = visitor.buffer;
- const imgData = new Uint8ClampedArray(width * height);
- let q = 0,
- k = 0;
-
- for (let i = 0; i < height; i++) {
- let mask = 0,
- buffer;
-
- for (let j = 0; j < width; j++) {
- if (!mask) {
- mask = 128;
- buffer = bitPacked[k++];
- }
-
- imgData[q++] = buffer & mask ? 0 : 255;
- mask >>= 1;
- }
- }
-
- return {
- imgData,
- width,
- height
- };
- }
-
- function SimpleSegmentVisitor() {}
-
- SimpleSegmentVisitor.prototype = {
- onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {
- this.currentPageInfo = info;
- var rowSize = info.width + 7 >> 3;
- var buffer = new Uint8ClampedArray(rowSize * info.height);
-
- if (info.defaultPixelValue) {
- for (var i = 0, ii = buffer.length; i < ii; i++) {
- buffer[i] = 0xff;
- }
- }
-
- this.buffer = buffer;
- },
- drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {
- var pageInfo = this.currentPageInfo;
- var width = regionInfo.width,
- height = regionInfo.height;
- var rowSize = pageInfo.width + 7 >> 3;
- var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;
- var buffer = this.buffer;
- var mask0 = 128 >> (regionInfo.x & 7);
- var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
- var i, j, mask, offset;
-
- switch (combinationOperator) {
- case 0:
- for (i = 0; i < height; i++) {
- mask = mask0;
- offset = offset0;
-
- for (j = 0; j < width; j++) {
- if (bitmap[i][j]) {
- buffer[offset] |= mask;
- }
-
- mask >>= 1;
-
- if (!mask) {
- mask = 128;
- offset++;
- }
- }
-
- offset0 += rowSize;
- }
-
- break;
-
- case 2:
- for (i = 0; i < height; i++) {
- mask = mask0;
- offset = offset0;
-
- for (j = 0; j < width; j++) {
- if (bitmap[i][j]) {
- buffer[offset] ^= mask;
- }
-
- mask >>= 1;
-
- if (!mask) {
- mask = 128;
- offset++;
- }
- }
-
- offset0 += rowSize;
- }
-
- break;
-
- default:
- throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
- }
- },
- onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {
- var regionInfo = region.info;
- var decodingContext = new DecodingContext(data, start, end);
- var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);
- this.drawBitmap(regionInfo, bitmap);
- },
- onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {
- this.onImmediateGenericRegion.apply(this, arguments);
- },
- onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
- let huffmanTables, huffmanInput;
-
- if (dictionary.huffman) {
- huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
- huffmanInput = new Reader(data, start, end);
- }
-
- var symbols = this.symbols;
-
- if (!symbols) {
- this.symbols = symbols = {};
- }
-
- var inputSymbols = [];
-
- for (var i = 0, ii = referredSegments.length; i < ii; i++) {
- const referredSymbols = symbols[referredSegments[i]];
-
- if (referredSymbols) {
- inputSymbols = inputSymbols.concat(referredSymbols);
- }
- }
-
- var decodingContext = new DecodingContext(data, start, end);
- symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);
- },
- onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {
- var regionInfo = region.info;
- let huffmanTables, huffmanInput;
- var symbols = this.symbols;
- var inputSymbols = [];
-
- for (var i = 0, ii = referredSegments.length; i < ii; i++) {
- const referredSymbols = symbols[referredSegments[i]];
-
- if (referredSymbols) {
- inputSymbols = inputSymbols.concat(referredSymbols);
- }
- }
-
- var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);
-
- if (region.huffman) {
- huffmanInput = new Reader(data, start, end);
- huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);
- }
-
- var decodingContext = new DecodingContext(data, start, end);
- var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);
- this.drawBitmap(regionInfo, bitmap);
- },
- onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
- this.onImmediateTextRegion.apply(this, arguments);
- },
-
- onPatternDictionary(dictionary, currentSegment, data, start, end) {
- let patterns = this.patterns;
-
- if (!patterns) {
- this.patterns = patterns = {};
- }
-
- const decodingContext = new DecodingContext(data, start, end);
- patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
- },
-
- onImmediateHalftoneRegion(region, referredSegments, data, start, end) {
- const patterns = this.patterns[referredSegments[0]];
- const regionInfo = region.info;
- const decodingContext = new DecodingContext(data, start, end);
- const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);
- this.drawBitmap(regionInfo, bitmap);
- },
-
- onImmediateLosslessHalftoneRegion() {
- this.onImmediateHalftoneRegion.apply(this, arguments);
- },
-
- onTables(currentSegment, data, start, end) {
- let customTables = this.customTables;
-
- if (!customTables) {
- this.customTables = customTables = {};
- }
-
- customTables[currentSegment] = decodeTablesSegment(data, start, end);
- }
-
- };
-
- function HuffmanLine(lineData) {
- if (lineData.length === 2) {
- this.isOOB = true;
- this.rangeLow = 0;
- this.prefixLength = lineData[0];
- this.rangeLength = 0;
- this.prefixCode = lineData[1];
- this.isLowerRange = false;
- } else {
- this.isOOB = false;
- this.rangeLow = lineData[0];
- this.prefixLength = lineData[1];
- this.rangeLength = lineData[2];
- this.prefixCode = lineData[3];
- this.isLowerRange = lineData[4] === "lower";
- }
- }
-
- function HuffmanTreeNode(line) {
- this.children = [];
-
- if (line) {
- this.isLeaf = true;
- this.rangeLength = line.rangeLength;
- this.rangeLow = line.rangeLow;
- this.isLowerRange = line.isLowerRange;
- this.isOOB = line.isOOB;
- } else {
- this.isLeaf = false;
- }
- }
-
- HuffmanTreeNode.prototype = {
- buildTree(line, shift) {
- const bit = line.prefixCode >> shift & 1;
-
- if (shift <= 0) {
- this.children[bit] = new HuffmanTreeNode(line);
- } else {
- let node = this.children[bit];
-
- if (!node) {
- this.children[bit] = node = new HuffmanTreeNode(null);
- }
-
- node.buildTree(line, shift - 1);
- }
- },
-
- decodeNode(reader) {
- if (this.isLeaf) {
- if (this.isOOB) {
- return null;
- }
-
- const htOffset = reader.readBits(this.rangeLength);
- return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
- }
-
- const node = this.children[reader.readBit()];
-
- if (!node) {
- throw new Jbig2Error("invalid Huffman data");
- }
-
- return node.decodeNode(reader);
- }
-
- };
-
- function HuffmanTable(lines, prefixCodesDone) {
- if (!prefixCodesDone) {
- this.assignPrefixCodes(lines);
- }
-
- this.rootNode = new HuffmanTreeNode(null);
-
- for (let i = 0, ii = lines.length; i < ii; i++) {
- const line = lines[i];
-
- if (line.prefixLength > 0) {
- this.rootNode.buildTree(line, line.prefixLength - 1);
- }
- }
- }
-
- HuffmanTable.prototype = {
- decode(reader) {
- return this.rootNode.decodeNode(reader);
- },
-
- assignPrefixCodes(lines) {
- const linesLength = lines.length;
- let prefixLengthMax = 0;
-
- for (let i = 0; i < linesLength; i++) {
- prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
- }
-
- const histogram = new Uint32Array(prefixLengthMax + 1);
-
- for (let i = 0; i < linesLength; i++) {
- histogram[lines[i].prefixLength]++;
- }
-
- let currentLength = 1,
- firstCode = 0,
- currentCode,
- currentTemp,
- line;
- histogram[0] = 0;
-
- while (currentLength <= prefixLengthMax) {
- firstCode = firstCode + histogram[currentLength - 1] << 1;
- currentCode = firstCode;
- currentTemp = 0;
-
- while (currentTemp < linesLength) {
- line = lines[currentTemp];
-
- if (line.prefixLength === currentLength) {
- line.prefixCode = currentCode;
- currentCode++;
- }
-
- currentTemp++;
- }
-
- currentLength++;
- }
- }
-
- };
-
- function decodeTablesSegment(data, start, end) {
- const flags = data[start];
- const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;
- const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;
- const reader = new Reader(data, start + 9, end);
- const prefixSizeBits = (flags >> 1 & 7) + 1;
- const rangeSizeBits = (flags >> 4 & 7) + 1;
- const lines = [];
- let prefixLength,
- rangeLength,
- currentRangeLow = lowestValue;
-
- do {
- prefixLength = reader.readBits(prefixSizeBits);
- rangeLength = reader.readBits(rangeSizeBits);
- lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));
- currentRangeLow += 1 << rangeLength;
- } while (currentRangeLow < highestValue);
-
- prefixLength = reader.readBits(prefixSizeBits);
- lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"]));
- prefixLength = reader.readBits(prefixSizeBits);
- lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
-
- if (flags & 1) {
- prefixLength = reader.readBits(prefixSizeBits);
- lines.push(new HuffmanLine([prefixLength, 0]));
- }
-
- return new HuffmanTable(lines, false);
- }
-
- const standardTablesCache = {};
-
- function getStandardTable(number) {
- let table = standardTablesCache[number];
-
- if (table) {
- return table;
- }
-
- let lines;
-
- switch (number) {
- case 1:
- lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];
- break;
-
- case 2:
- lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];
- break;
-
- case 3:
- lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]];
- break;
-
- case 4:
- lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];
- break;
-
- case 5:
- lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]];
- break;
-
- case 6:
- lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]];
- break;
-
- case 7:
- lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]];
- break;
-
- case 8:
- lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]];
- break;
-
- case 9:
- lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]];
- break;
-
- case 10:
- lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]];
- break;
-
- case 11:
- lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
- break;
-
- case 12:
- lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];
- break;
-
- case 13:
- lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
- break;
-
- case 14:
- lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];
- break;
-
- case 15:
- lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]];
- break;
-
- default:
- throw new Jbig2Error(`standard table B.${number} does not exist`);
- }
-
- for (let i = 0, ii = lines.length; i < ii; i++) {
- lines[i] = new HuffmanLine(lines[i]);
- }
-
- table = new HuffmanTable(lines, true);
- standardTablesCache[number] = table;
- return table;
- }
-
- function Reader(data, start, end) {
- this.data = data;
- this.start = start;
- this.end = end;
- this.position = start;
- this.shift = -1;
- this.currentByte = 0;
- }
-
- Reader.prototype = {
- readBit() {
- if (this.shift < 0) {
- if (this.position >= this.end) {
- throw new Jbig2Error("end of data while reading bit");
- }
-
- this.currentByte = this.data[this.position++];
- this.shift = 7;
- }
-
- const bit = this.currentByte >> this.shift & 1;
- this.shift--;
- return bit;
- },
-
- readBits(numBits) {
- let result = 0,
- i;
-
- for (i = numBits - 1; i >= 0; i--) {
- result |= this.readBit() << i;
- }
-
- return result;
- },
-
- byteAlign() {
- this.shift = -1;
- },
-
- next() {
- if (this.position >= this.end) {
- return -1;
- }
-
- return this.data[this.position++];
- }
-
- };
-
- function getCustomHuffmanTable(index, referredTo, customTables) {
- let currentIndex = 0;
-
- for (let i = 0, ii = referredTo.length; i < ii; i++) {
- const table = customTables[referredTo[i]];
-
- if (table) {
- if (index === currentIndex) {
- return table;
- }
-
- currentIndex++;
- }
- }
-
- throw new Jbig2Error("can't find custom Huffman table");
- }
-
- function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
- const codes = [];
-
- for (let i = 0; i <= 34; i++) {
- const codeLength = reader.readBits(4);
- codes.push(new HuffmanLine([i, codeLength, 0, 0]));
- }
-
- const runCodesTable = new HuffmanTable(codes, false);
- codes.length = 0;
-
- for (let i = 0; i < numberOfSymbols;) {
- const codeLength = runCodesTable.decode(reader);
-
- if (codeLength >= 32) {
- let repeatedLength, numberOfRepeats, j;
-
- switch (codeLength) {
- case 32:
- if (i === 0) {
- throw new Jbig2Error("no previous value in symbol ID table");
- }
-
- numberOfRepeats = reader.readBits(2) + 3;
- repeatedLength = codes[i - 1].prefixLength;
- break;
-
- case 33:
- numberOfRepeats = reader.readBits(3) + 3;
- repeatedLength = 0;
- break;
-
- case 34:
- numberOfRepeats = reader.readBits(7) + 11;
- repeatedLength = 0;
- break;
-
- default:
- throw new Jbig2Error("invalid code length in symbol ID table");
- }
-
- for (j = 0; j < numberOfRepeats; j++) {
- codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));
- i++;
- }
- } else {
- codes.push(new HuffmanLine([i, codeLength, 0, 0]));
- i++;
- }
- }
-
- reader.byteAlign();
- const symbolIDTable = new HuffmanTable(codes, false);
- let customIndex = 0,
- tableFirstS,
- tableDeltaS,
- tableDeltaT;
-
- switch (textRegion.huffmanFS) {
- case 0:
- case 1:
- tableFirstS = getStandardTable(textRegion.huffmanFS + 6);
- break;
-
- case 3:
- tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman FS selector");
- }
-
- switch (textRegion.huffmanDS) {
- case 0:
- case 1:
- case 2:
- tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);
- break;
-
- case 3:
- tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DS selector");
- }
-
- switch (textRegion.huffmanDT) {
- case 0:
- case 1:
- case 2:
- tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);
- break;
-
- case 3:
- tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DT selector");
- }
-
- if (textRegion.refinement) {
- throw new Jbig2Error("refinement with Huffman is not supported");
- }
-
- return {
- symbolIDTable,
- tableFirstS,
- tableDeltaS,
- tableDeltaT
- };
- }
-
- function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
- let customIndex = 0,
- tableDeltaHeight,
- tableDeltaWidth;
-
- switch (dictionary.huffmanDHSelector) {
- case 0:
- case 1:
- tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);
- break;
-
- case 3:
- tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DH selector");
- }
-
- switch (dictionary.huffmanDWSelector) {
- case 0:
- case 1:
- tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);
- break;
-
- case 3:
- tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DW selector");
- }
-
- let tableBitmapSize, tableAggregateInstances;
-
- if (dictionary.bitmapSizeSelector) {
- tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- } else {
- tableBitmapSize = getStandardTable(1);
- }
-
- if (dictionary.aggregationInstancesSelector) {
- tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);
- } else {
- tableAggregateInstances = getStandardTable(1);
- }
-
- return {
- tableDeltaHeight,
- tableDeltaWidth,
- tableBitmapSize,
- tableAggregateInstances
- };
- }
-
- function readUncompressedBitmap(reader, width, height) {
- const bitmap = [];
-
- for (let y = 0; y < height; y++) {
- const row = new Uint8Array(width);
- bitmap.push(row);
-
- for (let x = 0; x < width; x++) {
- row[x] = reader.readBit();
- }
-
- reader.byteAlign();
- }
-
- return bitmap;
- }
-
- function decodeMMRBitmap(input, width, height, endOfBlock) {
- const params = {
- K: -1,
- Columns: width,
- Rows: height,
- BlackIs1: true,
- EndOfBlock: endOfBlock
- };
- const decoder = new _ccitt.CCITTFaxDecoder(input, params);
- const bitmap = [];
- let currentByte,
- eof = false;
-
- for (let y = 0; y < height; y++) {
- const row = new Uint8Array(width);
- bitmap.push(row);
- let shift = -1;
-
- for (let x = 0; x < width; x++) {
- if (shift < 0) {
- currentByte = decoder.readNextChar();
-
- if (currentByte === -1) {
- currentByte = 0;
- eof = true;
- }
-
- shift = 7;
- }
-
- row[x] = currentByte >> shift & 1;
- shift--;
- }
- }
-
- if (endOfBlock && !eof) {
- const lookForEOFLimit = 5;
-
- for (let i = 0; i < lookForEOFLimit; i++) {
- if (decoder.readNextChar() === -1) {
- break;
- }
- }
- }
-
- return bitmap;
- }
-
- function Jbig2Image() {}
-
- Jbig2Image.prototype = {
- parseChunks(chunks) {
- return parseJbig2Chunks(chunks);
- },
-
- parse(data) {
- const {
- imgData,
- width,
- height
- } = parseJbig2(data);
- this.width = width;
- this.height = height;
- return imgData;
- }
-
- };
- return Jbig2Image;
-}();
-
-exports.Jbig2Image = Jbig2Image;
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.ArithmeticDecoder = void 0;
-const QeTable = [{
- qe: 0x5601,
- nmps: 1,
- nlps: 1,
- switchFlag: 1
-}, {
- qe: 0x3401,
- nmps: 2,
- nlps: 6,
- switchFlag: 0
-}, {
- qe: 0x1801,
- nmps: 3,
- nlps: 9,
- switchFlag: 0
-}, {
- qe: 0x0ac1,
- nmps: 4,
- nlps: 12,
- switchFlag: 0
-}, {
- qe: 0x0521,
- nmps: 5,
- nlps: 29,
- switchFlag: 0
-}, {
- qe: 0x0221,
- nmps: 38,
- nlps: 33,
- switchFlag: 0
-}, {
- qe: 0x5601,
- nmps: 7,
- nlps: 6,
- switchFlag: 1
-}, {
- qe: 0x5401,
- nmps: 8,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x4801,
- nmps: 9,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x3801,
- nmps: 10,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x3001,
- nmps: 11,
- nlps: 17,
- switchFlag: 0
-}, {
- qe: 0x2401,
- nmps: 12,
- nlps: 18,
- switchFlag: 0
-}, {
- qe: 0x1c01,
- nmps: 13,
- nlps: 20,
- switchFlag: 0
-}, {
- qe: 0x1601,
- nmps: 29,
- nlps: 21,
- switchFlag: 0
-}, {
- qe: 0x5601,
- nmps: 15,
- nlps: 14,
- switchFlag: 1
-}, {
- qe: 0x5401,
- nmps: 16,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x5101,
- nmps: 17,
- nlps: 15,
- switchFlag: 0
-}, {
- qe: 0x4801,
- nmps: 18,
- nlps: 16,
- switchFlag: 0
-}, {
- qe: 0x3801,
- nmps: 19,
- nlps: 17,
- switchFlag: 0
-}, {
- qe: 0x3401,
- nmps: 20,
- nlps: 18,
- switchFlag: 0
-}, {
- qe: 0x3001,
- nmps: 21,
- nlps: 19,
- switchFlag: 0
-}, {
- qe: 0x2801,
- nmps: 22,
- nlps: 19,
- switchFlag: 0
-}, {
- qe: 0x2401,
- nmps: 23,
- nlps: 20,
- switchFlag: 0
-}, {
- qe: 0x2201,
- nmps: 24,
- nlps: 21,
- switchFlag: 0
-}, {
- qe: 0x1c01,
- nmps: 25,
- nlps: 22,
- switchFlag: 0
-}, {
- qe: 0x1801,
- nmps: 26,
- nlps: 23,
- switchFlag: 0
-}, {
- qe: 0x1601,
- nmps: 27,
- nlps: 24,
- switchFlag: 0
-}, {
- qe: 0x1401,
- nmps: 28,
- nlps: 25,
- switchFlag: 0
-}, {
- qe: 0x1201,
- nmps: 29,
- nlps: 26,
- switchFlag: 0
-}, {
- qe: 0x1101,
- nmps: 30,
- nlps: 27,
- switchFlag: 0
-}, {
- qe: 0x0ac1,
- nmps: 31,
- nlps: 28,
- switchFlag: 0
-}, {
- qe: 0x09c1,
- nmps: 32,
- nlps: 29,
- switchFlag: 0
-}, {
- qe: 0x08a1,
- nmps: 33,
- nlps: 30,
- switchFlag: 0
-}, {
- qe: 0x0521,
- nmps: 34,
- nlps: 31,
- switchFlag: 0
-}, {
- qe: 0x0441,
- nmps: 35,
- nlps: 32,
- switchFlag: 0
-}, {
- qe: 0x02a1,
- nmps: 36,
- nlps: 33,
- switchFlag: 0
-}, {
- qe: 0x0221,
- nmps: 37,
- nlps: 34,
- switchFlag: 0
-}, {
- qe: 0x0141,
- nmps: 38,
- nlps: 35,
- switchFlag: 0
-}, {
- qe: 0x0111,
- nmps: 39,
- nlps: 36,
- switchFlag: 0
-}, {
- qe: 0x0085,
- nmps: 40,
- nlps: 37,
- switchFlag: 0
-}, {
- qe: 0x0049,
- nmps: 41,
- nlps: 38,
- switchFlag: 0
-}, {
- qe: 0x0025,
- nmps: 42,
- nlps: 39,
- switchFlag: 0
-}, {
- qe: 0x0015,
- nmps: 43,
- nlps: 40,
- switchFlag: 0
-}, {
- qe: 0x0009,
- nmps: 44,
- nlps: 41,
- switchFlag: 0
-}, {
- qe: 0x0005,
- nmps: 45,
- nlps: 42,
- switchFlag: 0
-}, {
- qe: 0x0001,
- nmps: 45,
- nlps: 43,
- switchFlag: 0
-}, {
- qe: 0x5601,
- nmps: 46,
- nlps: 46,
- switchFlag: 0
-}];
-
-class ArithmeticDecoder {
- constructor(data, start, end) {
- this.data = data;
- this.bp = start;
- this.dataEnd = end;
- this.chigh = data[start];
- this.clow = 0;
- this.byteIn();
- this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;
- this.clow = this.clow << 7 & 0xffff;
- this.ct -= 7;
- this.a = 0x8000;
- }
-
- byteIn() {
- const data = this.data;
- let bp = this.bp;
-
- if (data[bp] === 0xff) {
- if (data[bp + 1] > 0x8f) {
- this.clow += 0xff00;
- this.ct = 8;
- } else {
- bp++;
- this.clow += data[bp] << 9;
- this.ct = 7;
- this.bp = bp;
- }
- } else {
- bp++;
- this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;
- this.ct = 8;
- this.bp = bp;
- }
-
- if (this.clow > 0xffff) {
- this.chigh += this.clow >> 16;
- this.clow &= 0xffff;
- }
- }
-
- readBit(contexts, pos) {
- let cx_index = contexts[pos] >> 1,
- cx_mps = contexts[pos] & 1;
- const qeTableIcx = QeTable[cx_index];
- const qeIcx = qeTableIcx.qe;
- let d;
- let a = this.a - qeIcx;
-
- if (this.chigh < qeIcx) {
- if (a < qeIcx) {
- a = qeIcx;
- d = cx_mps;
- cx_index = qeTableIcx.nmps;
- } else {
- a = qeIcx;
- d = 1 ^ cx_mps;
-
- if (qeTableIcx.switchFlag === 1) {
- cx_mps = d;
- }
-
- cx_index = qeTableIcx.nlps;
- }
- } else {
- this.chigh -= qeIcx;
-
- if ((a & 0x8000) !== 0) {
- this.a = a;
- return cx_mps;
- }
-
- if (a < qeIcx) {
- d = 1 ^ cx_mps;
-
- if (qeTableIcx.switchFlag === 1) {
- cx_mps = d;
- }
-
- cx_index = qeTableIcx.nlps;
- } else {
- d = cx_mps;
- cx_index = qeTableIcx.nmps;
- }
- }
-
- do {
- if (this.ct === 0) {
- this.byteIn();
- }
-
- a <<= 1;
- this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;
- this.clow = this.clow << 1 & 0xffff;
- this.ct--;
- } while ((a & 0x8000) === 0);
-
- this.a = a;
- contexts[pos] = cx_index << 1 | cx_mps;
- return d;
- }
-
-}
-
-exports.ArithmeticDecoder = ArithmeticDecoder;
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpegStream = void 0;
-
-var _stream = __w_pdfjs_require__(12);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _jpg = __w_pdfjs_require__(19);
-
-var _util = __w_pdfjs_require__(2);
-
-const JpegStream = function JpegStreamClosure() {
- function JpegStream(stream, maybeLength, dict, params) {
- let ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (ch === 0xff) {
- stream.skip(-1);
- break;
- }
- }
-
- this.stream = stream;
- this.maybeLength = maybeLength;
- this.dict = dict;
- this.params = params;
-
- _stream.DecodeStream.call(this, maybeLength);
- }
-
- JpegStream.prototype = Object.create(_stream.DecodeStream.prototype);
- Object.defineProperty(JpegStream.prototype, "bytes", {
- get: function JpegStream_bytes() {
- return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
- },
- configurable: true
- });
-
- JpegStream.prototype.ensureBuffer = function (requested) {};
-
- JpegStream.prototype.readBlock = function () {
- if (this.eof) {
- return;
- }
-
- const jpegOptions = {
- decodeTransform: undefined,
- colorTransform: undefined
- };
- const decodeArr = this.dict.getArray("Decode", "D");
-
- if (this.forceRGB && Array.isArray(decodeArr)) {
- const bitsPerComponent = this.dict.get("BitsPerComponent") || 8;
- const decodeArrLength = decodeArr.length;
- const transform = new Int32Array(decodeArrLength);
- let transformNeeded = false;
- const maxValue = (1 << bitsPerComponent) - 1;
-
- for (let i = 0; i < decodeArrLength; i += 2) {
- transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;
- transform[i + 1] = decodeArr[i] * maxValue | 0;
-
- if (transform[i] !== 256 || transform[i + 1] !== 0) {
- transformNeeded = true;
- }
- }
-
- if (transformNeeded) {
- jpegOptions.decodeTransform = transform;
- }
- }
-
- if ((0, _primitives.isDict)(this.params)) {
- const colorTransform = this.params.get("ColorTransform");
-
- if (Number.isInteger(colorTransform)) {
- jpegOptions.colorTransform = colorTransform;
- }
- }
-
- const jpegImage = new _jpg.JpegImage(jpegOptions);
- jpegImage.parse(this.bytes);
- const data = jpegImage.getData({
- width: this.drawWidth,
- height: this.drawHeight,
- forceRGB: this.forceRGB,
- isSourcePDF: true
- });
- this.buffer = data;
- this.bufferLength = data.length;
- this.eof = true;
- };
-
- return JpegStream;
-}();
-
-exports.JpegStream = JpegStream;
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpegImage = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-class JpegError extends _util.BaseException {
- constructor(msg) {
- super(`JPEG error: ${msg}`);
- }
-
-}
-
-class DNLMarkerError extends _util.BaseException {
- constructor(message, scanLines) {
- super(message);
- this.scanLines = scanLines;
- }
-
-}
-
-class EOIMarkerError extends _util.BaseException {}
-
-var JpegImage = function JpegImageClosure() {
- var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);
- var dctCos1 = 4017;
- var dctSin1 = 799;
- var dctCos3 = 3406;
- var dctSin3 = 2276;
- var dctCos6 = 1567;
- var dctSin6 = 3784;
- var dctSqrt2 = 5793;
- var dctSqrt1d2 = 2896;
-
- function JpegImage({
- decodeTransform = null,
- colorTransform = -1
- } = {}) {
- this._decodeTransform = decodeTransform;
- this._colorTransform = colorTransform;
- }
-
- function buildHuffmanTable(codeLengths, values) {
- var k = 0,
- code = [],
- i,
- j,
- length = 16;
-
- while (length > 0 && !codeLengths[length - 1]) {
- length--;
- }
-
- code.push({
- children: [],
- index: 0
- });
- var p = code[0],
- q;
-
- for (i = 0; i < length; i++) {
- for (j = 0; j < codeLengths[i]; j++) {
- p = code.pop();
- p.children[p.index] = values[k];
-
- while (p.index > 0) {
- p = code.pop();
- }
-
- p.index++;
- code.push(p);
-
- while (code.length <= i) {
- code.push(q = {
- children: [],
- index: 0
- });
- p.children[p.index] = q.children;
- p = q;
- }
-
- k++;
- }
-
- if (i + 1 < length) {
- code.push(q = {
- children: [],
- index: 0
- });
- p.children[p.index] = q.children;
- p = q;
- }
- }
-
- return code[0].children;
- }
-
- function getBlockBufferOffset(component, row, col) {
- return 64 * ((component.blocksPerLine + 1) * row + col);
- }
-
- function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
- var mcusPerLine = frame.mcusPerLine;
- var progressive = frame.progressive;
- const startOffset = offset;
- let bitsData = 0,
- bitsCount = 0;
-
- function readBit() {
- if (bitsCount > 0) {
- bitsCount--;
- return bitsData >> bitsCount & 1;
- }
-
- bitsData = data[offset++];
-
- if (bitsData === 0xff) {
- var nextByte = data[offset++];
-
- if (nextByte) {
- if (nextByte === 0xdc && parseDNLMarker) {
- offset += 2;
- const scanLines = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- if (scanLines > 0 && scanLines !== frame.scanLines) {
- throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines);
- }
- } else if (nextByte === 0xd9) {
- if (parseDNLMarker) {
- const maybeScanLines = blockRow * 8;
-
- if (maybeScanLines > 0 && maybeScanLines < frame.scanLines / 10) {
- throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
- }
- }
-
- throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data");
- }
-
- throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);
- }
- }
-
- bitsCount = 7;
- return bitsData >>> 7;
- }
-
- function decodeHuffman(tree) {
- var node = tree;
-
- while (true) {
- node = node[readBit()];
-
- switch (typeof node) {
- case "number":
- return node;
-
- case "object":
- continue;
- }
-
- throw new JpegError("invalid huffman sequence");
- }
- }
-
- function receive(length) {
- var n = 0;
-
- while (length > 0) {
- n = n << 1 | readBit();
- length--;
- }
-
- return n;
- }
-
- function receiveAndExtend(length) {
- if (length === 1) {
- return readBit() === 1 ? 1 : -1;
- }
-
- var n = receive(length);
-
- if (n >= 1 << length - 1) {
- return n;
- }
-
- return n + (-1 << length) + 1;
- }
-
- function decodeBaseline(component, blockOffset) {
- var t = decodeHuffman(component.huffmanTableDC);
- var diff = t === 0 ? 0 : receiveAndExtend(t);
- component.blockData[blockOffset] = component.pred += diff;
- var k = 1;
-
- while (k < 64) {
- var rs = decodeHuffman(component.huffmanTableAC);
- var s = rs & 15,
- r = rs >> 4;
-
- if (s === 0) {
- if (r < 15) {
- break;
- }
-
- k += 16;
- continue;
- }
-
- k += r;
- var z = dctZigZag[k];
- component.blockData[blockOffset + z] = receiveAndExtend(s);
- k++;
- }
- }
-
- function decodeDCFirst(component, blockOffset) {
- var t = decodeHuffman(component.huffmanTableDC);
- var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
- component.blockData[blockOffset] = component.pred += diff;
- }
-
- function decodeDCSuccessive(component, blockOffset) {
- component.blockData[blockOffset] |= readBit() << successive;
- }
-
- var eobrun = 0;
-
- function decodeACFirst(component, blockOffset) {
- if (eobrun > 0) {
- eobrun--;
- return;
- }
-
- var k = spectralStart,
- e = spectralEnd;
-
- while (k <= e) {
- var rs = decodeHuffman(component.huffmanTableAC);
- var s = rs & 15,
- r = rs >> 4;
-
- if (s === 0) {
- if (r < 15) {
- eobrun = receive(r) + (1 << r) - 1;
- break;
- }
-
- k += 16;
- continue;
- }
-
- k += r;
- var z = dctZigZag[k];
- component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
- k++;
- }
- }
-
- var successiveACState = 0,
- successiveACNextValue;
-
- function decodeACSuccessive(component, blockOffset) {
- var k = spectralStart;
- var e = spectralEnd;
- var r = 0;
- var s;
- var rs;
-
- while (k <= e) {
- const offsetZ = blockOffset + dctZigZag[k];
- const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
-
- switch (successiveACState) {
- case 0:
- rs = decodeHuffman(component.huffmanTableAC);
- s = rs & 15;
- r = rs >> 4;
-
- if (s === 0) {
- if (r < 15) {
- eobrun = receive(r) + (1 << r);
- successiveACState = 4;
- } else {
- r = 16;
- successiveACState = 1;
- }
- } else {
- if (s !== 1) {
- throw new JpegError("invalid ACn encoding");
- }
-
- successiveACNextValue = receiveAndExtend(s);
- successiveACState = r ? 2 : 3;
- }
-
- continue;
-
- case 1:
- case 2:
- if (component.blockData[offsetZ]) {
- component.blockData[offsetZ] += sign * (readBit() << successive);
- } else {
- r--;
-
- if (r === 0) {
- successiveACState = successiveACState === 2 ? 3 : 0;
- }
- }
-
- break;
-
- case 3:
- if (component.blockData[offsetZ]) {
- component.blockData[offsetZ] += sign * (readBit() << successive);
- } else {
- component.blockData[offsetZ] = successiveACNextValue << successive;
- successiveACState = 0;
- }
-
- break;
-
- case 4:
- if (component.blockData[offsetZ]) {
- component.blockData[offsetZ] += sign * (readBit() << successive);
- }
-
- break;
- }
-
- k++;
- }
-
- if (successiveACState === 4) {
- eobrun--;
-
- if (eobrun === 0) {
- successiveACState = 0;
- }
- }
- }
-
- let blockRow = 0;
-
- function decodeMcu(component, decode, mcu, row, col) {
- var mcuRow = mcu / mcusPerLine | 0;
- var mcuCol = mcu % mcusPerLine;
- blockRow = mcuRow * component.v + row;
- var blockCol = mcuCol * component.h + col;
- const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
- decode(component, blockOffset);
- }
-
- function decodeBlock(component, decode, mcu) {
- blockRow = mcu / component.blocksPerLine | 0;
- var blockCol = mcu % component.blocksPerLine;
- const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
- decode(component, blockOffset);
- }
-
- var componentsLength = components.length;
- var component, i, j, k, n;
- var decodeFn;
-
- if (progressive) {
- if (spectralStart === 0) {
- decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
- } else {
- decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
- }
- } else {
- decodeFn = decodeBaseline;
- }
-
- var mcu = 0,
- fileMarker;
- var mcuExpected;
-
- if (componentsLength === 1) {
- mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
- } else {
- mcuExpected = mcusPerLine * frame.mcusPerColumn;
- }
-
- var h, v;
-
- while (mcu <= mcuExpected) {
- var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
-
- if (mcuToRead > 0) {
- for (i = 0; i < componentsLength; i++) {
- components[i].pred = 0;
- }
-
- eobrun = 0;
-
- if (componentsLength === 1) {
- component = components[0];
-
- for (n = 0; n < mcuToRead; n++) {
- decodeBlock(component, decodeFn, mcu);
- mcu++;
- }
- } else {
- for (n = 0; n < mcuToRead; n++) {
- for (i = 0; i < componentsLength; i++) {
- component = components[i];
- h = component.h;
- v = component.v;
-
- for (j = 0; j < v; j++) {
- for (k = 0; k < h; k++) {
- decodeMcu(component, decodeFn, mcu, j, k);
- }
- }
- }
-
- mcu++;
- }
- }
- }
-
- bitsCount = 0;
- fileMarker = findNextFileMarker(data, offset);
-
- if (!fileMarker) {
- break;
- }
-
- if (fileMarker.invalid) {
- const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
- (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
- offset = fileMarker.offset;
- }
-
- if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
- offset += 2;
- } else {
- break;
- }
- }
-
- return offset - startOffset;
- }
-
- function quantizeAndInverse(component, blockBufferOffset, p) {
- var qt = component.quantizationTable,
- blockData = component.blockData;
- var v0, v1, v2, v3, v4, v5, v6, v7;
- var p0, p1, p2, p3, p4, p5, p6, p7;
- var t;
-
- if (!qt) {
- throw new JpegError("missing required Quantization Table.");
- }
-
- for (var row = 0; row < 64; row += 8) {
- p0 = blockData[blockBufferOffset + row];
- p1 = blockData[blockBufferOffset + row + 1];
- p2 = blockData[blockBufferOffset + row + 2];
- p3 = blockData[blockBufferOffset + row + 3];
- p4 = blockData[blockBufferOffset + row + 4];
- p5 = blockData[blockBufferOffset + row + 5];
- p6 = blockData[blockBufferOffset + row + 6];
- p7 = blockData[blockBufferOffset + row + 7];
- p0 *= qt[row];
-
- if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
- t = dctSqrt2 * p0 + 512 >> 10;
- p[row] = t;
- p[row + 1] = t;
- p[row + 2] = t;
- p[row + 3] = t;
- p[row + 4] = t;
- p[row + 5] = t;
- p[row + 6] = t;
- p[row + 7] = t;
- continue;
- }
-
- p1 *= qt[row + 1];
- p2 *= qt[row + 2];
- p3 *= qt[row + 3];
- p4 *= qt[row + 4];
- p5 *= qt[row + 5];
- p6 *= qt[row + 6];
- p7 *= qt[row + 7];
- v0 = dctSqrt2 * p0 + 128 >> 8;
- v1 = dctSqrt2 * p4 + 128 >> 8;
- v2 = p2;
- v3 = p6;
- v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;
- v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;
- v5 = p3 << 4;
- v6 = p5 << 4;
- v0 = v0 + v1 + 1 >> 1;
- v1 = v0 - v1;
- t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;
- v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;
- v3 = t;
- v4 = v4 + v6 + 1 >> 1;
- v6 = v4 - v6;
- v7 = v7 + v5 + 1 >> 1;
- v5 = v7 - v5;
- v0 = v0 + v3 + 1 >> 1;
- v3 = v0 - v3;
- v1 = v1 + v2 + 1 >> 1;
- v2 = v1 - v2;
- t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
- v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
- v7 = t;
- t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
- v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
- v6 = t;
- p[row] = v0 + v7;
- p[row + 7] = v0 - v7;
- p[row + 1] = v1 + v6;
- p[row + 6] = v1 - v6;
- p[row + 2] = v2 + v5;
- p[row + 5] = v2 - v5;
- p[row + 3] = v3 + v4;
- p[row + 4] = v3 - v4;
- }
-
- for (var col = 0; col < 8; ++col) {
- p0 = p[col];
- p1 = p[col + 8];
- p2 = p[col + 16];
- p3 = p[col + 24];
- p4 = p[col + 32];
- p5 = p[col + 40];
- p6 = p[col + 48];
- p7 = p[col + 56];
-
- if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
- t = dctSqrt2 * p0 + 8192 >> 14;
-
- if (t < -2040) {
- t = 0;
- } else if (t >= 2024) {
- t = 255;
- } else {
- t = t + 2056 >> 4;
- }
-
- blockData[blockBufferOffset + col] = t;
- blockData[blockBufferOffset + col + 8] = t;
- blockData[blockBufferOffset + col + 16] = t;
- blockData[blockBufferOffset + col + 24] = t;
- blockData[blockBufferOffset + col + 32] = t;
- blockData[blockBufferOffset + col + 40] = t;
- blockData[blockBufferOffset + col + 48] = t;
- blockData[blockBufferOffset + col + 56] = t;
- continue;
- }
-
- v0 = dctSqrt2 * p0 + 2048 >> 12;
- v1 = dctSqrt2 * p4 + 2048 >> 12;
- v2 = p2;
- v3 = p6;
- v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;
- v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;
- v5 = p3;
- v6 = p5;
- v0 = (v0 + v1 + 1 >> 1) + 4112;
- v1 = v0 - v1;
- t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;
- v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;
- v3 = t;
- v4 = v4 + v6 + 1 >> 1;
- v6 = v4 - v6;
- v7 = v7 + v5 + 1 >> 1;
- v5 = v7 - v5;
- v0 = v0 + v3 + 1 >> 1;
- v3 = v0 - v3;
- v1 = v1 + v2 + 1 >> 1;
- v2 = v1 - v2;
- t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
- v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
- v7 = t;
- t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
- v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
- v6 = t;
- p0 = v0 + v7;
- p7 = v0 - v7;
- p1 = v1 + v6;
- p6 = v1 - v6;
- p2 = v2 + v5;
- p5 = v2 - v5;
- p3 = v3 + v4;
- p4 = v3 - v4;
-
- if (p0 < 16) {
- p0 = 0;
- } else if (p0 >= 4080) {
- p0 = 255;
- } else {
- p0 >>= 4;
- }
-
- if (p1 < 16) {
- p1 = 0;
- } else if (p1 >= 4080) {
- p1 = 255;
- } else {
- p1 >>= 4;
- }
-
- if (p2 < 16) {
- p2 = 0;
- } else if (p2 >= 4080) {
- p2 = 255;
- } else {
- p2 >>= 4;
- }
-
- if (p3 < 16) {
- p3 = 0;
- } else if (p3 >= 4080) {
- p3 = 255;
- } else {
- p3 >>= 4;
- }
-
- if (p4 < 16) {
- p4 = 0;
- } else if (p4 >= 4080) {
- p4 = 255;
- } else {
- p4 >>= 4;
- }
-
- if (p5 < 16) {
- p5 = 0;
- } else if (p5 >= 4080) {
- p5 = 255;
- } else {
- p5 >>= 4;
- }
-
- if (p6 < 16) {
- p6 = 0;
- } else if (p6 >= 4080) {
- p6 = 255;
- } else {
- p6 >>= 4;
- }
-
- if (p7 < 16) {
- p7 = 0;
- } else if (p7 >= 4080) {
- p7 = 255;
- } else {
- p7 >>= 4;
- }
-
- blockData[blockBufferOffset + col] = p0;
- blockData[blockBufferOffset + col + 8] = p1;
- blockData[blockBufferOffset + col + 16] = p2;
- blockData[blockBufferOffset + col + 24] = p3;
- blockData[blockBufferOffset + col + 32] = p4;
- blockData[blockBufferOffset + col + 40] = p5;
- blockData[blockBufferOffset + col + 48] = p6;
- blockData[blockBufferOffset + col + 56] = p7;
- }
- }
-
- function buildComponentData(frame, component) {
- var blocksPerLine = component.blocksPerLine;
- var blocksPerColumn = component.blocksPerColumn;
- var computationBuffer = new Int16Array(64);
-
- for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
- for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
- var offset = getBlockBufferOffset(component, blockRow, blockCol);
- quantizeAndInverse(component, offset, computationBuffer);
- }
- }
-
- return component.blockData;
- }
-
- function findNextFileMarker(data, currentPos, startPos = currentPos) {
- const maxPos = data.length - 1;
- var newPos = startPos < currentPos ? startPos : currentPos;
-
- if (currentPos >= maxPos) {
- return null;
- }
-
- var currentMarker = (0, _core_utils.readUint16)(data, currentPos);
-
- if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
- return {
- invalid: null,
- marker: currentMarker,
- offset: currentPos
- };
- }
-
- var newMarker = (0, _core_utils.readUint16)(data, newPos);
-
- while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
- if (++newPos >= maxPos) {
- return null;
- }
-
- newMarker = (0, _core_utils.readUint16)(data, newPos);
- }
-
- return {
- invalid: currentMarker.toString(16),
- marker: newMarker,
- offset: newPos
- };
- }
-
- JpegImage.prototype = {
- parse(data, {
- dnlScanLines = null
- } = {}) {
- function readDataBlock() {
- const length = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- let endOffset = offset + length - 2;
- var fileMarker = findNextFileMarker(data, endOffset, offset);
-
- if (fileMarker && fileMarker.invalid) {
- (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid);
- endOffset = fileMarker.offset;
- }
-
- var array = data.subarray(offset, endOffset);
- offset += array.length;
- return array;
- }
-
- function prepareComponents(frame) {
- var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
- var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
-
- for (var i = 0; i < frame.components.length; i++) {
- component = frame.components[i];
- var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);
- var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);
- var blocksPerLineForMcu = mcusPerLine * component.h;
- var blocksPerColumnForMcu = mcusPerColumn * component.v;
- var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);
- component.blockData = new Int16Array(blocksBufferSize);
- component.blocksPerLine = blocksPerLine;
- component.blocksPerColumn = blocksPerColumn;
- }
-
- frame.mcusPerLine = mcusPerLine;
- frame.mcusPerColumn = mcusPerColumn;
- }
-
- var offset = 0;
- var jfif = null;
- var adobe = null;
- var frame, resetInterval;
- let numSOSMarkers = 0;
- var quantizationTables = [];
- var huffmanTablesAC = [],
- huffmanTablesDC = [];
- let fileMarker = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- if (fileMarker !== 0xffd8) {
- throw new JpegError("SOI not found");
- }
-
- fileMarker = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- markerLoop: while (fileMarker !== 0xffd9) {
- var i, j, l;
-
- switch (fileMarker) {
- case 0xffe0:
- case 0xffe1:
- case 0xffe2:
- case 0xffe3:
- case 0xffe4:
- case 0xffe5:
- case 0xffe6:
- case 0xffe7:
- case 0xffe8:
- case 0xffe9:
- case 0xffea:
- case 0xffeb:
- case 0xffec:
- case 0xffed:
- case 0xffee:
- case 0xffef:
- case 0xfffe:
- var appData = readDataBlock();
-
- if (fileMarker === 0xffe0) {
- if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
- jfif = {
- version: {
- major: appData[5],
- minor: appData[6]
- },
- densityUnits: appData[7],
- xDensity: appData[8] << 8 | appData[9],
- yDensity: appData[10] << 8 | appData[11],
- thumbWidth: appData[12],
- thumbHeight: appData[13],
- thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
- };
- }
- }
-
- if (fileMarker === 0xffee) {
- if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {
- adobe = {
- version: appData[5] << 8 | appData[6],
- flags0: appData[7] << 8 | appData[8],
- flags1: appData[9] << 8 | appData[10],
- transformCode: appData[11]
- };
- }
- }
-
- break;
-
- case 0xffdb:
- const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- var quantizationTablesEnd = quantizationTablesLength + offset - 2;
- var z;
-
- while (offset < quantizationTablesEnd) {
- var quantizationTableSpec = data[offset++];
- var tableData = new Uint16Array(64);
-
- if (quantizationTableSpec >> 4 === 0) {
- for (j = 0; j < 64; j++) {
- z = dctZigZag[j];
- tableData[z] = data[offset++];
- }
- } else if (quantizationTableSpec >> 4 === 1) {
- for (j = 0; j < 64; j++) {
- z = dctZigZag[j];
- tableData[z] = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- }
- } else {
- throw new JpegError("DQT - invalid table spec");
- }
-
- quantizationTables[quantizationTableSpec & 15] = tableData;
- }
-
- break;
-
- case 0xffc0:
- case 0xffc1:
- case 0xffc2:
- if (frame) {
- throw new JpegError("Only single frame JPEGs supported");
- }
-
- offset += 2;
- frame = {};
- frame.extended = fileMarker === 0xffc1;
- frame.progressive = fileMarker === 0xffc2;
- frame.precision = data[offset++];
- const sofScanLines = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- frame.scanLines = dnlScanLines || sofScanLines;
- frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- frame.components = [];
- frame.componentIds = {};
- var componentsCount = data[offset++],
- componentId;
- var maxH = 0,
- maxV = 0;
-
- for (i = 0; i < componentsCount; i++) {
- componentId = data[offset];
- var h = data[offset + 1] >> 4;
- var v = data[offset + 1] & 15;
-
- if (maxH < h) {
- maxH = h;
- }
-
- if (maxV < v) {
- maxV = v;
- }
-
- var qId = data[offset + 2];
- l = frame.components.push({
- h,
- v,
- quantizationId: qId,
- quantizationTable: null
- });
- frame.componentIds[componentId] = l - 1;
- offset += 3;
- }
-
- frame.maxH = maxH;
- frame.maxV = maxV;
- prepareComponents(frame);
- break;
-
- case 0xffc4:
- const huffmanLength = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- for (i = 2; i < huffmanLength;) {
- var huffmanTableSpec = data[offset++];
- var codeLengths = new Uint8Array(16);
- var codeLengthSum = 0;
-
- for (j = 0; j < 16; j++, offset++) {
- codeLengthSum += codeLengths[j] = data[offset];
- }
-
- var huffmanValues = new Uint8Array(codeLengthSum);
-
- for (j = 0; j < codeLengthSum; j++, offset++) {
- huffmanValues[j] = data[offset];
- }
-
- i += 17 + codeLengthSum;
- (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
- }
-
- break;
-
- case 0xffdd:
- offset += 2;
- resetInterval = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- break;
-
- case 0xffda:
- const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
- offset += 2;
- var selectorsCount = data[offset++];
- var components = [],
- component;
-
- for (i = 0; i < selectorsCount; i++) {
- var componentIndex = frame.componentIds[data[offset++]];
- component = frame.components[componentIndex];
- var tableSpec = data[offset++];
- component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
- component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
- components.push(component);
- }
-
- var spectralStart = data[offset++];
- var spectralEnd = data[offset++];
- var successiveApproximation = data[offset++];
-
- try {
- var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);
- offset += processed;
- } catch (ex) {
- if (ex instanceof DNLMarkerError) {
- (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);
- return this.parse(data, {
- dnlScanLines: ex.scanLines
- });
- } else if (ex instanceof EOIMarkerError) {
- (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);
- break markerLoop;
- }
-
- throw ex;
- }
-
- break;
-
- case 0xffdc:
- offset += 4;
- break;
-
- case 0xffff:
- if (data[offset] !== 0xff) {
- offset--;
- }
-
- break;
-
- default:
- const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);
-
- if (nextFileMarker && nextFileMarker.invalid) {
- (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid);
- offset = nextFileMarker.offset;
- break;
- }
-
- if (offset >= data.length - 1) {
- (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9).");
- break markerLoop;
- }
-
- throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16));
- }
-
- fileMarker = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- }
-
- this.width = frame.samplesPerLine;
- this.height = frame.scanLines;
- this.jfif = jfif;
- this.adobe = adobe;
- this.components = [];
-
- for (i = 0; i < frame.components.length; i++) {
- component = frame.components[i];
- var quantizationTable = quantizationTables[component.quantizationId];
-
- if (quantizationTable) {
- component.quantizationTable = quantizationTable;
- }
-
- this.components.push({
- output: buildComponentData(frame, component),
- scaleX: component.h / frame.maxH,
- scaleY: component.v / frame.maxV,
- blocksPerLine: component.blocksPerLine,
- blocksPerColumn: component.blocksPerColumn
- });
- }
-
- this.numComponents = this.components.length;
- return undefined;
- },
-
- _getLinearizedBlockData(width, height, isSourcePDF = false) {
- var scaleX = this.width / width,
- scaleY = this.height / height;
- var component, componentScaleX, componentScaleY, blocksPerScanline;
- var x, y, i, j, k;
- var index;
- var offset = 0;
- var output;
- var numComponents = this.components.length;
- var dataLength = width * height * numComponents;
- var data = new Uint8ClampedArray(dataLength);
- var xScaleBlockOffset = new Uint32Array(width);
- var mask3LSB = 0xfffffff8;
- let lastComponentScaleX;
-
- for (i = 0; i < numComponents; i++) {
- component = this.components[i];
- componentScaleX = component.scaleX * scaleX;
- componentScaleY = component.scaleY * scaleY;
- offset = i;
- output = component.output;
- blocksPerScanline = component.blocksPerLine + 1 << 3;
-
- if (componentScaleX !== lastComponentScaleX) {
- for (x = 0; x < width; x++) {
- j = 0 | x * componentScaleX;
- xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
- }
-
- lastComponentScaleX = componentScaleX;
- }
-
- for (y = 0; y < height; y++) {
- j = 0 | y * componentScaleY;
- index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;
-
- for (x = 0; x < width; x++) {
- data[offset] = output[index + xScaleBlockOffset[x]];
- offset += numComponents;
- }
- }
- }
-
- let transform = this._decodeTransform;
-
- if (!isSourcePDF && numComponents === 4 && !transform) {
- transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
- }
-
- if (transform) {
- for (i = 0; i < dataLength;) {
- for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
- data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];
- }
- }
- }
-
- return data;
- },
-
- get _isColorConversionNeeded() {
- if (this.adobe) {
- return !!this.adobe.transformCode;
- }
-
- if (this.numComponents === 3) {
- if (this._colorTransform === 0) {
- return false;
- }
-
- return true;
- }
-
- if (this._colorTransform === 1) {
- return true;
- }
-
- return false;
- },
-
- _convertYccToRgb: function convertYccToRgb(data) {
- var Y, Cb, Cr;
-
- for (var i = 0, length = data.length; i < length; i += 3) {
- Y = data[i];
- Cb = data[i + 1];
- Cr = data[i + 2];
- data[i] = Y - 179.456 + 1.402 * Cr;
- data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
- data[i + 2] = Y - 226.816 + 1.772 * Cb;
- }
-
- return data;
- },
- _convertYcckToRgb: function convertYcckToRgb(data) {
- var Y, Cb, Cr, k;
- var offset = 0;
-
- for (var i = 0, length = data.length; i < length; i += 4) {
- Y = data[i];
- Cb = data[i + 1];
- Cr = data[i + 2];
- k = data[i + 3];
- data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);
- data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
- data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
- }
-
- return data.subarray(0, offset);
- },
- _convertYcckToCmyk: function convertYcckToCmyk(data) {
- var Y, Cb, Cr;
-
- for (var i = 0, length = data.length; i < length; i += 4) {
- Y = data[i];
- Cb = data[i + 1];
- Cr = data[i + 2];
- data[i] = 434.456 - Y - 1.402 * Cr;
- data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;
- data[i + 2] = 481.816 - Y - 1.772 * Cb;
- }
-
- return data;
- },
- _convertCmykToRgb: function convertCmykToRgb(data) {
- var c, m, y, k;
- var offset = 0;
-
- for (var i = 0, length = data.length; i < length; i += 4) {
- c = data[i];
- m = data[i + 1];
- y = data[i + 2];
- k = data[i + 3];
- data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
- data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);
- data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
- }
-
- return data.subarray(0, offset);
- },
-
- getData({
- width,
- height,
- forceRGB = false,
- isSourcePDF = false
- }) {
- if (this.numComponents > 4) {
- throw new JpegError("Unsupported color mode");
- }
-
- var data = this._getLinearizedBlockData(width, height, isSourcePDF);
-
- if (this.numComponents === 1 && forceRGB) {
- var dataLength = data.length;
- var rgbData = new Uint8ClampedArray(dataLength * 3);
- var offset = 0;
-
- for (var i = 0; i < dataLength; i++) {
- var grayColor = data[i];
- rgbData[offset++] = grayColor;
- rgbData[offset++] = grayColor;
- rgbData[offset++] = grayColor;
- }
-
- return rgbData;
- } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
- return this._convertYccToRgb(data);
- } else if (this.numComponents === 4) {
- if (this._isColorConversionNeeded) {
- if (forceRGB) {
- return this._convertYcckToRgb(data);
- }
-
- return this._convertYcckToCmyk(data);
- } else if (forceRGB) {
- return this._convertCmykToRgb(data);
- }
- }
-
- return data;
- }
-
- };
- return JpegImage;
-}();
-
-exports.JpegImage = JpegImage;
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpxStream = void 0;
-
-var _stream = __w_pdfjs_require__(12);
-
-var _jpx = __w_pdfjs_require__(21);
-
-var _util = __w_pdfjs_require__(2);
-
-const JpxStream = function JpxStreamClosure() {
- function JpxStream(stream, maybeLength, dict, params) {
- this.stream = stream;
- this.maybeLength = maybeLength;
- this.dict = dict;
- this.params = params;
-
- _stream.DecodeStream.call(this, maybeLength);
- }
-
- JpxStream.prototype = Object.create(_stream.DecodeStream.prototype);
- Object.defineProperty(JpxStream.prototype, "bytes", {
- get: function JpxStream_bytes() {
- return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
- },
- configurable: true
- });
-
- JpxStream.prototype.ensureBuffer = function (requested) {};
-
- JpxStream.prototype.readBlock = function () {
- if (this.eof) {
- return;
- }
-
- const jpxImage = new _jpx.JpxImage();
- jpxImage.parse(this.bytes);
- const width = jpxImage.width;
- const height = jpxImage.height;
- const componentsCount = jpxImage.componentsCount;
- const tileCount = jpxImage.tiles.length;
-
- if (tileCount === 1) {
- this.buffer = jpxImage.tiles[0].items;
- } else {
- const data = new Uint8ClampedArray(width * height * componentsCount);
-
- for (let k = 0; k < tileCount; k++) {
- const tileComponents = jpxImage.tiles[k];
- const tileWidth = tileComponents.width;
- const tileHeight = tileComponents.height;
- const tileLeft = tileComponents.left;
- const tileTop = tileComponents.top;
- const src = tileComponents.items;
- let srcPosition = 0;
- let dataPosition = (width * tileTop + tileLeft) * componentsCount;
- const imgRowSize = width * componentsCount;
- const tileRowSize = tileWidth * componentsCount;
-
- for (let j = 0; j < tileHeight; j++) {
- const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);
- data.set(rowBytes, dataPosition);
- srcPosition += tileRowSize;
- dataPosition += imgRowSize;
- }
- }
-
- this.buffer = data;
- }
-
- this.bufferLength = this.buffer.length;
- this.eof = true;
- };
-
- return JpxStream;
-}();
-
-exports.JpxStream = JpxStream;
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpxImage = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _arithmetic_decoder = __w_pdfjs_require__(17);
-
-class JpxError extends _util.BaseException {
- constructor(msg) {
- super(`JPX error: ${msg}`);
- }
-
-}
-
-var JpxImage = function JpxImageClosure() {
- var SubbandsGainLog2 = {
- LL: 0,
- LH: 1,
- HL: 1,
- HH: 2
- };
-
- function JpxImage() {
- this.failOnCorruptedImage = false;
- }
-
- JpxImage.prototype = {
- parse: function JpxImage_parse(data) {
- var head = (0, _core_utils.readUint16)(data, 0);
-
- if (head === 0xff4f) {
- this.parseCodestream(data, 0, data.length);
- return;
- }
-
- var position = 0,
- length = data.length;
-
- while (position < length) {
- var headerSize = 8;
- var lbox = (0, _core_utils.readUint32)(data, position);
- var tbox = (0, _core_utils.readUint32)(data, position + 4);
- position += headerSize;
-
- if (lbox === 1) {
- lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4);
- position += 8;
- headerSize += 8;
- }
-
- if (lbox === 0) {
- lbox = length - position + headerSize;
- }
-
- if (lbox < headerSize) {
- throw new JpxError("Invalid box field size");
- }
-
- var dataLength = lbox - headerSize;
- var jumpDataLength = true;
-
- switch (tbox) {
- case 0x6a703268:
- jumpDataLength = false;
- break;
-
- case 0x636f6c72:
- var method = data[position];
-
- if (method === 1) {
- var colorspace = (0, _core_utils.readUint32)(data, position + 3);
-
- switch (colorspace) {
- case 16:
- case 17:
- case 18:
- break;
-
- default:
- (0, _util.warn)("Unknown colorspace " + colorspace);
- break;
- }
- } else if (method === 2) {
- (0, _util.info)("ICC profile not supported");
- }
-
- break;
-
- case 0x6a703263:
- this.parseCodestream(data, position, position + dataLength);
- break;
-
- case 0x6a502020:
- if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) {
- (0, _util.warn)("Invalid JP2 signature");
- }
-
- break;
-
- case 0x6a501a1a:
- case 0x66747970:
- case 0x72726571:
- case 0x72657320:
- case 0x69686472:
- break;
-
- default:
- var headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff);
- (0, _util.warn)("Unsupported header type " + tbox + " (" + headerType + ")");
- break;
- }
-
- if (jumpDataLength) {
- position += dataLength;
- }
- }
- },
- parseImageProperties: function JpxImage_parseImageProperties(stream) {
- var newByte = stream.getByte();
-
- while (newByte >= 0) {
- var oldByte = newByte;
- newByte = stream.getByte();
- var code = oldByte << 8 | newByte;
-
- if (code === 0xff51) {
- stream.skip(4);
- var Xsiz = stream.getInt32() >>> 0;
- var Ysiz = stream.getInt32() >>> 0;
- var XOsiz = stream.getInt32() >>> 0;
- var YOsiz = stream.getInt32() >>> 0;
- stream.skip(16);
- var Csiz = stream.getUint16();
- this.width = Xsiz - XOsiz;
- this.height = Ysiz - YOsiz;
- this.componentsCount = Csiz;
- this.bitsPerComponent = 8;
- return;
- }
- }
-
- throw new JpxError("No size marker found in JPX stream");
- },
- parseCodestream: function JpxImage_parseCodestream(data, start, end) {
- var context = {};
- var doNotRecover = false;
-
- try {
- var position = start;
-
- while (position + 1 < end) {
- var code = (0, _core_utils.readUint16)(data, position);
- position += 2;
- var length = 0,
- j,
- sqcd,
- spqcds,
- spqcdSize,
- scalarExpounded,
- tile;
-
- switch (code) {
- case 0xff4f:
- context.mainHeader = true;
- break;
-
- case 0xffd9:
- break;
-
- case 0xff51:
- length = (0, _core_utils.readUint16)(data, position);
- var siz = {};
- siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4);
- siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8);
- siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12);
- siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16);
- siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20);
- siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24);
- siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28);
- siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32);
- var componentsCount = (0, _core_utils.readUint16)(data, position + 36);
- siz.Csiz = componentsCount;
- var components = [];
- j = position + 38;
-
- for (var i = 0; i < componentsCount; i++) {
- var component = {
- precision: (data[j] & 0x7f) + 1,
- isSigned: !!(data[j] & 0x80),
- XRsiz: data[j + 1],
- YRsiz: data[j + 2]
- };
- j += 3;
- calculateComponentDimensions(component, siz);
- components.push(component);
- }
-
- context.SIZ = siz;
- context.components = components;
- calculateTileGrids(context, components);
- context.QCC = [];
- context.COC = [];
- break;
-
- case 0xff5c:
- length = (0, _core_utils.readUint16)(data, position);
- var qcd = {};
- j = position + 2;
- sqcd = data[j++];
-
- switch (sqcd & 0x1f) {
- case 0:
- spqcdSize = 8;
- scalarExpounded = true;
- break;
-
- case 1:
- spqcdSize = 16;
- scalarExpounded = false;
- break;
-
- case 2:
- spqcdSize = 16;
- scalarExpounded = true;
- break;
-
- default:
- throw new Error("Invalid SQcd value " + sqcd);
- }
-
- qcd.noQuantization = spqcdSize === 8;
- qcd.scalarExpounded = scalarExpounded;
- qcd.guardBits = sqcd >> 5;
- spqcds = [];
-
- while (j < length + position) {
- var spqcd = {};
-
- if (spqcdSize === 8) {
- spqcd.epsilon = data[j++] >> 3;
- spqcd.mu = 0;
- } else {
- spqcd.epsilon = data[j] >> 3;
- spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
- j += 2;
- }
-
- spqcds.push(spqcd);
- }
-
- qcd.SPqcds = spqcds;
-
- if (context.mainHeader) {
- context.QCD = qcd;
- } else {
- context.currentTile.QCD = qcd;
- context.currentTile.QCC = [];
- }
-
- break;
-
- case 0xff5d:
- length = (0, _core_utils.readUint16)(data, position);
- var qcc = {};
- j = position + 2;
- var cqcc;
-
- if (context.SIZ.Csiz < 257) {
- cqcc = data[j++];
- } else {
- cqcc = (0, _core_utils.readUint16)(data, j);
- j += 2;
- }
-
- sqcd = data[j++];
-
- switch (sqcd & 0x1f) {
- case 0:
- spqcdSize = 8;
- scalarExpounded = true;
- break;
-
- case 1:
- spqcdSize = 16;
- scalarExpounded = false;
- break;
-
- case 2:
- spqcdSize = 16;
- scalarExpounded = true;
- break;
-
- default:
- throw new Error("Invalid SQcd value " + sqcd);
- }
-
- qcc.noQuantization = spqcdSize === 8;
- qcc.scalarExpounded = scalarExpounded;
- qcc.guardBits = sqcd >> 5;
- spqcds = [];
-
- while (j < length + position) {
- spqcd = {};
-
- if (spqcdSize === 8) {
- spqcd.epsilon = data[j++] >> 3;
- spqcd.mu = 0;
- } else {
- spqcd.epsilon = data[j] >> 3;
- spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
- j += 2;
- }
-
- spqcds.push(spqcd);
- }
-
- qcc.SPqcds = spqcds;
-
- if (context.mainHeader) {
- context.QCC[cqcc] = qcc;
- } else {
- context.currentTile.QCC[cqcc] = qcc;
- }
-
- break;
-
- case 0xff52:
- length = (0, _core_utils.readUint16)(data, position);
- var cod = {};
- j = position + 2;
- var scod = data[j++];
- cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
- cod.sopMarkerUsed = !!(scod & 2);
- cod.ephMarkerUsed = !!(scod & 4);
- cod.progressionOrder = data[j++];
- cod.layersCount = (0, _core_utils.readUint16)(data, j);
- j += 2;
- cod.multipleComponentTransform = data[j++];
- cod.decompositionLevelsCount = data[j++];
- cod.xcb = (data[j++] & 0xf) + 2;
- cod.ycb = (data[j++] & 0xf) + 2;
- var blockStyle = data[j++];
- cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
- cod.resetContextProbabilities = !!(blockStyle & 2);
- cod.terminationOnEachCodingPass = !!(blockStyle & 4);
- cod.verticallyStripe = !!(blockStyle & 8);
- cod.predictableTermination = !!(blockStyle & 16);
- cod.segmentationSymbolUsed = !!(blockStyle & 32);
- cod.reversibleTransformation = data[j++];
-
- if (cod.entropyCoderWithCustomPrecincts) {
- var precinctsSizes = [];
-
- while (j < length + position) {
- var precinctsSize = data[j++];
- precinctsSizes.push({
- PPx: precinctsSize & 0xf,
- PPy: precinctsSize >> 4
- });
- }
-
- cod.precinctsSizes = precinctsSizes;
- }
-
- var unsupported = [];
-
- if (cod.selectiveArithmeticCodingBypass) {
- unsupported.push("selectiveArithmeticCodingBypass");
- }
-
- if (cod.resetContextProbabilities) {
- unsupported.push("resetContextProbabilities");
- }
-
- if (cod.terminationOnEachCodingPass) {
- unsupported.push("terminationOnEachCodingPass");
- }
-
- if (cod.verticallyStripe) {
- unsupported.push("verticallyStripe");
- }
-
- if (cod.predictableTermination) {
- unsupported.push("predictableTermination");
- }
-
- if (unsupported.length > 0) {
- doNotRecover = true;
- throw new Error("Unsupported COD options (" + unsupported.join(", ") + ")");
- }
-
- if (context.mainHeader) {
- context.COD = cod;
- } else {
- context.currentTile.COD = cod;
- context.currentTile.COC = [];
- }
-
- break;
-
- case 0xff90:
- length = (0, _core_utils.readUint16)(data, position);
- tile = {};
- tile.index = (0, _core_utils.readUint16)(data, position + 2);
- tile.length = (0, _core_utils.readUint32)(data, position + 4);
- tile.dataEnd = tile.length + position - 2;
- tile.partIndex = data[position + 8];
- tile.partsCount = data[position + 9];
- context.mainHeader = false;
-
- if (tile.partIndex === 0) {
- tile.COD = context.COD;
- tile.COC = context.COC.slice(0);
- tile.QCD = context.QCD;
- tile.QCC = context.QCC.slice(0);
- }
-
- context.currentTile = tile;
- break;
-
- case 0xff93:
- tile = context.currentTile;
-
- if (tile.partIndex === 0) {
- initializeTile(context, tile.index);
- buildPackets(context);
- }
-
- length = tile.dataEnd - position;
- parseTilePackets(context, data, position, length);
- break;
-
- case 0xff55:
- case 0xff57:
- case 0xff58:
- case 0xff64:
- length = (0, _core_utils.readUint16)(data, position);
- break;
-
- case 0xff53:
- throw new Error("Codestream code 0xFF53 (COC) is not implemented");
-
- default:
- throw new Error("Unknown codestream code: " + code.toString(16));
- }
-
- position += length;
- }
- } catch (e) {
- if (doNotRecover || this.failOnCorruptedImage) {
- throw new JpxError(e.message);
- } else {
- (0, _util.warn)("JPX: Trying to recover from: " + e.message);
- }
- }
-
- this.tiles = transformComponents(context);
- this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
- this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
- this.componentsCount = context.SIZ.Csiz;
- }
- };
-
- function calculateComponentDimensions(component, siz) {
- component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
- component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
- component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
- component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
- component.width = component.x1 - component.x0;
- component.height = component.y1 - component.y0;
- }
-
- function calculateTileGrids(context, components) {
- var siz = context.SIZ;
- var tile,
- tiles = [];
- var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
- var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
-
- for (var q = 0; q < numYtiles; q++) {
- for (var p = 0; p < numXtiles; p++) {
- tile = {};
- tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
- tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
- tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
- tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
- tile.width = tile.tx1 - tile.tx0;
- tile.height = tile.ty1 - tile.ty0;
- tile.components = [];
- tiles.push(tile);
- }
- }
-
- context.tiles = tiles;
- var componentsCount = siz.Csiz;
-
- for (var i = 0, ii = componentsCount; i < ii; i++) {
- var component = components[i];
-
- for (var j = 0, jj = tiles.length; j < jj; j++) {
- var tileComponent = {};
- tile = tiles[j];
- tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
- tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
- tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
- tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
- tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
- tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
- tile.components[i] = tileComponent;
- }
- }
- }
-
- function getBlocksDimensions(context, component, r) {
- var codOrCoc = component.codingStyleParameters;
- var result = {};
-
- if (!codOrCoc.entropyCoderWithCustomPrecincts) {
- result.PPx = 15;
- result.PPy = 15;
- } else {
- result.PPx = codOrCoc.precinctsSizes[r].PPx;
- result.PPy = codOrCoc.precinctsSizes[r].PPy;
- }
-
- result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);
- result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);
- return result;
- }
-
- function buildPrecincts(context, resolution, dimensions) {
- var precinctWidth = 1 << dimensions.PPx;
- var precinctHeight = 1 << dimensions.PPy;
- var isZeroRes = resolution.resLevel === 0;
- var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);
- var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);
- var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;
- var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;
- var numprecincts = numprecinctswide * numprecinctshigh;
- resolution.precinctParameters = {
- precinctWidth,
- precinctHeight,
- numprecinctswide,
- numprecinctshigh,
- numprecincts,
- precinctWidthInSubband,
- precinctHeightInSubband
- };
- }
-
- function buildCodeblocks(context, subband, dimensions) {
- var xcb_ = dimensions.xcb_;
- var ycb_ = dimensions.ycb_;
- var codeblockWidth = 1 << xcb_;
- var codeblockHeight = 1 << ycb_;
- var cbx0 = subband.tbx0 >> xcb_;
- var cby0 = subband.tby0 >> ycb_;
- var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;
- var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;
- var precinctParameters = subband.resolution.precinctParameters;
- var codeblocks = [];
- var precincts = [];
- var i, j, codeblock, precinctNumber;
-
- for (j = cby0; j < cby1; j++) {
- for (i = cbx0; i < cbx1; i++) {
- codeblock = {
- cbx: i,
- cby: j,
- tbx0: codeblockWidth * i,
- tby0: codeblockHeight * j,
- tbx1: codeblockWidth * (i + 1),
- tby1: codeblockHeight * (j + 1)
- };
- codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
- codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
- codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
- codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
- var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);
- var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);
- precinctNumber = pi + pj * precinctParameters.numprecinctswide;
- codeblock.precinctNumber = precinctNumber;
- codeblock.subbandType = subband.type;
- codeblock.Lblock = 3;
-
- if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {
- continue;
- }
-
- codeblocks.push(codeblock);
- var precinct = precincts[precinctNumber];
-
- if (precinct !== undefined) {
- if (i < precinct.cbxMin) {
- precinct.cbxMin = i;
- } else if (i > precinct.cbxMax) {
- precinct.cbxMax = i;
- }
-
- if (j < precinct.cbyMin) {
- precinct.cbxMin = j;
- } else if (j > precinct.cbyMax) {
- precinct.cbyMax = j;
- }
- } else {
- precincts[precinctNumber] = precinct = {
- cbxMin: i,
- cbyMin: j,
- cbxMax: i,
- cbyMax: j
- };
- }
-
- codeblock.precinct = precinct;
- }
- }
-
- subband.codeblockParameters = {
- codeblockWidth: xcb_,
- codeblockHeight: ycb_,
- numcodeblockwide: cbx1 - cbx0 + 1,
- numcodeblockhigh: cby1 - cby0 + 1
- };
- subband.codeblocks = codeblocks;
- subband.precincts = precincts;
- }
-
- function createPacket(resolution, precinctNumber, layerNumber) {
- var precinctCodeblocks = [];
- var subbands = resolution.subbands;
-
- for (var i = 0, ii = subbands.length; i < ii; i++) {
- var subband = subbands[i];
- var codeblocks = subband.codeblocks;
-
- for (var j = 0, jj = codeblocks.length; j < jj; j++) {
- var codeblock = codeblocks[j];
-
- if (codeblock.precinctNumber !== precinctNumber) {
- continue;
- }
-
- precinctCodeblocks.push(codeblock);
- }
- }
-
- return {
- layerNumber,
- codeblocks: precinctCodeblocks
- };
- }
-
- function LayerResolutionComponentPositionIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var maxDecompositionLevelsCount = 0;
-
- for (var q = 0; q < componentsCount; q++) {
- maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
- }
-
- var l = 0,
- r = 0,
- i = 0,
- k = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; l < layersCount; l++) {
- for (; r <= maxDecompositionLevelsCount; r++) {
- for (; i < componentsCount; i++) {
- var component = tile.components[i];
-
- if (r > component.codingStyleParameters.decompositionLevelsCount) {
- continue;
- }
-
- var resolution = component.resolutions[r];
- var numprecincts = resolution.precinctParameters.numprecincts;
-
- for (; k < numprecincts;) {
- var packet = createPacket(resolution, k, l);
- k++;
- return packet;
- }
-
- k = 0;
- }
-
- i = 0;
- }
-
- r = 0;
- }
-
- throw new JpxError("Out of packets");
- };
- }
-
- function ResolutionLayerComponentPositionIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var maxDecompositionLevelsCount = 0;
-
- for (var q = 0; q < componentsCount; q++) {
- maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
- }
-
- var r = 0,
- l = 0,
- i = 0,
- k = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; r <= maxDecompositionLevelsCount; r++) {
- for (; l < layersCount; l++) {
- for (; i < componentsCount; i++) {
- var component = tile.components[i];
-
- if (r > component.codingStyleParameters.decompositionLevelsCount) {
- continue;
- }
-
- var resolution = component.resolutions[r];
- var numprecincts = resolution.precinctParameters.numprecincts;
-
- for (; k < numprecincts;) {
- var packet = createPacket(resolution, k, l);
- k++;
- return packet;
- }
-
- k = 0;
- }
-
- i = 0;
- }
-
- l = 0;
- }
-
- throw new JpxError("Out of packets");
- };
- }
-
- function ResolutionPositionComponentLayerIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var l, r, c, p;
- var maxDecompositionLevelsCount = 0;
-
- for (c = 0; c < componentsCount; c++) {
- const component = tile.components[c];
- maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
- }
-
- var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);
-
- for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
- var maxNumPrecincts = 0;
-
- for (c = 0; c < componentsCount; ++c) {
- var resolutions = tile.components[c].resolutions;
-
- if (r < resolutions.length) {
- maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);
- }
- }
-
- maxNumPrecinctsInLevel[r] = maxNumPrecincts;
- }
-
- l = 0;
- r = 0;
- c = 0;
- p = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; r <= maxDecompositionLevelsCount; r++) {
- for (; p < maxNumPrecinctsInLevel[r]; p++) {
- for (; c < componentsCount; c++) {
- const component = tile.components[c];
-
- if (r > component.codingStyleParameters.decompositionLevelsCount) {
- continue;
- }
-
- var resolution = component.resolutions[r];
- var numprecincts = resolution.precinctParameters.numprecincts;
-
- if (p >= numprecincts) {
- continue;
- }
-
- for (; l < layersCount;) {
- var packet = createPacket(resolution, p, l);
- l++;
- return packet;
- }
-
- l = 0;
- }
-
- c = 0;
- }
-
- p = 0;
- }
-
- throw new JpxError("Out of packets");
- };
- }
-
- function PositionComponentResolutionLayerIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var precinctsSizes = getPrecinctSizesInImageScale(tile);
- var precinctsIterationSizes = precinctsSizes;
- var l = 0,
- r = 0,
- c = 0,
- px = 0,
- py = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; py < precinctsIterationSizes.maxNumHigh; py++) {
- for (; px < precinctsIterationSizes.maxNumWide; px++) {
- for (; c < componentsCount; c++) {
- var component = tile.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
-
- for (; r <= decompositionLevelsCount; r++) {
- var resolution = component.resolutions[r];
- var sizeInImageScale = precinctsSizes.components[c].resolutions[r];
- var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
-
- if (k === null) {
- continue;
- }
-
- for (; l < layersCount;) {
- var packet = createPacket(resolution, k, l);
- l++;
- return packet;
- }
-
- l = 0;
- }
-
- r = 0;
- }
-
- c = 0;
- }
-
- px = 0;
- }
-
- throw new JpxError("Out of packets");
- };
- }
-
- function ComponentPositionResolutionLayerIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var precinctsSizes = getPrecinctSizesInImageScale(tile);
- var l = 0,
- r = 0,
- c = 0,
- px = 0,
- py = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; c < componentsCount; ++c) {
- var component = tile.components[c];
- var precinctsIterationSizes = precinctsSizes.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
-
- for (; py < precinctsIterationSizes.maxNumHigh; py++) {
- for (; px < precinctsIterationSizes.maxNumWide; px++) {
- for (; r <= decompositionLevelsCount; r++) {
- var resolution = component.resolutions[r];
- var sizeInImageScale = precinctsIterationSizes.resolutions[r];
- var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
-
- if (k === null) {
- continue;
- }
-
- for (; l < layersCount;) {
- var packet = createPacket(resolution, k, l);
- l++;
- return packet;
- }
-
- l = 0;
- }
-
- r = 0;
- }
-
- px = 0;
- }
-
- py = 0;
- }
-
- throw new JpxError("Out of packets");
- };
- }
-
- function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {
- var posX = pxIndex * precinctIterationSizes.minWidth;
- var posY = pyIndex * precinctIterationSizes.minHeight;
-
- if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {
- return null;
- }
-
- var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;
- return posX / sizeInImageScale.height + startPrecinctRowIndex;
- }
-
- function getPrecinctSizesInImageScale(tile) {
- var componentsCount = tile.components.length;
- var minWidth = Number.MAX_VALUE;
- var minHeight = Number.MAX_VALUE;
- var maxNumWide = 0;
- var maxNumHigh = 0;
- var sizePerComponent = new Array(componentsCount);
-
- for (var c = 0; c < componentsCount; c++) {
- var component = tile.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
- var sizePerResolution = new Array(decompositionLevelsCount + 1);
- var minWidthCurrentComponent = Number.MAX_VALUE;
- var minHeightCurrentComponent = Number.MAX_VALUE;
- var maxNumWideCurrentComponent = 0;
- var maxNumHighCurrentComponent = 0;
- var scale = 1;
-
- for (var r = decompositionLevelsCount; r >= 0; --r) {
- var resolution = component.resolutions[r];
- var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;
- var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;
- minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);
- minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);
- maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);
- maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);
- sizePerResolution[r] = {
- width: widthCurrentResolution,
- height: heightCurrentResolution
- };
- scale <<= 1;
- }
-
- minWidth = Math.min(minWidth, minWidthCurrentComponent);
- minHeight = Math.min(minHeight, minHeightCurrentComponent);
- maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
- maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
- sizePerComponent[c] = {
- resolutions: sizePerResolution,
- minWidth: minWidthCurrentComponent,
- minHeight: minHeightCurrentComponent,
- maxNumWide: maxNumWideCurrentComponent,
- maxNumHigh: maxNumHighCurrentComponent
- };
- }
-
- return {
- components: sizePerComponent,
- minWidth,
- minHeight,
- maxNumWide,
- maxNumHigh
- };
- }
-
- function buildPackets(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var componentsCount = siz.Csiz;
-
- for (var c = 0; c < componentsCount; c++) {
- var component = tile.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
- var resolutions = [];
- var subbands = [];
-
- for (var r = 0; r <= decompositionLevelsCount; r++) {
- var blocksDimensions = getBlocksDimensions(context, component, r);
- var resolution = {};
- var scale = 1 << decompositionLevelsCount - r;
- resolution.trx0 = Math.ceil(component.tcx0 / scale);
- resolution.try0 = Math.ceil(component.tcy0 / scale);
- resolution.trx1 = Math.ceil(component.tcx1 / scale);
- resolution.try1 = Math.ceil(component.tcy1 / scale);
- resolution.resLevel = r;
- buildPrecincts(context, resolution, blocksDimensions);
- resolutions.push(resolution);
- var subband;
-
- if (r === 0) {
- subband = {};
- subband.type = "LL";
- subband.tbx0 = Math.ceil(component.tcx0 / scale);
- subband.tby0 = Math.ceil(component.tcy0 / scale);
- subband.tbx1 = Math.ceil(component.tcx1 / scale);
- subband.tby1 = Math.ceil(component.tcy1 / scale);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolution.subbands = [subband];
- } else {
- var bscale = 1 << decompositionLevelsCount - r + 1;
- var resolutionSubbands = [];
- subband = {};
- subband.type = "HL";
- subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
- subband.tby0 = Math.ceil(component.tcy0 / bscale);
- subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
- subband.tby1 = Math.ceil(component.tcy1 / bscale);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolutionSubbands.push(subband);
- subband = {};
- subband.type = "LH";
- subband.tbx0 = Math.ceil(component.tcx0 / bscale);
- subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
- subband.tbx1 = Math.ceil(component.tcx1 / bscale);
- subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolutionSubbands.push(subband);
- subband = {};
- subband.type = "HH";
- subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
- subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
- subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
- subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolutionSubbands.push(subband);
- resolution.subbands = resolutionSubbands;
- }
- }
-
- component.resolutions = resolutions;
- component.subbands = subbands;
- }
-
- var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
-
- switch (progressionOrder) {
- case 0:
- tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);
- break;
-
- case 1:
- tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);
- break;
-
- case 2:
- tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);
- break;
-
- case 3:
- tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);
- break;
-
- case 4:
- tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);
- break;
-
- default:
- throw new JpxError(`Unsupported progression order ${progressionOrder}`);
- }
- }
-
- function parseTilePackets(context, data, offset, dataLength) {
- var position = 0;
- var buffer,
- bufferSize = 0,
- skipNextBit = false;
-
- function readBits(count) {
- while (bufferSize < count) {
- var b = data[offset + position];
- position++;
-
- if (skipNextBit) {
- buffer = buffer << 7 | b;
- bufferSize += 7;
- skipNextBit = false;
- } else {
- buffer = buffer << 8 | b;
- bufferSize += 8;
- }
-
- if (b === 0xff) {
- skipNextBit = true;
- }
- }
-
- bufferSize -= count;
- return buffer >>> bufferSize & (1 << count) - 1;
- }
-
- function skipMarkerIfEqual(value) {
- if (data[offset + position - 1] === 0xff && data[offset + position] === value) {
- skipBytes(1);
- return true;
- } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) {
- skipBytes(2);
- return true;
- }
-
- return false;
- }
-
- function skipBytes(count) {
- position += count;
- }
-
- function alignToByte() {
- bufferSize = 0;
-
- if (skipNextBit) {
- position++;
- skipNextBit = false;
- }
- }
-
- function readCodingpasses() {
- if (readBits(1) === 0) {
- return 1;
- }
-
- if (readBits(1) === 0) {
- return 2;
- }
-
- var value = readBits(2);
-
- if (value < 3) {
- return value + 3;
- }
-
- value = readBits(5);
-
- if (value < 31) {
- return value + 6;
- }
-
- value = readBits(7);
- return value + 37;
- }
-
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var sopMarkerUsed = context.COD.sopMarkerUsed;
- var ephMarkerUsed = context.COD.ephMarkerUsed;
- var packetsIterator = tile.packetsIterator;
-
- while (position < dataLength) {
- alignToByte();
-
- if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
- skipBytes(4);
- }
-
- var packet = packetsIterator.nextPacket();
-
- if (!readBits(1)) {
- continue;
- }
-
- var layerNumber = packet.layerNumber;
- var queue = [],
- codeblock;
-
- for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {
- codeblock = packet.codeblocks[i];
- var precinct = codeblock.precinct;
- var codeblockColumn = codeblock.cbx - precinct.cbxMin;
- var codeblockRow = codeblock.cby - precinct.cbyMin;
- var codeblockIncluded = false;
- var firstTimeInclusion = false;
- var valueReady;
-
- if (codeblock.included !== undefined) {
- codeblockIncluded = !!readBits(1);
- } else {
- precinct = codeblock.precinct;
- var inclusionTree, zeroBitPlanesTree;
-
- if (precinct.inclusionTree !== undefined) {
- inclusionTree = precinct.inclusionTree;
- } else {
- var width = precinct.cbxMax - precinct.cbxMin + 1;
- var height = precinct.cbyMax - precinct.cbyMin + 1;
- inclusionTree = new InclusionTree(width, height, layerNumber);
- zeroBitPlanesTree = new TagTree(width, height);
- precinct.inclusionTree = inclusionTree;
- precinct.zeroBitPlanesTree = zeroBitPlanesTree;
- }
-
- if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
- while (true) {
- if (readBits(1)) {
- valueReady = !inclusionTree.nextLevel();
-
- if (valueReady) {
- codeblock.included = true;
- codeblockIncluded = firstTimeInclusion = true;
- break;
- }
- } else {
- inclusionTree.incrementValue(layerNumber);
- break;
- }
- }
- }
- }
-
- if (!codeblockIncluded) {
- continue;
- }
-
- if (firstTimeInclusion) {
- zeroBitPlanesTree = precinct.zeroBitPlanesTree;
- zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
-
- while (true) {
- if (readBits(1)) {
- valueReady = !zeroBitPlanesTree.nextLevel();
-
- if (valueReady) {
- break;
- }
- } else {
- zeroBitPlanesTree.incrementValue();
- }
- }
-
- codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
- }
-
- var codingpasses = readCodingpasses();
-
- while (readBits(1)) {
- codeblock.Lblock++;
- }
-
- var codingpassesLog2 = (0, _core_utils.log2)(codingpasses);
- var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
- var codedDataLength = readBits(bits);
- queue.push({
- codeblock,
- codingpasses,
- dataLength: codedDataLength
- });
- }
-
- alignToByte();
-
- if (ephMarkerUsed) {
- skipMarkerIfEqual(0x92);
- }
-
- while (queue.length > 0) {
- var packetItem = queue.shift();
- codeblock = packetItem.codeblock;
-
- if (codeblock.data === undefined) {
- codeblock.data = [];
- }
-
- codeblock.data.push({
- data,
- start: offset + position,
- end: offset + position + packetItem.dataLength,
- codingpasses: packetItem.codingpasses
- });
- position += packetItem.dataLength;
- }
- }
-
- return position;
- }
-
- function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {
- var x0 = subband.tbx0;
- var y0 = subband.tby0;
- var width = subband.tbx1 - subband.tbx0;
- var codeblocks = subband.codeblocks;
- var right = subband.type.charAt(0) === "H" ? 1 : 0;
- var bottom = subband.type.charAt(1) === "H" ? levelWidth : 0;
-
- for (var i = 0, ii = codeblocks.length; i < ii; ++i) {
- var codeblock = codeblocks[i];
- var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
- var blockHeight = codeblock.tby1_ - codeblock.tby0_;
-
- if (blockWidth === 0 || blockHeight === 0) {
- continue;
- }
-
- if (codeblock.data === undefined) {
- continue;
- }
-
- var bitModel, currentCodingpassType;
- bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);
- currentCodingpassType = 2;
- var data = codeblock.data,
- totalLength = 0,
- codingpasses = 0;
- var j, jj, dataItem;
-
- for (j = 0, jj = data.length; j < jj; j++) {
- dataItem = data[j];
- totalLength += dataItem.end - dataItem.start;
- codingpasses += dataItem.codingpasses;
- }
-
- var encodedData = new Uint8Array(totalLength);
- var position = 0;
-
- for (j = 0, jj = data.length; j < jj; j++) {
- dataItem = data[j];
- var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
- encodedData.set(chunk, position);
- position += chunk.length;
- }
-
- var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);
- bitModel.setDecoder(decoder);
-
- for (j = 0; j < codingpasses; j++) {
- switch (currentCodingpassType) {
- case 0:
- bitModel.runSignificancePropagationPass();
- break;
-
- case 1:
- bitModel.runMagnitudeRefinementPass();
- break;
-
- case 2:
- bitModel.runCleanupPass();
-
- if (segmentationSymbolUsed) {
- bitModel.checkSegmentationSymbol();
- }
-
- break;
- }
-
- currentCodingpassType = (currentCodingpassType + 1) % 3;
- }
-
- var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;
- var sign = bitModel.coefficentsSign;
- var magnitude = bitModel.coefficentsMagnitude;
- var bitsDecoded = bitModel.bitsDecoded;
- var magnitudeCorrection = reversible ? 0 : 0.5;
- var k, n, nb;
- position = 0;
- var interleave = subband.type !== "LL";
-
- for (j = 0; j < blockHeight; j++) {
- var row = offset / width | 0;
- var levelOffset = 2 * row * (levelWidth - width) + right + bottom;
-
- for (k = 0; k < blockWidth; k++) {
- n = magnitude[position];
-
- if (n !== 0) {
- n = (n + magnitudeCorrection) * delta;
-
- if (sign[position] !== 0) {
- n = -n;
- }
-
- nb = bitsDecoded[position];
- var pos = interleave ? levelOffset + (offset << 1) : offset;
-
- if (reversible && nb >= mb) {
- coefficients[pos] = n;
- } else {
- coefficients[pos] = n * (1 << mb - nb);
- }
- }
-
- offset++;
- position++;
- }
-
- offset += width - blockWidth;
- }
- }
- }
-
- function transformTile(context, tile, c) {
- var component = tile.components[c];
- var codingStyleParameters = component.codingStyleParameters;
- var quantizationParameters = component.quantizationParameters;
- var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;
- var spqcds = quantizationParameters.SPqcds;
- var scalarExpounded = quantizationParameters.scalarExpounded;
- var guardBits = quantizationParameters.guardBits;
- var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
- var precision = context.components[c].precision;
- var reversible = codingStyleParameters.reversibleTransformation;
- var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();
- var subbandCoefficients = [];
- var b = 0;
-
- for (var i = 0; i <= decompositionLevelsCount; i++) {
- var resolution = component.resolutions[i];
- var width = resolution.trx1 - resolution.trx0;
- var height = resolution.try1 - resolution.try0;
- var coefficients = new Float32Array(width * height);
-
- for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {
- var mu, epsilon;
-
- if (!scalarExpounded) {
- mu = spqcds[0].mu;
- epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
- } else {
- mu = spqcds[b].mu;
- epsilon = spqcds[b].epsilon;
- b++;
- }
-
- var subband = resolution.subbands[j];
- var gainLog2 = SubbandsGainLog2[subband.type];
- var delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);
- var mb = guardBits + epsilon - 1;
- copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);
- }
-
- subbandCoefficients.push({
- width,
- height,
- items: coefficients
- });
- }
-
- var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);
- return {
- left: component.tcx0,
- top: component.tcy0,
- width: result.width,
- height: result.height,
- items: result.items
- };
- }
-
- function transformComponents(context) {
- var siz = context.SIZ;
- var components = context.components;
- var componentsCount = siz.Csiz;
- var resultImages = [];
-
- for (var i = 0, ii = context.tiles.length; i < ii; i++) {
- var tile = context.tiles[i];
- var transformedTiles = [];
- var c;
-
- for (c = 0; c < componentsCount; c++) {
- transformedTiles[c] = transformTile(context, tile, c);
- }
-
- var tile0 = transformedTiles[0];
- var out = new Uint8ClampedArray(tile0.items.length * componentsCount);
- var result = {
- left: tile0.left,
- top: tile0.top,
- width: tile0.width,
- height: tile0.height,
- items: out
- };
- var shift, offset;
- var pos = 0,
- j,
- jj,
- y0,
- y1,
- y2;
-
- if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
- var fourComponents = componentsCount === 4;
- var y0items = transformedTiles[0].items;
- var y1items = transformedTiles[1].items;
- var y2items = transformedTiles[2].items;
- var y3items = fourComponents ? transformedTiles[3].items : null;
- shift = components[0].precision - 8;
- offset = (128 << shift) + 0.5;
- var component0 = tile.components[0];
- var alpha01 = componentsCount - 3;
- jj = y0items.length;
-
- if (!component0.codingStyleParameters.reversibleTransformation) {
- for (j = 0; j < jj; j++, pos += alpha01) {
- y0 = y0items[j] + offset;
- y1 = y1items[j];
- y2 = y2items[j];
- out[pos++] = y0 + 1.402 * y2 >> shift;
- out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;
- out[pos++] = y0 + 1.772 * y1 >> shift;
- }
- } else {
- for (j = 0; j < jj; j++, pos += alpha01) {
- y0 = y0items[j] + offset;
- y1 = y1items[j];
- y2 = y2items[j];
- const g = y0 - (y2 + y1 >> 2);
- out[pos++] = g + y2 >> shift;
- out[pos++] = g >> shift;
- out[pos++] = g + y1 >> shift;
- }
- }
-
- if (fourComponents) {
- for (j = 0, pos = 3; j < jj; j++, pos += 4) {
- out[pos] = y3items[j] + offset >> shift;
- }
- }
- } else {
- for (c = 0; c < componentsCount; c++) {
- var items = transformedTiles[c].items;
- shift = components[c].precision - 8;
- offset = (128 << shift) + 0.5;
-
- for (pos = c, j = 0, jj = items.length; j < jj; j++) {
- out[pos] = items[j] + offset >> shift;
- pos += componentsCount;
- }
- }
- }
-
- resultImages.push(result);
- }
-
- return resultImages;
- }
-
- function initializeTile(context, tileIndex) {
- var siz = context.SIZ;
- var componentsCount = siz.Csiz;
- var tile = context.tiles[tileIndex];
-
- for (var c = 0; c < componentsCount; c++) {
- var component = tile.components[c];
- var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;
- component.quantizationParameters = qcdOrQcc;
- var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;
- component.codingStyleParameters = codOrCoc;
- }
-
- tile.codingStyleDefaultParameters = context.currentTile.COD;
- }
-
- var TagTree = function TagTreeClosure() {
- function TagTree(width, height) {
- var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
- this.levels = [];
-
- for (var i = 0; i < levelsLength; i++) {
- var level = {
- width,
- height,
- items: []
- };
- this.levels.push(level);
- width = Math.ceil(width / 2);
- height = Math.ceil(height / 2);
- }
- }
-
- TagTree.prototype = {
- reset: function TagTree_reset(i, j) {
- var currentLevel = 0,
- value = 0,
- level;
-
- while (currentLevel < this.levels.length) {
- level = this.levels[currentLevel];
- var index = i + j * level.width;
-
- if (level.items[index] !== undefined) {
- value = level.items[index];
- break;
- }
-
- level.index = index;
- i >>= 1;
- j >>= 1;
- currentLevel++;
- }
-
- currentLevel--;
- level = this.levels[currentLevel];
- level.items[level.index] = value;
- this.currentLevel = currentLevel;
- delete this.value;
- },
- incrementValue: function TagTree_incrementValue() {
- var level = this.levels[this.currentLevel];
- level.items[level.index]++;
- },
- nextLevel: function TagTree_nextLevel() {
- var currentLevel = this.currentLevel;
- var level = this.levels[currentLevel];
- var value = level.items[level.index];
- currentLevel--;
-
- if (currentLevel < 0) {
- this.value = value;
- return false;
- }
-
- this.currentLevel = currentLevel;
- level = this.levels[currentLevel];
- level.items[level.index] = value;
- return true;
- }
- };
- return TagTree;
- }();
-
- var InclusionTree = function InclusionTreeClosure() {
- function InclusionTree(width, height, defaultValue) {
- var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
- this.levels = [];
-
- for (var i = 0; i < levelsLength; i++) {
- var items = new Uint8Array(width * height);
-
- for (var j = 0, jj = items.length; j < jj; j++) {
- items[j] = defaultValue;
- }
-
- var level = {
- width,
- height,
- items
- };
- this.levels.push(level);
- width = Math.ceil(width / 2);
- height = Math.ceil(height / 2);
- }
- }
-
- InclusionTree.prototype = {
- reset: function InclusionTree_reset(i, j, stopValue) {
- var currentLevel = 0;
-
- while (currentLevel < this.levels.length) {
- var level = this.levels[currentLevel];
- var index = i + j * level.width;
- level.index = index;
- var value = level.items[index];
-
- if (value === 0xff) {
- break;
- }
-
- if (value > stopValue) {
- this.currentLevel = currentLevel;
- this.propagateValues();
- return false;
- }
-
- i >>= 1;
- j >>= 1;
- currentLevel++;
- }
-
- this.currentLevel = currentLevel - 1;
- return true;
- },
- incrementValue: function InclusionTree_incrementValue(stopValue) {
- var level = this.levels[this.currentLevel];
- level.items[level.index] = stopValue + 1;
- this.propagateValues();
- },
- propagateValues: function InclusionTree_propagateValues() {
- var levelIndex = this.currentLevel;
- var level = this.levels[levelIndex];
- var currentValue = level.items[level.index];
-
- while (--levelIndex >= 0) {
- level = this.levels[levelIndex];
- level.items[level.index] = currentValue;
- }
- },
- nextLevel: function InclusionTree_nextLevel() {
- var currentLevel = this.currentLevel;
- var level = this.levels[currentLevel];
- var value = level.items[level.index];
- level.items[level.index] = 0xff;
- currentLevel--;
-
- if (currentLevel < 0) {
- return false;
- }
-
- this.currentLevel = currentLevel;
- level = this.levels[currentLevel];
- level.items[level.index] = value;
- return true;
- }
- };
- return InclusionTree;
- }();
-
- var BitModel = function BitModelClosure() {
- var UNIFORM_CONTEXT = 17;
- var RUNLENGTH_CONTEXT = 18;
- var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);
- var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);
- var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);
-
- function BitModel(width, height, subband, zeroBitPlanes, mb) {
- this.width = width;
- this.height = height;
- let contextLabelTable;
-
- if (subband === "HH") {
- contextLabelTable = HHContextLabel;
- } else if (subband === "HL") {
- contextLabelTable = HLContextLabel;
- } else {
- contextLabelTable = LLAndLHContextsLabel;
- }
-
- this.contextLabelTable = contextLabelTable;
- var coefficientCount = width * height;
- this.neighborsSignificance = new Uint8Array(coefficientCount);
- this.coefficentsSign = new Uint8Array(coefficientCount);
- let coefficentsMagnitude;
-
- if (mb > 14) {
- coefficentsMagnitude = new Uint32Array(coefficientCount);
- } else if (mb > 6) {
- coefficentsMagnitude = new Uint16Array(coefficientCount);
- } else {
- coefficentsMagnitude = new Uint8Array(coefficientCount);
- }
-
- this.coefficentsMagnitude = coefficentsMagnitude;
- this.processingFlags = new Uint8Array(coefficientCount);
- var bitsDecoded = new Uint8Array(coefficientCount);
-
- if (zeroBitPlanes !== 0) {
- for (var i = 0; i < coefficientCount; i++) {
- bitsDecoded[i] = zeroBitPlanes;
- }
- }
-
- this.bitsDecoded = bitsDecoded;
- this.reset();
- }
-
- BitModel.prototype = {
- setDecoder: function BitModel_setDecoder(decoder) {
- this.decoder = decoder;
- },
- reset: function BitModel_reset() {
- this.contexts = new Int8Array(19);
- this.contexts[0] = 4 << 1 | 0;
- this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;
- this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;
- },
- setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) {
- var neighborsSignificance = this.neighborsSignificance;
- var width = this.width,
- height = this.height;
- var left = column > 0;
- var right = column + 1 < width;
- var i;
-
- if (row > 0) {
- i = index - width;
-
- if (left) {
- neighborsSignificance[i - 1] += 0x10;
- }
-
- if (right) {
- neighborsSignificance[i + 1] += 0x10;
- }
-
- neighborsSignificance[i] += 0x04;
- }
-
- if (row + 1 < height) {
- i = index + width;
-
- if (left) {
- neighborsSignificance[i - 1] += 0x10;
- }
-
- if (right) {
- neighborsSignificance[i + 1] += 0x10;
- }
-
- neighborsSignificance[i] += 0x04;
- }
-
- if (left) {
- neighborsSignificance[index - 1] += 0x01;
- }
-
- if (right) {
- neighborsSignificance[index + 1] += 0x01;
- }
-
- neighborsSignificance[index] |= 0x80;
- },
- runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {
- var decoder = this.decoder;
- var width = this.width,
- height = this.height;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var coefficentsSign = this.coefficentsSign;
- var neighborsSignificance = this.neighborsSignificance;
- var processingFlags = this.processingFlags;
- var contexts = this.contexts;
- var labels = this.contextLabelTable;
- var bitsDecoded = this.bitsDecoded;
- var processedInverseMask = ~1;
- var processedMask = 1;
- var firstMagnitudeBitMask = 2;
-
- for (var i0 = 0; i0 < height; i0 += 4) {
- for (var j = 0; j < width; j++) {
- var index = i0 * width + j;
-
- for (var i1 = 0; i1 < 4; i1++, index += width) {
- var i = i0 + i1;
-
- if (i >= height) {
- break;
- }
-
- processingFlags[index] &= processedInverseMask;
-
- if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {
- continue;
- }
-
- var contextLabel = labels[neighborsSignificance[index]];
- var decision = decoder.readBit(contexts, contextLabel);
-
- if (decision) {
- var sign = this.decodeSignBit(i, j, index);
- coefficentsSign[index] = sign;
- coefficentsMagnitude[index] = 1;
- this.setNeighborsSignificance(i, j, index);
- processingFlags[index] |= firstMagnitudeBitMask;
- }
-
- bitsDecoded[index]++;
- processingFlags[index] |= processedMask;
- }
- }
- }
- },
- decodeSignBit: function BitModel_decodeSignBit(row, column, index) {
- var width = this.width,
- height = this.height;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var coefficentsSign = this.coefficentsSign;
- var contribution, sign0, sign1, significance1;
- var contextLabel, decoded;
- significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;
-
- if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
- sign1 = coefficentsSign[index + 1];
-
- if (significance1) {
- sign0 = coefficentsSign[index - 1];
- contribution = 1 - sign1 - sign0;
- } else {
- contribution = 1 - sign1 - sign1;
- }
- } else if (significance1) {
- sign0 = coefficentsSign[index - 1];
- contribution = 1 - sign0 - sign0;
- } else {
- contribution = 0;
- }
-
- var horizontalContribution = 3 * contribution;
- significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;
-
- if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
- sign1 = coefficentsSign[index + width];
-
- if (significance1) {
- sign0 = coefficentsSign[index - width];
- contribution = 1 - sign1 - sign0 + horizontalContribution;
- } else {
- contribution = 1 - sign1 - sign1 + horizontalContribution;
- }
- } else if (significance1) {
- sign0 = coefficentsSign[index - width];
- contribution = 1 - sign0 - sign0 + horizontalContribution;
- } else {
- contribution = horizontalContribution;
- }
-
- if (contribution >= 0) {
- contextLabel = 9 + contribution;
- decoded = this.decoder.readBit(this.contexts, contextLabel);
- } else {
- contextLabel = 9 - contribution;
- decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
- }
-
- return decoded;
- },
- runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {
- var decoder = this.decoder;
- var width = this.width,
- height = this.height;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var neighborsSignificance = this.neighborsSignificance;
- var contexts = this.contexts;
- var bitsDecoded = this.bitsDecoded;
- var processingFlags = this.processingFlags;
- var processedMask = 1;
- var firstMagnitudeBitMask = 2;
- var length = width * height;
- var width4 = width * 4;
-
- for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {
- indexNext = Math.min(length, index0 + width4);
-
- for (var j = 0; j < width; j++) {
- for (var index = index0 + j; index < indexNext; index += width) {
- if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
- continue;
- }
-
- var contextLabel = 16;
-
- if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
- processingFlags[index] ^= firstMagnitudeBitMask;
- var significance = neighborsSignificance[index] & 127;
- contextLabel = significance === 0 ? 15 : 14;
- }
-
- var bit = decoder.readBit(contexts, contextLabel);
- coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;
- bitsDecoded[index]++;
- processingFlags[index] |= processedMask;
- }
- }
- }
- },
- runCleanupPass: function BitModel_runCleanupPass() {
- var decoder = this.decoder;
- var width = this.width,
- height = this.height;
- var neighborsSignificance = this.neighborsSignificance;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var coefficentsSign = this.coefficentsSign;
- var contexts = this.contexts;
- var labels = this.contextLabelTable;
- var bitsDecoded = this.bitsDecoded;
- var processingFlags = this.processingFlags;
- var processedMask = 1;
- var firstMagnitudeBitMask = 2;
- var oneRowDown = width;
- var twoRowsDown = width * 2;
- var threeRowsDown = width * 3;
- var iNext;
-
- for (var i0 = 0; i0 < height; i0 = iNext) {
- iNext = Math.min(i0 + 4, height);
- var indexBase = i0 * width;
- var checkAllEmpty = i0 + 3 < height;
-
- for (var j = 0; j < width; j++) {
- var index0 = indexBase + j;
- var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;
- var i1 = 0,
- index = index0;
- var i = i0,
- sign;
-
- if (allEmpty) {
- var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);
-
- if (!hasSignificantCoefficent) {
- bitsDecoded[index0]++;
- bitsDecoded[index0 + oneRowDown]++;
- bitsDecoded[index0 + twoRowsDown]++;
- bitsDecoded[index0 + threeRowsDown]++;
- continue;
- }
-
- i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
-
- if (i1 !== 0) {
- i = i0 + i1;
- index += i1 * width;
- }
-
- sign = this.decodeSignBit(i, j, index);
- coefficentsSign[index] = sign;
- coefficentsMagnitude[index] = 1;
- this.setNeighborsSignificance(i, j, index);
- processingFlags[index] |= firstMagnitudeBitMask;
- index = index0;
-
- for (var i2 = i0; i2 <= i; i2++, index += width) {
- bitsDecoded[index]++;
- }
-
- i1++;
- }
-
- for (i = i0 + i1; i < iNext; i++, index += width) {
- if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
- continue;
- }
-
- var contextLabel = labels[neighborsSignificance[index]];
- var decision = decoder.readBit(contexts, contextLabel);
-
- if (decision === 1) {
- sign = this.decodeSignBit(i, j, index);
- coefficentsSign[index] = sign;
- coefficentsMagnitude[index] = 1;
- this.setNeighborsSignificance(i, j, index);
- processingFlags[index] |= firstMagnitudeBitMask;
- }
-
- bitsDecoded[index]++;
- }
- }
- }
- },
- checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {
- var decoder = this.decoder;
- var contexts = this.contexts;
- var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
-
- if (symbol !== 0xa) {
- throw new JpxError("Invalid segmentation symbol");
- }
- }
- };
- return BitModel;
- }();
-
- var Transform = function TransformClosure() {
- function Transform() {}
-
- Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) {
- var ll = subbands[0];
-
- for (var i = 1, ii = subbands.length; i < ii; i++) {
- ll = this.iterate(ll, subbands[i], u0, v0);
- }
-
- return ll;
- };
-
- Transform.prototype.extend = function extend(buffer, offset, size) {
- var i1 = offset - 1,
- j1 = offset + 1;
- var i2 = offset + size - 2,
- j2 = offset + size;
- buffer[i1--] = buffer[j1++];
- buffer[j2++] = buffer[i2--];
- buffer[i1--] = buffer[j1++];
- buffer[j2++] = buffer[i2--];
- buffer[i1--] = buffer[j1++];
- buffer[j2++] = buffer[i2--];
- buffer[i1] = buffer[j1];
- buffer[j2] = buffer[i2];
- };
-
- Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) {
- var llWidth = ll.width,
- llHeight = ll.height,
- llItems = ll.items;
- var width = hl_lh_hh.width;
- var height = hl_lh_hh.height;
- var items = hl_lh_hh.items;
- var i, j, k, l, u, v;
-
- for (k = 0, i = 0; i < llHeight; i++) {
- l = i * 2 * width;
-
- for (j = 0; j < llWidth; j++, k++, l += 2) {
- items[l] = llItems[k];
- }
- }
-
- llItems = ll.items = null;
- var bufferPadding = 4;
- var rowBuffer = new Float32Array(width + 2 * bufferPadding);
-
- if (width === 1) {
- if ((u0 & 1) !== 0) {
- for (v = 0, k = 0; v < height; v++, k += width) {
- items[k] *= 0.5;
- }
- }
- } else {
- for (v = 0, k = 0; v < height; v++, k += width) {
- rowBuffer.set(items.subarray(k, k + width), bufferPadding);
- this.extend(rowBuffer, bufferPadding, width);
- this.filter(rowBuffer, bufferPadding, width);
- items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);
- }
- }
-
- var numBuffers = 16;
- var colBuffers = [];
-
- for (i = 0; i < numBuffers; i++) {
- colBuffers.push(new Float32Array(height + 2 * bufferPadding));
- }
-
- var b,
- currentBuffer = 0;
- ll = bufferPadding + height;
-
- if (height === 1) {
- if ((v0 & 1) !== 0) {
- for (u = 0; u < width; u++) {
- items[u] *= 0.5;
- }
- }
- } else {
- for (u = 0; u < width; u++) {
- if (currentBuffer === 0) {
- numBuffers = Math.min(width - u, numBuffers);
-
- for (k = u, l = bufferPadding; l < ll; k += width, l++) {
- for (b = 0; b < numBuffers; b++) {
- colBuffers[b][l] = items[k + b];
- }
- }
-
- currentBuffer = numBuffers;
- }
-
- currentBuffer--;
- var buffer = colBuffers[currentBuffer];
- this.extend(buffer, bufferPadding, height);
- this.filter(buffer, bufferPadding, height);
-
- if (currentBuffer === 0) {
- k = u - numBuffers + 1;
-
- for (l = bufferPadding; l < ll; k += width, l++) {
- for (b = 0; b < numBuffers; b++) {
- items[k + b] = colBuffers[b][l];
- }
- }
- }
- }
- }
-
- return {
- width,
- height,
- items
- };
- };
-
- return Transform;
- }();
-
- var IrreversibleTransform = function IrreversibleTransformClosure() {
- function IrreversibleTransform() {
- Transform.call(this);
- }
-
- IrreversibleTransform.prototype = Object.create(Transform.prototype);
-
- IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) {
- var len = length >> 1;
- offset = offset | 0;
- var j, n, current, next;
- var alpha = -1.586134342059924;
- var beta = -0.052980118572961;
- var gamma = 0.882911075530934;
- var delta = 0.443506852043971;
- var K = 1.230174104914001;
- var K_ = 1 / K;
- j = offset - 3;
-
- for (n = len + 4; n--; j += 2) {
- x[j] *= K_;
- }
-
- j = offset - 2;
- current = delta * x[j - 1];
-
- for (n = len + 3; n--; j += 2) {
- next = delta * x[j + 1];
- x[j] = K * x[j] - current - next;
-
- if (n--) {
- j += 2;
- current = delta * x[j + 1];
- x[j] = K * x[j] - current - next;
- } else {
- break;
- }
- }
-
- j = offset - 1;
- current = gamma * x[j - 1];
-
- for (n = len + 2; n--; j += 2) {
- next = gamma * x[j + 1];
- x[j] -= current + next;
-
- if (n--) {
- j += 2;
- current = gamma * x[j + 1];
- x[j] -= current + next;
- } else {
- break;
- }
- }
-
- j = offset;
- current = beta * x[j - 1];
-
- for (n = len + 1; n--; j += 2) {
- next = beta * x[j + 1];
- x[j] -= current + next;
-
- if (n--) {
- j += 2;
- current = beta * x[j + 1];
- x[j] -= current + next;
- } else {
- break;
- }
- }
-
- if (len !== 0) {
- j = offset + 1;
- current = alpha * x[j - 1];
-
- for (n = len; n--; j += 2) {
- next = alpha * x[j + 1];
- x[j] -= current + next;
-
- if (n--) {
- j += 2;
- current = alpha * x[j + 1];
- x[j] -= current + next;
- } else {
- break;
- }
- }
- }
- };
-
- return IrreversibleTransform;
- }();
-
- var ReversibleTransform = function ReversibleTransformClosure() {
- function ReversibleTransform() {
- Transform.call(this);
- }
-
- ReversibleTransform.prototype = Object.create(Transform.prototype);
-
- ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) {
- var len = length >> 1;
- offset = offset | 0;
- var j, n;
-
- for (j = offset, n = len + 1; n--; j += 2) {
- x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;
- }
-
- for (j = offset + 1, n = len; n--; j += 2) {
- x[j] += x[j - 1] + x[j + 1] >> 1;
- }
- };
-
- return ReversibleTransform;
- }();
-
- return JpxImage;
-}();
-
-exports.JpxImage = JpxImage;
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _stream = __w_pdfjs_require__(12);
-
-var ARCFourCipher = function ARCFourCipherClosure() {
- function ARCFourCipher(key) {
- this.a = 0;
- this.b = 0;
- var s = new Uint8Array(256);
- var i,
- j = 0,
- tmp,
- keyLength = key.length;
-
- for (i = 0; i < 256; ++i) {
- s[i] = i;
- }
-
- for (i = 0; i < 256; ++i) {
- tmp = s[i];
- j = j + tmp + key[i % keyLength] & 0xff;
- s[i] = s[j];
- s[j] = tmp;
- }
-
- this.s = s;
- }
-
- ARCFourCipher.prototype = {
- encryptBlock: function ARCFourCipher_encryptBlock(data) {
- var i,
- n = data.length,
- tmp,
- tmp2;
- var a = this.a,
- b = this.b,
- s = this.s;
- var output = new Uint8Array(n);
-
- for (i = 0; i < n; ++i) {
- a = a + 1 & 0xff;
- tmp = s[a];
- b = b + tmp & 0xff;
- tmp2 = s[b];
- s[a] = tmp2;
- s[b] = tmp;
- output[i] = data[i] ^ s[tmp + tmp2 & 0xff];
- }
-
- this.a = a;
- this.b = b;
- return output;
- }
- };
- ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;
- return ARCFourCipher;
-}();
-
-exports.ARCFourCipher = ARCFourCipher;
-
-var calculateMD5 = function calculateMD5Closure() {
- var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
- var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);
-
- function hash(data, offset, length) {
- var h0 = 1732584193,
- h1 = -271733879,
- h2 = -1732584194,
- h3 = 271733878;
- var paddedLength = length + 72 & ~63;
- var padded = new Uint8Array(paddedLength);
- var i, j, n;
-
- for (i = 0; i < length; ++i) {
- padded[i] = data[offset++];
- }
-
- padded[i++] = 0x80;
- n = paddedLength - 8;
-
- while (i < n) {
- padded[i++] = 0;
- }
-
- padded[i++] = length << 3 & 0xff;
- padded[i++] = length >> 5 & 0xff;
- padded[i++] = length >> 13 & 0xff;
- padded[i++] = length >> 21 & 0xff;
- padded[i++] = length >>> 29 & 0xff;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- var w = new Int32Array(16);
-
- for (i = 0; i < paddedLength;) {
- for (j = 0; j < 16; ++j, i += 4) {
- w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;
- }
-
- var a = h0,
- b = h1,
- c = h2,
- d = h3,
- f,
- g;
-
- for (j = 0; j < 64; ++j) {
- if (j < 16) {
- f = b & c | ~b & d;
- g = j;
- } else if (j < 32) {
- f = d & b | ~d & c;
- g = 5 * j + 1 & 15;
- } else if (j < 48) {
- f = b ^ c ^ d;
- g = 3 * j + 5 & 15;
- } else {
- f = c ^ (b | ~d);
- g = 7 * j & 15;
- }
-
- var tmp = d,
- rotateArg = a + f + k[j] + w[g] | 0,
- rotate = r[j];
- d = c;
- c = b;
- b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;
- a = tmp;
- }
-
- h0 = h0 + a | 0;
- h1 = h1 + b | 0;
- h2 = h2 + c | 0;
- h3 = h3 + d | 0;
- }
-
- return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);
- }
-
- return hash;
-}();
-
-exports.calculateMD5 = calculateMD5;
-
-var Word64 = function Word64Closure() {
- function Word64(highInteger, lowInteger) {
- this.high = highInteger | 0;
- this.low = lowInteger | 0;
- }
-
- Word64.prototype = {
- and: function Word64_and(word) {
- this.high &= word.high;
- this.low &= word.low;
- },
- xor: function Word64_xor(word) {
- this.high ^= word.high;
- this.low ^= word.low;
- },
- or: function Word64_or(word) {
- this.high |= word.high;
- this.low |= word.low;
- },
- shiftRight: function Word64_shiftRight(places) {
- if (places >= 32) {
- this.low = this.high >>> places - 32 | 0;
- this.high = 0;
- } else {
- this.low = this.low >>> places | this.high << 32 - places;
- this.high = this.high >>> places | 0;
- }
- },
- shiftLeft: function Word64_shiftLeft(places) {
- if (places >= 32) {
- this.high = this.low << places - 32;
- this.low = 0;
- } else {
- this.high = this.high << places | this.low >>> 32 - places;
- this.low = this.low << places;
- }
- },
- rotateRight: function Word64_rotateRight(places) {
- var low, high;
-
- if (places & 32) {
- high = this.low;
- low = this.high;
- } else {
- low = this.low;
- high = this.high;
- }
-
- places &= 31;
- this.low = low >>> places | high << 32 - places;
- this.high = high >>> places | low << 32 - places;
- },
- not: function Word64_not() {
- this.high = ~this.high;
- this.low = ~this.low;
- },
- add: function Word64_add(word) {
- var lowAdd = (this.low >>> 0) + (word.low >>> 0);
- var highAdd = (this.high >>> 0) + (word.high >>> 0);
-
- if (lowAdd > 0xffffffff) {
- highAdd += 1;
- }
-
- this.low = lowAdd | 0;
- this.high = highAdd | 0;
- },
- copyTo: function Word64_copyTo(bytes, offset) {
- bytes[offset] = this.high >>> 24 & 0xff;
- bytes[offset + 1] = this.high >> 16 & 0xff;
- bytes[offset + 2] = this.high >> 8 & 0xff;
- bytes[offset + 3] = this.high & 0xff;
- bytes[offset + 4] = this.low >>> 24 & 0xff;
- bytes[offset + 5] = this.low >> 16 & 0xff;
- bytes[offset + 6] = this.low >> 8 & 0xff;
- bytes[offset + 7] = this.low & 0xff;
- },
- assign: function Word64_assign(word) {
- this.high = word.high;
- this.low = word.low;
- }
- };
- return Word64;
-}();
-
-var calculateSHA256 = function calculateSHA256Closure() {
- function rotr(x, n) {
- return x >>> n | x << 32 - n;
- }
-
- function ch(x, y, z) {
- return x & y ^ ~x & z;
- }
-
- function maj(x, y, z) {
- return x & y ^ x & z ^ y & z;
- }
-
- function sigma(x) {
- return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);
- }
-
- function sigmaPrime(x) {
- return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);
- }
-
- function littleSigma(x) {
- return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;
- }
-
- function littleSigmaPrime(x) {
- return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;
- }
-
- var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
-
- function hash(data, offset, length) {
- var h0 = 0x6a09e667,
- h1 = 0xbb67ae85,
- h2 = 0x3c6ef372,
- h3 = 0xa54ff53a,
- h4 = 0x510e527f,
- h5 = 0x9b05688c,
- h6 = 0x1f83d9ab,
- h7 = 0x5be0cd19;
- var paddedLength = Math.ceil((length + 9) / 64) * 64;
- var padded = new Uint8Array(paddedLength);
- var i, j, n;
-
- for (i = 0; i < length; ++i) {
- padded[i] = data[offset++];
- }
-
- padded[i++] = 0x80;
- n = paddedLength - 8;
-
- while (i < n) {
- padded[i++] = 0;
- }
-
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = length >>> 29 & 0xff;
- padded[i++] = length >> 21 & 0xff;
- padded[i++] = length >> 13 & 0xff;
- padded[i++] = length >> 5 & 0xff;
- padded[i++] = length << 3 & 0xff;
- var w = new Uint32Array(64);
-
- for (i = 0; i < paddedLength;) {
- for (j = 0; j < 16; ++j) {
- w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
- i += 4;
- }
-
- for (j = 16; j < 64; ++j) {
- w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;
- }
-
- var a = h0,
- b = h1,
- c = h2,
- d = h3,
- e = h4,
- f = h5,
- g = h6,
- h = h7,
- t1,
- t2;
-
- for (j = 0; j < 64; ++j) {
- t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];
- t2 = sigma(a) + maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + t1 | 0;
- d = c;
- c = b;
- b = a;
- a = t1 + t2 | 0;
- }
-
- h0 = h0 + a | 0;
- h1 = h1 + b | 0;
- h2 = h2 + c | 0;
- h3 = h3 + d | 0;
- h4 = h4 + e | 0;
- h5 = h5 + f | 0;
- h6 = h6 + g | 0;
- h7 = h7 + h | 0;
- }
-
- return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);
- }
-
- return hash;
-}();
-
-exports.calculateSHA256 = calculateSHA256;
-
-var calculateSHA512 = function calculateSHA512Closure() {
- function ch(result, x, y, z, tmp) {
- result.assign(x);
- result.and(y);
- tmp.assign(x);
- tmp.not();
- tmp.and(z);
- result.xor(tmp);
- }
-
- function maj(result, x, y, z, tmp) {
- result.assign(x);
- result.and(y);
- tmp.assign(x);
- tmp.and(z);
- result.xor(tmp);
- tmp.assign(y);
- tmp.and(z);
- result.xor(tmp);
- }
-
- function sigma(result, x, tmp) {
- result.assign(x);
- result.rotateRight(28);
- tmp.assign(x);
- tmp.rotateRight(34);
- result.xor(tmp);
- tmp.assign(x);
- tmp.rotateRight(39);
- result.xor(tmp);
- }
-
- function sigmaPrime(result, x, tmp) {
- result.assign(x);
- result.rotateRight(14);
- tmp.assign(x);
- tmp.rotateRight(18);
- result.xor(tmp);
- tmp.assign(x);
- tmp.rotateRight(41);
- result.xor(tmp);
- }
-
- function littleSigma(result, x, tmp) {
- result.assign(x);
- result.rotateRight(1);
- tmp.assign(x);
- tmp.rotateRight(8);
- result.xor(tmp);
- tmp.assign(x);
- tmp.shiftRight(7);
- result.xor(tmp);
- }
-
- function littleSigmaPrime(result, x, tmp) {
- result.assign(x);
- result.rotateRight(19);
- tmp.assign(x);
- tmp.rotateRight(61);
- result.xor(tmp);
- tmp.assign(x);
- tmp.shiftRight(6);
- result.xor(tmp);
- }
-
- var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];
-
- function hash(data, offset, length, mode384) {
- mode384 = !!mode384;
- var h0, h1, h2, h3, h4, h5, h6, h7;
-
- if (!mode384) {
- h0 = new Word64(0x6a09e667, 0xf3bcc908);
- h1 = new Word64(0xbb67ae85, 0x84caa73b);
- h2 = new Word64(0x3c6ef372, 0xfe94f82b);
- h3 = new Word64(0xa54ff53a, 0x5f1d36f1);
- h4 = new Word64(0x510e527f, 0xade682d1);
- h5 = new Word64(0x9b05688c, 0x2b3e6c1f);
- h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);
- h7 = new Word64(0x5be0cd19, 0x137e2179);
- } else {
- h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);
- h1 = new Word64(0x629a292a, 0x367cd507);
- h2 = new Word64(0x9159015a, 0x3070dd17);
- h3 = new Word64(0x152fecd8, 0xf70e5939);
- h4 = new Word64(0x67332667, 0xffc00b31);
- h5 = new Word64(0x8eb44a87, 0x68581511);
- h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);
- h7 = new Word64(0x47b5481d, 0xbefa4fa4);
- }
-
- var paddedLength = Math.ceil((length + 17) / 128) * 128;
- var padded = new Uint8Array(paddedLength);
- var i, j, n;
-
- for (i = 0; i < length; ++i) {
- padded[i] = data[offset++];
- }
-
- padded[i++] = 0x80;
- n = paddedLength - 16;
-
- while (i < n) {
- padded[i++] = 0;
- }
-
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = length >>> 29 & 0xff;
- padded[i++] = length >> 21 & 0xff;
- padded[i++] = length >> 13 & 0xff;
- padded[i++] = length >> 5 & 0xff;
- padded[i++] = length << 3 & 0xff;
- var w = new Array(80);
-
- for (i = 0; i < 80; i++) {
- w[i] = new Word64(0, 0);
- }
-
- var a = new Word64(0, 0),
- b = new Word64(0, 0),
- c = new Word64(0, 0);
- var d = new Word64(0, 0),
- e = new Word64(0, 0),
- f = new Word64(0, 0);
- var g = new Word64(0, 0),
- h = new Word64(0, 0);
- var t1 = new Word64(0, 0),
- t2 = new Word64(0, 0);
- var tmp1 = new Word64(0, 0),
- tmp2 = new Word64(0, 0),
- tmp3;
-
- for (i = 0; i < paddedLength;) {
- for (j = 0; j < 16; ++j) {
- w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
- w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];
- i += 8;
- }
-
- for (j = 16; j < 80; ++j) {
- tmp3 = w[j];
- littleSigmaPrime(tmp3, w[j - 2], tmp2);
- tmp3.add(w[j - 7]);
- littleSigma(tmp1, w[j - 15], tmp2);
- tmp3.add(tmp1);
- tmp3.add(w[j - 16]);
- }
-
- a.assign(h0);
- b.assign(h1);
- c.assign(h2);
- d.assign(h3);
- e.assign(h4);
- f.assign(h5);
- g.assign(h6);
- h.assign(h7);
-
- for (j = 0; j < 80; ++j) {
- t1.assign(h);
- sigmaPrime(tmp1, e, tmp2);
- t1.add(tmp1);
- ch(tmp1, e, f, g, tmp2);
- t1.add(tmp1);
- t1.add(k[j]);
- t1.add(w[j]);
- sigma(t2, a, tmp2);
- maj(tmp1, a, b, c, tmp2);
- t2.add(tmp1);
- tmp3 = h;
- h = g;
- g = f;
- f = e;
- d.add(t1);
- e = d;
- d = c;
- c = b;
- b = a;
- tmp3.assign(t1);
- tmp3.add(t2);
- a = tmp3;
- }
-
- h0.add(a);
- h1.add(b);
- h2.add(c);
- h3.add(d);
- h4.add(e);
- h5.add(f);
- h6.add(g);
- h7.add(h);
- }
-
- var result;
-
- if (!mode384) {
- result = new Uint8Array(64);
- h0.copyTo(result, 0);
- h1.copyTo(result, 8);
- h2.copyTo(result, 16);
- h3.copyTo(result, 24);
- h4.copyTo(result, 32);
- h5.copyTo(result, 40);
- h6.copyTo(result, 48);
- h7.copyTo(result, 56);
- } else {
- result = new Uint8Array(48);
- h0.copyTo(result, 0);
- h1.copyTo(result, 8);
- h2.copyTo(result, 16);
- h3.copyTo(result, 24);
- h4.copyTo(result, 32);
- h5.copyTo(result, 40);
- }
-
- return result;
- }
-
- return hash;
-}();
-
-exports.calculateSHA512 = calculateSHA512;
-
-var calculateSHA384 = function calculateSHA384Closure() {
- function hash(data, offset, length) {
- return calculateSHA512(data, offset, length, true);
- }
-
- return hash;
-}();
-
-exports.calculateSHA384 = calculateSHA384;
-
-var NullCipher = function NullCipherClosure() {
- function NullCipher() {}
-
- NullCipher.prototype = {
- decryptBlock: function NullCipher_decryptBlock(data) {
- return data;
- }
- };
- return NullCipher;
-}();
-
-class AESBaseCipher {
- constructor() {
- if (this.constructor === AESBaseCipher) {
- (0, _util.unreachable)("Cannot initialize AESBaseCipher.");
- }
-
- this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);
- this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);
- this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
- this._mixCol = new Uint8Array(256);
-
- for (let i = 0; i < 256; i++) {
- if (i < 128) {
- this._mixCol[i] = i << 1;
- } else {
- this._mixCol[i] = i << 1 ^ 0x1b;
- }
- }
-
- this.buffer = new Uint8Array(16);
- this.bufferPosition = 0;
- }
-
- _expandKey(cipherKey) {
- (0, _util.unreachable)("Cannot call `_expandKey` on the base class");
- }
-
- _decrypt(input, key) {
- let t, u, v;
- const state = new Uint8Array(16);
- state.set(input);
-
- for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
- state[j] ^= key[k];
- }
-
- for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {
- t = state[13];
- state[13] = state[9];
- state[9] = state[5];
- state[5] = state[1];
- state[1] = t;
- t = state[14];
- u = state[10];
- state[14] = state[6];
- state[10] = state[2];
- state[6] = t;
- state[2] = u;
- t = state[15];
- u = state[11];
- v = state[7];
- state[15] = state[3];
- state[11] = t;
- state[7] = u;
- state[3] = v;
-
- for (let j = 0; j < 16; ++j) {
- state[j] = this._inv_s[state[j]];
- }
-
- for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
- state[j] ^= key[k];
- }
-
- for (let j = 0; j < 16; j += 4) {
- const s0 = this._mix[state[j]];
- const s1 = this._mix[state[j + 1]];
- const s2 = this._mix[state[j + 2]];
- const s3 = this._mix[state[j + 3]];
- t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;
- state[j] = t >>> 24 & 0xff;
- state[j + 1] = t >> 16 & 0xff;
- state[j + 2] = t >> 8 & 0xff;
- state[j + 3] = t & 0xff;
- }
- }
-
- t = state[13];
- state[13] = state[9];
- state[9] = state[5];
- state[5] = state[1];
- state[1] = t;
- t = state[14];
- u = state[10];
- state[14] = state[6];
- state[10] = state[2];
- state[6] = t;
- state[2] = u;
- t = state[15];
- u = state[11];
- v = state[7];
- state[15] = state[3];
- state[11] = t;
- state[7] = u;
- state[3] = v;
-
- for (let j = 0; j < 16; ++j) {
- state[j] = this._inv_s[state[j]];
- state[j] ^= key[j];
- }
-
- return state;
- }
-
- _encrypt(input, key) {
- const s = this._s;
- let t, u, v;
- const state = new Uint8Array(16);
- state.set(input);
-
- for (let j = 0; j < 16; ++j) {
- state[j] ^= key[j];
- }
-
- for (let i = 1; i < this._cyclesOfRepetition; i++) {
- for (let j = 0; j < 16; ++j) {
- state[j] = s[state[j]];
- }
-
- v = state[1];
- state[1] = state[5];
- state[5] = state[9];
- state[9] = state[13];
- state[13] = v;
- v = state[2];
- u = state[6];
- state[2] = state[10];
- state[6] = state[14];
- state[10] = v;
- state[14] = u;
- v = state[3];
- u = state[7];
- t = state[11];
- state[3] = state[15];
- state[7] = v;
- state[11] = u;
- state[15] = t;
-
- for (let j = 0; j < 16; j += 4) {
- const s0 = state[j + 0];
- const s1 = state[j + 1];
- const s2 = state[j + 2];
- const s3 = state[j + 3];
- t = s0 ^ s1 ^ s2 ^ s3;
- state[j + 0] ^= t ^ this._mixCol[s0 ^ s1];
- state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];
- state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];
- state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];
- }
-
- for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
- state[j] ^= key[k];
- }
- }
-
- for (let j = 0; j < 16; ++j) {
- state[j] = s[state[j]];
- }
-
- v = state[1];
- state[1] = state[5];
- state[5] = state[9];
- state[9] = state[13];
- state[13] = v;
- v = state[2];
- u = state[6];
- state[2] = state[10];
- state[6] = state[14];
- state[10] = v;
- state[14] = u;
- v = state[3];
- u = state[7];
- t = state[11];
- state[3] = state[15];
- state[7] = v;
- state[11] = u;
- state[15] = t;
-
- for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
- state[j] ^= key[k];
- }
-
- return state;
- }
-
- _decryptBlock2(data, finalize) {
- const sourceLength = data.length;
- let buffer = this.buffer,
- bufferLength = this.bufferPosition;
- const result = [];
- let iv = this.iv;
-
- for (let i = 0; i < sourceLength; ++i) {
- buffer[bufferLength] = data[i];
- ++bufferLength;
-
- if (bufferLength < 16) {
- continue;
- }
-
- const plain = this._decrypt(buffer, this._key);
-
- for (let j = 0; j < 16; ++j) {
- plain[j] ^= iv[j];
- }
-
- iv = buffer;
- result.push(plain);
- buffer = new Uint8Array(16);
- bufferLength = 0;
- }
-
- this.buffer = buffer;
- this.bufferLength = bufferLength;
- this.iv = iv;
-
- if (result.length === 0) {
- return new Uint8Array(0);
- }
-
- let outputLength = 16 * result.length;
-
- if (finalize) {
- const lastBlock = result[result.length - 1];
- let psLen = lastBlock[15];
-
- if (psLen <= 16) {
- for (let i = 15, ii = 16 - psLen; i >= ii; --i) {
- if (lastBlock[i] !== psLen) {
- psLen = 0;
- break;
- }
- }
-
- outputLength -= psLen;
- result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
- }
- }
-
- const output = new Uint8Array(outputLength);
-
- for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
- output.set(result[i], j);
- }
-
- return output;
- }
-
- decryptBlock(data, finalize, iv = null) {
- const sourceLength = data.length;
- const buffer = this.buffer;
- let bufferLength = this.bufferPosition;
-
- if (iv) {
- this.iv = iv;
- } else {
- for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {
- buffer[bufferLength] = data[i];
- }
-
- if (bufferLength < 16) {
- this.bufferLength = bufferLength;
- return new Uint8Array(0);
- }
-
- this.iv = buffer;
- data = data.subarray(16);
- }
-
- this.buffer = new Uint8Array(16);
- this.bufferLength = 0;
- this.decryptBlock = this._decryptBlock2;
- return this.decryptBlock(data, finalize);
- }
-
- encrypt(data, iv) {
- const sourceLength = data.length;
- let buffer = this.buffer,
- bufferLength = this.bufferPosition;
- const result = [];
-
- if (!iv) {
- iv = new Uint8Array(16);
- }
-
- for (let i = 0; i < sourceLength; ++i) {
- buffer[bufferLength] = data[i];
- ++bufferLength;
-
- if (bufferLength < 16) {
- continue;
- }
-
- for (let j = 0; j < 16; ++j) {
- buffer[j] ^= iv[j];
- }
-
- const cipher = this._encrypt(buffer, this._key);
-
- iv = cipher;
- result.push(cipher);
- buffer = new Uint8Array(16);
- bufferLength = 0;
- }
-
- this.buffer = buffer;
- this.bufferLength = bufferLength;
- this.iv = iv;
-
- if (result.length === 0) {
- return new Uint8Array(0);
- }
-
- const outputLength = 16 * result.length;
- const output = new Uint8Array(outputLength);
-
- for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
- output.set(result[i], j);
- }
-
- return output;
- }
-
-}
-
-class AES128Cipher extends AESBaseCipher {
- constructor(key) {
- super();
- this._cyclesOfRepetition = 10;
- this._keySize = 160;
- this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);
- this._key = this._expandKey(key);
- }
-
- _expandKey(cipherKey) {
- const b = 176;
- const s = this._s;
- const rcon = this._rcon;
- const result = new Uint8Array(b);
- result.set(cipherKey);
-
- for (let j = 16, i = 1; j < b; ++i) {
- let t1 = result[j - 3];
- let t2 = result[j - 2];
- let t3 = result[j - 1];
- let t4 = result[j - 4];
- t1 = s[t1];
- t2 = s[t2];
- t3 = s[t3];
- t4 = s[t4];
- t1 = t1 ^ rcon[i];
-
- for (let n = 0; n < 4; ++n) {
- result[j] = t1 ^= result[j - 16];
- j++;
- result[j] = t2 ^= result[j - 16];
- j++;
- result[j] = t3 ^= result[j - 16];
- j++;
- result[j] = t4 ^= result[j - 16];
- j++;
- }
- }
-
- return result;
- }
-
-}
-
-exports.AES128Cipher = AES128Cipher;
-
-class AES256Cipher extends AESBaseCipher {
- constructor(key) {
- super();
- this._cyclesOfRepetition = 14;
- this._keySize = 224;
- this._key = this._expandKey(key);
- }
-
- _expandKey(cipherKey) {
- const b = 240;
- const s = this._s;
- const result = new Uint8Array(b);
- result.set(cipherKey);
- let r = 1;
- let t1, t2, t3, t4;
-
- for (let j = 32, i = 1; j < b; ++i) {
- if (j % 32 === 16) {
- t1 = s[t1];
- t2 = s[t2];
- t3 = s[t3];
- t4 = s[t4];
- } else if (j % 32 === 0) {
- t1 = result[j - 3];
- t2 = result[j - 2];
- t3 = result[j - 1];
- t4 = result[j - 4];
- t1 = s[t1];
- t2 = s[t2];
- t3 = s[t3];
- t4 = s[t4];
- t1 = t1 ^ r;
-
- if ((r <<= 1) >= 256) {
- r = (r ^ 0x1b) & 0xff;
- }
- }
-
- for (let n = 0; n < 4; ++n) {
- result[j] = t1 ^= result[j - 32];
- j++;
- result[j] = t2 ^= result[j - 32];
- j++;
- result[j] = t3 ^= result[j - 32];
- j++;
- result[j] = t4 ^= result[j - 32];
- j++;
- }
- }
-
- return result;
- }
-
-}
-
-exports.AES256Cipher = AES256Cipher;
-
-var PDF17 = function PDF17Closure() {
- function compareByteArrays(array1, array2) {
- if (array1.length !== array2.length) {
- return false;
- }
-
- for (var i = 0; i < array1.length; i++) {
- if (array1[i] !== array2[i]) {
- return false;
- }
- }
-
- return true;
- }
-
- function PDF17() {}
-
- PDF17.prototype = {
- checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerValidationSalt, password.length);
- hashData.set(userBytes, password.length + ownerValidationSalt.length);
- var result = calculateSHA256(hashData, 0, hashData.length);
- return compareByteArrays(result, ownerPassword);
- },
- checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userValidationSalt, password.length);
- var result = calculateSHA256(hashData, 0, hashData.length);
- return compareByteArrays(result, userPassword);
- },
- getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerKeySalt, password.length);
- hashData.set(userBytes, password.length + ownerKeySalt.length);
- var key = calculateSHA256(hashData, 0, hashData.length);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
- },
- getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userKeySalt, password.length);
- var key = calculateSHA256(hashData, 0, hashData.length);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
- }
- };
- return PDF17;
-}();
-
-exports.PDF17 = PDF17;
-
-var PDF20 = function PDF20Closure() {
- function concatArrays(array1, array2) {
- var t = new Uint8Array(array1.length + array2.length);
- t.set(array1, 0);
- t.set(array2, array1.length);
- return t;
- }
-
- function calculatePDF20Hash(password, input, userBytes) {
- var k = calculateSHA256(input, 0, input.length).subarray(0, 32);
- var e = [0];
- var i = 0;
-
- while (i < 64 || e[e.length - 1] > i - 32) {
- var arrayLength = password.length + k.length + userBytes.length;
- var k1 = new Uint8Array(arrayLength * 64);
- var array = concatArrays(password, k);
- array = concatArrays(array, userBytes);
-
- for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {
- k1.set(array, pos);
- }
-
- var cipher = new AES128Cipher(k.subarray(0, 16));
- e = cipher.encrypt(k1, k.subarray(16, 32));
- var remainder = 0;
-
- for (var z = 0; z < 16; z++) {
- remainder *= 256 % 3;
- remainder %= 3;
- remainder += (e[z] >>> 0) % 3;
- remainder %= 3;
- }
-
- if (remainder === 0) {
- k = calculateSHA256(e, 0, e.length);
- } else if (remainder === 1) {
- k = calculateSHA384(e, 0, e.length);
- } else if (remainder === 2) {
- k = calculateSHA512(e, 0, e.length);
- }
-
- i++;
- }
-
- return k.subarray(0, 32);
- }
-
- function PDF20() {}
-
- function compareByteArrays(array1, array2) {
- if (array1.length !== array2.length) {
- return false;
- }
-
- for (var i = 0; i < array1.length; i++) {
- if (array1[i] !== array2[i]) {
- return false;
- }
- }
-
- return true;
- }
-
- PDF20.prototype = {
- hash: function PDF20_hash(password, concatBytes, userBytes) {
- return calculatePDF20Hash(password, concatBytes, userBytes);
- },
- checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerValidationSalt, password.length);
- hashData.set(userBytes, password.length + ownerValidationSalt.length);
- var result = calculatePDF20Hash(password, hashData, userBytes);
- return compareByteArrays(result, ownerPassword);
- },
- checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userValidationSalt, password.length);
- var result = calculatePDF20Hash(password, hashData, []);
- return compareByteArrays(result, userPassword);
- },
- getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerKeySalt, password.length);
- hashData.set(userBytes, password.length + ownerKeySalt.length);
- var key = calculatePDF20Hash(password, hashData, userBytes);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
- },
- getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userKeySalt, password.length);
- var key = calculatePDF20Hash(password, hashData, []);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
- }
- };
- return PDF20;
-}();
-
-exports.PDF20 = PDF20;
-
-var CipherTransform = function CipherTransformClosure() {
- function CipherTransform(stringCipherConstructor, streamCipherConstructor) {
- this.StringCipherConstructor = stringCipherConstructor;
- this.StreamCipherConstructor = streamCipherConstructor;
- }
-
- CipherTransform.prototype = {
- createStream: function CipherTransform_createStream(stream, length) {
- var cipher = new this.StreamCipherConstructor();
- return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {
- return cipher.decryptBlock(data, finalize);
- });
- },
- decryptString: function CipherTransform_decryptString(s) {
- var cipher = new this.StringCipherConstructor();
- var data = (0, _util.stringToBytes)(s);
- data = cipher.decryptBlock(data, true);
- return (0, _util.bytesToString)(data);
- }
- };
- return CipherTransform;
-}();
-
-var CipherTransformFactory = function CipherTransformFactoryClosure() {
- var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
-
- function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {
- if (password) {
- var passwordLength = Math.min(127, password.length);
- password = password.subarray(0, passwordLength);
- } else {
- password = [];
- }
-
- var pdfAlgorithm;
-
- if (revision === 6) {
- pdfAlgorithm = new PDF20();
- } else {
- pdfAlgorithm = new PDF17();
- }
-
- if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {
- return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);
- } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {
- return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);
- }
-
- return null;
- }
-
- function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {
- var hashDataSize = 40 + ownerPassword.length + fileId.length;
- var hashData = new Uint8Array(hashDataSize),
- i = 0,
- j,
- n;
-
- if (password) {
- n = Math.min(32, password.length);
-
- for (; i < n; ++i) {
- hashData[i] = password[i];
- }
- }
-
- j = 0;
-
- while (i < 32) {
- hashData[i++] = defaultPasswordBytes[j++];
- }
-
- for (j = 0, n = ownerPassword.length; j < n; ++j) {
- hashData[i++] = ownerPassword[j];
- }
-
- hashData[i++] = flags & 0xff;
- hashData[i++] = flags >> 8 & 0xff;
- hashData[i++] = flags >> 16 & 0xff;
- hashData[i++] = flags >>> 24 & 0xff;
-
- for (j = 0, n = fileId.length; j < n; ++j) {
- hashData[i++] = fileId[j];
- }
-
- if (revision >= 4 && !encryptMetadata) {
- hashData[i++] = 0xff;
- hashData[i++] = 0xff;
- hashData[i++] = 0xff;
- hashData[i++] = 0xff;
- }
-
- var hash = calculateMD5(hashData, 0, i);
- var keyLengthInBytes = keyLength >> 3;
-
- if (revision >= 3) {
- for (j = 0; j < 50; ++j) {
- hash = calculateMD5(hash, 0, keyLengthInBytes);
- }
- }
-
- var encryptionKey = hash.subarray(0, keyLengthInBytes);
- var cipher, checkData;
-
- if (revision >= 3) {
- for (i = 0; i < 32; ++i) {
- hashData[i] = defaultPasswordBytes[i];
- }
-
- for (j = 0, n = fileId.length; j < n; ++j) {
- hashData[i++] = fileId[j];
- }
-
- cipher = new ARCFourCipher(encryptionKey);
- checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
- n = encryptionKey.length;
- var derivedKey = new Uint8Array(n),
- k;
-
- for (j = 1; j <= 19; ++j) {
- for (k = 0; k < n; ++k) {
- derivedKey[k] = encryptionKey[k] ^ j;
- }
-
- cipher = new ARCFourCipher(derivedKey);
- checkData = cipher.encryptBlock(checkData);
- }
-
- for (j = 0, n = checkData.length; j < n; ++j) {
- if (userPassword[j] !== checkData[j]) {
- return null;
- }
- }
- } else {
- cipher = new ARCFourCipher(encryptionKey);
- checkData = cipher.encryptBlock(defaultPasswordBytes);
-
- for (j = 0, n = checkData.length; j < n; ++j) {
- if (userPassword[j] !== checkData[j]) {
- return null;
- }
- }
- }
-
- return encryptionKey;
- }
-
- function decodeUserPassword(password, ownerPassword, revision, keyLength) {
- var hashData = new Uint8Array(32),
- i = 0,
- j,
- n;
- n = Math.min(32, password.length);
-
- for (; i < n; ++i) {
- hashData[i] = password[i];
- }
-
- j = 0;
-
- while (i < 32) {
- hashData[i++] = defaultPasswordBytes[j++];
- }
-
- var hash = calculateMD5(hashData, 0, i);
- var keyLengthInBytes = keyLength >> 3;
-
- if (revision >= 3) {
- for (j = 0; j < 50; ++j) {
- hash = calculateMD5(hash, 0, hash.length);
- }
- }
-
- var cipher, userPassword;
-
- if (revision >= 3) {
- userPassword = ownerPassword;
- var derivedKey = new Uint8Array(keyLengthInBytes),
- k;
-
- for (j = 19; j >= 0; j--) {
- for (k = 0; k < keyLengthInBytes; ++k) {
- derivedKey[k] = hash[k] ^ j;
- }
-
- cipher = new ARCFourCipher(derivedKey);
- userPassword = cipher.encryptBlock(userPassword);
- }
- } else {
- cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
- userPassword = cipher.encryptBlock(ownerPassword);
- }
-
- return userPassword;
- }
-
- var identityName = _primitives.Name.get("Identity");
-
- function CipherTransformFactory(dict, fileId, password) {
- var filter = dict.get("Filter");
-
- if (!(0, _primitives.isName)(filter, "Standard")) {
- throw new _util.FormatError("unknown encryption method");
- }
-
- this.dict = dict;
- var algorithm = dict.get("V");
-
- if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {
- throw new _util.FormatError("unsupported encryption algorithm");
- }
-
- this.algorithm = algorithm;
- var keyLength = dict.get("Length");
-
- if (!keyLength) {
- if (algorithm <= 3) {
- keyLength = 40;
- } else {
- var cfDict = dict.get("CF");
- var streamCryptoName = dict.get("StmF");
-
- if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {
- cfDict.suppressEncryption = true;
- var handlerDict = cfDict.get(streamCryptoName.name);
- keyLength = handlerDict && handlerDict.get("Length") || 128;
-
- if (keyLength < 40) {
- keyLength <<= 3;
- }
- }
- }
- }
-
- if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {
- throw new _util.FormatError("invalid key length");
- }
-
- var ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32);
- var userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32);
- var flags = dict.get("P");
- var revision = dict.get("R");
- var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false;
- this.encryptMetadata = encryptMetadata;
- var fileIdBytes = (0, _util.stringToBytes)(fileId);
- var passwordBytes;
-
- if (password) {
- if (revision === 6) {
- try {
- password = (0, _util.utf8StringToString)(password);
- } catch (ex) {
- (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password.");
- }
- }
-
- passwordBytes = (0, _util.stringToBytes)(password);
- }
-
- var encryptionKey;
-
- if (algorithm !== 5) {
- encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
- } else {
- var ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40);
- var ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48);
- var uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48);
- var userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40);
- var userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48);
- var ownerEncryption = (0, _util.stringToBytes)(dict.get("OE"));
- var userEncryption = (0, _util.stringToBytes)(dict.get("UE"));
- var perms = (0, _util.stringToBytes)(dict.get("Perms"));
- encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);
- }
-
- if (!encryptionKey && !password) {
- throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD);
- } else if (!encryptionKey && password) {
- var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);
- encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
- }
-
- if (!encryptionKey) {
- throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD);
- }
-
- this.encryptionKey = encryptionKey;
-
- if (algorithm >= 4) {
- var cf = dict.get("CF");
-
- if ((0, _primitives.isDict)(cf)) {
- cf.suppressEncryption = true;
- }
-
- this.cf = cf;
- this.stmf = dict.get("StmF") || identityName;
- this.strf = dict.get("StrF") || identityName;
- this.eff = dict.get("EFF") || this.stmf;
- }
- }
-
- function buildObjectKey(num, gen, encryptionKey, isAes) {
- var key = new Uint8Array(encryptionKey.length + 9),
- i,
- n;
-
- for (i = 0, n = encryptionKey.length; i < n; ++i) {
- key[i] = encryptionKey[i];
- }
-
- key[i++] = num & 0xff;
- key[i++] = num >> 8 & 0xff;
- key[i++] = num >> 16 & 0xff;
- key[i++] = gen & 0xff;
- key[i++] = gen >> 8 & 0xff;
-
- if (isAes) {
- key[i++] = 0x73;
- key[i++] = 0x41;
- key[i++] = 0x6c;
- key[i++] = 0x54;
- }
-
- var hash = calculateMD5(key, 0, i);
- return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
- }
-
- function buildCipherConstructor(cf, name, num, gen, key) {
- if (!(0, _primitives.isName)(name)) {
- throw new _util.FormatError("Invalid crypt filter name.");
- }
-
- var cryptFilter = cf.get(name.name);
- var cfm;
-
- if (cryptFilter !== null && cryptFilter !== undefined) {
- cfm = cryptFilter.get("CFM");
- }
-
- if (!cfm || cfm.name === "None") {
- return function cipherTransformFactoryBuildCipherConstructorNone() {
- return new NullCipher();
- };
- }
-
- if (cfm.name === "V2") {
- return function cipherTransformFactoryBuildCipherConstructorV2() {
- return new ARCFourCipher(buildObjectKey(num, gen, key, false));
- };
- }
-
- if (cfm.name === "AESV2") {
- return function cipherTransformFactoryBuildCipherConstructorAESV2() {
- return new AES128Cipher(buildObjectKey(num, gen, key, true));
- };
- }
-
- if (cfm.name === "AESV3") {
- return function cipherTransformFactoryBuildCipherConstructorAESV3() {
- return new AES256Cipher(key);
- };
- }
-
- throw new _util.FormatError("Unknown crypto method");
- }
-
- CipherTransformFactory.prototype = {
- createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) {
- if (this.algorithm === 4 || this.algorithm === 5) {
- return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey));
- }
-
- var key = buildObjectKey(num, gen, this.encryptionKey, false);
-
- var cipherConstructor = function buildCipherCipherConstructor() {
- return new ARCFourCipher(key);
- };
-
- return new CipherTransform(cipherConstructor, cipherConstructor);
- }
- };
- return CipherTransformFactory;
-}();
-
-exports.CipherTransformFactory = CipherTransformFactory;
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.ColorSpace = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
- const COMPONENTS = 3;
- alpha01 = alpha01 !== 1 ? 0 : alpha01;
- const xRatio = w1 / w2;
- const yRatio = h1 / h2;
- let newIndex = 0,
- oldIndex;
- const xScaled = new Uint16Array(w2);
- const w1Scanline = w1 * COMPONENTS;
-
- for (let i = 0; i < w2; i++) {
- xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;
- }
-
- for (let i = 0; i < h2; i++) {
- const py = Math.floor(i * yRatio) * w1Scanline;
-
- for (let j = 0; j < w2; j++) {
- oldIndex = py + xScaled[j];
- dest[newIndex++] = src[oldIndex++];
- dest[newIndex++] = src[oldIndex++];
- dest[newIndex++] = src[oldIndex++];
- newIndex += alpha01;
- }
- }
-}
-
-class ColorSpace {
- constructor(name, numComps) {
- if (this.constructor === ColorSpace) {
- (0, _util.unreachable)("Cannot initialize ColorSpace.");
- }
-
- this.name = name;
- this.numComps = numComps;
- }
-
- getRgb(src, srcOffset) {
- const rgb = new Uint8ClampedArray(3);
- this.getRgbItem(src, srcOffset, rgb, 0);
- return rgb;
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- (0, _util.unreachable)("Should not call ColorSpace.getRgbItem");
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer");
- }
-
- getOutputLength(inputLength, alpha01) {
- (0, _util.unreachable)("Should not call ColorSpace.getOutputLength");
- }
-
- isPassthrough(bits) {
- return false;
- }
-
- isDefaultDecode(decodeMap, bpc) {
- return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
- }
-
- fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {
- const count = originalWidth * originalHeight;
- let rgbBuf = null;
- const numComponentColors = 1 << bpc;
- const needsResizing = originalHeight !== height || originalWidth !== width;
-
- if (this.isPassthrough(bpc)) {
- rgbBuf = comps;
- } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") {
- const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);
-
- for (let i = 0; i < numComponentColors; i++) {
- allColors[i] = i;
- }
-
- const colorMap = new Uint8ClampedArray(numComponentColors * 3);
- this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);
-
- if (!needsResizing) {
- let destPos = 0;
-
- for (let i = 0; i < count; ++i) {
- const key = comps[i] * 3;
- dest[destPos++] = colorMap[key];
- dest[destPos++] = colorMap[key + 1];
- dest[destPos++] = colorMap[key + 2];
- destPos += alpha01;
- }
- } else {
- rgbBuf = new Uint8Array(count * 3);
- let rgbPos = 0;
-
- for (let i = 0; i < count; ++i) {
- const key = comps[i] * 3;
- rgbBuf[rgbPos++] = colorMap[key];
- rgbBuf[rgbPos++] = colorMap[key + 1];
- rgbBuf[rgbPos++] = colorMap[key + 2];
- }
- }
- } else {
- if (!needsResizing) {
- this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);
- } else {
- rgbBuf = new Uint8ClampedArray(count * 3);
- this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);
- }
- }
-
- if (rgbBuf) {
- if (needsResizing) {
- resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);
- } else {
- let destPos = 0,
- rgbPos = 0;
-
- for (let i = 0, ii = width * actualHeight; i < ii; i++) {
- dest[destPos++] = rgbBuf[rgbPos++];
- dest[destPos++] = rgbBuf[rgbPos++];
- dest[destPos++] = rgbBuf[rgbPos++];
- destPos += alpha01;
- }
- }
- }
- }
-
- get usesZeroToOneRange() {
- return (0, _util.shadow)(this, "usesZeroToOneRange", true);
- }
-
- static parse(cs, xref, res, pdfFunctionFactory) {
- const IR = this.parseToIR(cs, xref, res, pdfFunctionFactory);
- return this.fromIR(IR);
- }
-
- static fromIR(IR) {
- const name = Array.isArray(IR) ? IR[0] : IR;
- let whitePoint, blackPoint, gamma;
-
- switch (name) {
- case "DeviceGrayCS":
- return this.singletons.gray;
-
- case "DeviceRgbCS":
- return this.singletons.rgb;
-
- case "DeviceCmykCS":
- return this.singletons.cmyk;
-
- case "CalGrayCS":
- whitePoint = IR[1];
- blackPoint = IR[2];
- gamma = IR[3];
- return new CalGrayCS(whitePoint, blackPoint, gamma);
-
- case "CalRGBCS":
- whitePoint = IR[1];
- blackPoint = IR[2];
- gamma = IR[3];
- const matrix = IR[4];
- return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
-
- case "PatternCS":
- let basePatternCS = IR[1];
-
- if (basePatternCS) {
- basePatternCS = this.fromIR(basePatternCS);
- }
-
- return new PatternCS(basePatternCS);
-
- case "IndexedCS":
- const baseIndexedCS = IR[1];
- const hiVal = IR[2];
- const lookup = IR[3];
- return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup);
-
- case "AlternateCS":
- const numComps = IR[1];
- const alt = IR[2];
- const tintFn = IR[3];
- return new AlternateCS(numComps, this.fromIR(alt), tintFn);
-
- case "LabCS":
- whitePoint = IR[1];
- blackPoint = IR[2];
- const range = IR[3];
- return new LabCS(whitePoint, blackPoint, range);
-
- default:
- throw new _util.FormatError(`Unknown colorspace name: ${name}`);
- }
- }
-
- static parseToIR(cs, xref, res = null, pdfFunctionFactory) {
- cs = xref.fetchIfRef(cs);
-
- if ((0, _primitives.isName)(cs)) {
- switch (cs.name) {
- case "DeviceGray":
- case "G":
- return "DeviceGrayCS";
-
- case "DeviceRGB":
- case "RGB":
- return "DeviceRgbCS";
-
- case "DeviceCMYK":
- case "CMYK":
- return "DeviceCmykCS";
-
- case "Pattern":
- return ["PatternCS", null];
-
- default:
- if ((0, _primitives.isDict)(res)) {
- const colorSpaces = res.get("ColorSpace");
-
- if ((0, _primitives.isDict)(colorSpaces)) {
- const resCS = colorSpaces.get(cs.name);
-
- if (resCS) {
- if ((0, _primitives.isName)(resCS)) {
- return this.parseToIR(resCS, xref, res, pdfFunctionFactory);
- }
-
- cs = resCS;
- break;
- }
- }
- }
-
- throw new _util.FormatError(`unrecognized colorspace ${cs.name}`);
- }
- }
-
- if (Array.isArray(cs)) {
- const mode = xref.fetchIfRef(cs[0]).name;
- let numComps, params, alt, whitePoint, blackPoint, gamma;
-
- switch (mode) {
- case "DeviceGray":
- case "G":
- return "DeviceGrayCS";
-
- case "DeviceRGB":
- case "RGB":
- return "DeviceRgbCS";
-
- case "DeviceCMYK":
- case "CMYK":
- return "DeviceCmykCS";
-
- case "CalGray":
- params = xref.fetchIfRef(cs[1]);
- whitePoint = params.getArray("WhitePoint");
- blackPoint = params.getArray("BlackPoint");
- gamma = params.get("Gamma");
- return ["CalGrayCS", whitePoint, blackPoint, gamma];
-
- case "CalRGB":
- params = xref.fetchIfRef(cs[1]);
- whitePoint = params.getArray("WhitePoint");
- blackPoint = params.getArray("BlackPoint");
- gamma = params.getArray("Gamma");
- const matrix = params.getArray("Matrix");
- return ["CalRGBCS", whitePoint, blackPoint, gamma, matrix];
-
- case "ICCBased":
- const stream = xref.fetchIfRef(cs[1]);
- const dict = stream.dict;
- numComps = dict.get("N");
- alt = dict.get("Alternate");
-
- if (alt) {
- const altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory);
- const altCS = this.fromIR(altIR, pdfFunctionFactory);
-
- if (altCS.numComps === numComps) {
- return altIR;
- }
-
- (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.");
- }
-
- if (numComps === 1) {
- return "DeviceGrayCS";
- } else if (numComps === 3) {
- return "DeviceRgbCS";
- } else if (numComps === 4) {
- return "DeviceCmykCS";
- }
-
- break;
-
- case "Pattern":
- let basePatternCS = cs[1] || null;
-
- if (basePatternCS) {
- basePatternCS = this.parseToIR(basePatternCS, xref, res, pdfFunctionFactory);
- }
-
- return ["PatternCS", basePatternCS];
-
- case "Indexed":
- case "I":
- const baseIndexedCS = this.parseToIR(cs[1], xref, res, pdfFunctionFactory);
- const hiVal = xref.fetchIfRef(cs[2]) + 1;
- let lookup = xref.fetchIfRef(cs[3]);
-
- if ((0, _primitives.isStream)(lookup)) {
- lookup = lookup.getBytes();
- }
-
- return ["IndexedCS", baseIndexedCS, hiVal, lookup];
-
- case "Separation":
- case "DeviceN":
- const name = xref.fetchIfRef(cs[1]);
- numComps = Array.isArray(name) ? name.length : 1;
- alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory);
- const tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));
- return ["AlternateCS", numComps, alt, tintFn];
-
- case "Lab":
- params = xref.fetchIfRef(cs[1]);
- whitePoint = params.getArray("WhitePoint");
- blackPoint = params.getArray("BlackPoint");
- const range = params.getArray("Range");
- return ["LabCS", whitePoint, blackPoint, range];
-
- default:
- throw new _util.FormatError(`unimplemented color space object "${mode}"`);
- }
- }
-
- throw new _util.FormatError(`unrecognized color space object: "${cs}"`);
- }
-
- static isDefaultDecode(decode, numComps) {
- if (!Array.isArray(decode)) {
- return true;
- }
-
- if (numComps * 2 !== decode.length) {
- (0, _util.warn)("The decode map is not the correct length");
- return true;
- }
-
- for (let i = 0, ii = decode.length; i < ii; i += 2) {
- if (decode[i] !== 0 || decode[i + 1] !== 1) {
- return false;
- }
- }
-
- return true;
- }
-
- static get singletons() {
- return (0, _util.shadow)(this, "singletons", {
- get gray() {
- return (0, _util.shadow)(this, "gray", new DeviceGrayCS());
- },
-
- get rgb() {
- return (0, _util.shadow)(this, "rgb", new DeviceRgbCS());
- },
-
- get cmyk() {
- return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS());
- }
-
- });
- }
-
-}
-
-exports.ColorSpace = ColorSpace;
-
-class AlternateCS extends ColorSpace {
- constructor(numComps, base, tintFn) {
- super("Alternate", numComps);
- this.base = base;
- this.tintFn = tintFn;
- this.tmpBuf = new Float32Array(base.numComps);
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- const tmpBuf = this.tmpBuf;
- this.tintFn(src, srcOffset, tmpBuf, 0);
- this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- const tintFn = this.tintFn;
- const base = this.base;
- const scale = 1 / ((1 << bits) - 1);
- const baseNumComps = base.numComps;
- const usesZeroToOneRange = base.usesZeroToOneRange;
- const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;
- let pos = isPassthrough ? destOffset : 0;
- const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);
- const numComps = this.numComps;
- const scaled = new Float32Array(numComps);
- const tinted = new Float32Array(baseNumComps);
- let i, j;
-
- for (i = 0; i < count; i++) {
- for (j = 0; j < numComps; j++) {
- scaled[j] = src[srcOffset++] * scale;
- }
-
- tintFn(scaled, 0, tinted, 0);
-
- if (usesZeroToOneRange) {
- for (j = 0; j < baseNumComps; j++) {
- baseBuf[pos++] = tinted[j] * 255;
- }
- } else {
- base.getRgbItem(tinted, 0, baseBuf, pos);
- pos += baseNumComps;
- }
- }
-
- if (!isPassthrough) {
- base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);
- }
-
-}
-
-class PatternCS extends ColorSpace {
- constructor(baseCS) {
- super("Pattern", null);
- this.base = baseCS;
- }
-
- isDefaultDecode(decodeMap, bpc) {
- (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode");
- }
-
-}
-
-class IndexedCS extends ColorSpace {
- constructor(base, highVal, lookup) {
- super("Indexed", 1);
- this.base = base;
- this.highVal = highVal;
- const baseNumComps = base.numComps;
- const length = baseNumComps * highVal;
-
- if ((0, _primitives.isStream)(lookup)) {
- this.lookup = new Uint8Array(length);
- const bytes = lookup.getBytes(length);
- this.lookup.set(bytes);
- } else if ((0, _util.isString)(lookup)) {
- this.lookup = new Uint8Array(length);
-
- for (let i = 0; i < length; ++i) {
- this.lookup[i] = lookup.charCodeAt(i);
- }
- } else if (lookup instanceof Uint8Array) {
- this.lookup = lookup;
- } else {
- throw new _util.FormatError(`Unrecognized lookup table: ${lookup}`);
- }
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- const numComps = this.base.numComps;
- const start = src[srcOffset] * numComps;
- this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- const base = this.base;
- const numComps = base.numComps;
- const outputDelta = base.getOutputLength(numComps, alpha01);
- const lookup = this.lookup;
-
- for (let i = 0; i < count; ++i) {
- const lookupPos = src[srcOffset++] * numComps;
- base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
- destOffset += outputDelta;
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
- }
-
- isDefaultDecode(decodeMap, bpc) {
- if (!Array.isArray(decodeMap)) {
- return true;
- }
-
- if (decodeMap.length !== 2) {
- (0, _util.warn)("Decode map length is not correct");
- return true;
- }
-
- if (!Number.isInteger(bpc) || bpc < 1) {
- (0, _util.warn)("Bits per component is not correct");
- return true;
- }
-
- return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1;
- }
-
-}
-
-class DeviceGrayCS extends ColorSpace {
- constructor() {
- super("DeviceGray", 1);
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- const c = src[srcOffset] * 255;
- dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- const scale = 255 / ((1 << bits) - 1);
- let j = srcOffset,
- q = destOffset;
-
- for (let i = 0; i < count; ++i) {
- const c = scale * src[j++];
- dest[q++] = c;
- dest[q++] = c;
- dest[q++] = c;
- q += alpha01;
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return inputLength * (3 + alpha01);
- }
-
-}
-
-class DeviceRgbCS extends ColorSpace {
- constructor() {
- super("DeviceRGB", 3);
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- dest[destOffset] = src[srcOffset] * 255;
- dest[destOffset + 1] = src[srcOffset + 1] * 255;
- dest[destOffset + 2] = src[srcOffset + 2] * 255;
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- if (bits === 8 && alpha01 === 0) {
- dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
- return;
- }
-
- const scale = 255 / ((1 << bits) - 1);
- let j = srcOffset,
- q = destOffset;
-
- for (let i = 0; i < count; ++i) {
- dest[q++] = scale * src[j++];
- dest[q++] = scale * src[j++];
- dest[q++] = scale * src[j++];
- q += alpha01;
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return inputLength * (3 + alpha01) / 3 | 0;
- }
-
- isPassthrough(bits) {
- return bits === 8;
- }
-
-}
-
-const DeviceCmykCS = function DeviceCmykCSClosure() {
- function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
- const c = src[srcOffset] * srcScale;
- const m = src[srcOffset + 1] * srcScale;
- const y = src[srcOffset + 2] * srcScale;
- const k = src[srcOffset + 3] * srcScale;
- dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747);
- dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578);
- dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367);
- }
-
- class DeviceCmykCS extends ColorSpace {
- constructor() {
- super("DeviceCMYK", 4);
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- convertToRgb(src, srcOffset, 1, dest, destOffset);
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- const scale = 1 / ((1 << bits) - 1);
-
- for (let i = 0; i < count; i++) {
- convertToRgb(src, srcOffset, scale, dest, destOffset);
- srcOffset += 4;
- destOffset += 3 + alpha01;
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return inputLength / 4 * (3 + alpha01) | 0;
- }
-
- }
-
- return DeviceCmykCS;
-}();
-
-const CalGrayCS = function CalGrayCSClosure() {
- function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
- const A = src[srcOffset] * scale;
- const AG = A ** cs.G;
- const L = cs.YW * AG;
- const val = Math.max(295.8 * L ** 0.333333333333333333 - 40.8, 0);
- dest[destOffset] = val;
- dest[destOffset + 1] = val;
- dest[destOffset + 2] = val;
- }
-
- class CalGrayCS extends ColorSpace {
- constructor(whitePoint, blackPoint, gamma) {
- super("CalGray", 1);
-
- if (!whitePoint) {
- throw new _util.FormatError("WhitePoint missing - required for color space CalGray");
- }
-
- blackPoint = blackPoint || [0, 0, 0];
- gamma = gamma || 1;
- this.XW = whitePoint[0];
- this.YW = whitePoint[1];
- this.ZW = whitePoint[2];
- this.XB = blackPoint[0];
- this.YB = blackPoint[1];
- this.ZB = blackPoint[2];
- this.G = gamma;
-
- if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
- throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available");
- }
-
- if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
- (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`);
- this.XB = this.YB = this.ZB = 0;
- }
-
- if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {
- (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`);
- }
-
- if (this.G < 1) {
- (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + "falling back to default.");
- this.G = 1;
- }
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- convertToRgb(this, src, srcOffset, dest, destOffset, 1);
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- const scale = 1 / ((1 << bits) - 1);
-
- for (let i = 0; i < count; ++i) {
- convertToRgb(this, src, srcOffset, dest, destOffset, scale);
- srcOffset += 1;
- destOffset += 3 + alpha01;
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return inputLength * (3 + alpha01);
- }
-
- }
-
- return CalGrayCS;
-}();
-
-const CalRGBCS = function CalRGBCSClosure() {
- const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);
- const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);
- const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);
- const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
- const tempNormalizeMatrix = new Float32Array(3);
- const tempConvertMatrix1 = new Float32Array(3);
- const tempConvertMatrix2 = new Float32Array(3);
- const DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0;
-
- function matrixProduct(a, b, result) {
- result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
- result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];
- result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];
- }
-
- function convertToFlat(sourceWhitePoint, LMS, result) {
- result[0] = LMS[0] * 1 / sourceWhitePoint[0];
- result[1] = LMS[1] * 1 / sourceWhitePoint[1];
- result[2] = LMS[2] * 1 / sourceWhitePoint[2];
- }
-
- function convertToD65(sourceWhitePoint, LMS, result) {
- const D65X = 0.95047;
- const D65Y = 1;
- const D65Z = 1.08883;
- result[0] = LMS[0] * D65X / sourceWhitePoint[0];
- result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
- result[2] = LMS[2] * D65Z / sourceWhitePoint[2];
- }
-
- function sRGBTransferFunction(color) {
- if (color <= 0.0031308) {
- return adjustToRange(0, 1, 12.92 * color);
- }
-
- return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055);
- }
-
- function adjustToRange(min, max, value) {
- return Math.max(min, Math.min(max, value));
- }
-
- function decodeL(L) {
- if (L < 0) {
- return -decodeL(-L);
- }
-
- if (L > 8.0) {
- return ((L + 16) / 116) ** 3;
- }
-
- return L * DECODE_L_CONSTANT;
- }
-
- function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {
- if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) {
- result[0] = XYZ_Flat[0];
- result[1] = XYZ_Flat[1];
- result[2] = XYZ_Flat[2];
- return;
- }
-
- const zeroDecodeL = decodeL(0);
- const X_DST = zeroDecodeL;
- const X_SRC = decodeL(sourceBlackPoint[0]);
- const Y_DST = zeroDecodeL;
- const Y_SRC = decodeL(sourceBlackPoint[1]);
- const Z_DST = zeroDecodeL;
- const Z_SRC = decodeL(sourceBlackPoint[2]);
- const X_Scale = (1 - X_DST) / (1 - X_SRC);
- const X_Offset = 1 - X_Scale;
- const Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
- const Y_Offset = 1 - Y_Scale;
- const Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
- const Z_Offset = 1 - Z_Scale;
- result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
- result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
- result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;
- }
-
- function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {
- if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {
- result[0] = XYZ_In[0];
- result[1] = XYZ_In[1];
- result[2] = XYZ_In[2];
- return;
- }
-
- const LMS = result;
- matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
- const LMS_Flat = tempNormalizeMatrix;
- convertToFlat(sourceWhitePoint, LMS, LMS_Flat);
- matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
- }
-
- function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
- const LMS = result;
- matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
- const LMS_D65 = tempNormalizeMatrix;
- convertToD65(sourceWhitePoint, LMS, LMS_D65);
- matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
- }
-
- function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
- const A = adjustToRange(0, 1, src[srcOffset] * scale);
- const B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
- const C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
- const AGR = A ** cs.GR;
- const BGG = B ** cs.GG;
- const CGB = C ** cs.GB;
- const X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
- const Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
- const Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
- const XYZ = tempConvertMatrix1;
- XYZ[0] = X;
- XYZ[1] = Y;
- XYZ[2] = Z;
- const XYZ_Flat = tempConvertMatrix2;
- normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
- const XYZ_Black = tempConvertMatrix1;
- compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);
- const XYZ_D65 = tempConvertMatrix2;
- normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
- const SRGB = tempConvertMatrix1;
- matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
- dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255;
- dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255;
- dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255;
- }
-
- class CalRGBCS extends ColorSpace {
- constructor(whitePoint, blackPoint, gamma, matrix) {
- super("CalRGB", 3);
-
- if (!whitePoint) {
- throw new _util.FormatError("WhitePoint missing - required for color space CalRGB");
- }
-
- blackPoint = blackPoint || new Float32Array(3);
- gamma = gamma || new Float32Array([1, 1, 1]);
- matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
- const XW = whitePoint[0];
- const YW = whitePoint[1];
- const ZW = whitePoint[2];
- this.whitePoint = whitePoint;
- const XB = blackPoint[0];
- const YB = blackPoint[1];
- const ZB = blackPoint[2];
- this.blackPoint = blackPoint;
- this.GR = gamma[0];
- this.GG = gamma[1];
- this.GB = gamma[2];
- this.MXA = matrix[0];
- this.MYA = matrix[1];
- this.MZA = matrix[2];
- this.MXB = matrix[3];
- this.MYB = matrix[4];
- this.MZB = matrix[5];
- this.MXC = matrix[6];
- this.MYC = matrix[7];
- this.MZC = matrix[8];
-
- if (XW < 0 || ZW < 0 || YW !== 1) {
- throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available");
- }
-
- if (XB < 0 || YB < 0 || ZB < 0) {
- (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default.");
- this.blackPoint = new Float32Array(3);
- }
-
- if (this.GR < 0 || this.GG < 0 || this.GB < 0) {
- (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`);
- this.GR = this.GG = this.GB = 1;
- }
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- convertToRgb(this, src, srcOffset, dest, destOffset, 1);
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- const scale = 1 / ((1 << bits) - 1);
-
- for (let i = 0; i < count; ++i) {
- convertToRgb(this, src, srcOffset, dest, destOffset, scale);
- srcOffset += 3;
- destOffset += 3 + alpha01;
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return inputLength * (3 + alpha01) / 3 | 0;
- }
-
- }
-
- return CalRGBCS;
-}();
-
-const LabCS = function LabCSClosure() {
- function fn_g(x) {
- let result;
-
- if (x >= 6 / 29) {
- result = x * x * x;
- } else {
- result = 108 / 841 * (x - 4 / 29);
- }
-
- return result;
- }
-
- function decode(value, high1, low2, high2) {
- return low2 + value * (high2 - low2) / high1;
- }
-
- function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {
- let Ls = src[srcOffset];
- let as = src[srcOffset + 1];
- let bs = src[srcOffset + 2];
-
- if (maxVal !== false) {
- Ls = decode(Ls, maxVal, 0, 100);
- as = decode(as, maxVal, cs.amin, cs.amax);
- bs = decode(bs, maxVal, cs.bmin, cs.bmax);
- }
-
- if (as > cs.amax) {
- as = cs.amax;
- } else if (as < cs.amin) {
- as = cs.amin;
- }
-
- if (bs > cs.bmax) {
- bs = cs.bmax;
- } else if (bs < cs.bmin) {
- bs = cs.bmin;
- }
-
- const M = (Ls + 16) / 116;
- const L = M + as / 500;
- const N = M - bs / 200;
- const X = cs.XW * fn_g(L);
- const Y = cs.YW * fn_g(M);
- const Z = cs.ZW * fn_g(N);
- let r, g, b;
-
- if (cs.ZW < 1) {
- r = X * 3.1339 + Y * -1.617 + Z * -0.4906;
- g = X * -0.9785 + Y * 1.916 + Z * 0.0333;
- b = X * 0.072 + Y * -0.229 + Z * 1.4057;
- } else {
- r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
- g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
- b = X * 0.0557 + Y * -0.204 + Z * 1.057;
- }
-
- dest[destOffset] = Math.sqrt(r) * 255;
- dest[destOffset + 1] = Math.sqrt(g) * 255;
- dest[destOffset + 2] = Math.sqrt(b) * 255;
- }
-
- class LabCS extends ColorSpace {
- constructor(whitePoint, blackPoint, range) {
- super("Lab", 3);
-
- if (!whitePoint) {
- throw new _util.FormatError("WhitePoint missing - required for color space Lab");
- }
-
- blackPoint = blackPoint || [0, 0, 0];
- range = range || [-100, 100, -100, 100];
- this.XW = whitePoint[0];
- this.YW = whitePoint[1];
- this.ZW = whitePoint[2];
- this.amin = range[0];
- this.amax = range[1];
- this.bmin = range[2];
- this.bmax = range[3];
- this.XB = blackPoint[0];
- this.YB = blackPoint[1];
- this.ZB = blackPoint[2];
-
- if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
- throw new _util.FormatError("Invalid WhitePoint components, no fallback available");
- }
-
- if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
- (0, _util.info)("Invalid BlackPoint, falling back to default");
- this.XB = this.YB = this.ZB = 0;
- }
-
- if (this.amin > this.amax || this.bmin > this.bmax) {
- (0, _util.info)("Invalid Range, falling back to defaults");
- this.amin = -100;
- this.amax = 100;
- this.bmin = -100;
- this.bmax = 100;
- }
- }
-
- getRgbItem(src, srcOffset, dest, destOffset) {
- convertToRgb(this, src, srcOffset, false, dest, destOffset);
- }
-
- getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
- const maxVal = (1 << bits) - 1;
-
- for (let i = 0; i < count; i++) {
- convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
- srcOffset += 3;
- destOffset += 3 + alpha01;
- }
- }
-
- getOutputLength(inputLength, alpha01) {
- return inputLength * (3 + alpha01) / 3 | 0;
- }
-
- isDefaultDecode(decodeMap, bpc) {
- return true;
- }
-
- get usesZeroToOneRange() {
- return (0, _util.shadow)(this, "usesZeroToOneRange", false);
- }
-
- }
-
- return LabCS;
-}();
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.GlobalImageCache = exports.LocalImageCache = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-class LocalImageCache {
- constructor() {
- this._nameRefMap = new Map();
- this._imageMap = new Map();
- this._imageCache = new _primitives.RefSetCache();
- }
-
- getByName(name) {
- const ref = this._nameRefMap.get(name);
-
- if (ref) {
- return this.getByRef(ref);
- }
-
- return this._imageMap.get(name) || null;
- }
-
- getByRef(ref) {
- return this._imageCache.get(ref) || null;
- }
-
- set(name, ref = null, data) {
- if (!name) {
- throw new Error('LocalImageCache.set - expected "name" argument.');
- }
-
- if (ref) {
- if (this._imageCache.has(ref)) {
- return;
- }
-
- this._nameRefMap.set(name, ref);
-
- this._imageCache.put(ref, data);
-
- return;
- }
-
- if (this._imageMap.has(name)) {
- return;
- }
-
- this._imageMap.set(name, data);
- }
-
-}
-
-exports.LocalImageCache = LocalImageCache;
-
-class GlobalImageCache {
- static get NUM_PAGES_THRESHOLD() {
- return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2);
- }
-
- static get MAX_IMAGES_TO_CACHE() {
- return (0, _util.shadow)(this, "MAX_IMAGES_TO_CACHE", 10);
- }
-
- constructor() {
- this._refCache = new _primitives.RefSetCache();
- this._imageCache = new _primitives.RefSetCache();
- }
-
- shouldCache(ref, pageIndex) {
- const pageIndexSet = this._refCache.get(ref);
-
- const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1;
-
- if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) {
- return false;
- }
-
- if (!this._imageCache.has(ref) && this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
- return false;
- }
-
- return true;
- }
-
- addPageIndex(ref, pageIndex) {
- let pageIndexSet = this._refCache.get(ref);
-
- if (!pageIndexSet) {
- pageIndexSet = new Set();
-
- this._refCache.put(ref, pageIndexSet);
- }
-
- pageIndexSet.add(pageIndex);
- }
-
- getData(ref, pageIndex) {
- if (!this._refCache.has(ref)) {
- return null;
- }
-
- const pageIndexSet = this._refCache.get(ref);
-
- if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
- return null;
- }
-
- if (!this._imageCache.has(ref)) {
- return null;
- }
-
- pageIndexSet.add(pageIndex);
- return this._imageCache.get(ref);
- }
-
- setData(ref, data) {
- if (!this._refCache.has(ref)) {
- throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.');
- }
-
- if (this._imageCache.has(ref)) {
- return;
- }
-
- if (this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
- (0, _util.info)("GlobalImageCache.setData - ignoring image above MAX_IMAGES_TO_CACHE.");
- return;
- }
-
- this._imageCache.put(ref, data);
- }
-
- clear(onlyData = false) {
- if (!onlyData) {
- this._refCache.clear();
- }
-
- this._imageCache.clear();
- }
-
-}
-
-exports.GlobalImageCache = GlobalImageCache;
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getQuadPoints = getQuadPoints;
-exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _obj = __w_pdfjs_require__(10);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _colorspace = __w_pdfjs_require__(23);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _operator_list = __w_pdfjs_require__(26);
-
-var _stream = __w_pdfjs_require__(12);
-
-class AnnotationFactory {
- static create(xref, ref, pdfManager, idFactory) {
- return pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory]);
- }
-
- static _create(xref, ref, pdfManager, idFactory) {
- const dict = xref.fetchIfRef(ref);
-
- if (!(0, _primitives.isDict)(dict)) {
- return undefined;
- }
-
- const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`;
- let subtype = dict.get("Subtype");
- subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;
- const parameters = {
- xref,
- dict,
- subtype,
- id,
- pdfManager
- };
-
- switch (subtype) {
- case "Link":
- return new LinkAnnotation(parameters);
-
- case "Text":
- return new TextAnnotation(parameters);
-
- case "Widget":
- let fieldType = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "FT"
- });
- fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
-
- switch (fieldType) {
- case "Tx":
- return new TextWidgetAnnotation(parameters);
-
- case "Btn":
- return new ButtonWidgetAnnotation(parameters);
-
- case "Ch":
- return new ChoiceWidgetAnnotation(parameters);
- }
-
- (0, _util.warn)('Unimplemented widget field type "' + fieldType + '", ' + "falling back to base field type.");
- return new WidgetAnnotation(parameters);
-
- case "Popup":
- return new PopupAnnotation(parameters);
-
- case "FreeText":
- return new FreeTextAnnotation(parameters);
-
- case "Line":
- return new LineAnnotation(parameters);
-
- case "Square":
- return new SquareAnnotation(parameters);
-
- case "Circle":
- return new CircleAnnotation(parameters);
-
- case "PolyLine":
- return new PolylineAnnotation(parameters);
-
- case "Polygon":
- return new PolygonAnnotation(parameters);
-
- case "Caret":
- return new CaretAnnotation(parameters);
-
- case "Ink":
- return new InkAnnotation(parameters);
-
- case "Highlight":
- return new HighlightAnnotation(parameters);
-
- case "Underline":
- return new UnderlineAnnotation(parameters);
-
- case "Squiggly":
- return new SquigglyAnnotation(parameters);
-
- case "StrikeOut":
- return new StrikeOutAnnotation(parameters);
-
- case "Stamp":
- return new StampAnnotation(parameters);
-
- case "FileAttachment":
- return new FileAttachmentAnnotation(parameters);
-
- default:
- if (!subtype) {
- (0, _util.warn)("Annotation is missing the required /Subtype.");
- } else {
- (0, _util.warn)('Unimplemented annotation type "' + subtype + '", ' + "falling back to base annotation.");
- }
-
- return new Annotation(parameters);
- }
- }
-
-}
-
-exports.AnnotationFactory = AnnotationFactory;
-
-function getQuadPoints(dict, rect) {
- if (!dict.has("QuadPoints")) {
- return null;
- }
-
- const quadPoints = dict.getArray("QuadPoints");
-
- if (!Array.isArray(quadPoints) || quadPoints.length % 8 > 0) {
- return null;
- }
-
- const quadPointsLists = [];
-
- for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {
- quadPointsLists.push([]);
-
- for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {
- const x = quadPoints[j];
- const y = quadPoints[j + 1];
-
- if (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3]) {
- return null;
- }
-
- quadPointsLists[i].push({
- x,
- y
- });
- }
- }
-
- return quadPointsLists;
-}
-
-function getTransformMatrix(rect, bbox, matrix) {
- const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);
-
- if (minX === maxX || minY === maxY) {
- return [1, 0, 0, 1, rect[0], rect[1]];
- }
-
- const xRatio = (rect[2] - rect[0]) / (maxX - minX);
- const yRatio = (rect[3] - rect[1]) / (maxY - minY);
- return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];
-}
-
-class Annotation {
- constructor(params) {
- const dict = params.dict;
- this.setContents(dict.get("Contents"));
- this.setModificationDate(dict.get("M"));
- this.setFlags(dict.get("F"));
- this.setRectangle(dict.getArray("Rect"));
- this.setColor(dict.getArray("C"));
- this.setBorderStyle(dict);
- this.setAppearance(dict);
- this.data = {
- annotationFlags: this.flags,
- borderStyle: this.borderStyle,
- color: this.color,
- contents: this.contents,
- hasAppearance: !!this.appearance,
- id: params.id,
- modificationDate: this.modificationDate,
- rect: this.rectangle,
- subtype: params.subtype
- };
- }
-
- _hasFlag(flags, flag) {
- return !!(flags & flag);
- }
-
- _isViewable(flags) {
- return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);
- }
-
- _isPrintable(flags) {
- return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN);
- }
-
- get viewable() {
- if (this.flags === 0) {
- return true;
- }
-
- return this._isViewable(this.flags);
- }
-
- get printable() {
- if (this.flags === 0) {
- return false;
- }
-
- return this._isPrintable(this.flags);
- }
-
- setContents(contents) {
- this.contents = (0, _util.stringToPDFString)(contents || "");
- }
-
- setModificationDate(modificationDate) {
- this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;
- }
-
- setFlags(flags) {
- this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
- }
-
- hasFlag(flag) {
- return this._hasFlag(this.flags, flag);
- }
-
- setRectangle(rectangle) {
- if (Array.isArray(rectangle) && rectangle.length === 4) {
- this.rectangle = _util.Util.normalizeRect(rectangle);
- } else {
- this.rectangle = [0, 0, 0, 0];
- }
- }
-
- setColor(color) {
- const rgbColor = new Uint8ClampedArray(3);
-
- if (!Array.isArray(color)) {
- this.color = rgbColor;
- return;
- }
-
- switch (color.length) {
- case 0:
- this.color = null;
- break;
-
- case 1:
- _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
-
- this.color = rgbColor;
- break;
-
- case 3:
- _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
-
- this.color = rgbColor;
- break;
-
- case 4:
- _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
-
- this.color = rgbColor;
- break;
-
- default:
- this.color = rgbColor;
- break;
- }
- }
-
- setBorderStyle(borderStyle) {
- this.borderStyle = new AnnotationBorderStyle();
-
- if (!(0, _primitives.isDict)(borderStyle)) {
- return;
- }
-
- if (borderStyle.has("BS")) {
- const dict = borderStyle.get("BS");
- const dictType = dict.get("Type");
-
- if (!dictType || (0, _primitives.isName)(dictType, "Border")) {
- this.borderStyle.setWidth(dict.get("W"), this.rectangle);
- this.borderStyle.setStyle(dict.get("S"));
- this.borderStyle.setDashArray(dict.getArray("D"));
- }
- } else if (borderStyle.has("Border")) {
- const array = borderStyle.getArray("Border");
-
- if (Array.isArray(array) && array.length >= 3) {
- this.borderStyle.setHorizontalCornerRadius(array[0]);
- this.borderStyle.setVerticalCornerRadius(array[1]);
- this.borderStyle.setWidth(array[2], this.rectangle);
-
- if (array.length === 4) {
- this.borderStyle.setDashArray(array[3]);
- }
- }
- } else {
- this.borderStyle.setWidth(0);
- }
- }
-
- setAppearance(dict) {
- this.appearance = null;
- const appearanceStates = dict.get("AP");
-
- if (!(0, _primitives.isDict)(appearanceStates)) {
- return;
- }
-
- const normalAppearanceState = appearanceStates.get("N");
-
- if ((0, _primitives.isStream)(normalAppearanceState)) {
- this.appearance = normalAppearanceState;
- return;
- }
-
- if (!(0, _primitives.isDict)(normalAppearanceState)) {
- return;
- }
-
- const as = dict.get("AS");
-
- if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {
- return;
- }
-
- this.appearance = normalAppearanceState.get(as.name);
- }
-
- loadResources(keys) {
- return this.appearance.dict.getAsync("Resources").then(resources => {
- if (!resources) {
- return undefined;
- }
-
- const objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);
- return objectLoader.load().then(function () {
- return resources;
- });
- });
- }
-
- getOperatorList(evaluator, task, renderForms) {
- if (!this.appearance) {
- return Promise.resolve(new _operator_list.OperatorList());
- }
-
- const data = this.data;
- const appearanceDict = this.appearance.dict;
- const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]);
- const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
- const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
- const transform = getTransformMatrix(data.rect, bbox, matrix);
- return resourcesPromise.then(resources => {
- const opList = new _operator_list.OperatorList();
- opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);
- return evaluator.getOperatorList({
- stream: this.appearance,
- task,
- resources,
- operatorList: opList
- }).then(() => {
- opList.addOp(_util.OPS.endAnnotation, []);
- this.appearance.reset();
- return opList;
- });
- });
- }
-
-}
-
-exports.Annotation = Annotation;
-
-class AnnotationBorderStyle {
- constructor() {
- this.width = 1;
- this.style = _util.AnnotationBorderStyleType.SOLID;
- this.dashArray = [3];
- this.horizontalCornerRadius = 0;
- this.verticalCornerRadius = 0;
- }
-
- setWidth(width, rect = [0, 0, 0, 0]) {
- if ((0, _primitives.isName)(width)) {
- this.width = 0;
- return;
- }
-
- if (Number.isInteger(width)) {
- if (width > 0) {
- const maxWidth = (rect[2] - rect[0]) / 2;
- const maxHeight = (rect[3] - rect[1]) / 2;
-
- if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {
- (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);
- width = 1;
- }
- }
-
- this.width = width;
- }
- }
-
- setStyle(style) {
- if (!(0, _primitives.isName)(style)) {
- return;
- }
-
- switch (style.name) {
- case "S":
- this.style = _util.AnnotationBorderStyleType.SOLID;
- break;
-
- case "D":
- this.style = _util.AnnotationBorderStyleType.DASHED;
- break;
-
- case "B":
- this.style = _util.AnnotationBorderStyleType.BEVELED;
- break;
-
- case "I":
- this.style = _util.AnnotationBorderStyleType.INSET;
- break;
-
- case "U":
- this.style = _util.AnnotationBorderStyleType.UNDERLINE;
- break;
-
- default:
- break;
- }
- }
-
- setDashArray(dashArray) {
- if (Array.isArray(dashArray) && dashArray.length > 0) {
- let isValid = true;
- let allZeros = true;
-
- for (const element of dashArray) {
- const validNumber = +element >= 0;
-
- if (!validNumber) {
- isValid = false;
- break;
- } else if (element > 0) {
- allZeros = false;
- }
- }
-
- if (isValid && !allZeros) {
- this.dashArray = dashArray;
- } else {
- this.width = 0;
- }
- } else if (dashArray) {
- this.width = 0;
- }
- }
-
- setHorizontalCornerRadius(radius) {
- if (Number.isInteger(radius)) {
- this.horizontalCornerRadius = radius;
- }
- }
-
- setVerticalCornerRadius(radius) {
- if (Number.isInteger(radius)) {
- this.verticalCornerRadius = radius;
- }
- }
-
-}
-
-exports.AnnotationBorderStyle = AnnotationBorderStyle;
-
-class MarkupAnnotation extends Annotation {
- constructor(parameters) {
- super(parameters);
- const dict = parameters.dict;
-
- if (dict.has("IRT")) {
- const rawIRT = dict.getRaw("IRT");
- this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;
- const rt = dict.get("RT");
- this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;
- }
-
- if (this.data.replyType === _util.AnnotationReplyType.GROUP) {
- const parent = dict.get("IRT");
- this.data.title = (0, _util.stringToPDFString)(parent.get("T") || "");
- this.setContents(parent.get("Contents"));
- this.data.contents = this.contents;
-
- if (!parent.has("CreationDate")) {
- this.data.creationDate = null;
- } else {
- this.setCreationDate(parent.get("CreationDate"));
- this.data.creationDate = this.creationDate;
- }
-
- if (!parent.has("M")) {
- this.data.modificationDate = null;
- } else {
- this.setModificationDate(parent.get("M"));
- this.data.modificationDate = this.modificationDate;
- }
-
- this.data.hasPopup = parent.has("Popup");
-
- if (!parent.has("C")) {
- this.data.color = null;
- } else {
- this.setColor(parent.getArray("C"));
- this.data.color = this.color;
- }
- } else {
- this.data.title = (0, _util.stringToPDFString)(dict.get("T") || "");
- this.setCreationDate(dict.get("CreationDate"));
- this.data.creationDate = this.creationDate;
- this.data.hasPopup = dict.has("Popup");
-
- if (!dict.has("C")) {
- this.data.color = null;
- }
- }
- }
-
- setCreationDate(creationDate) {
- this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;
- }
-
-}
-
-exports.MarkupAnnotation = MarkupAnnotation;
-
-class WidgetAnnotation extends Annotation {
- constructor(params) {
- super(params);
- const dict = params.dict;
- const data = this.data;
- data.annotationType = _util.AnnotationType.WIDGET;
- data.fieldName = this._constructFieldName(dict);
- data.fieldValue = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "V",
- getArray: true
- });
- data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
- data.defaultAppearance = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "DA"
- }) || "";
- const fieldType = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "FT"
- });
- data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
- this.fieldResources = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "DR"
- }) || _primitives.Dict.empty;
- data.fieldFlags = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "Ff"
- });
-
- if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {
- data.fieldFlags = 0;
- }
-
- data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);
-
- if (data.fieldType === "Sig") {
- data.fieldValue = null;
- this.setFlags(_util.AnnotationFlag.HIDDEN);
- }
- }
-
- _constructFieldName(dict) {
- if (!dict.has("T") && !dict.has("Parent")) {
- (0, _util.warn)("Unknown field name, falling back to empty field name.");
- return "";
- }
-
- if (!dict.has("Parent")) {
- return (0, _util.stringToPDFString)(dict.get("T"));
- }
-
- const fieldName = [];
-
- if (dict.has("T")) {
- fieldName.unshift((0, _util.stringToPDFString)(dict.get("T")));
- }
-
- let loopDict = dict;
-
- while (loopDict.has("Parent")) {
- loopDict = loopDict.get("Parent");
-
- if (!(0, _primitives.isDict)(loopDict)) {
- break;
- }
-
- if (loopDict.has("T")) {
- fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T")));
- }
- }
-
- return fieldName.join(".");
- }
-
- hasFieldFlag(flag) {
- return !!(this.data.fieldFlags & flag);
- }
-
- getOperatorList(evaluator, task, renderForms) {
- if (renderForms) {
- return Promise.resolve(new _operator_list.OperatorList());
- }
-
- return super.getOperatorList(evaluator, task, renderForms);
- }
-
-}
-
-class TextWidgetAnnotation extends WidgetAnnotation {
- constructor(params) {
- super(params);
- const dict = params.dict;
- this.data.fieldValue = (0, _util.stringToPDFString)(this.data.fieldValue || "");
- let alignment = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "Q"
- });
-
- if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {
- alignment = null;
- }
-
- this.data.textAlignment = alignment;
- let maximumLength = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "MaxLen"
- });
-
- if (!Number.isInteger(maximumLength) || maximumLength < 0) {
- maximumLength = null;
- }
-
- this.data.maxLen = maximumLength;
- this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);
- this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null;
- }
-
- getOperatorList(evaluator, task, renderForms) {
- if (renderForms || this.appearance) {
- return super.getOperatorList(evaluator, task, renderForms);
- }
-
- const operatorList = new _operator_list.OperatorList();
-
- if (!this.data.defaultAppearance) {
- return Promise.resolve(operatorList);
- }
-
- const stream = new _stream.Stream((0, _util.stringToBytes)(this.data.defaultAppearance));
- return evaluator.getOperatorList({
- stream,
- task,
- resources: this.fieldResources,
- operatorList
- }).then(function () {
- return operatorList;
- });
- }
-
-}
-
-class ButtonWidgetAnnotation extends WidgetAnnotation {
- constructor(params) {
- super(params);
- this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
- this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
- this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
-
- if (this.data.checkBox) {
- this._processCheckBox(params);
- } else if (this.data.radioButton) {
- this._processRadioButton(params);
- } else if (this.data.pushButton) {
- this._processPushButton(params);
- } else {
- (0, _util.warn)("Invalid field flags for button widget annotation");
- }
- }
-
- _processCheckBox(params) {
- if ((0, _primitives.isName)(this.data.fieldValue)) {
- this.data.fieldValue = this.data.fieldValue.name;
- }
-
- const customAppearance = params.dict.get("AP");
-
- if (!(0, _primitives.isDict)(customAppearance)) {
- return;
- }
-
- const exportValueOptionsDict = customAppearance.get("D");
-
- if (!(0, _primitives.isDict)(exportValueOptionsDict)) {
- return;
- }
-
- const exportValues = exportValueOptionsDict.getKeys();
- const hasCorrectOptionCount = exportValues.length === 2;
-
- if (!hasCorrectOptionCount) {
- return;
- }
-
- this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0];
- }
-
- _processRadioButton(params) {
- this.data.fieldValue = this.data.buttonValue = null;
- const fieldParent = params.dict.get("Parent");
-
- if ((0, _primitives.isDict)(fieldParent) && fieldParent.has("V")) {
- const fieldParentValue = fieldParent.get("V");
-
- if ((0, _primitives.isName)(fieldParentValue)) {
- this.data.fieldValue = fieldParentValue.name;
- }
- }
-
- const appearanceStates = params.dict.get("AP");
-
- if (!(0, _primitives.isDict)(appearanceStates)) {
- return;
- }
-
- const normalAppearanceState = appearanceStates.get("N");
-
- if (!(0, _primitives.isDict)(normalAppearanceState)) {
- return;
- }
-
- for (const key of normalAppearanceState.getKeys()) {
- if (key !== "Off") {
- this.data.buttonValue = key;
- break;
- }
- }
- }
-
- _processPushButton(params) {
- if (!params.dict.has("A")) {
- (0, _util.warn)("Push buttons without action dictionaries are not supported");
- return;
- }
-
- _obj.Catalog.parseDestDictionary({
- destDict: params.dict,
- resultObj: this.data,
- docBaseUrl: params.pdfManager.docBaseUrl
- });
- }
-
-}
-
-class ChoiceWidgetAnnotation extends WidgetAnnotation {
- constructor(params) {
- super(params);
- this.data.options = [];
- const options = (0, _core_utils.getInheritableProperty)({
- dict: params.dict,
- key: "Opt"
- });
-
- if (Array.isArray(options)) {
- const xref = params.xref;
-
- for (let i = 0, ii = options.length; i < ii; i++) {
- const option = xref.fetchIfRef(options[i]);
- const isOptionArray = Array.isArray(option);
- this.data.options[i] = {
- exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option,
- displayValue: (0, _util.stringToPDFString)(isOptionArray ? xref.fetchIfRef(option[1]) : option)
- };
- }
- }
-
- if (!Array.isArray(this.data.fieldValue)) {
- this.data.fieldValue = [this.data.fieldValue];
- }
-
- this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
- this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
- }
-
-}
-
-class TextAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- const DEFAULT_ICON_SIZE = 22;
- super(parameters);
- const dict = parameters.dict;
- this.data.annotationType = _util.AnnotationType.TEXT;
-
- if (this.data.hasAppearance) {
- this.data.name = "NoIcon";
- } else {
- this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;
- this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;
- this.data.name = dict.has("Name") ? dict.get("Name").name : "Note";
- }
-
- if (dict.has("State")) {
- this.data.state = dict.get("State") || null;
- this.data.stateModel = dict.get("StateModel") || null;
- } else {
- this.data.state = null;
- this.data.stateModel = null;
- }
- }
-
-}
-
-class LinkAnnotation extends Annotation {
- constructor(params) {
- super(params);
- this.data.annotationType = _util.AnnotationType.LINK;
- const quadPoints = getQuadPoints(params.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
-
- _obj.Catalog.parseDestDictionary({
- destDict: params.dict,
- resultObj: this.data,
- docBaseUrl: params.pdfManager.docBaseUrl
- });
- }
-
-}
-
-class PopupAnnotation extends Annotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.POPUP;
- let parentItem = parameters.dict.get("Parent");
-
- if (!parentItem) {
- (0, _util.warn)("Popup annotation has a missing or invalid parent annotation.");
- return;
- }
-
- const parentSubtype = parentItem.get("Subtype");
- this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;
- const rawParent = parameters.dict.getRaw("Parent");
- this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;
- const rt = parentItem.get("RT");
-
- if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {
- parentItem = parentItem.get("IRT");
- }
-
- if (!parentItem.has("M")) {
- this.data.modificationDate = null;
- } else {
- this.setModificationDate(parentItem.get("M"));
- this.data.modificationDate = this.modificationDate;
- }
-
- if (!parentItem.has("C")) {
- this.data.color = null;
- } else {
- this.setColor(parentItem.getArray("C"));
- this.data.color = this.color;
- }
-
- if (!this.viewable) {
- const parentFlags = parentItem.get("F");
-
- if (this._isViewable(parentFlags)) {
- this.setFlags(parentFlags);
- }
- }
-
- this.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || "");
- this.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || "");
- }
-
-}
-
-class FreeTextAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.FREETEXT;
- }
-
-}
-
-class LineAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.LINE;
- this.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray("L"));
- }
-
-}
-
-class SquareAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.SQUARE;
- }
-
-}
-
-class CircleAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.CIRCLE;
- }
-
-}
-
-class PolylineAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.POLYLINE;
- const rawVertices = parameters.dict.getArray("Vertices");
- this.data.vertices = [];
-
- for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {
- this.data.vertices.push({
- x: rawVertices[i],
- y: rawVertices[i + 1]
- });
- }
- }
-
-}
-
-class PolygonAnnotation extends PolylineAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.POLYGON;
- }
-
-}
-
-class CaretAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.CARET;
- }
-
-}
-
-class InkAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.INK;
- const xref = parameters.xref;
- const originalInkLists = parameters.dict.getArray("InkList");
- this.data.inkLists = [];
-
- for (let i = 0, ii = originalInkLists.length; i < ii; ++i) {
- this.data.inkLists.push([]);
-
- for (let j = 0, jj = originalInkLists[i].length; j < jj; j += 2) {
- this.data.inkLists[i].push({
- x: xref.fetchIfRef(originalInkLists[i][j]),
- y: xref.fetchIfRef(originalInkLists[i][j + 1])
- });
- }
- }
- }
-
-}
-
-class HighlightAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.HIGHLIGHT;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class UnderlineAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.UNDERLINE;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class SquigglyAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.SQUIGGLY;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class StrikeOutAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.STRIKEOUT;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class StampAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.STAMP;
- }
-
-}
-
-class FileAttachmentAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- const file = new _obj.FileSpec(parameters.dict.get("FS"), parameters.xref);
- this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
- this.data.file = file.serializable;
- }
-
-}
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.OperatorList = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var QueueOptimizer = function QueueOptimizerClosure() {
- function addState(parentState, pattern, checkFn, iterateFn, processFn) {
- var state = parentState;
-
- for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
- var item = pattern[i];
- state = state[item] || (state[item] = []);
- }
-
- state[pattern[pattern.length - 1]] = {
- checkFn,
- iterateFn,
- processFn
- };
- }
-
- function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
- var iFirstPIMXO = iFirstSave + 2;
-
- for (var i = 0; i < count; i++) {
- var arg = argsArray[iFirstPIMXO + 4 * i];
- var imageMask = arg.length === 1 && arg[0];
-
- if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {
- fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
- continue;
- }
-
- break;
- }
-
- return count - i;
- }
-
- var InitialState = [];
- addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
- var fnArray = context.fnArray;
- var iFirstSave = context.iCurr - 3;
- var pos = (i - iFirstSave) % 4;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.save;
-
- case 1:
- return fnArray[i] === _util.OPS.transform;
-
- case 2:
- return fnArray[i] === _util.OPS.paintInlineImageXObject;
-
- case 3:
- return fnArray[i] === _util.OPS.restore;
- }
-
- throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
- }, function foundInlineImageGroup(context, i) {
- var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
- var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
- var MAX_WIDTH = 1000;
- var IMAGE_PADDING = 1;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstSave = curr - 3;
- var iFirstTransform = curr - 2;
- var iFirstPIIXO = curr - 1;
- var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
-
- if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
- return i - (i - iFirstSave) % 4;
- }
-
- var maxX = 0;
- var map = [],
- maxLineHeight = 0;
- var currentX = IMAGE_PADDING,
- currentY = IMAGE_PADDING;
- var q;
-
- for (q = 0; q < count; q++) {
- var transform = argsArray[iFirstTransform + (q << 2)];
- var img = argsArray[iFirstPIIXO + (q << 2)][0];
-
- if (currentX + img.width > MAX_WIDTH) {
- maxX = Math.max(maxX, currentX);
- currentY += maxLineHeight + 2 * IMAGE_PADDING;
- currentX = 0;
- maxLineHeight = 0;
- }
-
- map.push({
- transform,
- x: currentX,
- y: currentY,
- w: img.width,
- h: img.height
- });
- currentX += img.width + 2 * IMAGE_PADDING;
- maxLineHeight = Math.max(maxLineHeight, img.height);
- }
-
- var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
- var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
- var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
- var imgRowSize = imgWidth << 2;
-
- for (q = 0; q < count; q++) {
- var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
- var rowSize = map[q].w << 2;
- var dataOffset = 0;
- var offset = map[q].x + map[q].y * imgWidth << 2;
- imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
-
- for (var k = 0, kk = map[q].h; k < kk; k++) {
- imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
- dataOffset += rowSize;
- offset += imgRowSize;
- }
-
- imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
-
- while (offset >= 0) {
- data[offset - 4] = data[offset];
- data[offset - 3] = data[offset + 1];
- data[offset - 2] = data[offset + 2];
- data[offset - 1] = data[offset + 3];
- data[offset + rowSize] = data[offset + rowSize - 4];
- data[offset + rowSize + 1] = data[offset + rowSize - 3];
- data[offset + rowSize + 2] = data[offset + rowSize - 2];
- data[offset + rowSize + 3] = data[offset + rowSize - 1];
- offset -= imgRowSize;
- }
- }
-
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
- argsArray.splice(iFirstSave, count * 4, [{
- width: imgWidth,
- height: imgHeight,
- kind: _util.ImageKind.RGBA_32BPP,
- data: imgData
- }, map]);
- return iFirstSave + 1;
- });
- addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
- var fnArray = context.fnArray;
- var iFirstSave = context.iCurr - 3;
- var pos = (i - iFirstSave) % 4;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.save;
-
- case 1:
- return fnArray[i] === _util.OPS.transform;
-
- case 2:
- return fnArray[i] === _util.OPS.paintImageMaskXObject;
-
- case 3:
- return fnArray[i] === _util.OPS.restore;
- }
-
- throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
- }, function foundImageMaskGroup(context, i) {
- var MIN_IMAGES_IN_MASKS_BLOCK = 10;
- var MAX_IMAGES_IN_MASKS_BLOCK = 100;
- var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstSave = curr - 3;
- var iFirstTransform = curr - 2;
- var iFirstPIMXO = curr - 1;
- var count = Math.floor((i - iFirstSave) / 4);
- count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
-
- if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
- return i - (i - iFirstSave) % 4;
- }
-
- var q;
- var isSameImage = false;
- var iTransform, transformArgs;
- var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
-
- if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) {
- isSameImage = true;
- var firstTransformArg0 = argsArray[iFirstTransform][0];
- var firstTransformArg3 = argsArray[iFirstTransform][3];
- iTransform = iFirstTransform + 4;
- var iPIMXO = iFirstPIMXO + 4;
-
- for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
- transformArgs = argsArray[iTransform];
-
- if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || transformArgs[3] !== firstTransformArg3) {
- if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
- isSameImage = false;
- } else {
- count = q;
- }
-
- break;
- }
- }
- }
-
- if (isSameImage) {
- count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
- var positions = new Float32Array(count * 2);
- iTransform = iFirstTransform;
-
- for (q = 0; q < count; q++, iTransform += 4) {
- transformArgs = argsArray[iTransform];
- positions[q << 1] = transformArgs[4];
- positions[(q << 1) + 1] = transformArgs[5];
- }
-
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
- argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);
- } else {
- count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
- var images = [];
-
- for (q = 0; q < count; q++) {
- transformArgs = argsArray[iFirstTransform + (q << 2)];
- var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
- images.push({
- data: maskParams.data,
- width: maskParams.width,
- height: maskParams.height,
- transform: transformArgs
- });
- }
-
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
- argsArray.splice(iFirstSave, count * 4, [images]);
- }
-
- return iFirstSave + 1;
- });
- addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {
- var argsArray = context.argsArray;
- var iFirstTransform = context.iCurr - 2;
- return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
- }, function iterateImageGroup(context, i) {
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var iFirstSave = context.iCurr - 3;
- var pos = (i - iFirstSave) % 4;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.save;
-
- case 1:
- if (fnArray[i] !== _util.OPS.transform) {
- return false;
- }
-
- var iFirstTransform = context.iCurr - 2;
- var firstTransformArg0 = argsArray[iFirstTransform][0];
- var firstTransformArg3 = argsArray[iFirstTransform][3];
-
- if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
- return false;
- }
-
- return true;
-
- case 2:
- if (fnArray[i] !== _util.OPS.paintImageXObject) {
- return false;
- }
-
- var iFirstPIXO = context.iCurr - 1;
- var firstPIXOArg0 = argsArray[iFirstPIXO][0];
-
- if (argsArray[i][0] !== firstPIXOArg0) {
- return false;
- }
-
- return true;
-
- case 3:
- return fnArray[i] === _util.OPS.restore;
- }
-
- throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
- }, function (context, i) {
- var MIN_IMAGES_IN_BLOCK = 3;
- var MAX_IMAGES_IN_BLOCK = 1000;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstSave = curr - 3;
- var iFirstTransform = curr - 2;
- var iFirstPIXO = curr - 1;
- var firstPIXOArg0 = argsArray[iFirstPIXO][0];
- var firstTransformArg0 = argsArray[iFirstTransform][0];
- var firstTransformArg3 = argsArray[iFirstTransform][3];
- var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
-
- if (count < MIN_IMAGES_IN_BLOCK) {
- return i - (i - iFirstSave) % 4;
- }
-
- var positions = new Float32Array(count * 2);
- var iTransform = iFirstTransform;
-
- for (var q = 0; q < count; q++, iTransform += 4) {
- var transformArgs = argsArray[iTransform];
- positions[q << 1] = transformArgs[4];
- positions[(q << 1) + 1] = transformArgs[5];
- }
-
- var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
- argsArray.splice(iFirstSave, count * 4, args);
- return iFirstSave + 1;
- });
- addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var iFirstSave = context.iCurr - 4;
- var pos = (i - iFirstSave) % 5;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.beginText;
-
- case 1:
- return fnArray[i] === _util.OPS.setFont;
-
- case 2:
- return fnArray[i] === _util.OPS.setTextMatrix;
-
- case 3:
- if (fnArray[i] !== _util.OPS.showText) {
- return false;
- }
-
- var iFirstSetFont = context.iCurr - 3;
- var firstSetFontArg0 = argsArray[iFirstSetFont][0];
- var firstSetFontArg1 = argsArray[iFirstSetFont][1];
-
- if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
- return false;
- }
-
- return true;
-
- case 4:
- return fnArray[i] === _util.OPS.endText;
- }
-
- throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
- }, function (context, i) {
- var MIN_CHARS_IN_BLOCK = 3;
- var MAX_CHARS_IN_BLOCK = 1000;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstBeginText = curr - 4;
- var iFirstSetFont = curr - 3;
- var iFirstSetTextMatrix = curr - 2;
- var iFirstShowText = curr - 1;
- var iFirstEndText = curr;
- var firstSetFontArg0 = argsArray[iFirstSetFont][0];
- var firstSetFontArg1 = argsArray[iFirstSetFont][1];
- var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
-
- if (count < MIN_CHARS_IN_BLOCK) {
- return i - (i - iFirstBeginText) % 5;
- }
-
- var iFirst = iFirstBeginText;
-
- if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
- count++;
- iFirst -= 5;
- }
-
- var iEndText = iFirst + 4;
-
- for (var q = 1; q < count; q++) {
- fnArray.splice(iEndText, 3);
- argsArray.splice(iEndText, 3);
- iEndText += 2;
- }
-
- return iEndText + 1;
- });
-
- function QueueOptimizer(queue) {
- this.queue = queue;
- this.state = null;
- this.context = {
- iCurr: 0,
- fnArray: queue.fnArray,
- argsArray: queue.argsArray
- };
- this.match = null;
- this.lastProcessed = 0;
- }
-
- QueueOptimizer.prototype = {
- _optimize() {
- const fnArray = this.queue.fnArray;
- let i = this.lastProcessed,
- ii = fnArray.length;
- let state = this.state;
- let match = this.match;
-
- if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
- this.lastProcessed = ii;
- return;
- }
-
- const context = this.context;
-
- while (i < ii) {
- if (match) {
- const iterate = (0, match.iterateFn)(context, i);
-
- if (iterate) {
- i++;
- continue;
- }
-
- i = (0, match.processFn)(context, i + 1);
- ii = fnArray.length;
- match = null;
- state = null;
-
- if (i >= ii) {
- break;
- }
- }
-
- state = (state || InitialState)[fnArray[i]];
-
- if (!state || Array.isArray(state)) {
- i++;
- continue;
- }
-
- context.iCurr = i;
- i++;
-
- if (state.checkFn && !(0, state.checkFn)(context)) {
- state = null;
- continue;
- }
-
- match = state;
- state = null;
- }
-
- this.state = state;
- this.match = match;
- this.lastProcessed = i;
- },
-
- push(fn, args) {
- this.queue.fnArray.push(fn);
- this.queue.argsArray.push(args);
-
- this._optimize();
- },
-
- flush() {
- while (this.match) {
- const length = this.queue.fnArray.length;
- this.lastProcessed = (0, this.match.processFn)(this.context, length);
- this.match = null;
- this.state = null;
-
- this._optimize();
- }
- },
-
- reset() {
- this.state = null;
- this.match = null;
- this.lastProcessed = 0;
- }
-
- };
- return QueueOptimizer;
-}();
-
-var NullOptimizer = function NullOptimizerClosure() {
- function NullOptimizer(queue) {
- this.queue = queue;
- }
-
- NullOptimizer.prototype = {
- push(fn, args) {
- this.queue.fnArray.push(fn);
- this.queue.argsArray.push(args);
- },
-
- flush() {},
-
- reset() {}
-
- };
- return NullOptimizer;
-}();
-
-var OperatorList = function OperatorListClosure() {
- var CHUNK_SIZE = 1000;
- var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
-
- function OperatorList(intent, streamSink, pageIndex) {
- this._streamSink = streamSink;
- this.fnArray = [];
- this.argsArray = [];
-
- if (streamSink && intent !== "oplist") {
- this.optimizer = new QueueOptimizer(this);
- } else {
- this.optimizer = new NullOptimizer(this);
- }
-
- this.dependencies = Object.create(null);
- this._totalLength = 0;
- this.pageIndex = pageIndex;
- this.intent = intent;
- this.weight = 0;
- this._resolved = streamSink ? null : Promise.resolve();
- }
-
- OperatorList.prototype = {
- get length() {
- return this.argsArray.length;
- },
-
- get ready() {
- return this._resolved || this._streamSink.ready;
- },
-
- get totalLength() {
- return this._totalLength + this.length;
- },
-
- addOp(fn, args) {
- this.optimizer.push(fn, args);
- this.weight++;
-
- if (this._streamSink) {
- if (this.weight >= CHUNK_SIZE) {
- this.flush();
- } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
- this.flush();
- }
- }
- },
-
- addDependency(dependency) {
- if (dependency in this.dependencies) {
- return;
- }
-
- this.dependencies[dependency] = true;
- this.addOp(_util.OPS.dependency, [dependency]);
- },
-
- addDependencies(dependencies) {
- for (var key in dependencies) {
- this.addDependency(key);
- }
- },
-
- addOpList(opList) {
- if (!(opList instanceof OperatorList)) {
- (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
- return;
- }
-
- Object.assign(this.dependencies, opList.dependencies);
-
- for (var i = 0, ii = opList.length; i < ii; i++) {
- this.addOp(opList.fnArray[i], opList.argsArray[i]);
- }
- },
-
- getIR() {
- return {
- fnArray: this.fnArray,
- argsArray: this.argsArray,
- length: this.length
- };
- },
-
- get _transfers() {
- const transfers = [];
- const {
- fnArray,
- argsArray,
- length
- } = this;
-
- for (let i = 0; i < length; i++) {
- switch (fnArray[i]) {
- case _util.OPS.paintInlineImageXObject:
- case _util.OPS.paintInlineImageXObjectGroup:
- case _util.OPS.paintImageMaskXObject:
- const arg = argsArray[i][0];
- ;
-
- if (!arg.cached) {
- transfers.push(arg.data.buffer);
- }
-
- break;
- }
- }
-
- return transfers;
- },
-
- flush(lastChunk = false) {
- this.optimizer.flush();
- const length = this.length;
- this._totalLength += length;
-
- this._streamSink.enqueue({
- fnArray: this.fnArray,
- argsArray: this.argsArray,
- lastChunk,
- length
- }, 1, this._transfers);
-
- this.dependencies = Object.create(null);
- this.fnArray.length = 0;
- this.argsArray.length = 0;
- this.weight = 0;
- this.optimizer.reset();
- }
-
- };
- return OperatorList;
-}();
-
-exports.OperatorList = OperatorList;
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PartialEvaluator = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _cmap = __w_pdfjs_require__(28);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _fonts = __w_pdfjs_require__(29);
-
-var _encodings = __w_pdfjs_require__(32);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _unicode = __w_pdfjs_require__(35);
-
-var _standard_fonts = __w_pdfjs_require__(34);
-
-var _pattern = __w_pdfjs_require__(38);
-
-var _parser = __w_pdfjs_require__(11);
-
-var _bidi = __w_pdfjs_require__(39);
-
-var _colorspace = __w_pdfjs_require__(23);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _glyphlist = __w_pdfjs_require__(33);
-
-var _metrics = __w_pdfjs_require__(40);
-
-var _function = __w_pdfjs_require__(41);
-
-var _image_utils = __w_pdfjs_require__(24);
-
-var _murmurhash = __w_pdfjs_require__(43);
-
-var _operator_list = __w_pdfjs_require__(26);
-
-var _image = __w_pdfjs_require__(44);
-
-var PartialEvaluator = function PartialEvaluatorClosure() {
- const DefaultPartialEvaluatorOptions = {
- maxImageSize: -1,
- disableFontFace: false,
- ignoreErrors: false,
- isEvalSupported: true,
- fontExtraProperties: false
- };
-
- function PartialEvaluator({
- xref,
- handler,
- pageIndex,
- idFactory,
- fontCache,
- builtInCMapCache,
- globalImageCache,
- options = null,
- pdfFunctionFactory
- }) {
- this.xref = xref;
- this.handler = handler;
- this.pageIndex = pageIndex;
- this.idFactory = idFactory;
- this.fontCache = fontCache;
- this.builtInCMapCache = builtInCMapCache;
- this.globalImageCache = globalImageCache;
- this.options = options || DefaultPartialEvaluatorOptions;
- this.pdfFunctionFactory = pdfFunctionFactory;
- this.parsingType3Font = false;
-
- this.fetchBuiltInCMap = async name => {
- if (this.builtInCMapCache.has(name)) {
- return this.builtInCMapCache.get(name);
- }
-
- const readableStream = this.handler.sendWithStream("FetchBuiltInCMap", {
- name
- });
- const reader = readableStream.getReader();
- const data = await new Promise(function (resolve, reject) {
- function pump() {
- reader.read().then(function ({
- value,
- done
- }) {
- if (done) {
- return;
- }
-
- resolve(value);
- pump();
- }, reject);
- }
-
- pump();
- });
-
- if (data.compressionType !== _util.CMapCompressionType.NONE) {
- this.builtInCMapCache.set(name, data);
- }
-
- return data;
- };
- }
-
- var TIME_SLOT_DURATION_MS = 20;
- var CHECK_TIME_EVERY = 100;
-
- function TimeSlotManager() {
- this.reset();
- }
-
- TimeSlotManager.prototype = {
- check: function TimeSlotManager_check() {
- if (++this.checked < CHECK_TIME_EVERY) {
- return false;
- }
-
- this.checked = 0;
- return this.endTime <= Date.now();
- },
- reset: function TimeSlotManager_reset() {
- this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
- this.checked = 0;
- }
- };
-
- function normalizeBlendMode(value, parsingArray = false) {
- if (Array.isArray(value)) {
- for (let i = 0, ii = value.length; i < ii; i++) {
- const maybeBM = normalizeBlendMode(value[i], true);
-
- if (maybeBM) {
- return maybeBM;
- }
- }
-
- (0, _util.warn)(`Unsupported blend mode Array: ${value}`);
- return "source-over";
- }
-
- if (!(0, _primitives.isName)(value)) {
- if (parsingArray) {
- return null;
- }
-
- return "source-over";
- }
-
- switch (value.name) {
- case "Normal":
- case "Compatible":
- return "source-over";
-
- case "Multiply":
- return "multiply";
-
- case "Screen":
- return "screen";
-
- case "Overlay":
- return "overlay";
-
- case "Darken":
- return "darken";
-
- case "Lighten":
- return "lighten";
-
- case "ColorDodge":
- return "color-dodge";
-
- case "ColorBurn":
- return "color-burn";
-
- case "HardLight":
- return "hard-light";
-
- case "SoftLight":
- return "soft-light";
-
- case "Difference":
- return "difference";
-
- case "Exclusion":
- return "exclusion";
-
- case "Hue":
- return "hue";
-
- case "Saturation":
- return "saturation";
-
- case "Color":
- return "color";
-
- case "Luminosity":
- return "luminosity";
- }
-
- if (parsingArray) {
- return null;
- }
-
- (0, _util.warn)(`Unsupported blend mode: ${value.name}`);
- return "source-over";
- }
-
- var deferred = Promise.resolve();
- var TILING_PATTERN = 1,
- SHADING_PATTERN = 2;
- PartialEvaluator.prototype = {
- clone(newOptions = DefaultPartialEvaluatorOptions) {
- var newEvaluator = Object.create(this);
- newEvaluator.options = newOptions;
- return newEvaluator;
- },
-
- hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {
- if (!(resources instanceof _primitives.Dict)) {
- return false;
- }
-
- var processed = Object.create(null);
-
- if (resources.objId) {
- processed[resources.objId] = true;
- }
-
- var nodes = [resources],
- xref = this.xref;
-
- while (nodes.length) {
- var node = nodes.shift();
- var graphicStates = node.get("ExtGState");
-
- if (graphicStates instanceof _primitives.Dict) {
- var graphicStatesKeys = graphicStates.getKeys();
-
- for (let i = 0, ii = graphicStatesKeys.length; i < ii; i++) {
- const key = graphicStatesKeys[i];
- let graphicState = graphicStates.getRaw(key);
-
- if (graphicState instanceof _primitives.Ref) {
- if (processed[graphicState.toString()]) {
- continue;
- }
-
- try {
- graphicState = xref.fetch(graphicState);
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- if (this.options.ignoreErrors) {
- if (graphicState instanceof _primitives.Ref) {
- processed[graphicState.toString()] = true;
- }
-
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorExtGState
- });
- (0, _util.warn)(`hasBlendModes - ignoring ExtGState: "${ex}".`);
- continue;
- }
-
- throw ex;
- }
- }
-
- if (!(graphicState instanceof _primitives.Dict)) {
- continue;
- }
-
- if (graphicState.objId) {
- processed[graphicState.objId] = true;
- }
-
- const bm = graphicState.get("BM");
-
- if (bm instanceof _primitives.Name) {
- if (bm.name !== "Normal") {
- return true;
- }
-
- continue;
- }
-
- if (bm !== undefined && Array.isArray(bm)) {
- for (let j = 0, jj = bm.length; j < jj; j++) {
- if (bm[j] instanceof _primitives.Name && bm[j].name !== "Normal") {
- return true;
- }
- }
- }
- }
- }
-
- var xObjects = node.get("XObject");
-
- if (!(xObjects instanceof _primitives.Dict)) {
- continue;
- }
-
- var xObjectsKeys = xObjects.getKeys();
-
- for (let i = 0, ii = xObjectsKeys.length; i < ii; i++) {
- const key = xObjectsKeys[i];
- var xObject = xObjects.getRaw(key);
-
- if (xObject instanceof _primitives.Ref) {
- if (processed[xObject.toString()]) {
- continue;
- }
-
- try {
- xObject = xref.fetch(xObject);
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- if (this.options.ignoreErrors) {
- if (xObject instanceof _primitives.Ref) {
- processed[xObject.toString()] = true;
- }
-
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorXObject
- });
- (0, _util.warn)(`hasBlendModes - ignoring XObject: "${ex}".`);
- continue;
- }
-
- throw ex;
- }
- }
-
- if (!(0, _primitives.isStream)(xObject)) {
- continue;
- }
-
- if (xObject.dict.objId) {
- if (processed[xObject.dict.objId]) {
- continue;
- }
-
- processed[xObject.dict.objId] = true;
- }
-
- var xResources = xObject.dict.get("Resources");
-
- if (xResources instanceof _primitives.Dict && (!xResources.objId || !processed[xResources.objId])) {
- nodes.push(xResources);
-
- if (xResources.objId) {
- processed[xResources.objId] = true;
- }
- }
- }
- }
-
- return false;
- },
-
- async buildFormXObject(resources, xobj, smask, operatorList, task, initialState) {
- var dict = xobj.dict;
- var matrix = dict.getArray("Matrix");
- var bbox = dict.getArray("BBox");
-
- if (Array.isArray(bbox) && bbox.length === 4) {
- bbox = _util.Util.normalizeRect(bbox);
- } else {
- bbox = null;
- }
-
- var group = dict.get("Group");
-
- if (group) {
- var groupOptions = {
- matrix,
- bbox,
- smask,
- isolated: false,
- knockout: false
- };
- var groupSubtype = group.get("S");
- var colorSpace = null;
-
- if ((0, _primitives.isName)(groupSubtype, "Transparency")) {
- groupOptions.isolated = group.get("I") || false;
- groupOptions.knockout = group.get("K") || false;
-
- if (group.has("CS")) {
- colorSpace = await this.parseColorSpace({
- cs: group.get("CS"),
- resources
- });
- }
- }
-
- if (smask && smask.backdrop) {
- colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb;
- smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);
- }
-
- operatorList.addOp(_util.OPS.beginGroup, [groupOptions]);
- }
-
- operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]);
- return this.getOperatorList({
- stream: xobj,
- task,
- resources: dict.get("Resources") || resources,
- operatorList,
- initialState
- }).then(function () {
- operatorList.addOp(_util.OPS.paintFormXObjectEnd, []);
-
- if (group) {
- operatorList.addOp(_util.OPS.endGroup, [groupOptions]);
- }
- });
- },
-
- async buildPaintImageXObject({
- resources,
- image,
- isInline = false,
- operatorList,
- cacheKey,
- localImageCache
- }) {
- var dict = image.dict;
- const imageRef = dict.objId;
- var w = dict.get("Width", "W");
- var h = dict.get("Height", "H");
-
- if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) {
- (0, _util.warn)("Image dimensions are missing, or not numbers.");
- return undefined;
- }
-
- var maxImageSize = this.options.maxImageSize;
-
- if (maxImageSize !== -1 && w * h > maxImageSize) {
- (0, _util.warn)("Image exceeded maximum allowed size and was removed.");
- return undefined;
- }
-
- var imageMask = dict.get("ImageMask", "IM") || false;
- var imgData, args;
-
- if (imageMask) {
- var width = dict.get("Width", "W");
- var height = dict.get("Height", "H");
- var bitStrideLength = width + 7 >> 3;
- var imgArray = image.getBytes(bitStrideLength * height, true);
- var decode = dict.getArray("Decode", "D");
- imgData = _image.PDFImage.createMask({
- imgArray,
- width,
- height,
- imageIsFromDecodeStream: image instanceof _stream.DecodeStream,
- inverseDecode: !!decode && decode[0] > 0
- });
- imgData.cached = !!cacheKey;
- args = [imgData];
- operatorList.addOp(_util.OPS.paintImageMaskXObject, args);
-
- if (cacheKey) {
- localImageCache.set(cacheKey, imageRef, {
- fn: _util.OPS.paintImageMaskXObject,
- args
- });
- }
-
- return undefined;
- }
-
- var softMask = dict.get("SMask", "SM") || false;
- var mask = dict.get("Mask") || false;
- var SMALL_IMAGE_DIMENSIONS = 200;
-
- if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) {
- const imageObj = new _image.PDFImage({
- xref: this.xref,
- res: resources,
- image,
- isInline,
- pdfFunctionFactory: this.pdfFunctionFactory
- });
- imgData = imageObj.createImageData(true);
- operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]);
- return undefined;
- }
-
- let objId = `img_${this.idFactory.createObjId()}`,
- cacheGlobally = false;
-
- if (this.parsingType3Font) {
- objId = `${this.idFactory.getDocId()}_type3res_${objId}`;
- } else if (imageRef) {
- cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex);
-
- if (cacheGlobally) {
- objId = `${this.idFactory.getDocId()}_${objId}`;
- }
- }
-
- operatorList.addDependency(objId);
- args = [objId, w, h];
-
- const imgPromise = _image.PDFImage.buildImage({
- xref: this.xref,
- res: resources,
- image,
- isInline,
- pdfFunctionFactory: this.pdfFunctionFactory
- }).then(imageObj => {
- imgData = imageObj.createImageData(false);
-
- if (this.parsingType3Font) {
- return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", imgData], [imgData.data.buffer]);
- } else if (cacheGlobally) {
- this.handler.send("commonobj", [objId, "Image", imgData], [imgData.data.buffer]);
- return undefined;
- }
-
- this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], [imgData.data.buffer]);
- return undefined;
- }).catch(reason => {
- (0, _util.warn)("Unable to decode image: " + reason);
-
- if (this.parsingType3Font) {
- return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", null]);
- } else if (cacheGlobally) {
- this.handler.send("commonobj", [objId, "Image", null]);
- return undefined;
- }
-
- this.handler.send("obj", [objId, this.pageIndex, "Image", null]);
- return undefined;
- });
-
- if (this.parsingType3Font) {
- await imgPromise;
- }
-
- operatorList.addOp(_util.OPS.paintImageXObject, args);
-
- if (cacheKey) {
- localImageCache.set(cacheKey, imageRef, {
- fn: _util.OPS.paintImageXObject,
- args
- });
-
- if (imageRef) {
- (0, _util.assert)(!isInline, "Cannot cache an inline image globally.");
- this.globalImageCache.addPageIndex(imageRef, this.pageIndex);
-
- if (cacheGlobally) {
- this.globalImageCache.setData(imageRef, {
- objId,
- fn: _util.OPS.paintImageXObject,
- args
- });
- }
- }
- }
-
- return undefined;
- },
-
- handleSMask: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) {
- var smaskContent = smask.get("G");
- var smaskOptions = {
- subtype: smask.get("S").name,
- backdrop: smask.get("BC")
- };
- var transferObj = smask.get("TR");
-
- if ((0, _function.isPDFFunction)(transferObj)) {
- const transferFn = this.pdfFunctionFactory.create(transferObj);
- var transferMap = new Uint8Array(256);
- var tmp = new Float32Array(1);
-
- for (var i = 0; i < 256; i++) {
- tmp[0] = i / 255;
- transferFn(tmp, 0, tmp, 0);
- transferMap[i] = tmp[0] * 255 | 0;
- }
-
- smaskOptions.transferMap = transferMap;
- }
-
- return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone());
- },
-
- handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) {
- const tilingOpList = new _operator_list.OperatorList();
- const resourcesArray = [patternDict.get("Resources"), resources];
-
- const patternResources = _primitives.Dict.merge(this.xref, resourcesArray);
-
- return this.getOperatorList({
- stream: pattern,
- task,
- resources: patternResources,
- operatorList: tilingOpList
- }).then(function () {
- return (0, _pattern.getTilingPatternIR)({
- fnArray: tilingOpList.fnArray,
- argsArray: tilingOpList.argsArray
- }, patternDict, args);
- }).then(function (tilingPatternIR) {
- operatorList.addDependencies(tilingOpList.dependencies);
- operatorList.addOp(fn, tilingPatternIR);
- }, reason => {
- if (reason instanceof _util.AbortException) {
- return;
- }
-
- if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern
- });
- (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`);
- return;
- }
-
- throw reason;
- });
- },
-
- handleSetFont: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {
- var fontName;
-
- if (fontArgs) {
- fontArgs = fontArgs.slice();
- fontName = fontArgs[0].name;
- }
-
- return this.loadFont(fontName, fontRef, resources).then(translated => {
- if (!translated.font.isType3Font) {
- return translated;
- }
-
- return translated.loadType3Data(this, resources, operatorList, task).then(function () {
- return translated;
- }).catch(reason => {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3
- });
- return new TranslatedFont({
- loadedName: "g_font_error",
- font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`),
- dict: translated.font,
- extraProperties: this.options.fontExtraProperties
- });
- });
- }).then(translated => {
- state.font = translated.font;
- translated.send(this.handler);
- return translated.loadedName;
- });
- },
-
- handleText(chars, state) {
- const font = state.font;
- const glyphs = font.charsToGlyphs(chars);
-
- if (font.data) {
- const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
-
- if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) {
- PartialEvaluator.buildFontPaths(font, glyphs, this.handler);
- }
- }
-
- return glyphs;
- },
-
- ensureStateFont(state) {
- if (state.font) {
- return;
- }
-
- const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator.");
-
- if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontState
- });
- (0, _util.warn)(`ensureStateFont: "${reason}".`);
- return;
- }
-
- throw reason;
- },
-
- setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, stateManager) {
- var gStateObj = [];
- var gStateKeys = gState.getKeys();
- var promise = Promise.resolve();
-
- for (var i = 0, ii = gStateKeys.length; i < ii; i++) {
- const key = gStateKeys[i];
- const value = gState.get(key);
-
- switch (key) {
- case "Type":
- break;
-
- case "LW":
- case "LC":
- case "LJ":
- case "ML":
- case "D":
- case "RI":
- case "FL":
- case "CA":
- case "ca":
- gStateObj.push([key, value]);
- break;
-
- case "Font":
- promise = promise.then(() => {
- return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) {
- operatorList.addDependency(loadedName);
- gStateObj.push([key, [loadedName, value[1]]]);
- });
- });
- break;
-
- case "BM":
- gStateObj.push([key, normalizeBlendMode(value)]);
- break;
-
- case "SMask":
- if ((0, _primitives.isName)(value, "None")) {
- gStateObj.push([key, false]);
- break;
- }
-
- if ((0, _primitives.isDict)(value)) {
- promise = promise.then(() => {
- return this.handleSMask(value, resources, operatorList, task, stateManager);
- });
- gStateObj.push([key, true]);
- } else {
- (0, _util.warn)("Unsupported SMask type");
- }
-
- break;
-
- case "OP":
- case "op":
- case "OPM":
- case "BG":
- case "BG2":
- case "UCR":
- case "UCR2":
- case "TR":
- case "TR2":
- case "HT":
- case "SM":
- case "SA":
- case "AIS":
- case "TK":
- (0, _util.info)("graphic state operator " + key);
- break;
-
- default:
- (0, _util.info)("Unknown graphic state operator " + key);
- break;
- }
- }
-
- return promise.then(function () {
- if (gStateObj.length > 0) {
- operatorList.addOp(_util.OPS.setGState, [gStateObj]);
- }
- });
- },
- loadFont: function PartialEvaluator_loadFont(fontName, font, resources) {
- const errorFont = () => {
- return Promise.resolve(new TranslatedFont({
- loadedName: "g_font_error",
- font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`),
- dict: font,
- extraProperties: this.options.fontExtraProperties
- }));
- };
-
- var fontRef,
- xref = this.xref;
-
- if (font) {
- if (!(0, _primitives.isRef)(font)) {
- throw new _util.FormatError('The "font" object should be a reference.');
- }
-
- fontRef = font;
- } else {
- var fontRes = resources.get("Font");
-
- if (fontRes) {
- fontRef = fontRes.getRaw(fontName);
- }
- }
-
- if (!fontRef) {
- const partialMsg = `Font "${fontName || font && font.toString()}" is not available`;
-
- if (!this.options.ignoreErrors && !this.parsingType3Font) {
- (0, _util.warn)(`${partialMsg}.`);
- return errorFont();
- }
-
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing
- });
- (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`);
- fontRef = PartialEvaluator.getFallbackFontDict();
- }
-
- if (this.fontCache.has(fontRef)) {
- return this.fontCache.get(fontRef);
- }
-
- font = xref.fetchIfRef(fontRef);
-
- if (!(0, _primitives.isDict)(font)) {
- return errorFont();
- }
-
- if (font.translated) {
- return font.translated;
- }
-
- var fontCapability = (0, _util.createPromiseCapability)();
- var preEvaluatedFont = this.preEvaluateFont(font);
- const {
- descriptor,
- hash
- } = preEvaluatedFont;
- var fontRefIsRef = (0, _primitives.isRef)(fontRef),
- fontID;
-
- if (fontRefIsRef) {
- fontID = fontRef.toString();
- }
-
- if (hash && (0, _primitives.isDict)(descriptor)) {
- if (!descriptor.fontAliases) {
- descriptor.fontAliases = Object.create(null);
- }
-
- var fontAliases = descriptor.fontAliases;
-
- if (fontAliases[hash]) {
- var aliasFontRef = fontAliases[hash].aliasRef;
-
- if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {
- this.fontCache.putAlias(fontRef, aliasFontRef);
- return this.fontCache.get(fontRef);
- }
- } else {
- fontAliases[hash] = {
- fontID: _fonts.Font.getFontID()
- };
- }
-
- if (fontRefIsRef) {
- fontAliases[hash].aliasRef = fontRef;
- }
-
- fontID = fontAliases[hash].fontID;
- }
-
- if (fontRefIsRef) {
- this.fontCache.put(fontRef, fontCapability.promise);
- } else {
- if (!fontID) {
- fontID = this.idFactory.createObjId();
- }
-
- this.fontCache.put(`id_${fontID}`, fontCapability.promise);
- }
-
- (0, _util.assert)(fontID, 'The "fontID" must be defined.');
- font.loadedName = `${this.idFactory.getDocId()}_f${fontID}`;
- font.translated = fontCapability.promise;
- var translatedPromise;
-
- try {
- translatedPromise = this.translateFont(preEvaluatedFont);
- } catch (e) {
- translatedPromise = Promise.reject(e);
- }
-
- translatedPromise.then(translatedFont => {
- if (translatedFont.fontType !== undefined) {
- var xrefFontStats = xref.stats.fontTypes;
- xrefFontStats[translatedFont.fontType] = true;
- }
-
- fontCapability.resolve(new TranslatedFont({
- loadedName: font.loadedName,
- font: translatedFont,
- dict: font,
- extraProperties: this.options.fontExtraProperties
- }));
- }).catch(reason => {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate
- });
-
- try {
- var fontFile3 = descriptor && descriptor.get("FontFile3");
- var subtype = fontFile3 && fontFile3.get("Subtype");
- var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name);
- var xrefFontStats = xref.stats.fontTypes;
- xrefFontStats[fontType] = true;
- } catch (ex) {}
-
- fontCapability.resolve(new TranslatedFont({
- loadedName: font.loadedName,
- font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason),
- dict: font,
- extraProperties: this.options.fontExtraProperties
- }));
- });
- return fontCapability.promise;
- },
-
- buildPath(operatorList, fn, args, parsingText = false) {
- var lastIndex = operatorList.length - 1;
-
- if (!args) {
- args = [];
- }
-
- if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) {
- if (parsingText) {
- (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`);
- operatorList.addOp(_util.OPS.save, null);
- }
-
- operatorList.addOp(_util.OPS.constructPath, [[fn], args]);
-
- if (parsingText) {
- operatorList.addOp(_util.OPS.restore, null);
- }
- } else {
- var opArgs = operatorList.argsArray[lastIndex];
- opArgs[0].push(fn);
- Array.prototype.push.apply(opArgs[1], args);
- }
- },
-
- parseColorSpace({
- cs,
- resources
- }) {
- return new Promise(resolve => {
- resolve(_colorspace.ColorSpace.parse(cs, this.xref, resources, this.pdfFunctionFactory));
- }).catch(reason => {
- if (reason instanceof _util.AbortException) {
- return null;
- }
-
- if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace
- });
- (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
- return null;
- }
-
- throw reason;
- });
- },
-
- async handleColorN(operatorList, fn, args, cs, patterns, resources, task) {
- var patternName = args[args.length - 1];
- var pattern;
-
- if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) {
- var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;
- var typeNum = dict.get("PatternType");
-
- if (typeNum === TILING_PATTERN) {
- var color = cs.base ? cs.base.getRgb(args, 0) : null;
- return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task);
- } else if (typeNum === SHADING_PATTERN) {
- var shading = dict.get("Shading");
- var matrix = dict.getArray("Matrix");
- pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory);
- operatorList.addOp(fn, pattern.getIR());
- return undefined;
- }
-
- throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
- }
-
- throw new _util.FormatError(`Unknown PatternName: ${patternName}`);
- },
-
- getOperatorList({
- stream,
- task,
- resources,
- operatorList,
- initialState = null
- }) {
- resources = resources || _primitives.Dict.empty;
- initialState = initialState || new EvalState();
-
- if (!operatorList) {
- throw new Error('getOperatorList: missing "operatorList" parameter');
- }
-
- var self = this;
- var xref = this.xref;
- let parsingText = false;
- const localImageCache = new _image_utils.LocalImageCache();
-
- var xobjs = resources.get("XObject") || _primitives.Dict.empty;
-
- var patterns = resources.get("Pattern") || _primitives.Dict.empty;
-
- var stateManager = new StateManager(initialState);
- var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
- var timeSlotManager = new TimeSlotManager();
-
- function closePendingRestoreOPS(argument) {
- for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
- operatorList.addOp(_util.OPS.restore, []);
- }
- }
-
- return new Promise(function promiseBody(resolve, reject) {
- const next = function (promise) {
- Promise.all([promise, operatorList.ready]).then(function () {
- try {
- promiseBody(resolve, reject);
- } catch (ex) {
- reject(ex);
- }
- }, reject);
- };
-
- task.ensureNotTerminated();
- timeSlotManager.reset();
- var stop,
- operation = {},
- i,
- ii,
- cs;
-
- while (!(stop = timeSlotManager.check())) {
- operation.args = null;
-
- if (!preprocessor.read(operation)) {
- break;
- }
-
- var args = operation.args;
- var fn = operation.fn;
-
- switch (fn | 0) {
- case _util.OPS.paintXObject:
- var name = args[0].name;
-
- if (name) {
- const localImage = localImageCache.getByName(name);
-
- if (localImage) {
- operatorList.addOp(localImage.fn, localImage.args);
- args = null;
- continue;
- }
- }
-
- next(new Promise(function (resolveXObject, rejectXObject) {
- if (!name) {
- throw new _util.FormatError("XObject must be referred to by name.");
- }
-
- let xobj = xobjs.getRaw(name);
-
- if (xobj instanceof _primitives.Ref) {
- const localImage = localImageCache.getByRef(xobj);
-
- if (localImage) {
- operatorList.addOp(localImage.fn, localImage.args);
- resolveXObject();
- return;
- }
-
- const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);
-
- if (globalImage) {
- operatorList.addDependency(globalImage.objId);
- operatorList.addOp(globalImage.fn, globalImage.args);
- resolveXObject();
- return;
- }
-
- xobj = xref.fetch(xobj);
- }
-
- if (!xobj) {
- operatorList.addOp(fn, args);
- resolveXObject();
- return;
- }
-
- if (!(0, _primitives.isStream)(xobj)) {
- throw new _util.FormatError("XObject should be a stream");
- }
-
- const type = xobj.dict.get("Subtype");
-
- if (!(0, _primitives.isName)(type)) {
- throw new _util.FormatError("XObject should have a Name subtype");
- }
-
- if (type.name === "Form") {
- stateManager.save();
- self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone()).then(function () {
- stateManager.restore();
- resolveXObject();
- }, rejectXObject);
- return;
- } else if (type.name === "Image") {
- self.buildPaintImageXObject({
- resources,
- image: xobj,
- operatorList,
- cacheKey: name,
- localImageCache
- }).then(resolveXObject, rejectXObject);
- return;
- } else if (type.name === "PS") {
- (0, _util.info)("Ignored XObject subtype PS");
- } else {
- throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`);
- }
-
- resolveXObject();
- }).catch(function (reason) {
- if (reason instanceof _util.AbortException) {
- return;
- }
-
- if (self.options.ignoreErrors) {
- self.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorXObject
- });
- (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`);
- return;
- }
-
- throw reason;
- }));
- return;
-
- case _util.OPS.setFont:
- var fontSize = args[1];
- next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) {
- operatorList.addDependency(loadedName);
- operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);
- }));
- return;
-
- case _util.OPS.beginText:
- parsingText = true;
- break;
-
- case _util.OPS.endText:
- parsingText = false;
- break;
-
- case _util.OPS.endInlineImage:
- var cacheKey = args[0].cacheKey;
-
- if (cacheKey) {
- const localImage = localImageCache.getByName(cacheKey);
-
- if (localImage) {
- operatorList.addOp(localImage.fn, localImage.args);
- args = null;
- continue;
- }
- }
-
- next(self.buildPaintImageXObject({
- resources,
- image: args[0],
- isInline: true,
- operatorList,
- cacheKey,
- localImageCache
- }));
- return;
-
- case _util.OPS.showText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- args[0] = self.handleText(args[0], stateManager.state);
- break;
-
- case _util.OPS.showSpacedText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- var arr = args[0];
- var combinedGlyphs = [];
- var arrLength = arr.length;
- var state = stateManager.state;
-
- for (i = 0; i < arrLength; ++i) {
- var arrItem = arr[i];
-
- if ((0, _util.isString)(arrItem)) {
- Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state));
- } else if ((0, _util.isNum)(arrItem)) {
- combinedGlyphs.push(arrItem);
- }
- }
-
- args[0] = combinedGlyphs;
- fn = _util.OPS.showText;
- break;
-
- case _util.OPS.nextLineShowText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- operatorList.addOp(_util.OPS.nextLine);
- args[0] = self.handleText(args[0], stateManager.state);
- fn = _util.OPS.showText;
- break;
-
- case _util.OPS.nextLineSetSpacingShowText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- operatorList.addOp(_util.OPS.nextLine);
- operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]);
- operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]);
- args[0] = self.handleText(args[0], stateManager.state);
- fn = _util.OPS.showText;
- break;
-
- case _util.OPS.setTextRenderingMode:
- stateManager.state.textRenderingMode = args[0];
- break;
-
- case _util.OPS.setFillColorSpace:
- next(self.parseColorSpace({
- cs: args[0],
- resources
- }).then(function (colorSpace) {
- if (colorSpace) {
- stateManager.state.fillColorSpace = colorSpace;
- }
- }));
- return;
-
- case _util.OPS.setStrokeColorSpace:
- next(self.parseColorSpace({
- cs: args[0],
- resources
- }).then(function (colorSpace) {
- if (colorSpace) {
- stateManager.state.strokeColorSpace = colorSpace;
- }
- }));
- return;
-
- case _util.OPS.setFillColor:
- cs = stateManager.state.fillColorSpace;
- args = cs.getRgb(args, 0);
- fn = _util.OPS.setFillRGBColor;
- break;
-
- case _util.OPS.setStrokeColor:
- cs = stateManager.state.strokeColorSpace;
- args = cs.getRgb(args, 0);
- fn = _util.OPS.setStrokeRGBColor;
- break;
-
- case _util.OPS.setFillGray:
- stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray;
- args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);
- fn = _util.OPS.setFillRGBColor;
- break;
-
- case _util.OPS.setStrokeGray:
- stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;
- args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);
- fn = _util.OPS.setStrokeRGBColor;
- break;
-
- case _util.OPS.setFillCMYKColor:
- stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk;
- args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);
- fn = _util.OPS.setFillRGBColor;
- break;
-
- case _util.OPS.setStrokeCMYKColor:
- stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk;
- args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);
- fn = _util.OPS.setStrokeRGBColor;
- break;
-
- case _util.OPS.setFillRGBColor:
- stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb;
- args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);
- break;
-
- case _util.OPS.setStrokeRGBColor:
- stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb;
- args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);
- break;
-
- case _util.OPS.setFillColorN:
- cs = stateManager.state.fillColorSpace;
-
- if (cs.name === "Pattern") {
- next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task));
- return;
- }
-
- args = cs.getRgb(args, 0);
- fn = _util.OPS.setFillRGBColor;
- break;
-
- case _util.OPS.setStrokeColorN:
- cs = stateManager.state.strokeColorSpace;
-
- if (cs.name === "Pattern") {
- next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task));
- return;
- }
-
- args = cs.getRgb(args, 0);
- fn = _util.OPS.setStrokeRGBColor;
- break;
-
- case _util.OPS.shadingFill:
- var shadingRes = resources.get("Shading");
-
- if (!shadingRes) {
- throw new _util.FormatError("No shading resource found");
- }
-
- var shading = shadingRes.get(args[0].name);
-
- if (!shading) {
- throw new _util.FormatError("No shading object found");
- }
-
- var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self.pdfFunctionFactory);
-
- var patternIR = shadingFill.getIR();
- args = [patternIR];
- fn = _util.OPS.shadingFill;
- break;
-
- case _util.OPS.setGState:
- var dictName = args[0];
- var extGState = resources.get("ExtGState");
-
- if (!(0, _primitives.isDict)(extGState) || !extGState.has(dictName.name)) {
- break;
- }
-
- var gState = extGState.get(dictName.name);
- next(self.setGState(resources, gState, operatorList, task, stateManager));
- return;
-
- case _util.OPS.moveTo:
- case _util.OPS.lineTo:
- case _util.OPS.curveTo:
- case _util.OPS.curveTo2:
- case _util.OPS.curveTo3:
- case _util.OPS.closePath:
- case _util.OPS.rectangle:
- self.buildPath(operatorList, fn, args, parsingText);
- continue;
-
- case _util.OPS.markPoint:
- case _util.OPS.markPointProps:
- case _util.OPS.beginMarkedContent:
- case _util.OPS.beginMarkedContentProps:
- case _util.OPS.endMarkedContent:
- case _util.OPS.beginCompat:
- case _util.OPS.endCompat:
- continue;
-
- default:
- if (args !== null) {
- for (i = 0, ii = args.length; i < ii; i++) {
- if (args[i] instanceof _primitives.Dict) {
- break;
- }
- }
-
- if (i < ii) {
- (0, _util.warn)("getOperatorList - ignoring operator: " + fn);
- continue;
- }
- }
-
- }
-
- operatorList.addOp(fn, args);
- }
-
- if (stop) {
- next(deferred);
- return;
- }
-
- closePendingRestoreOPS();
- resolve();
- }).catch(reason => {
- if (reason instanceof _util.AbortException) {
- return;
- }
-
- if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList
- });
- (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
- closePendingRestoreOPS();
- return;
- }
-
- throw reason;
- });
- },
-
- getTextContent({
- stream,
- task,
- resources,
- stateManager = null,
- normalizeWhitespace = false,
- combineTextItems = false,
- sink,
- seenStyles = Object.create(null)
- }) {
- resources = resources || _primitives.Dict.empty;
- stateManager = stateManager || new StateManager(new TextState());
- var WhitespaceRegexp = /\s/g;
- var textContent = {
- items: [],
- styles: Object.create(null)
- };
- var textContentItem = {
- initialized: false,
- str: [],
- width: 0,
- height: 0,
- vertical: false,
- lastAdvanceWidth: 0,
- lastAdvanceHeight: 0,
- textAdvanceScale: 0,
- spaceWidth: 0,
- fakeSpaceMin: Infinity,
- fakeMultiSpaceMin: Infinity,
- fakeMultiSpaceMax: -0,
- textRunBreakAllowed: false,
- transform: null,
- fontName: null
- };
- var SPACE_FACTOR = 0.3;
- var MULTI_SPACE_FACTOR = 1.5;
- var MULTI_SPACE_FACTOR_MAX = 4;
- var self = this;
- var xref = this.xref;
- var xobjs = null;
- const emptyXObjectCache = new _image_utils.LocalImageCache();
- var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
- var textState;
-
- function ensureTextContentItem() {
- if (textContentItem.initialized) {
- return textContentItem;
- }
-
- var font = textState.font;
-
- if (!(font.loadedName in seenStyles)) {
- seenStyles[font.loadedName] = true;
- textContent.styles[font.loadedName] = {
- fontFamily: font.fallbackName,
- ascent: font.ascent,
- descent: font.descent,
- vertical: font.vertical
- };
- }
-
- textContentItem.fontName = font.loadedName;
- var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];
-
- if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) {
- const glyphHeight = font.bbox[3] - font.bbox[1];
-
- if (glyphHeight > 0) {
- tsm[3] *= glyphHeight * textState.fontMatrix[3];
- }
- }
-
- var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));
-
- textContentItem.transform = trm;
-
- if (!font.vertical) {
- textContentItem.width = 0;
- textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);
- textContentItem.vertical = false;
- } else {
- textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);
- textContentItem.height = 0;
- textContentItem.vertical = true;
- }
-
- var a = textState.textLineMatrix[0];
- var b = textState.textLineMatrix[1];
- var scaleLineX = Math.sqrt(a * a + b * b);
- a = textState.ctm[0];
- b = textState.ctm[1];
- var scaleCtmX = Math.sqrt(a * a + b * b);
- textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;
- textContentItem.lastAdvanceWidth = 0;
- textContentItem.lastAdvanceHeight = 0;
- var spaceWidth = font.spaceWidth / 1000 * textState.fontSize;
-
- if (spaceWidth) {
- textContentItem.spaceWidth = spaceWidth;
- textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR;
- textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR;
- textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX;
- textContentItem.textRunBreakAllowed = !font.isMonospace;
- } else {
- textContentItem.spaceWidth = 0;
- textContentItem.fakeSpaceMin = Infinity;
- textContentItem.fakeMultiSpaceMin = Infinity;
- textContentItem.fakeMultiSpaceMax = 0;
- textContentItem.textRunBreakAllowed = false;
- }
-
- textContentItem.initialized = true;
- return textContentItem;
- }
-
- function replaceWhitespace(str) {
- var i = 0,
- ii = str.length,
- code;
-
- while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) {
- i++;
- }
-
- return i < ii ? str.replace(WhitespaceRegexp, " ") : str;
- }
-
- function runBidiTransform(textChunk) {
- var str = textChunk.str.join("");
- var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical);
- return {
- str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str,
- dir: bidiResult.dir,
- width: textChunk.width,
- height: textChunk.height,
- transform: textChunk.transform,
- fontName: textChunk.fontName
- };
- }
-
- function handleSetFont(fontName, fontRef) {
- return self.loadFont(fontName, fontRef, resources).then(function (translated) {
- textState.font = translated.font;
- textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX;
- });
- }
-
- function buildTextContentItem(chars) {
- var font = textState.font;
- var textChunk = ensureTextContentItem();
- var width = 0;
- var height = 0;
- var glyphs = font.charsToGlyphs(chars);
-
- for (var i = 0; i < glyphs.length; i++) {
- var glyph = glyphs[i];
- var glyphWidth = null;
-
- if (font.vertical && glyph.vmetric) {
- glyphWidth = glyph.vmetric[0];
- } else {
- glyphWidth = glyph.width;
- }
-
- var glyphUnicode = glyph.unicode;
- var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();
-
- if (NormalizedUnicodes[glyphUnicode] !== undefined) {
- glyphUnicode = NormalizedUnicodes[glyphUnicode];
- }
-
- glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode);
- var charSpacing = textState.charSpacing;
-
- if (glyph.isSpace) {
- var wordSpacing = textState.wordSpacing;
- charSpacing += wordSpacing;
-
- if (wordSpacing > 0) {
- addFakeSpaces(wordSpacing, textChunk.str);
- }
- }
-
- var tx = 0;
- var ty = 0;
-
- if (!font.vertical) {
- var w0 = glyphWidth * textState.fontMatrix[0];
- tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale;
- width += tx;
- } else {
- var w1 = glyphWidth * textState.fontMatrix[0];
- ty = w1 * textState.fontSize + charSpacing;
- height += ty;
- }
-
- textState.translateTextMatrix(tx, ty);
- textChunk.str.push(glyphUnicode);
- }
-
- if (!font.vertical) {
- textChunk.lastAdvanceWidth = width;
- textChunk.width += width;
- } else {
- textChunk.lastAdvanceHeight = height;
- textChunk.height += Math.abs(height);
- }
-
- return textChunk;
- }
-
- function addFakeSpaces(width, strBuf) {
- if (width < textContentItem.fakeSpaceMin) {
- return;
- }
-
- if (width < textContentItem.fakeMultiSpaceMin) {
- strBuf.push(" ");
- return;
- }
-
- var fakeSpaces = Math.round(width / textContentItem.spaceWidth);
-
- while (fakeSpaces-- > 0) {
- strBuf.push(" ");
- }
- }
-
- function flushTextContentItem() {
- if (!textContentItem.initialized) {
- return;
- }
-
- if (!textContentItem.vertical) {
- textContentItem.width *= textContentItem.textAdvanceScale;
- } else {
- textContentItem.height *= textContentItem.textAdvanceScale;
- }
-
- textContent.items.push(runBidiTransform(textContentItem));
- textContentItem.initialized = false;
- textContentItem.str.length = 0;
- }
-
- function enqueueChunk() {
- const length = textContent.items.length;
-
- if (length > 0) {
- sink.enqueue(textContent, length);
- textContent.items = [];
- textContent.styles = Object.create(null);
- }
- }
-
- var timeSlotManager = new TimeSlotManager();
- return new Promise(function promiseBody(resolve, reject) {
- const next = function (promise) {
- enqueueChunk();
- Promise.all([promise, sink.ready]).then(function () {
- try {
- promiseBody(resolve, reject);
- } catch (ex) {
- reject(ex);
- }
- }, reject);
- };
-
- task.ensureNotTerminated();
- timeSlotManager.reset();
- var stop,
- operation = {},
- args = [];
-
- while (!(stop = timeSlotManager.check())) {
- args.length = 0;
- operation.args = args;
-
- if (!preprocessor.read(operation)) {
- break;
- }
-
- textState = stateManager.state;
- var fn = operation.fn;
- args = operation.args;
- var advance, diff;
-
- switch (fn | 0) {
- case _util.OPS.setFont:
- var fontNameArg = args[0].name,
- fontSizeArg = args[1];
-
- if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) {
- break;
- }
-
- flushTextContentItem();
- textState.fontName = fontNameArg;
- textState.fontSize = fontSizeArg;
- next(handleSetFont(fontNameArg, null));
- return;
-
- case _util.OPS.setTextRise:
- flushTextContentItem();
- textState.textRise = args[0];
- break;
-
- case _util.OPS.setHScale:
- flushTextContentItem();
- textState.textHScale = args[0] / 100;
- break;
-
- case _util.OPS.setLeading:
- flushTextContentItem();
- textState.leading = args[0];
- break;
-
- case _util.OPS.moveText:
- var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0;
- advance = args[0] - args[1];
-
- if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) {
- textState.translateTextLineMatrix(args[0], args[1]);
- textContentItem.width += args[0] - textContentItem.lastAdvanceWidth;
- textContentItem.height += args[1] - textContentItem.lastAdvanceHeight;
- diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight);
- addFakeSpaces(diff, textContentItem.str);
- break;
- }
-
- flushTextContentItem();
- textState.translateTextLineMatrix(args[0], args[1]);
- textState.textMatrix = textState.textLineMatrix.slice();
- break;
-
- case _util.OPS.setLeadingMoveText:
- flushTextContentItem();
- textState.leading = -args[1];
- textState.translateTextLineMatrix(args[0], args[1]);
- textState.textMatrix = textState.textLineMatrix.slice();
- break;
-
- case _util.OPS.nextLine:
- flushTextContentItem();
- textState.carriageReturn();
- break;
-
- case _util.OPS.setTextMatrix:
- advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]);
-
- if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) {
- textState.translateTextLineMatrix(advance.width, advance.height);
- textContentItem.width += advance.width - textContentItem.lastAdvanceWidth;
- textContentItem.height += advance.height - textContentItem.lastAdvanceHeight;
- diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight);
- addFakeSpaces(diff, textContentItem.str);
- break;
- }
-
- flushTextContentItem();
- textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
- textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
- break;
-
- case _util.OPS.setCharSpacing:
- textState.charSpacing = args[0];
- break;
-
- case _util.OPS.setWordSpacing:
- textState.wordSpacing = args[0];
- break;
-
- case _util.OPS.beginText:
- flushTextContentItem();
- textState.textMatrix = _util.IDENTITY_MATRIX.slice();
- textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();
- break;
-
- case _util.OPS.showSpacedText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- var items = args[0];
- var offset;
-
- for (var j = 0, jj = items.length; j < jj; j++) {
- if (typeof items[j] === "string") {
- buildTextContentItem(items[j]);
- } else if ((0, _util.isNum)(items[j])) {
- ensureTextContentItem();
- advance = items[j] * textState.fontSize / 1000;
- var breakTextRun = false;
-
- if (textState.font.vertical) {
- offset = advance;
- textState.translateTextMatrix(0, offset);
- breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;
-
- if (!breakTextRun) {
- textContentItem.height += offset;
- }
- } else {
- advance = -advance;
- offset = advance * textState.textHScale;
- textState.translateTextMatrix(offset, 0);
- breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;
-
- if (!breakTextRun) {
- textContentItem.width += offset;
- }
- }
-
- if (breakTextRun) {
- flushTextContentItem();
- } else if (advance > 0) {
- addFakeSpaces(advance, textContentItem.str);
- }
- }
- }
-
- break;
-
- case _util.OPS.showText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- buildTextContentItem(args[0]);
- break;
-
- case _util.OPS.nextLineShowText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- flushTextContentItem();
- textState.carriageReturn();
- buildTextContentItem(args[0]);
- break;
-
- case _util.OPS.nextLineSetSpacingShowText:
- if (!stateManager.state.font) {
- self.ensureStateFont(stateManager.state);
- continue;
- }
-
- flushTextContentItem();
- textState.wordSpacing = args[0];
- textState.charSpacing = args[1];
- textState.carriageReturn();
- buildTextContentItem(args[2]);
- break;
-
- case _util.OPS.paintXObject:
- flushTextContentItem();
-
- if (!xobjs) {
- xobjs = resources.get("XObject") || _primitives.Dict.empty;
- }
-
- var name = args[0].name;
-
- if (name && emptyXObjectCache.getByName(name)) {
- break;
- }
-
- next(new Promise(function (resolveXObject, rejectXObject) {
- if (!name) {
- throw new _util.FormatError("XObject must be referred to by name.");
- }
-
- let xobj = xobjs.getRaw(name);
-
- if (xobj instanceof _primitives.Ref) {
- if (emptyXObjectCache.getByRef(xobj)) {
- resolveXObject();
- return;
- }
-
- xobj = xref.fetch(xobj);
- }
-
- if (!xobj) {
- resolveXObject();
- return;
- }
-
- if (!(0, _primitives.isStream)(xobj)) {
- throw new _util.FormatError("XObject should be a stream");
- }
-
- const type = xobj.dict.get("Subtype");
-
- if (!(0, _primitives.isName)(type)) {
- throw new _util.FormatError("XObject should have a Name subtype");
- }
-
- if (type.name !== "Form") {
- emptyXObjectCache.set(name, xobj.dict.objId, true);
- resolveXObject();
- return;
- }
-
- const currentState = stateManager.state.clone();
- const xObjStateManager = new StateManager(currentState);
- const matrix = xobj.dict.getArray("Matrix");
-
- if (Array.isArray(matrix) && matrix.length === 6) {
- xObjStateManager.transform(matrix);
- }
-
- enqueueChunk();
- const sinkWrapper = {
- enqueueInvoked: false,
-
- enqueue(chunk, size) {
- this.enqueueInvoked = true;
- sink.enqueue(chunk, size);
- },
-
- get desiredSize() {
- return sink.desiredSize;
- },
-
- get ready() {
- return sink.ready;
- }
-
- };
- self.getTextContent({
- stream: xobj,
- task,
- resources: xobj.dict.get("Resources") || resources,
- stateManager: xObjStateManager,
- normalizeWhitespace,
- combineTextItems,
- sink: sinkWrapper,
- seenStyles
- }).then(function () {
- if (!sinkWrapper.enqueueInvoked) {
- emptyXObjectCache.set(name, xobj.dict.objId, true);
- }
-
- resolveXObject();
- }, rejectXObject);
- }).catch(function (reason) {
- if (reason instanceof _util.AbortException) {
- return;
- }
-
- if (self.options.ignoreErrors) {
- (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`);
- return;
- }
-
- throw reason;
- }));
- return;
-
- case _util.OPS.setGState:
- flushTextContentItem();
- var dictName = args[0];
- var extGState = resources.get("ExtGState");
-
- if (!(0, _primitives.isDict)(extGState) || !(0, _primitives.isName)(dictName)) {
- break;
- }
-
- var gState = extGState.get(dictName.name);
-
- if (!(0, _primitives.isDict)(gState)) {
- break;
- }
-
- var gStateFont = gState.get("Font");
-
- if (gStateFont) {
- textState.fontName = null;
- textState.fontSize = gStateFont[1];
- next(handleSetFont(null, gStateFont[0]));
- return;
- }
-
- break;
- }
-
- if (textContent.items.length >= sink.desiredSize) {
- stop = true;
- break;
- }
- }
-
- if (stop) {
- next(deferred);
- return;
- }
-
- flushTextContentItem();
- enqueueChunk();
- resolve();
- }).catch(reason => {
- if (reason instanceof _util.AbortException) {
- return;
- }
-
- if (this.options.ignoreErrors) {
- (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
- flushTextContentItem();
- enqueueChunk();
- return;
- }
-
- throw reason;
- });
- },
-
- extractDataStructures: function PartialEvaluator_extractDataStructures(dict, baseDict, properties) {
- const xref = this.xref;
- let cidToGidBytes;
- var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
- var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined);
-
- if (properties.composite) {
- var cidSystemInfo = dict.get("CIDSystemInfo");
-
- if ((0, _primitives.isDict)(cidSystemInfo)) {
- properties.cidSystemInfo = {
- registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")),
- ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")),
- supplement: cidSystemInfo.get("Supplement")
- };
- }
-
- var cidToGidMap = dict.get("CIDToGIDMap");
-
- if ((0, _primitives.isStream)(cidToGidMap)) {
- cidToGidBytes = cidToGidMap.getBytes();
- }
- }
-
- var differences = [];
- var baseEncodingName = null;
- var encoding;
-
- if (dict.has("Encoding")) {
- encoding = dict.get("Encoding");
-
- if ((0, _primitives.isDict)(encoding)) {
- baseEncodingName = encoding.get("BaseEncoding");
- baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null;
-
- if (encoding.has("Differences")) {
- var diffEncoding = encoding.get("Differences");
- var index = 0;
-
- for (var j = 0, jj = diffEncoding.length; j < jj; j++) {
- var data = xref.fetchIfRef(diffEncoding[j]);
-
- if ((0, _util.isNum)(data)) {
- index = data;
- } else if ((0, _primitives.isName)(data)) {
- differences[index++] = data.name;
- } else {
- throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`);
- }
- }
- }
- } else if ((0, _primitives.isName)(encoding)) {
- baseEncodingName = encoding.name;
- } else {
- throw new _util.FormatError("Encoding is not a Name nor a Dict");
- }
-
- if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") {
- baseEncodingName = null;
- }
- }
-
- if (baseEncodingName) {
- properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice();
- } else {
- var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic);
- var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic);
- encoding = _encodings.StandardEncoding;
-
- if (properties.type === "TrueType" && !isNonsymbolicFont) {
- encoding = _encodings.WinAnsiEncoding;
- }
-
- if (isSymbolicFont) {
- encoding = _encodings.MacRomanEncoding;
-
- if (!properties.file) {
- if (/Symbol/i.test(properties.name)) {
- encoding = _encodings.SymbolSetEncoding;
- } else if (/Dingbats|Wingdings/i.test(properties.name)) {
- encoding = _encodings.ZapfDingbatsEncoding;
- }
- }
- }
-
- properties.defaultEncoding = encoding;
- }
-
- properties.differences = differences;
- properties.baseEncodingName = baseEncodingName;
- properties.hasEncoding = !!baseEncodingName || differences.length > 0;
- properties.dict = dict;
- return toUnicodePromise.then(readToUnicode => {
- properties.toUnicode = readToUnicode;
- return this.buildToUnicode(properties);
- }).then(builtToUnicode => {
- properties.toUnicode = builtToUnicode;
-
- if (cidToGidBytes) {
- properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode);
- }
-
- return properties;
- });
- },
-
- _buildSimpleFontToUnicode(properties, forceGlyphs = false) {
- (0, _util.assert)(!properties.composite, "Must be a simple font.");
- const toUnicode = [];
- const encoding = properties.defaultEncoding.slice();
- const baseEncodingName = properties.baseEncodingName;
- const differences = properties.differences;
-
- for (const charcode in differences) {
- const glyphName = differences[charcode];
-
- if (glyphName === ".notdef") {
- continue;
- }
-
- encoding[charcode] = glyphName;
- }
-
- const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
-
- for (const charcode in encoding) {
- let glyphName = encoding[charcode];
-
- if (glyphName === "") {
- continue;
- } else if (glyphsUnicodeMap[glyphName] === undefined) {
- let code = 0;
-
- switch (glyphName[0]) {
- case "G":
- if (glyphName.length === 3) {
- code = parseInt(glyphName.substring(1), 16);
- }
-
- break;
-
- case "g":
- if (glyphName.length === 5) {
- code = parseInt(glyphName.substring(1), 16);
- }
-
- break;
-
- case "C":
- case "c":
- if (glyphName.length >= 3 && glyphName.length <= 4) {
- const codeStr = glyphName.substring(1);
-
- if (forceGlyphs) {
- code = parseInt(codeStr, 16);
- break;
- }
-
- code = +codeStr;
-
- if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {
- return this._buildSimpleFontToUnicode(properties, true);
- }
- }
-
- break;
-
- default:
- const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
-
- if (unicode !== -1) {
- code = unicode;
- }
-
- }
-
- if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {
- if (baseEncodingName && code === +charcode) {
- const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName);
-
- if (baseEncoding && (glyphName = baseEncoding[charcode])) {
- toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);
- continue;
- }
- }
-
- toUnicode[charcode] = String.fromCodePoint(code);
- }
-
- continue;
- }
-
- toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);
- }
-
- return new _fonts.ToUnicodeMap(toUnicode);
- },
-
- buildToUnicode(properties) {
- properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0;
-
- if (properties.hasIncludedToUnicodeMap) {
- if (!properties.composite && properties.hasEncoding) {
- properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties);
- }
-
- return Promise.resolve(properties.toUnicode);
- }
-
- if (!properties.composite) {
- return Promise.resolve(this._buildSimpleFontToUnicode(properties));
- }
-
- if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) {
- const registry = properties.cidSystemInfo.registry;
- const ordering = properties.cidSystemInfo.ordering;
-
- const ucs2CMapName = _primitives.Name.get(registry + "-" + ordering + "-UCS2");
-
- return _cmap.CMapFactory.create({
- encoding: ucs2CMapName,
- fetchBuiltInCMap: this.fetchBuiltInCMap,
- useCMap: null
- }).then(function (ucs2CMap) {
- const cMap = properties.cMap;
- const toUnicode = [];
- cMap.forEach(function (charcode, cid) {
- if (cid > 0xffff) {
- throw new _util.FormatError("Max size of CID is 65,535");
- }
-
- const ucs2 = ucs2CMap.lookup(cid);
-
- if (ucs2) {
- toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));
- }
- });
- return new _fonts.ToUnicodeMap(toUnicode);
- });
- }
-
- return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar));
- },
-
- readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) {
- var cmapObj = toUnicode;
-
- if ((0, _primitives.isName)(cmapObj)) {
- return _cmap.CMapFactory.create({
- encoding: cmapObj,
- fetchBuiltInCMap: this.fetchBuiltInCMap,
- useCMap: null
- }).then(function (cmap) {
- if (cmap instanceof _cmap.IdentityCMap) {
- return new _fonts.IdentityToUnicodeMap(0, 0xffff);
- }
-
- return new _fonts.ToUnicodeMap(cmap.getMap());
- });
- } else if ((0, _primitives.isStream)(cmapObj)) {
- return _cmap.CMapFactory.create({
- encoding: cmapObj,
- fetchBuiltInCMap: this.fetchBuiltInCMap,
- useCMap: null
- }).then(function (cmap) {
- if (cmap instanceof _cmap.IdentityCMap) {
- return new _fonts.IdentityToUnicodeMap(0, 0xffff);
- }
-
- var map = new Array(cmap.length);
- cmap.forEach(function (charCode, token) {
- var str = [];
-
- for (var k = 0; k < token.length; k += 2) {
- var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
-
- if ((w1 & 0xf800) !== 0xd800) {
- str.push(w1);
- continue;
- }
-
- k += 2;
- var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
- str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
- }
-
- map[charCode] = String.fromCodePoint.apply(String, str);
- });
- return new _fonts.ToUnicodeMap(map);
- }, reason => {
- if (reason instanceof _util.AbortException) {
- return null;
- }
-
- if (this.options.ignoreErrors) {
- this.handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode
- });
- (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
- return null;
- }
-
- throw reason;
- });
- }
-
- return Promise.resolve(null);
- },
-
- readCidToGidMap(glyphsData, toUnicode) {
- var result = [];
-
- for (var j = 0, jj = glyphsData.length; j < jj; j++) {
- var glyphID = glyphsData[j++] << 8 | glyphsData[j];
- const code = j >> 1;
-
- if (glyphID === 0 && !toUnicode.has(code)) {
- continue;
- }
-
- result[code] = glyphID;
- }
-
- return result;
- },
-
- extractWidths: function PartialEvaluator_extractWidths(dict, descriptor, properties) {
- var xref = this.xref;
- var glyphsWidths = [];
- var defaultWidth = 0;
- var glyphsVMetrics = [];
- var defaultVMetrics;
- var i, ii, j, jj, start, code, widths;
-
- if (properties.composite) {
- defaultWidth = dict.has("DW") ? dict.get("DW") : 1000;
- widths = dict.get("W");
-
- if (widths) {
- for (i = 0, ii = widths.length; i < ii; i++) {
- start = xref.fetchIfRef(widths[i++]);
- code = xref.fetchIfRef(widths[i]);
-
- if (Array.isArray(code)) {
- for (j = 0, jj = code.length; j < jj; j++) {
- glyphsWidths[start++] = xref.fetchIfRef(code[j]);
- }
- } else {
- var width = xref.fetchIfRef(widths[++i]);
-
- for (j = start; j <= code; j++) {
- glyphsWidths[j] = width;
- }
- }
- }
- }
-
- if (properties.vertical) {
- var vmetrics = dict.getArray("DW2") || [880, -1000];
- defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];
- vmetrics = dict.get("W2");
-
- if (vmetrics) {
- for (i = 0, ii = vmetrics.length; i < ii; i++) {
- start = xref.fetchIfRef(vmetrics[i++]);
- code = xref.fetchIfRef(vmetrics[i]);
-
- if (Array.isArray(code)) {
- for (j = 0, jj = code.length; j < jj; j++) {
- glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];
- }
- } else {
- var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];
-
- for (j = start; j <= code; j++) {
- glyphsVMetrics[j] = vmetric;
- }
- }
- }
- }
- }
- } else {
- var firstChar = properties.firstChar;
- widths = dict.get("Widths");
-
- if (widths) {
- j = firstChar;
-
- for (i = 0, ii = widths.length; i < ii; i++) {
- glyphsWidths[j++] = xref.fetchIfRef(widths[i]);
- }
-
- defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0;
- } else {
- var baseFontName = dict.get("BaseFont");
-
- if ((0, _primitives.isName)(baseFontName)) {
- var metrics = this.getBaseFontMetrics(baseFontName.name);
- glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);
- defaultWidth = metrics.defaultWidth;
- }
- }
- }
-
- var isMonospace = true;
- var firstWidth = defaultWidth;
-
- for (var glyph in glyphsWidths) {
- var glyphWidth = glyphsWidths[glyph];
-
- if (!glyphWidth) {
- continue;
- }
-
- if (!firstWidth) {
- firstWidth = glyphWidth;
- continue;
- }
-
- if (firstWidth !== glyphWidth) {
- isMonospace = false;
- break;
- }
- }
-
- if (isMonospace) {
- properties.flags |= _fonts.FontFlags.FixedPitch;
- }
-
- properties.defaultWidth = defaultWidth;
- properties.widths = glyphsWidths;
- properties.defaultVMetrics = defaultVMetrics;
- properties.vmetrics = glyphsVMetrics;
- },
- isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) {
- var fontNameWoStyle = baseFontName.split("-")[0];
- return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1;
- },
- getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) {
- var defaultWidth = 0;
- var widths = [];
- var monospace = false;
- var stdFontMap = (0, _standard_fonts.getStdFontMap)();
- var lookupName = stdFontMap[name] || name;
- var Metrics = (0, _metrics.getMetrics)();
-
- if (!(lookupName in Metrics)) {
- if (this.isSerifFont(name)) {
- lookupName = "Times-Roman";
- } else {
- lookupName = "Helvetica";
- }
- }
-
- var glyphWidths = Metrics[lookupName];
-
- if ((0, _util.isNum)(glyphWidths)) {
- defaultWidth = glyphWidths;
- monospace = true;
- } else {
- widths = glyphWidths();
- }
-
- return {
- defaultWidth,
- monospace,
- widths
- };
- },
- buildCharCodeToWidth: function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, properties) {
- var widths = Object.create(null);
- var differences = properties.differences;
- var encoding = properties.defaultEncoding;
-
- for (var charCode = 0; charCode < 256; charCode++) {
- if (charCode in differences && widthsByGlyphName[differences[charCode]]) {
- widths[charCode] = widthsByGlyphName[differences[charCode]];
- continue;
- }
-
- if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {
- widths[charCode] = widthsByGlyphName[encoding[charCode]];
- continue;
- }
- }
-
- return widths;
- },
- preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict) {
- var baseDict = dict;
- var type = dict.get("Subtype");
-
- if (!(0, _primitives.isName)(type)) {
- throw new _util.FormatError("invalid font Subtype");
- }
-
- var composite = false;
- var uint8array;
-
- if (type.name === "Type0") {
- var df = dict.get("DescendantFonts");
-
- if (!df) {
- throw new _util.FormatError("Descendant fonts are not specified");
- }
-
- dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;
- type = dict.get("Subtype");
-
- if (!(0, _primitives.isName)(type)) {
- throw new _util.FormatError("invalid font Subtype");
- }
-
- composite = true;
- }
-
- var descriptor = dict.get("FontDescriptor");
-
- if (descriptor) {
- var hash = new _murmurhash.MurmurHash3_64();
- var encoding = baseDict.getRaw("Encoding");
-
- if ((0, _primitives.isName)(encoding)) {
- hash.update(encoding.name);
- } else if ((0, _primitives.isRef)(encoding)) {
- hash.update(encoding.toString());
- } else if ((0, _primitives.isDict)(encoding)) {
- var keys = encoding.getKeys();
-
- for (var i = 0, ii = keys.length; i < ii; i++) {
- var entry = encoding.getRaw(keys[i]);
-
- if ((0, _primitives.isName)(entry)) {
- hash.update(entry.name);
- } else if ((0, _primitives.isRef)(entry)) {
- hash.update(entry.toString());
- } else if (Array.isArray(entry)) {
- var diffLength = entry.length,
- diffBuf = new Array(diffLength);
-
- for (var j = 0; j < diffLength; j++) {
- var diffEntry = entry[j];
-
- if ((0, _primitives.isName)(diffEntry)) {
- diffBuf[j] = diffEntry.name;
- } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) {
- diffBuf[j] = diffEntry.toString();
- }
- }
-
- hash.update(diffBuf.join());
- }
- }
- }
-
- const firstChar = dict.get("FirstChar") || 0;
- const lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff);
- hash.update(`${firstChar}-${lastChar}`);
- var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
-
- if ((0, _primitives.isStream)(toUnicode)) {
- var stream = toUnicode.str || toUnicode;
- uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);
- hash.update(uint8array);
- } else if ((0, _primitives.isName)(toUnicode)) {
- hash.update(toUnicode.name);
- }
-
- var widths = dict.get("Widths") || baseDict.get("Widths");
-
- if (widths) {
- uint8array = new Uint8Array(new Uint32Array(widths).buffer);
- hash.update(uint8array);
- }
- }
-
- return {
- descriptor,
- dict,
- baseDict,
- composite,
- type: type.name,
- hash: hash ? hash.hexdigest() : ""
- };
- },
- translateFont: function PartialEvaluator_translateFont(preEvaluatedFont) {
- var baseDict = preEvaluatedFont.baseDict;
- var dict = preEvaluatedFont.dict;
- var composite = preEvaluatedFont.composite;
- var descriptor = preEvaluatedFont.descriptor;
- var type = preEvaluatedFont.type;
- var maxCharIndex = composite ? 0xffff : 0xff;
- var properties;
- const firstChar = dict.get("FirstChar") || 0;
- const lastChar = dict.get("LastChar") || maxCharIndex;
-
- if (!descriptor) {
- if (type === "Type3") {
- descriptor = new _primitives.Dict(null);
- descriptor.set("FontName", _primitives.Name.get(type));
- descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]);
- } else {
- var baseFontName = dict.get("BaseFont");
-
- if (!(0, _primitives.isName)(baseFontName)) {
- throw new _util.FormatError("Base font is not specified");
- }
-
- baseFontName = baseFontName.name.replace(/[,_]/g, "-");
- var metrics = this.getBaseFontMetrics(baseFontName);
- var fontNameWoStyle = baseFontName.split("-")[0];
- var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic);
- properties = {
- type,
- name: baseFontName,
- widths: metrics.widths,
- defaultWidth: metrics.defaultWidth,
- flags,
- firstChar,
- lastChar
- };
- const widths = dict.get("Widths");
- return this.extractDataStructures(dict, dict, properties).then(newProperties => {
- if (widths) {
- const glyphWidths = [];
- let j = firstChar;
-
- for (let i = 0, ii = widths.length; i < ii; i++) {
- glyphWidths[j++] = this.xref.fetchIfRef(widths[i]);
- }
-
- newProperties.widths = glyphWidths;
- } else {
- newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties);
- }
-
- return new _fonts.Font(baseFontName, null, newProperties);
- });
- }
- }
-
- var fontName = descriptor.get("FontName");
- var baseFont = dict.get("BaseFont");
-
- if ((0, _util.isString)(fontName)) {
- fontName = _primitives.Name.get(fontName);
- }
-
- if ((0, _util.isString)(baseFont)) {
- baseFont = _primitives.Name.get(baseFont);
- }
-
- if (type !== "Type3") {
- var fontNameStr = fontName && fontName.name;
- var baseFontStr = baseFont && baseFont.name;
-
- if (fontNameStr !== baseFontStr) {
- (0, _util.info)(`The FontDescriptor\'s FontName is "${fontNameStr}" but ` + `should be the same as the Font\'s BaseFont "${baseFontStr}".`);
-
- if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) {
- fontName = baseFont;
- }
- }
- }
-
- fontName = fontName || baseFont;
-
- if (!(0, _primitives.isName)(fontName)) {
- throw new _util.FormatError("invalid font name");
- }
-
- var fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3");
-
- if (fontFile) {
- if (fontFile.dict) {
- var subtype = fontFile.dict.get("Subtype");
-
- if (subtype) {
- subtype = subtype.name;
- }
-
- var length1 = fontFile.dict.get("Length1");
- var length2 = fontFile.dict.get("Length2");
- var length3 = fontFile.dict.get("Length3");
- }
- }
-
- properties = {
- type,
- name: fontName.name,
- subtype,
- file: fontFile,
- length1,
- length2,
- length3,
- loadedName: baseDict.loadedName,
- composite,
- fixedPitch: false,
- fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX,
- firstChar: firstChar || 0,
- lastChar: lastChar || maxCharIndex,
- bbox: descriptor.getArray("FontBBox"),
- ascent: descriptor.get("Ascent"),
- descent: descriptor.get("Descent"),
- xHeight: descriptor.get("XHeight"),
- capHeight: descriptor.get("CapHeight"),
- flags: descriptor.get("Flags"),
- italicAngle: descriptor.get("ItalicAngle"),
- isType3Font: false
- };
- var cMapPromise;
-
- if (composite) {
- var cidEncoding = baseDict.get("Encoding");
-
- if ((0, _primitives.isName)(cidEncoding)) {
- properties.cidEncoding = cidEncoding.name;
- }
-
- cMapPromise = _cmap.CMapFactory.create({
- encoding: cidEncoding,
- fetchBuiltInCMap: this.fetchBuiltInCMap,
- useCMap: null
- }).then(function (cMap) {
- properties.cMap = cMap;
- properties.vertical = properties.cMap.vertical;
- });
- } else {
- cMapPromise = Promise.resolve(undefined);
- }
-
- return cMapPromise.then(() => {
- return this.extractDataStructures(dict, baseDict, properties);
- }).then(newProperties => {
- this.extractWidths(dict, descriptor, newProperties);
-
- if (type === "Type3") {
- newProperties.isType3Font = true;
- }
-
- return new _fonts.Font(fontName.name, fontFile, newProperties);
- });
- }
- };
-
- PartialEvaluator.buildFontPaths = function (font, glyphs, handler) {
- function buildPath(fontChar) {
- if (font.renderer.hasBuiltPath(fontChar)) {
- return;
- }
-
- handler.send("commonobj", [`${font.loadedName}_path_${fontChar}`, "FontPath", font.renderer.getPathJs(fontChar)]);
- }
-
- for (const glyph of glyphs) {
- buildPath(glyph.fontChar);
- const accent = glyph.accent;
-
- if (accent && accent.fontChar) {
- buildPath(accent.fontChar);
- }
- }
- };
-
- PartialEvaluator.getFallbackFontDict = function () {
- if (this._fallbackFontDict) {
- return this._fallbackFontDict;
- }
-
- const dict = new _primitives.Dict();
- dict.set("BaseFont", _primitives.Name.get("PDFJS-FallbackFont"));
- dict.set("Type", _primitives.Name.get("FallbackType"));
- dict.set("Subtype", _primitives.Name.get("FallbackType"));
- dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding"));
- return this._fallbackFontDict = dict;
- };
-
- return PartialEvaluator;
-}();
-
-exports.PartialEvaluator = PartialEvaluator;
-
-class TranslatedFont {
- constructor({
- loadedName,
- font,
- dict,
- extraProperties = false
- }) {
- this.loadedName = loadedName;
- this.font = font;
- this.dict = dict;
- this._extraProperties = extraProperties;
- this.type3Loaded = null;
- this.sent = false;
- }
-
- send(handler) {
- if (this.sent) {
- return;
- }
-
- this.sent = true;
- handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._extraProperties)]);
- }
-
- fallback(handler) {
- if (!this.font.data) {
- return;
- }
-
- this.font.disableFontFace = true;
- const glyphs = this.font.glyphCacheValues;
- PartialEvaluator.buildFontPaths(this.font, glyphs, handler);
- }
-
- loadType3Data(evaluator, resources, parentOperatorList, task) {
- if (!this.font.isType3Font) {
- throw new Error("Must be a Type3 font.");
- }
-
- if (this.type3Loaded) {
- return this.type3Loaded;
- }
-
- var type3Options = Object.create(evaluator.options);
- type3Options.ignoreErrors = false;
- var type3Evaluator = evaluator.clone(type3Options);
- type3Evaluator.parsingType3Font = true;
- var translatedFont = this.font;
- var loadCharProcsPromise = Promise.resolve();
- var charProcs = this.dict.get("CharProcs");
- var fontResources = this.dict.get("Resources") || resources;
- var charProcKeys = charProcs.getKeys();
- var charProcOperatorList = Object.create(null);
-
- for (var i = 0, n = charProcKeys.length; i < n; ++i) {
- const key = charProcKeys[i];
- loadCharProcsPromise = loadCharProcsPromise.then(function () {
- var glyphStream = charProcs.get(key);
- var operatorList = new _operator_list.OperatorList();
- return type3Evaluator.getOperatorList({
- stream: glyphStream,
- task,
- resources: fontResources,
- operatorList
- }).then(function () {
- charProcOperatorList[key] = operatorList.getIR();
- parentOperatorList.addDependencies(operatorList.dependencies);
- }).catch(function (reason) {
- (0, _util.warn)(`Type3 font resource "${key}" is not available.`);
- const dummyOperatorList = new _operator_list.OperatorList();
- charProcOperatorList[key] = dummyOperatorList.getIR();
- });
- });
- }
-
- this.type3Loaded = loadCharProcsPromise.then(function () {
- translatedFont.charProcOperatorList = charProcOperatorList;
- });
- return this.type3Loaded;
- }
-
-}
-
-var StateManager = function StateManagerClosure() {
- function StateManager(initialState) {
- this.state = initialState;
- this.stateStack = [];
- }
-
- StateManager.prototype = {
- save() {
- var old = this.state;
- this.stateStack.push(this.state);
- this.state = old.clone();
- },
-
- restore() {
- var prev = this.stateStack.pop();
-
- if (prev) {
- this.state = prev;
- }
- },
-
- transform(args) {
- this.state.ctm = _util.Util.transform(this.state.ctm, args);
- }
-
- };
- return StateManager;
-}();
-
-var TextState = function TextStateClosure() {
- function TextState() {
- this.ctm = new Float32Array(_util.IDENTITY_MATRIX);
- this.fontName = null;
- this.fontSize = 0;
- this.font = null;
- this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
- this.textMatrix = _util.IDENTITY_MATRIX.slice();
- this.textLineMatrix = _util.IDENTITY_MATRIX.slice();
- this.charSpacing = 0;
- this.wordSpacing = 0;
- this.leading = 0;
- this.textHScale = 1;
- this.textRise = 0;
- }
-
- TextState.prototype = {
- setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
- var m = this.textMatrix;
- m[0] = a;
- m[1] = b;
- m[2] = c;
- m[3] = d;
- m[4] = e;
- m[5] = f;
- },
- setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
- var m = this.textLineMatrix;
- m[0] = a;
- m[1] = b;
- m[2] = c;
- m[3] = d;
- m[4] = e;
- m[5] = f;
- },
- translateTextMatrix: function TextState_translateTextMatrix(x, y) {
- var m = this.textMatrix;
- m[4] = m[0] * x + m[2] * y + m[4];
- m[5] = m[1] * x + m[3] * y + m[5];
- },
- translateTextLineMatrix: function TextState_translateTextMatrix(x, y) {
- var m = this.textLineMatrix;
- m[4] = m[0] * x + m[2] * y + m[4];
- m[5] = m[1] * x + m[3] * y + m[5];
- },
- calcTextLineMatrixAdvance: function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) {
- var font = this.font;
-
- if (!font) {
- return null;
- }
-
- var m = this.textLineMatrix;
-
- if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {
- return null;
- }
-
- var txDiff = e - m[4],
- tyDiff = f - m[5];
-
- if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) {
- return null;
- }
-
- var tx,
- ty,
- denominator = a * d - b * c;
-
- if (font.vertical) {
- tx = -tyDiff * c / denominator;
- ty = tyDiff * a / denominator;
- } else {
- tx = txDiff * d / denominator;
- ty = -txDiff * b / denominator;
- }
-
- return {
- width: tx,
- height: ty,
- value: font.vertical ? ty : tx
- };
- },
- calcRenderMatrix: function TextState_calcRendeMatrix(ctm) {
- var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise];
- return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm));
- },
- carriageReturn: function TextState_carriageReturn() {
- this.translateTextLineMatrix(0, -this.leading);
- this.textMatrix = this.textLineMatrix.slice();
- },
- clone: function TextState_clone() {
- var clone = Object.create(this);
- clone.textMatrix = this.textMatrix.slice();
- clone.textLineMatrix = this.textLineMatrix.slice();
- clone.fontMatrix = this.fontMatrix.slice();
- return clone;
- }
- };
- return TextState;
-}();
-
-var EvalState = function EvalStateClosure() {
- function EvalState() {
- this.ctm = new Float32Array(_util.IDENTITY_MATRIX);
- this.font = null;
- this.textRenderingMode = _util.TextRenderingMode.FILL;
- this.fillColorSpace = _colorspace.ColorSpace.singletons.gray;
- this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;
- }
-
- EvalState.prototype = {
- clone: function CanvasExtraState_clone() {
- return Object.create(this);
- }
- };
- return EvalState;
-}();
-
-var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
- var getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.w = {
- id: _util.OPS.setLineWidth,
- numArgs: 1,
- variableArgs: false
- };
- t.J = {
- id: _util.OPS.setLineCap,
- numArgs: 1,
- variableArgs: false
- };
- t.j = {
- id: _util.OPS.setLineJoin,
- numArgs: 1,
- variableArgs: false
- };
- t.M = {
- id: _util.OPS.setMiterLimit,
- numArgs: 1,
- variableArgs: false
- };
- t.d = {
- id: _util.OPS.setDash,
- numArgs: 2,
- variableArgs: false
- };
- t.ri = {
- id: _util.OPS.setRenderingIntent,
- numArgs: 1,
- variableArgs: false
- };
- t.i = {
- id: _util.OPS.setFlatness,
- numArgs: 1,
- variableArgs: false
- };
- t.gs = {
- id: _util.OPS.setGState,
- numArgs: 1,
- variableArgs: false
- };
- t.q = {
- id: _util.OPS.save,
- numArgs: 0,
- variableArgs: false
- };
- t.Q = {
- id: _util.OPS.restore,
- numArgs: 0,
- variableArgs: false
- };
- t.cm = {
- id: _util.OPS.transform,
- numArgs: 6,
- variableArgs: false
- };
- t.m = {
- id: _util.OPS.moveTo,
- numArgs: 2,
- variableArgs: false
- };
- t.l = {
- id: _util.OPS.lineTo,
- numArgs: 2,
- variableArgs: false
- };
- t.c = {
- id: _util.OPS.curveTo,
- numArgs: 6,
- variableArgs: false
- };
- t.v = {
- id: _util.OPS.curveTo2,
- numArgs: 4,
- variableArgs: false
- };
- t.y = {
- id: _util.OPS.curveTo3,
- numArgs: 4,
- variableArgs: false
- };
- t.h = {
- id: _util.OPS.closePath,
- numArgs: 0,
- variableArgs: false
- };
- t.re = {
- id: _util.OPS.rectangle,
- numArgs: 4,
- variableArgs: false
- };
- t.S = {
- id: _util.OPS.stroke,
- numArgs: 0,
- variableArgs: false
- };
- t.s = {
- id: _util.OPS.closeStroke,
- numArgs: 0,
- variableArgs: false
- };
- t.f = {
- id: _util.OPS.fill,
- numArgs: 0,
- variableArgs: false
- };
- t.F = {
- id: _util.OPS.fill,
- numArgs: 0,
- variableArgs: false
- };
- t["f*"] = {
- id: _util.OPS.eoFill,
- numArgs: 0,
- variableArgs: false
- };
- t.B = {
- id: _util.OPS.fillStroke,
- numArgs: 0,
- variableArgs: false
- };
- t["B*"] = {
- id: _util.OPS.eoFillStroke,
- numArgs: 0,
- variableArgs: false
- };
- t.b = {
- id: _util.OPS.closeFillStroke,
- numArgs: 0,
- variableArgs: false
- };
- t["b*"] = {
- id: _util.OPS.closeEOFillStroke,
- numArgs: 0,
- variableArgs: false
- };
- t.n = {
- id: _util.OPS.endPath,
- numArgs: 0,
- variableArgs: false
- };
- t.W = {
- id: _util.OPS.clip,
- numArgs: 0,
- variableArgs: false
- };
- t["W*"] = {
- id: _util.OPS.eoClip,
- numArgs: 0,
- variableArgs: false
- };
- t.BT = {
- id: _util.OPS.beginText,
- numArgs: 0,
- variableArgs: false
- };
- t.ET = {
- id: _util.OPS.endText,
- numArgs: 0,
- variableArgs: false
- };
- t.Tc = {
- id: _util.OPS.setCharSpacing,
- numArgs: 1,
- variableArgs: false
- };
- t.Tw = {
- id: _util.OPS.setWordSpacing,
- numArgs: 1,
- variableArgs: false
- };
- t.Tz = {
- id: _util.OPS.setHScale,
- numArgs: 1,
- variableArgs: false
- };
- t.TL = {
- id: _util.OPS.setLeading,
- numArgs: 1,
- variableArgs: false
- };
- t.Tf = {
- id: _util.OPS.setFont,
- numArgs: 2,
- variableArgs: false
- };
- t.Tr = {
- id: _util.OPS.setTextRenderingMode,
- numArgs: 1,
- variableArgs: false
- };
- t.Ts = {
- id: _util.OPS.setTextRise,
- numArgs: 1,
- variableArgs: false
- };
- t.Td = {
- id: _util.OPS.moveText,
- numArgs: 2,
- variableArgs: false
- };
- t.TD = {
- id: _util.OPS.setLeadingMoveText,
- numArgs: 2,
- variableArgs: false
- };
- t.Tm = {
- id: _util.OPS.setTextMatrix,
- numArgs: 6,
- variableArgs: false
- };
- t["T*"] = {
- id: _util.OPS.nextLine,
- numArgs: 0,
- variableArgs: false
- };
- t.Tj = {
- id: _util.OPS.showText,
- numArgs: 1,
- variableArgs: false
- };
- t.TJ = {
- id: _util.OPS.showSpacedText,
- numArgs: 1,
- variableArgs: false
- };
- t["'"] = {
- id: _util.OPS.nextLineShowText,
- numArgs: 1,
- variableArgs: false
- };
- t['"'] = {
- id: _util.OPS.nextLineSetSpacingShowText,
- numArgs: 3,
- variableArgs: false
- };
- t.d0 = {
- id: _util.OPS.setCharWidth,
- numArgs: 2,
- variableArgs: false
- };
- t.d1 = {
- id: _util.OPS.setCharWidthAndBounds,
- numArgs: 6,
- variableArgs: false
- };
- t.CS = {
- id: _util.OPS.setStrokeColorSpace,
- numArgs: 1,
- variableArgs: false
- };
- t.cs = {
- id: _util.OPS.setFillColorSpace,
- numArgs: 1,
- variableArgs: false
- };
- t.SC = {
- id: _util.OPS.setStrokeColor,
- numArgs: 4,
- variableArgs: true
- };
- t.SCN = {
- id: _util.OPS.setStrokeColorN,
- numArgs: 33,
- variableArgs: true
- };
- t.sc = {
- id: _util.OPS.setFillColor,
- numArgs: 4,
- variableArgs: true
- };
- t.scn = {
- id: _util.OPS.setFillColorN,
- numArgs: 33,
- variableArgs: true
- };
- t.G = {
- id: _util.OPS.setStrokeGray,
- numArgs: 1,
- variableArgs: false
- };
- t.g = {
- id: _util.OPS.setFillGray,
- numArgs: 1,
- variableArgs: false
- };
- t.RG = {
- id: _util.OPS.setStrokeRGBColor,
- numArgs: 3,
- variableArgs: false
- };
- t.rg = {
- id: _util.OPS.setFillRGBColor,
- numArgs: 3,
- variableArgs: false
- };
- t.K = {
- id: _util.OPS.setStrokeCMYKColor,
- numArgs: 4,
- variableArgs: false
- };
- t.k = {
- id: _util.OPS.setFillCMYKColor,
- numArgs: 4,
- variableArgs: false
- };
- t.sh = {
- id: _util.OPS.shadingFill,
- numArgs: 1,
- variableArgs: false
- };
- t.BI = {
- id: _util.OPS.beginInlineImage,
- numArgs: 0,
- variableArgs: false
- };
- t.ID = {
- id: _util.OPS.beginImageData,
- numArgs: 0,
- variableArgs: false
- };
- t.EI = {
- id: _util.OPS.endInlineImage,
- numArgs: 1,
- variableArgs: false
- };
- t.Do = {
- id: _util.OPS.paintXObject,
- numArgs: 1,
- variableArgs: false
- };
- t.MP = {
- id: _util.OPS.markPoint,
- numArgs: 1,
- variableArgs: false
- };
- t.DP = {
- id: _util.OPS.markPointProps,
- numArgs: 2,
- variableArgs: false
- };
- t.BMC = {
- id: _util.OPS.beginMarkedContent,
- numArgs: 1,
- variableArgs: false
- };
- t.BDC = {
- id: _util.OPS.beginMarkedContentProps,
- numArgs: 2,
- variableArgs: false
- };
- t.EMC = {
- id: _util.OPS.endMarkedContent,
- numArgs: 0,
- variableArgs: false
- };
- t.BX = {
- id: _util.OPS.beginCompat,
- numArgs: 0,
- variableArgs: false
- };
- t.EX = {
- id: _util.OPS.endCompat,
- numArgs: 0,
- variableArgs: false
- };
- t.BM = null;
- t.BD = null;
- t.true = null;
- t.fa = null;
- t.fal = null;
- t.fals = null;
- t.false = null;
- t.nu = null;
- t.nul = null;
- t.null = null;
- });
- const MAX_INVALID_PATH_OPS = 20;
-
- function EvaluatorPreprocessor(stream, xref, stateManager) {
- this.opMap = getOPMap();
- this.parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream, this.opMap),
- xref
- });
- this.stateManager = stateManager;
- this.nonProcessedArgs = [];
- this._numInvalidPathOPS = 0;
- }
-
- EvaluatorPreprocessor.prototype = {
- get savedStatesDepth() {
- return this.stateManager.stateStack.length;
- },
-
- read: function EvaluatorPreprocessor_read(operation) {
- var args = operation.args;
-
- while (true) {
- var obj = this.parser.getObj();
-
- if (obj instanceof _primitives.Cmd) {
- var cmd = obj.cmd;
- var opSpec = this.opMap[cmd];
-
- if (!opSpec) {
- (0, _util.warn)(`Unknown command "${cmd}".`);
- continue;
- }
-
- var fn = opSpec.id;
- var numArgs = opSpec.numArgs;
- var argsLength = args !== null ? args.length : 0;
-
- if (!opSpec.variableArgs) {
- if (argsLength !== numArgs) {
- var nonProcessedArgs = this.nonProcessedArgs;
-
- while (argsLength > numArgs) {
- nonProcessedArgs.push(args.shift());
- argsLength--;
- }
-
- while (argsLength < numArgs && nonProcessedArgs.length !== 0) {
- if (args === null) {
- args = [];
- }
-
- args.unshift(nonProcessedArgs.pop());
- argsLength++;
- }
- }
-
- if (argsLength < numArgs) {
- const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`;
-
- if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > MAX_INVALID_PATH_OPS) {
- throw new _util.FormatError(`Invalid ${partialMsg}`);
- }
-
- (0, _util.warn)(`Skipping ${partialMsg}`);
-
- if (args !== null) {
- args.length = 0;
- }
-
- continue;
- }
- } else if (argsLength > numArgs) {
- (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`);
- }
-
- this.preprocessCommand(fn, args);
- operation.fn = fn;
- operation.args = args;
- return true;
- }
-
- if (obj === _primitives.EOF) {
- return false;
- }
-
- if (obj !== null) {
- if (args === null) {
- args = [];
- }
-
- args.push(obj);
-
- if (args.length > 33) {
- throw new _util.FormatError("Too many arguments");
- }
- }
- }
- },
- preprocessCommand: function EvaluatorPreprocessor_preprocessCommand(fn, args) {
- switch (fn | 0) {
- case _util.OPS.save:
- this.stateManager.save();
- break;
-
- case _util.OPS.restore:
- this.stateManager.restore();
- break;
-
- case _util.OPS.transform:
- this.stateManager.transform(args);
- break;
- }
- }
- };
- return EvaluatorPreprocessor;
-}();
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _parser = __w_pdfjs_require__(11);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _stream = __w_pdfjs_require__(12);
-
-var BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"];
-const MAX_MAP_RANGE = 2 ** 24 - 1;
-
-class CMap {
- constructor(builtInCMap = false) {
- this.codespaceRanges = [[], [], [], []];
- this.numCodespaceRanges = 0;
- this._map = [];
- this.name = "";
- this.vertical = false;
- this.useCMap = null;
- this.builtInCMap = builtInCMap;
- }
-
- addCodespaceRange(n, low, high) {
- this.codespaceRanges[n - 1].push(low, high);
- this.numCodespaceRanges++;
- }
-
- mapCidRange(low, high, dstLow) {
- if (high - low > MAX_MAP_RANGE) {
- throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");
- }
-
- while (low <= high) {
- this._map[low++] = dstLow++;
- }
- }
-
- mapBfRange(low, high, dstLow) {
- if (high - low > MAX_MAP_RANGE) {
- throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");
- }
-
- var lastByte = dstLow.length - 1;
-
- while (low <= high) {
- this._map[low++] = dstLow;
- dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);
- }
- }
-
- mapBfRangeToArray(low, high, array) {
- if (high - low > MAX_MAP_RANGE) {
- throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");
- }
-
- const ii = array.length;
- let i = 0;
-
- while (low <= high && i < ii) {
- this._map[low] = array[i++];
- ++low;
- }
- }
-
- mapOne(src, dst) {
- this._map[src] = dst;
- }
-
- lookup(code) {
- return this._map[code];
- }
-
- contains(code) {
- return this._map[code] !== undefined;
- }
-
- forEach(callback) {
- const map = this._map;
- const length = map.length;
-
- if (length <= 0x10000) {
- for (let i = 0; i < length; i++) {
- if (map[i] !== undefined) {
- callback(i, map[i]);
- }
- }
- } else {
- for (const i in map) {
- callback(i, map[i]);
- }
- }
- }
-
- charCodeOf(value) {
- const map = this._map;
-
- if (map.length <= 0x10000) {
- return map.indexOf(value);
- }
-
- for (const charCode in map) {
- if (map[charCode] === value) {
- return charCode | 0;
- }
- }
-
- return -1;
- }
-
- getMap() {
- return this._map;
- }
-
- readCharCode(str, offset, out) {
- let c = 0;
- const codespaceRanges = this.codespaceRanges;
-
- for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
- c = (c << 8 | str.charCodeAt(offset + n)) >>> 0;
- const codespaceRange = codespaceRanges[n];
-
- for (let k = 0, kk = codespaceRange.length; k < kk;) {
- const low = codespaceRange[k++];
- const high = codespaceRange[k++];
-
- if (c >= low && c <= high) {
- out.charcode = c;
- out.length = n + 1;
- return;
- }
- }
- }
-
- out.charcode = 0;
- out.length = 1;
- }
-
- get length() {
- return this._map.length;
- }
-
- get isIdentityCMap() {
- if (!(this.name === "Identity-H" || this.name === "Identity-V")) {
- return false;
- }
-
- if (this._map.length !== 0x10000) {
- return false;
- }
-
- for (let i = 0; i < 0x10000; i++) {
- if (this._map[i] !== i) {
- return false;
- }
- }
-
- return true;
- }
-
-}
-
-exports.CMap = CMap;
-
-class IdentityCMap extends CMap {
- constructor(vertical, n) {
- super();
- this.vertical = vertical;
- this.addCodespaceRange(n, 0, 0xffff);
- }
-
- mapCidRange(low, high, dstLow) {
- (0, _util.unreachable)("should not call mapCidRange");
- }
-
- mapBfRange(low, high, dstLow) {
- (0, _util.unreachable)("should not call mapBfRange");
- }
-
- mapBfRangeToArray(low, high, array) {
- (0, _util.unreachable)("should not call mapBfRangeToArray");
- }
-
- mapOne(src, dst) {
- (0, _util.unreachable)("should not call mapCidOne");
- }
-
- lookup(code) {
- return Number.isInteger(code) && code <= 0xffff ? code : undefined;
- }
-
- contains(code) {
- return Number.isInteger(code) && code <= 0xffff;
- }
-
- forEach(callback) {
- for (let i = 0; i <= 0xffff; i++) {
- callback(i, i);
- }
- }
-
- charCodeOf(value) {
- return Number.isInteger(value) && value <= 0xffff ? value : -1;
- }
-
- getMap() {
- const map = new Array(0x10000);
-
- for (let i = 0; i <= 0xffff; i++) {
- map[i] = i;
- }
-
- return map;
- }
-
- get length() {
- return 0x10000;
- }
-
- get isIdentityCMap() {
- (0, _util.unreachable)("should not access .isIdentityCMap");
- }
-
-}
-
-exports.IdentityCMap = IdentityCMap;
-
-var BinaryCMapReader = function BinaryCMapReaderClosure() {
- function hexToInt(a, size) {
- var n = 0;
-
- for (var i = 0; i <= size; i++) {
- n = n << 8 | a[i];
- }
-
- return n >>> 0;
- }
-
- function hexToStr(a, size) {
- if (size === 1) {
- return String.fromCharCode(a[0], a[1]);
- }
-
- if (size === 3) {
- return String.fromCharCode(a[0], a[1], a[2], a[3]);
- }
-
- return String.fromCharCode.apply(null, a.subarray(0, size + 1));
- }
-
- function addHex(a, b, size) {
- var c = 0;
-
- for (var i = size; i >= 0; i--) {
- c += a[i] + b[i];
- a[i] = c & 255;
- c >>= 8;
- }
- }
-
- function incHex(a, size) {
- var c = 1;
-
- for (var i = size; i >= 0 && c > 0; i--) {
- c += a[i];
- a[i] = c & 255;
- c >>= 8;
- }
- }
-
- var MAX_NUM_SIZE = 16;
- var MAX_ENCODED_NUM_SIZE = 19;
-
- function BinaryCMapStream(data) {
- this.buffer = data;
- this.pos = 0;
- this.end = data.length;
- this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
- }
-
- BinaryCMapStream.prototype = {
- readByte() {
- if (this.pos >= this.end) {
- return -1;
- }
-
- return this.buffer[this.pos++];
- },
-
- readNumber() {
- var n = 0;
- var last;
-
- do {
- var b = this.readByte();
-
- if (b < 0) {
- throw new _util.FormatError("unexpected EOF in bcmap");
- }
-
- last = !(b & 0x80);
- n = n << 7 | b & 0x7f;
- } while (!last);
-
- return n;
- },
-
- readSigned() {
- var n = this.readNumber();
- return n & 1 ? ~(n >>> 1) : n >>> 1;
- },
-
- readHex(num, size) {
- num.set(this.buffer.subarray(this.pos, this.pos + size + 1));
- this.pos += size + 1;
- },
-
- readHexNumber(num, size) {
- var last;
- var stack = this.tmpBuf,
- sp = 0;
-
- do {
- var b = this.readByte();
-
- if (b < 0) {
- throw new _util.FormatError("unexpected EOF in bcmap");
- }
-
- last = !(b & 0x80);
- stack[sp++] = b & 0x7f;
- } while (!last);
-
- var i = size,
- buffer = 0,
- bufferSize = 0;
-
- while (i >= 0) {
- while (bufferSize < 8 && stack.length > 0) {
- buffer = stack[--sp] << bufferSize | buffer;
- bufferSize += 7;
- }
-
- num[i] = buffer & 255;
- i--;
- buffer >>= 8;
- bufferSize -= 8;
- }
- },
-
- readHexSigned(num, size) {
- this.readHexNumber(num, size);
- var sign = num[size] & 1 ? 255 : 0;
- var c = 0;
-
- for (var i = 0; i <= size; i++) {
- c = (c & 1) << 8 | num[i];
- num[i] = c >> 1 ^ sign;
- }
- },
-
- readString() {
- var len = this.readNumber();
- var s = "";
-
- for (var i = 0; i < len; i++) {
- s += String.fromCharCode(this.readNumber());
- }
-
- return s;
- }
-
- };
-
- function processBinaryCMap(data, cMap, extend) {
- return new Promise(function (resolve, reject) {
- var stream = new BinaryCMapStream(data);
- var header = stream.readByte();
- cMap.vertical = !!(header & 1);
- var useCMap = null;
- var start = new Uint8Array(MAX_NUM_SIZE);
- var end = new Uint8Array(MAX_NUM_SIZE);
- var char = new Uint8Array(MAX_NUM_SIZE);
- var charCode = new Uint8Array(MAX_NUM_SIZE);
- var tmp = new Uint8Array(MAX_NUM_SIZE);
- var code;
- var b;
-
- while ((b = stream.readByte()) >= 0) {
- var type = b >> 5;
-
- if (type === 7) {
- switch (b & 0x1f) {
- case 0:
- stream.readString();
- break;
-
- case 1:
- useCMap = stream.readString();
- break;
- }
-
- continue;
- }
-
- var sequence = !!(b & 0x10);
- var dataSize = b & 15;
-
- if (dataSize + 1 > MAX_NUM_SIZE) {
- throw new Error("processBinaryCMap: Invalid dataSize.");
- }
-
- var ucs2DataSize = 1;
- var subitemsCount = stream.readNumber();
- var i;
-
- switch (type) {
- case 0:
- stream.readHex(start, dataSize);
- stream.readHexNumber(end, dataSize);
- addHex(end, start, dataSize);
- cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));
-
- for (i = 1; i < subitemsCount; i++) {
- incHex(end, dataSize);
- stream.readHexNumber(start, dataSize);
- addHex(start, end, dataSize);
- stream.readHexNumber(end, dataSize);
- addHex(end, start, dataSize);
- cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));
- }
-
- break;
-
- case 1:
- stream.readHex(start, dataSize);
- stream.readHexNumber(end, dataSize);
- addHex(end, start, dataSize);
- stream.readNumber();
-
- for (i = 1; i < subitemsCount; i++) {
- incHex(end, dataSize);
- stream.readHexNumber(start, dataSize);
- addHex(start, end, dataSize);
- stream.readHexNumber(end, dataSize);
- addHex(end, start, dataSize);
- stream.readNumber();
- }
-
- break;
-
- case 2:
- stream.readHex(char, dataSize);
- code = stream.readNumber();
- cMap.mapOne(hexToInt(char, dataSize), code);
-
- for (i = 1; i < subitemsCount; i++) {
- incHex(char, dataSize);
-
- if (!sequence) {
- stream.readHexNumber(tmp, dataSize);
- addHex(char, tmp, dataSize);
- }
-
- code = stream.readSigned() + (code + 1);
- cMap.mapOne(hexToInt(char, dataSize), code);
- }
-
- break;
-
- case 3:
- stream.readHex(start, dataSize);
- stream.readHexNumber(end, dataSize);
- addHex(end, start, dataSize);
- code = stream.readNumber();
- cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);
-
- for (i = 1; i < subitemsCount; i++) {
- incHex(end, dataSize);
-
- if (!sequence) {
- stream.readHexNumber(start, dataSize);
- addHex(start, end, dataSize);
- } else {
- start.set(end);
- }
-
- stream.readHexNumber(end, dataSize);
- addHex(end, start, dataSize);
- code = stream.readNumber();
- cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);
- }
-
- break;
-
- case 4:
- stream.readHex(char, ucs2DataSize);
- stream.readHex(charCode, dataSize);
- cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));
-
- for (i = 1; i < subitemsCount; i++) {
- incHex(char, ucs2DataSize);
-
- if (!sequence) {
- stream.readHexNumber(tmp, ucs2DataSize);
- addHex(char, tmp, ucs2DataSize);
- }
-
- incHex(charCode, dataSize);
- stream.readHexSigned(tmp, dataSize);
- addHex(charCode, tmp, dataSize);
- cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));
- }
-
- break;
-
- case 5:
- stream.readHex(start, ucs2DataSize);
- stream.readHexNumber(end, ucs2DataSize);
- addHex(end, start, ucs2DataSize);
- stream.readHex(charCode, dataSize);
- cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));
-
- for (i = 1; i < subitemsCount; i++) {
- incHex(end, ucs2DataSize);
-
- if (!sequence) {
- stream.readHexNumber(start, ucs2DataSize);
- addHex(start, end, ucs2DataSize);
- } else {
- start.set(end);
- }
-
- stream.readHexNumber(end, ucs2DataSize);
- addHex(end, start, ucs2DataSize);
- stream.readHex(charCode, dataSize);
- cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));
- }
-
- break;
-
- default:
- reject(new Error("processBinaryCMap: Unknown type: " + type));
- return;
- }
- }
-
- if (useCMap) {
- resolve(extend(useCMap));
- return;
- }
-
- resolve(cMap);
- });
- }
-
- function BinaryCMapReader() {}
-
- BinaryCMapReader.prototype = {
- process: processBinaryCMap
- };
- return BinaryCMapReader;
-}();
-
-var CMapFactory = function CMapFactoryClosure() {
- function strToInt(str) {
- var a = 0;
-
- for (var i = 0; i < str.length; i++) {
- a = a << 8 | str.charCodeAt(i);
- }
-
- return a >>> 0;
- }
-
- function expectString(obj) {
- if (!(0, _util.isString)(obj)) {
- throw new _util.FormatError("Malformed CMap: expected string.");
- }
- }
-
- function expectInt(obj) {
- if (!Number.isInteger(obj)) {
- throw new _util.FormatError("Malformed CMap: expected int.");
- }
- }
-
- function parseBfChar(cMap, lexer) {
- while (true) {
- var obj = lexer.getObj();
-
- if ((0, _primitives.isEOF)(obj)) {
- break;
- }
-
- if ((0, _primitives.isCmd)(obj, "endbfchar")) {
- return;
- }
-
- expectString(obj);
- var src = strToInt(obj);
- obj = lexer.getObj();
- expectString(obj);
- var dst = obj;
- cMap.mapOne(src, dst);
- }
- }
-
- function parseBfRange(cMap, lexer) {
- while (true) {
- var obj = lexer.getObj();
-
- if ((0, _primitives.isEOF)(obj)) {
- break;
- }
-
- if ((0, _primitives.isCmd)(obj, "endbfrange")) {
- return;
- }
-
- expectString(obj);
- var low = strToInt(obj);
- obj = lexer.getObj();
- expectString(obj);
- var high = strToInt(obj);
- obj = lexer.getObj();
-
- if (Number.isInteger(obj) || (0, _util.isString)(obj)) {
- var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;
- cMap.mapBfRange(low, high, dstLow);
- } else if ((0, _primitives.isCmd)(obj, "[")) {
- obj = lexer.getObj();
- var array = [];
-
- while (!(0, _primitives.isCmd)(obj, "]") && !(0, _primitives.isEOF)(obj)) {
- array.push(obj);
- obj = lexer.getObj();
- }
-
- cMap.mapBfRangeToArray(low, high, array);
- } else {
- break;
- }
- }
-
- throw new _util.FormatError("Invalid bf range.");
- }
-
- function parseCidChar(cMap, lexer) {
- while (true) {
- var obj = lexer.getObj();
-
- if ((0, _primitives.isEOF)(obj)) {
- break;
- }
-
- if ((0, _primitives.isCmd)(obj, "endcidchar")) {
- return;
- }
-
- expectString(obj);
- var src = strToInt(obj);
- obj = lexer.getObj();
- expectInt(obj);
- var dst = obj;
- cMap.mapOne(src, dst);
- }
- }
-
- function parseCidRange(cMap, lexer) {
- while (true) {
- var obj = lexer.getObj();
-
- if ((0, _primitives.isEOF)(obj)) {
- break;
- }
-
- if ((0, _primitives.isCmd)(obj, "endcidrange")) {
- return;
- }
-
- expectString(obj);
- var low = strToInt(obj);
- obj = lexer.getObj();
- expectString(obj);
- var high = strToInt(obj);
- obj = lexer.getObj();
- expectInt(obj);
- var dstLow = obj;
- cMap.mapCidRange(low, high, dstLow);
- }
- }
-
- function parseCodespaceRange(cMap, lexer) {
- while (true) {
- var obj = lexer.getObj();
-
- if ((0, _primitives.isEOF)(obj)) {
- break;
- }
-
- if ((0, _primitives.isCmd)(obj, "endcodespacerange")) {
- return;
- }
-
- if (!(0, _util.isString)(obj)) {
- break;
- }
-
- var low = strToInt(obj);
- obj = lexer.getObj();
-
- if (!(0, _util.isString)(obj)) {
- break;
- }
-
- var high = strToInt(obj);
- cMap.addCodespaceRange(obj.length, low, high);
- }
-
- throw new _util.FormatError("Invalid codespace range.");
- }
-
- function parseWMode(cMap, lexer) {
- var obj = lexer.getObj();
-
- if (Number.isInteger(obj)) {
- cMap.vertical = !!obj;
- }
- }
-
- function parseCMapName(cMap, lexer) {
- var obj = lexer.getObj();
-
- if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) {
- cMap.name = obj.name;
- }
- }
-
- function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {
- var previous;
- var embeddedUseCMap;
-
- objLoop: while (true) {
- try {
- var obj = lexer.getObj();
-
- if ((0, _primitives.isEOF)(obj)) {
- break;
- } else if ((0, _primitives.isName)(obj)) {
- if (obj.name === "WMode") {
- parseWMode(cMap, lexer);
- } else if (obj.name === "CMapName") {
- parseCMapName(cMap, lexer);
- }
-
- previous = obj;
- } else if ((0, _primitives.isCmd)(obj)) {
- switch (obj.cmd) {
- case "endcmap":
- break objLoop;
-
- case "usecmap":
- if ((0, _primitives.isName)(previous)) {
- embeddedUseCMap = previous.name;
- }
-
- break;
-
- case "begincodespacerange":
- parseCodespaceRange(cMap, lexer);
- break;
-
- case "beginbfchar":
- parseBfChar(cMap, lexer);
- break;
-
- case "begincidchar":
- parseCidChar(cMap, lexer);
- break;
-
- case "beginbfrange":
- parseBfRange(cMap, lexer);
- break;
-
- case "begincidrange":
- parseCidRange(cMap, lexer);
- break;
- }
- }
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)("Invalid cMap data: " + ex);
- continue;
- }
- }
-
- if (!useCMap && embeddedUseCMap) {
- useCMap = embeddedUseCMap;
- }
-
- if (useCMap) {
- return extendCMap(cMap, fetchBuiltInCMap, useCMap);
- }
-
- return Promise.resolve(cMap);
- }
-
- function extendCMap(cMap, fetchBuiltInCMap, useCMap) {
- return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) {
- cMap.useCMap = newCMap;
-
- if (cMap.numCodespaceRanges === 0) {
- var useCodespaceRanges = cMap.useCMap.codespaceRanges;
-
- for (var i = 0; i < useCodespaceRanges.length; i++) {
- cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
- }
-
- cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
- }
-
- cMap.useCMap.forEach(function (key, value) {
- if (!cMap.contains(key)) {
- cMap.mapOne(key, cMap.useCMap.lookup(key));
- }
- });
- return cMap;
- });
- }
-
- function createBuiltInCMap(name, fetchBuiltInCMap) {
- if (name === "Identity-H") {
- return Promise.resolve(new IdentityCMap(false, 2));
- } else if (name === "Identity-V") {
- return Promise.resolve(new IdentityCMap(true, 2));
- }
-
- if (!BUILT_IN_CMAPS.includes(name)) {
- return Promise.reject(new Error("Unknown CMap name: " + name));
- }
-
- if (!fetchBuiltInCMap) {
- return Promise.reject(new Error("Built-in CMap parameters are not provided."));
- }
-
- return fetchBuiltInCMap(name).then(function (data) {
- var cMapData = data.cMapData,
- compressionType = data.compressionType;
- var cMap = new CMap(true);
-
- if (compressionType === _util.CMapCompressionType.BINARY) {
- return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) {
- return extendCMap(cMap, fetchBuiltInCMap, useCMap);
- });
- }
-
- if (compressionType === _util.CMapCompressionType.NONE) {
- var lexer = new _parser.Lexer(new _stream.Stream(cMapData));
- return parseCMap(cMap, lexer, fetchBuiltInCMap, null);
- }
-
- return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported."));
- });
- }
-
- return {
- async create(params) {
- var encoding = params.encoding;
- var fetchBuiltInCMap = params.fetchBuiltInCMap;
- var useCMap = params.useCMap;
-
- if ((0, _primitives.isName)(encoding)) {
- return createBuiltInCMap(encoding.name, fetchBuiltInCMap);
- } else if ((0, _primitives.isStream)(encoding)) {
- var cMap = new CMap();
- var lexer = new _parser.Lexer(encoding);
- return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) {
- if (parsedCMap.isIdentityCMap) {
- return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);
- }
-
- return parsedCMap;
- });
- }
-
- throw new Error("Encoding required.");
- }
-
- };
-}();
-
-exports.CMapFactory = CMapFactory;
-
-/***/ }),
-/* 29 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getFontType = getFontType;
-exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.SEAC_ANALYSIS_ENABLED = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _cff_parser = __w_pdfjs_require__(30);
-
-var _glyphlist = __w_pdfjs_require__(33);
-
-var _encodings = __w_pdfjs_require__(32);
-
-var _standard_fonts = __w_pdfjs_require__(34);
-
-var _unicode = __w_pdfjs_require__(35);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _font_renderer = __w_pdfjs_require__(36);
-
-var _cmap = __w_pdfjs_require__(28);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _type1_parser = __w_pdfjs_require__(37);
-
-const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
-var PDF_GLYPH_SPACE_UNITS = 1000;
-var SEAC_ANALYSIS_ENABLED = true;
-exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;
-const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isMonospace", "isSerifFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"];
-const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"];
-var FontFlags = {
- FixedPitch: 1,
- Serif: 2,
- Symbolic: 4,
- Script: 8,
- Nonsymbolic: 32,
- Italic: 64,
- AllCap: 65536,
- SmallCap: 131072,
- ForceBold: 262144
-};
-exports.FontFlags = FontFlags;
-var MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"];
-
-function adjustWidths(properties) {
- if (!properties.fontMatrix) {
- return;
- }
-
- if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {
- return;
- }
-
- var scale = 0.001 / properties.fontMatrix[0];
- var glyphsWidths = properties.widths;
-
- for (var glyph in glyphsWidths) {
- glyphsWidths[glyph] *= scale;
- }
-
- properties.defaultWidth *= scale;
-}
-
-function adjustToUnicode(properties, builtInEncoding) {
- if (properties.hasIncludedToUnicodeMap) {
- return;
- }
-
- if (properties.hasEncoding) {
- return;
- }
-
- if (builtInEncoding === properties.defaultEncoding) {
- return;
- }
-
- if (properties.toUnicode instanceof IdentityToUnicodeMap) {
- return;
- }
-
- var toUnicode = [],
- glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
-
- for (var charCode in builtInEncoding) {
- var glyphName = builtInEncoding[charCode];
- var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
-
- if (unicode !== -1) {
- toUnicode[charCode] = String.fromCharCode(unicode);
- }
- }
-
- properties.toUnicode.amend(toUnicode);
-}
-
-function getFontType(type, subtype) {
- switch (type) {
- case "Type1":
- return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1;
-
- case "CIDFontType0":
- return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0;
-
- case "OpenType":
- return _util.FontType.OPENTYPE;
-
- case "TrueType":
- return _util.FontType.TRUETYPE;
-
- case "CIDFontType2":
- return _util.FontType.CIDFONTTYPE2;
-
- case "MMType1":
- return _util.FontType.MMTYPE1;
-
- case "Type0":
- return _util.FontType.TYPE0;
-
- default:
- return _util.FontType.UNKNOWN;
- }
-}
-
-function recoverGlyphName(name, glyphsUnicodeMap) {
- if (glyphsUnicodeMap[name] !== undefined) {
- return name;
- }
-
- var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);
-
- if (unicode !== -1) {
- for (var key in glyphsUnicodeMap) {
- if (glyphsUnicodeMap[key] === unicode) {
- return key;
- }
- }
- }
-
- (0, _util.info)("Unable to recover a standard glyph name for: " + name);
- return name;
-}
-
-var Glyph = function GlyphClosure() {
- function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
- this.fontChar = fontChar;
- this.unicode = unicode;
- this.accent = accent;
- this.width = width;
- this.vmetric = vmetric;
- this.operatorListId = operatorListId;
- this.isSpace = isSpace;
- this.isInFont = isInFont;
- }
-
- Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
- return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont;
- };
-
- return Glyph;
-}();
-
-var ToUnicodeMap = function ToUnicodeMapClosure() {
- function ToUnicodeMap(cmap = []) {
- this._map = cmap;
- }
-
- ToUnicodeMap.prototype = {
- get length() {
- return this._map.length;
- },
-
- forEach(callback) {
- for (var charCode in this._map) {
- callback(charCode, this._map[charCode].charCodeAt(0));
- }
- },
-
- has(i) {
- return this._map[i] !== undefined;
- },
-
- get(i) {
- return this._map[i];
- },
-
- charCodeOf(value) {
- const map = this._map;
-
- if (map.length <= 0x10000) {
- return map.indexOf(value);
- }
-
- for (const charCode in map) {
- if (map[charCode] === value) {
- return charCode | 0;
- }
- }
-
- return -1;
- },
-
- amend(map) {
- for (var charCode in map) {
- this._map[charCode] = map[charCode];
- }
- }
-
- };
- return ToUnicodeMap;
-}();
-
-exports.ToUnicodeMap = ToUnicodeMap;
-
-var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() {
- function IdentityToUnicodeMap(firstChar, lastChar) {
- this.firstChar = firstChar;
- this.lastChar = lastChar;
- }
-
- IdentityToUnicodeMap.prototype = {
- get length() {
- return this.lastChar + 1 - this.firstChar;
- },
-
- forEach(callback) {
- for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
- callback(i, i);
- }
- },
-
- has(i) {
- return this.firstChar <= i && i <= this.lastChar;
- },
-
- get(i) {
- if (this.firstChar <= i && i <= this.lastChar) {
- return String.fromCharCode(i);
- }
-
- return undefined;
- },
-
- charCodeOf(v) {
- return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;
- },
-
- amend(map) {
- (0, _util.unreachable)("Should not call amend()");
- }
-
- };
- return IdentityToUnicodeMap;
-}();
-
-exports.IdentityToUnicodeMap = IdentityToUnicodeMap;
-
-var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() {
- function writeInt16(dest, offset, num) {
- dest[offset] = num >> 8 & 0xff;
- dest[offset + 1] = num & 0xff;
- }
-
- function writeInt32(dest, offset, num) {
- dest[offset] = num >> 24 & 0xff;
- dest[offset + 1] = num >> 16 & 0xff;
- dest[offset + 2] = num >> 8 & 0xff;
- dest[offset + 3] = num & 0xff;
- }
-
- function writeData(dest, offset, data) {
- var i, ii;
-
- if (data instanceof Uint8Array) {
- dest.set(data, offset);
- } else if (typeof data === "string") {
- for (i = 0, ii = data.length; i < ii; i++) {
- dest[offset++] = data.charCodeAt(i) & 0xff;
- }
- } else {
- for (i = 0, ii = data.length; i < ii; i++) {
- dest[offset++] = data[i] & 0xff;
- }
- }
- }
-
- function OpenTypeFileBuilder(sfnt) {
- this.sfnt = sfnt;
- this.tables = Object.create(null);
- }
-
- OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {
- var maxPower2 = 1,
- log2 = 0;
-
- while ((maxPower2 ^ entriesCount) > maxPower2) {
- maxPower2 <<= 1;
- log2++;
- }
-
- var searchRange = maxPower2 * entrySize;
- return {
- range: searchRange,
- entry: log2,
- rangeShift: entrySize * entriesCount - searchRange
- };
- };
-
- var OTF_HEADER_SIZE = 12;
- var OTF_TABLE_ENTRY_SIZE = 16;
- OpenTypeFileBuilder.prototype = {
- toArray: function OpenTypeFileBuilder_toArray() {
- var sfnt = this.sfnt;
- var tables = this.tables;
- var tablesNames = Object.keys(tables);
- tablesNames.sort();
- var numTables = tablesNames.length;
- var i, j, jj, table, tableName;
- var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
- var tableOffsets = [offset];
-
- for (i = 0; i < numTables; i++) {
- table = tables[tablesNames[i]];
- var paddedLength = (table.length + 3 & ~3) >>> 0;
- offset += paddedLength;
- tableOffsets.push(offset);
- }
-
- var file = new Uint8Array(offset);
-
- for (i = 0; i < numTables; i++) {
- table = tables[tablesNames[i]];
- writeData(file, tableOffsets[i], table);
- }
-
- if (sfnt === "true") {
- sfnt = (0, _util.string32)(0x00010000);
- }
-
- file[0] = sfnt.charCodeAt(0) & 0xff;
- file[1] = sfnt.charCodeAt(1) & 0xff;
- file[2] = sfnt.charCodeAt(2) & 0xff;
- file[3] = sfnt.charCodeAt(3) & 0xff;
- writeInt16(file, 4, numTables);
- var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
- writeInt16(file, 6, searchParams.range);
- writeInt16(file, 8, searchParams.entry);
- writeInt16(file, 10, searchParams.rangeShift);
- offset = OTF_HEADER_SIZE;
-
- for (i = 0; i < numTables; i++) {
- tableName = tablesNames[i];
- file[offset] = tableName.charCodeAt(0) & 0xff;
- file[offset + 1] = tableName.charCodeAt(1) & 0xff;
- file[offset + 2] = tableName.charCodeAt(2) & 0xff;
- file[offset + 3] = tableName.charCodeAt(3) & 0xff;
- var checksum = 0;
-
- for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
- var quad = (0, _core_utils.readUint32)(file, j);
- checksum = checksum + quad >>> 0;
- }
-
- writeInt32(file, offset + 4, checksum);
- writeInt32(file, offset + 8, tableOffsets[i]);
- writeInt32(file, offset + 12, tables[tableName].length);
- offset += OTF_TABLE_ENTRY_SIZE;
- }
-
- return file;
- },
- addTable: function OpenTypeFileBuilder_addTable(tag, data) {
- if (tag in this.tables) {
- throw new Error("Table " + tag + " already exists");
- }
-
- this.tables[tag] = data;
- }
- };
- return OpenTypeFileBuilder;
-}();
-
-var Font = function FontClosure() {
- function Font(name, file, properties) {
- var charCode;
- this.name = name;
- this.loadedName = properties.loadedName;
- this.isType3Font = properties.isType3Font;
- this.missingFile = false;
- this.glyphCache = Object.create(null);
- this.isSerifFont = !!(properties.flags & FontFlags.Serif);
- this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
- this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);
- var type = properties.type;
- var subtype = properties.subtype;
- this.type = type;
- this.subtype = subtype;
- let fallbackName = "sans-serif";
-
- if (this.isMonospace) {
- fallbackName = "monospace";
- } else if (this.isSerifFont) {
- fallbackName = "serif";
- }
-
- this.fallbackName = fallbackName;
- this.differences = properties.differences;
- this.widths = properties.widths;
- this.defaultWidth = properties.defaultWidth;
- this.composite = properties.composite;
- this.cMap = properties.cMap;
- this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
- this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
- this.fontMatrix = properties.fontMatrix;
- this.bbox = properties.bbox;
- this.defaultEncoding = properties.defaultEncoding;
- this.toUnicode = properties.toUnicode;
- this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap();
- this.toFontChar = [];
-
- if (properties.type === "Type3") {
- for (charCode = 0; charCode < 256; charCode++) {
- this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];
- }
-
- this.fontType = _util.FontType.TYPE3;
- return;
- }
-
- this.cidEncoding = properties.cidEncoding;
- this.vertical = !!properties.vertical;
-
- if (this.vertical) {
- this.vmetrics = properties.vmetrics;
- this.defaultVMetrics = properties.defaultVMetrics;
- }
-
- if (!file || file.isEmpty) {
- if (file) {
- (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")");
- }
-
- this.fallbackToSystemFont();
- return;
- }
-
- [type, subtype] = getFontFileType(file, properties);
-
- if (type !== this.type || subtype !== this.subtype) {
- (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`);
- }
-
- try {
- var data;
-
- switch (type) {
- case "MMType1":
- (0, _util.info)("MMType1 font (" + name + "), falling back to Type1.");
-
- case "Type1":
- case "CIDFontType0":
- this.mimetype = "font/opentype";
- var cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new CFFFont(file, properties) : new Type1Font(name, file, properties);
- adjustWidths(properties);
- data = this.convert(name, cff, properties);
- break;
-
- case "OpenType":
- case "TrueType":
- case "CIDFontType2":
- this.mimetype = "font/opentype";
- data = this.checkAndRepair(name, file, properties);
-
- if (this.isOpenType) {
- adjustWidths(properties);
- type = "OpenType";
- }
-
- break;
-
- default:
- throw new _util.FormatError(`Font ${type} is not supported`);
- }
- } catch (e) {
- (0, _util.warn)(e);
- this.fallbackToSystemFont();
- return;
- }
-
- this.data = data;
- this.fontType = getFontType(type, subtype);
- this.fontMatrix = properties.fontMatrix;
- this.widths = properties.widths;
- this.defaultWidth = properties.defaultWidth;
- this.toUnicode = properties.toUnicode;
- this.seacMap = properties.seacMap;
- }
-
- Font.getFontID = function () {
- var ID = 1;
- return function Font_getFontID() {
- return String(ID++);
- };
- }();
-
- function int16(b0, b1) {
- return (b0 << 8) + b1;
- }
-
- function writeSignedInt16(bytes, index, value) {
- bytes[index + 1] = value;
- bytes[index] = value >>> 8;
- }
-
- function signedInt16(b0, b1) {
- var value = (b0 << 8) + b1;
- return value & 1 << 15 ? value - 0x10000 : value;
- }
-
- function int32(b0, b1, b2, b3) {
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
- }
-
- function string16(value) {
- return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
- }
-
- function safeString16(value) {
- if (value > 0x7fff) {
- value = 0x7fff;
- } else if (value < -0x8000) {
- value = -0x8000;
- }
-
- return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
- }
-
- function isTrueTypeFile(file) {
- var header = file.peekBytes(4);
- return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true";
- }
-
- function isTrueTypeCollectionFile(file) {
- const header = file.peekBytes(4);
- return (0, _util.bytesToString)(header) === "ttcf";
- }
-
- function isOpenTypeFile(file) {
- var header = file.peekBytes(4);
- return (0, _util.bytesToString)(header) === "OTTO";
- }
-
- function isType1File(file) {
- var header = file.peekBytes(2);
-
- if (header[0] === 0x25 && header[1] === 0x21) {
- return true;
- }
-
- if (header[0] === 0x80 && header[1] === 0x01) {
- return true;
- }
-
- return false;
- }
-
- function isCFFFile(file) {
- const header = file.peekBytes(4);
-
- if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {
- return true;
- }
-
- return false;
- }
-
- function getFontFileType(file, {
- type,
- subtype,
- composite
- }) {
- let fileType, fileSubtype;
-
- if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {
- if (composite) {
- fileType = "CIDFontType2";
- } else {
- fileType = "TrueType";
- }
- } else if (isOpenTypeFile(file)) {
- if (composite) {
- fileType = "CIDFontType2";
- } else {
- fileType = "OpenType";
- }
- } else if (isType1File(file)) {
- if (composite) {
- fileType = "CIDFontType0";
- } else {
- fileType = type === "MMType1" ? "MMType1" : "Type1";
- }
- } else if (isCFFFile(file)) {
- if (composite) {
- fileType = "CIDFontType0";
- fileSubtype = "CIDFontType0C";
- } else {
- fileType = type === "MMType1" ? "MMType1" : "Type1";
- fileSubtype = "Type1C";
- }
- } else {
- (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype.");
- fileType = type;
- fileSubtype = subtype;
- }
-
- return [fileType, fileSubtype];
- }
-
- function buildToFontChar(encoding, glyphsUnicodeMap, differences) {
- var toFontChar = [],
- unicode;
-
- for (var i = 0, ii = encoding.length; i < ii; i++) {
- unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);
-
- if (unicode !== -1) {
- toFontChar[i] = unicode;
- }
- }
-
- for (var charCode in differences) {
- unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);
-
- if (unicode !== -1) {
- toFontChar[+charCode] = unicode;
- }
- }
-
- return toFontChar;
- }
-
- function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) {
- var newMap = Object.create(null);
- var toFontChar = [];
- var privateUseAreaIndex = 0;
- var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
- var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
-
- for (var originalCharCode in charCodeToGlyphId) {
- originalCharCode |= 0;
- var glyphId = charCodeToGlyphId[originalCharCode];
-
- if (!hasGlyph(glyphId)) {
- continue;
- }
-
- if (nextAvailableFontCharCode > privateUseOffetEnd) {
- privateUseAreaIndex++;
-
- if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {
- (0, _util.warn)("Ran out of space in font private use area.");
- break;
- }
-
- nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
- privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
- }
-
- var fontCharCode = nextAvailableFontCharCode++;
-
- if (glyphId === 0) {
- glyphId = newGlyphZeroId;
- }
-
- newMap[fontCharCode] = glyphId;
- toFontChar[originalCharCode] = fontCharCode;
- }
-
- return {
- toFontChar,
- charCodeToGlyphId: newMap,
- nextAvailableFontCharCode
- };
- }
-
- function getRanges(glyphs, numGlyphs) {
- var codes = [];
-
- for (var charCode in glyphs) {
- if (glyphs[charCode] >= numGlyphs) {
- continue;
- }
-
- codes.push({
- fontCharCode: charCode | 0,
- glyphId: glyphs[charCode]
- });
- }
-
- if (codes.length === 0) {
- codes.push({
- fontCharCode: 0,
- glyphId: 0
- });
- }
-
- codes.sort(function fontGetRangesSort(a, b) {
- return a.fontCharCode - b.fontCharCode;
- });
- var ranges = [];
- var length = codes.length;
-
- for (var n = 0; n < length;) {
- var start = codes[n].fontCharCode;
- var codeIndices = [codes[n].glyphId];
- ++n;
- var end = start;
-
- while (n < length && end + 1 === codes[n].fontCharCode) {
- codeIndices.push(codes[n].glyphId);
- ++end;
- ++n;
-
- if (end === 0xffff) {
- break;
- }
- }
-
- ranges.push([start, end, codeIndices]);
- }
-
- return ranges;
- }
-
- function createCmapTable(glyphs, numGlyphs) {
- var ranges = getRanges(glyphs, numGlyphs);
- var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1;
- var cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8);
- var i, ii, j, jj;
-
- for (i = ranges.length - 1; i >= 0; --i) {
- if (ranges[i][0] <= 0xffff) {
- break;
- }
- }
-
- var bmpLength = i + 1;
-
- if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {
- ranges[i][1] = 0xfffe;
- }
-
- var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;
- var segCount = bmpLength + trailingRangesCount;
- var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);
- var startCount = "";
- var endCount = "";
- var idDeltas = "";
- var idRangeOffsets = "";
- var glyphsIds = "";
- var bias = 0;
- var range, start, end, codes;
-
- for (i = 0, ii = bmpLength; i < ii; i++) {
- range = ranges[i];
- start = range[0];
- end = range[1];
- startCount += string16(start);
- endCount += string16(end);
- codes = range[2];
- var contiguous = true;
-
- for (j = 1, jj = codes.length; j < jj; ++j) {
- if (codes[j] !== codes[j - 1] + 1) {
- contiguous = false;
- break;
- }
- }
-
- if (!contiguous) {
- var offset = (segCount - i) * 2 + bias * 2;
- bias += end - start + 1;
- idDeltas += string16(0);
- idRangeOffsets += string16(offset);
-
- for (j = 0, jj = codes.length; j < jj; ++j) {
- glyphsIds += string16(codes[j]);
- }
- } else {
- var startCode = codes[0];
- idDeltas += string16(startCode - start & 0xffff);
- idRangeOffsets += string16(0);
- }
- }
-
- if (trailingRangesCount > 0) {
- endCount += "\xFF\xFF";
- startCount += "\xFF\xFF";
- idDeltas += "\x00\x01";
- idRangeOffsets += "\x00\x00";
- }
-
- var format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds;
- var format31012 = "";
- var header31012 = "";
-
- if (numTables > 1) {
- cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length);
- format31012 = "";
-
- for (i = 0, ii = ranges.length; i < ii; i++) {
- range = ranges[i];
- start = range[0];
- codes = range[2];
- var code = codes[0];
-
- for (j = 1, jj = codes.length; j < jj; ++j) {
- if (codes[j] !== codes[j - 1] + 1) {
- end = range[0] + j - 1;
- format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);
- start = end + 1;
- code = codes[j];
- }
- }
-
- format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);
- }
-
- header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12);
- }
-
- return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012;
- }
-
- function validateOS2Table(os2, file) {
- file.pos = (file.start || 0) + os2.offset;
- var version = file.getUint16();
- file.skip(60);
- var selection = file.getUint16();
-
- if (version < 4 && selection & 0x0300) {
- return false;
- }
-
- var firstChar = file.getUint16();
- var lastChar = file.getUint16();
-
- if (firstChar > lastChar) {
- return false;
- }
-
- file.skip(6);
- var usWinAscent = file.getUint16();
-
- if (usWinAscent === 0) {
- return false;
- }
-
- os2.data[8] = os2.data[9] = 0;
- return true;
- }
-
- function createOS2Table(properties, charstrings, override) {
- override = override || {
- unitsPerEm: 0,
- yMax: 0,
- yMin: 0,
- ascent: 0,
- descent: 0
- };
- var ulUnicodeRange1 = 0;
- var ulUnicodeRange2 = 0;
- var ulUnicodeRange3 = 0;
- var ulUnicodeRange4 = 0;
- var firstCharIndex = null;
- var lastCharIndex = 0;
-
- if (charstrings) {
- for (var code in charstrings) {
- code |= 0;
-
- if (firstCharIndex > code || !firstCharIndex) {
- firstCharIndex = code;
- }
-
- if (lastCharIndex < code) {
- lastCharIndex = code;
- }
-
- var position = (0, _unicode.getUnicodeRangeFor)(code);
-
- if (position < 32) {
- ulUnicodeRange1 |= 1 << position;
- } else if (position < 64) {
- ulUnicodeRange2 |= 1 << position - 32;
- } else if (position < 96) {
- ulUnicodeRange3 |= 1 << position - 64;
- } else if (position < 123) {
- ulUnicodeRange4 |= 1 << position - 96;
- } else {
- throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage");
- }
- }
-
- if (lastCharIndex > 0xffff) {
- lastCharIndex = 0xffff;
- }
- } else {
- firstCharIndex = 0;
- lastCharIndex = 255;
- }
-
- var bbox = properties.bbox || [0, 0, 0, 0];
- var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
- var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;
- var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));
- var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));
-
- if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
- typoDescent = -typoDescent;
- }
-
- var winAscent = override.yMax || typoAscent;
- var winDescent = -override.yMin || -typoDescent;
- return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03";
- }
-
- function createPostTable(properties) {
- var angle = Math.floor(properties.italicAngle * 2 ** 16);
- return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00";
- }
-
- function createNameTable(name, proto) {
- if (!proto) {
- proto = [[], []];
- }
-
- var strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || "", proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"];
- var stringsUnicode = [];
- var i, ii, j, jj, str;
-
- for (i = 0, ii = strings.length; i < ii; i++) {
- str = proto[1][i] || strings[i];
- var strBufUnicode = [];
-
- for (j = 0, jj = str.length; j < jj; j++) {
- strBufUnicode.push(string16(str.charCodeAt(j)));
- }
-
- stringsUnicode.push(strBufUnicode.join(""));
- }
-
- var names = [strings, stringsUnicode];
- var platforms = ["\x00\x01", "\x00\x03"];
- var encodings = ["\x00\x00", "\x00\x01"];
- var languages = ["\x00\x00", "\x04\x09"];
- var namesRecordCount = strings.length * platforms.length;
- var nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);
- var strOffset = 0;
-
- for (i = 0, ii = platforms.length; i < ii; i++) {
- var strs = names[i];
-
- for (j = 0, jj = strs.length; j < jj; j++) {
- str = strs[j];
- var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);
- nameTable += nameRecord;
- strOffset += str.length;
- }
- }
-
- nameTable += strings.join("") + stringsUnicode.join("");
- return nameTable;
- }
-
- Font.prototype = {
- name: null,
- font: null,
- mimetype: null,
- disableFontFace: false,
-
- get renderer() {
- var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);
-
- return (0, _util.shadow)(this, "renderer", renderer);
- },
-
- exportData(extraProperties = false) {
- const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;
- const data = Object.create(null);
- let property, value;
-
- for (property of exportDataProperties) {
- value = this[property];
-
- if (value !== undefined) {
- data[property] = value;
- }
- }
-
- return data;
- },
-
- fallbackToSystemFont: function Font_fallbackToSystemFont() {
- this.missingFile = true;
- var name = this.name;
- var type = this.type;
- var subtype = this.subtype;
- let fontName = name.replace(/[,_]/g, "-").replace(/\s/g, "");
- var stdFontMap = (0, _standard_fonts.getStdFontMap)(),
- nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();
- var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
- fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
- this.bold = fontName.search(/bold/gi) !== -1;
- this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1;
- this.black = name.search(/Black/g) !== -1;
- this.remeasure = Object.keys(this.widths).length > 0;
-
- if (isStandardFont && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) {
- const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
- const map = [];
-
- for (const charCode in GlyphMapForStandardFonts) {
- map[+charCode] = GlyphMapForStandardFonts[charCode];
- }
-
- if (/Arial-?Black/i.test(name)) {
- var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();
-
- for (const charCode in SupplementalGlyphMapForArialBlack) {
- map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];
- }
- } else if (/Calibri/i.test(name)) {
- const SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();
-
- for (const charCode in SupplementalGlyphMapForCalibri) {
- map[+charCode] = SupplementalGlyphMapForCalibri[charCode];
- }
- }
-
- var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;
-
- if (!isIdentityUnicode) {
- this.toUnicode.forEach(function (charCode, unicodeCharCode) {
- map[+charCode] = unicodeCharCode;
- });
- }
-
- this.toFontChar = map;
- this.toUnicode = new ToUnicodeMap(map);
- } else if (/Symbol/i.test(fontName)) {
- this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
- } else if (/Dingbats/i.test(fontName)) {
- if (/Wingdings/i.test(name)) {
- (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats.");
- }
-
- this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);
- } else if (isStandardFont) {
- this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
- } else {
- const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
- const map = [];
- this.toUnicode.forEach((charCode, unicodeCharCode) => {
- if (!this.composite) {
- var glyphName = this.differences[charCode] || this.defaultEncoding[charCode];
- const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
-
- if (unicode !== -1) {
- unicodeCharCode = unicode;
- }
- }
-
- map[+charCode] = unicodeCharCode;
- });
-
- if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {
- if (/Verdana/i.test(name)) {
- const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
-
- for (const charCode in GlyphMapForStandardFonts) {
- map[+charCode] = GlyphMapForStandardFonts[charCode];
- }
- }
- }
-
- this.toFontChar = map;
- }
-
- this.loadedName = fontName.split("-")[0];
- this.fontType = getFontType(type, subtype);
- },
- checkAndRepair: function Font_checkAndRepair(name, font, properties) {
- const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "];
-
- function readTables(file, numTables) {
- const tables = Object.create(null);
- tables["OS/2"] = null;
- tables.cmap = null;
- tables.head = null;
- tables.hhea = null;
- tables.hmtx = null;
- tables.maxp = null;
- tables.name = null;
- tables.post = null;
-
- for (let i = 0; i < numTables; i++) {
- const table = readTableEntry(file);
-
- if (!VALID_TABLES.includes(table.tag)) {
- continue;
- }
-
- if (table.length === 0) {
- continue;
- }
-
- tables[table.tag] = table;
- }
-
- return tables;
- }
-
- function readTableEntry(file) {
- var tag = (0, _util.bytesToString)(file.getBytes(4));
- var checksum = file.getInt32() >>> 0;
- var offset = file.getInt32() >>> 0;
- var length = file.getInt32() >>> 0;
- var previousPosition = file.pos;
- file.pos = file.start ? file.start : 0;
- file.skip(offset);
- var data = file.getBytes(length);
- file.pos = previousPosition;
-
- if (tag === "head") {
- data[8] = data[9] = data[10] = data[11] = 0;
- data[17] |= 0x20;
- }
-
- return {
- tag,
- checksum,
- length,
- offset,
- data
- };
- }
-
- function readOpenTypeHeader(ttf) {
- return {
- version: (0, _util.bytesToString)(ttf.getBytes(4)),
- numTables: ttf.getUint16(),
- searchRange: ttf.getUint16(),
- entrySelector: ttf.getUint16(),
- rangeShift: ttf.getUint16()
- };
- }
-
- function readTrueTypeCollectionHeader(ttc) {
- const ttcTag = (0, _util.bytesToString)(ttc.getBytes(4));
- (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font.");
- const majorVersion = ttc.getUint16();
- const minorVersion = ttc.getUint16();
- const numFonts = ttc.getInt32() >>> 0;
- const offsetTable = [];
-
- for (let i = 0; i < numFonts; i++) {
- offsetTable.push(ttc.getInt32() >>> 0);
- }
-
- const header = {
- ttcTag,
- majorVersion,
- minorVersion,
- numFonts,
- offsetTable
- };
-
- switch (majorVersion) {
- case 1:
- return header;
-
- case 2:
- header.dsigTag = ttc.getInt32() >>> 0;
- header.dsigLength = ttc.getInt32() >>> 0;
- header.dsigOffset = ttc.getInt32() >>> 0;
- return header;
- }
-
- throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`);
- }
-
- function readTrueTypeCollectionData(ttc, fontName) {
- const {
- numFonts,
- offsetTable
- } = readTrueTypeCollectionHeader(ttc);
-
- for (let i = 0; i < numFonts; i++) {
- ttc.pos = (ttc.start || 0) + offsetTable[i];
- const potentialHeader = readOpenTypeHeader(ttc);
- const potentialTables = readTables(ttc, potentialHeader.numTables);
-
- if (!potentialTables.name) {
- throw new _util.FormatError('TrueType Collection font must contain a "name" table.');
- }
-
- const nameTable = readNameTable(potentialTables.name);
-
- for (let j = 0, jj = nameTable.length; j < jj; j++) {
- for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
- const nameEntry = nameTable[j][k];
-
- if (nameEntry && nameEntry.replace(/\s/g, "") === fontName) {
- return {
- header: potentialHeader,
- tables: potentialTables
- };
- }
- }
- }
- }
-
- throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`);
- }
-
- function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {
- if (!cmap) {
- (0, _util.warn)("No cmap table available.");
- return {
- platformId: -1,
- encodingId: -1,
- mappings: [],
- hasShortCmap: false
- };
- }
-
- var segment;
- var start = (file.start ? file.start : 0) + cmap.offset;
- file.pos = start;
- file.skip(2);
- var numTables = file.getUint16();
- var potentialTable;
- var canBreak = false;
-
- for (var i = 0; i < numTables; i++) {
- var platformId = file.getUint16();
- var encodingId = file.getUint16();
- var offset = file.getInt32() >>> 0;
- var useTable = false;
-
- if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {
- continue;
- }
-
- if (platformId === 0 && encodingId === 0) {
- useTable = true;
- } else if (platformId === 1 && encodingId === 0) {
- useTable = true;
- } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {
- useTable = true;
-
- if (!isSymbolicFont) {
- canBreak = true;
- }
- } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {
- useTable = true;
- canBreak = true;
- }
-
- if (useTable) {
- potentialTable = {
- platformId,
- encodingId,
- offset
- };
- }
-
- if (canBreak) {
- break;
- }
- }
-
- if (potentialTable) {
- file.pos = start + potentialTable.offset;
- }
-
- if (!potentialTable || file.peekByte() === -1) {
- (0, _util.warn)("Could not find a preferred cmap table.");
- return {
- platformId: -1,
- encodingId: -1,
- mappings: [],
- hasShortCmap: false
- };
- }
-
- var format = file.getUint16();
- file.skip(2 + 2);
- var hasShortCmap = false;
- var mappings = [];
- var j, glyphId;
-
- if (format === 0) {
- for (j = 0; j < 256; j++) {
- var index = file.getByte();
-
- if (!index) {
- continue;
- }
-
- mappings.push({
- charCode: j,
- glyphId: index
- });
- }
-
- hasShortCmap = true;
- } else if (format === 4) {
- var segCount = file.getUint16() >> 1;
- file.skip(6);
- var segIndex,
- segments = [];
-
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segments.push({
- end: file.getUint16()
- });
- }
-
- file.skip(2);
-
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segments[segIndex].start = file.getUint16();
- }
-
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segments[segIndex].delta = file.getUint16();
- }
-
- var offsetsCount = 0;
-
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segment = segments[segIndex];
- var rangeOffset = file.getUint16();
-
- if (!rangeOffset) {
- segment.offsetIndex = -1;
- continue;
- }
-
- var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
- segment.offsetIndex = offsetIndex;
- offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);
- }
-
- var offsets = [];
-
- for (j = 0; j < offsetsCount; j++) {
- offsets.push(file.getUint16());
- }
-
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segment = segments[segIndex];
- start = segment.start;
- var end = segment.end;
- var delta = segment.delta;
- offsetIndex = segment.offsetIndex;
-
- for (j = start; j <= end; j++) {
- if (j === 0xffff) {
- continue;
- }
-
- glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];
- glyphId = glyphId + delta & 0xffff;
- mappings.push({
- charCode: j,
- glyphId
- });
- }
- }
- } else if (format === 6) {
- var firstCode = file.getUint16();
- var entryCount = file.getUint16();
-
- for (j = 0; j < entryCount; j++) {
- glyphId = file.getUint16();
- var charCode = firstCode + j;
- mappings.push({
- charCode,
- glyphId
- });
- }
- } else {
- (0, _util.warn)("cmap table has unsupported format: " + format);
- return {
- platformId: -1,
- encodingId: -1,
- mappings: [],
- hasShortCmap: false
- };
- }
-
- mappings.sort(function (a, b) {
- return a.charCode - b.charCode;
- });
-
- for (i = 1; i < mappings.length; i++) {
- if (mappings[i - 1].charCode === mappings[i].charCode) {
- mappings.splice(i, 1);
- i--;
- }
- }
-
- return {
- platformId: potentialTable.platformId,
- encodingId: potentialTable.encodingId,
- mappings,
- hasShortCmap
- };
- }
-
- function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) {
- if (!header) {
- if (metrics) {
- metrics.data = null;
- }
-
- return;
- }
-
- file.pos = (file.start ? file.start : 0) + header.offset;
- file.pos += 4;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 8;
- file.pos += 2;
- var numOfMetrics = file.getUint16();
-
- if (numOfMetrics > numGlyphs) {
- (0, _util.info)("The numOfMetrics (" + numOfMetrics + ") should not be " + "greater than the numGlyphs (" + numGlyphs + ")");
- numOfMetrics = numGlyphs;
- header.data[34] = (numOfMetrics & 0xff00) >> 8;
- header.data[35] = numOfMetrics & 0x00ff;
- }
-
- var numOfSidebearings = numGlyphs - numOfMetrics;
- var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);
-
- if (numMissing > 0) {
- var entries = new Uint8Array(metrics.length + numMissing * 2);
- entries.set(metrics.data);
-
- if (dupFirstEntry) {
- entries[metrics.length] = metrics.data[2];
- entries[metrics.length + 1] = metrics.data[3];
- }
-
- metrics.data = entries;
- }
- }
-
- function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {
- var glyphProfile = {
- length: 0,
- sizeOfInstructions: 0
- };
-
- if (sourceEnd - sourceStart <= 12) {
- return glyphProfile;
- }
-
- var glyf = source.subarray(sourceStart, sourceEnd);
- var contoursCount = signedInt16(glyf[0], glyf[1]);
-
- if (contoursCount < 0) {
- contoursCount = -1;
- writeSignedInt16(glyf, 0, contoursCount);
- dest.set(glyf, destStart);
- glyphProfile.length = glyf.length;
- return glyphProfile;
- }
-
- var i,
- j = 10,
- flagsCount = 0;
-
- for (i = 0; i < contoursCount; i++) {
- var endPoint = glyf[j] << 8 | glyf[j + 1];
- flagsCount = endPoint + 1;
- j += 2;
- }
-
- var instructionsStart = j;
- var instructionsLength = glyf[j] << 8 | glyf[j + 1];
- glyphProfile.sizeOfInstructions = instructionsLength;
- j += 2 + instructionsLength;
- var instructionsEnd = j;
- var coordinatesLength = 0;
-
- for (i = 0; i < flagsCount; i++) {
- var flag = glyf[j++];
-
- if (flag & 0xc0) {
- glyf[j - 1] = flag & 0x3f;
- }
-
- let xLength = 2;
-
- if (flag & 2) {
- xLength = 1;
- } else if (flag & 16) {
- xLength = 0;
- }
-
- let yLength = 2;
-
- if (flag & 4) {
- yLength = 1;
- } else if (flag & 32) {
- yLength = 0;
- }
-
- const xyLength = xLength + yLength;
- coordinatesLength += xyLength;
-
- if (flag & 8) {
- var repeat = glyf[j++];
- i += repeat;
- coordinatesLength += repeat * xyLength;
- }
- }
-
- if (coordinatesLength === 0) {
- return glyphProfile;
- }
-
- var glyphDataLength = j + coordinatesLength;
-
- if (glyphDataLength > glyf.length) {
- return glyphProfile;
- }
-
- if (!hintsValid && instructionsLength > 0) {
- dest.set(glyf.subarray(0, instructionsStart), destStart);
- dest.set([0, 0], destStart + instructionsStart);
- dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);
- glyphDataLength -= instructionsLength;
-
- if (glyf.length - glyphDataLength > 3) {
- glyphDataLength = glyphDataLength + 3 & ~3;
- }
-
- glyphProfile.length = glyphDataLength;
- return glyphProfile;
- }
-
- if (glyf.length - glyphDataLength > 3) {
- glyphDataLength = glyphDataLength + 3 & ~3;
- dest.set(glyf.subarray(0, glyphDataLength), destStart);
- glyphProfile.length = glyphDataLength;
- return glyphProfile;
- }
-
- dest.set(glyf, destStart);
- glyphProfile.length = glyf.length;
- return glyphProfile;
- }
-
- function sanitizeHead(head, numGlyphs, locaLength) {
- var data = head.data;
- var version = int32(data[0], data[1], data[2], data[3]);
-
- if (version >> 16 !== 1) {
- (0, _util.info)("Attempting to fix invalid version in head table: " + version);
- data[0] = 0;
- data[1] = 1;
- data[2] = 0;
- data[3] = 0;
- }
-
- var indexToLocFormat = int16(data[50], data[51]);
-
- if (indexToLocFormat < 0 || indexToLocFormat > 1) {
- (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat);
- var numGlyphsPlusOne = numGlyphs + 1;
-
- if (locaLength === numGlyphsPlusOne << 1) {
- data[50] = 0;
- data[51] = 0;
- } else if (locaLength === numGlyphsPlusOne << 2) {
- data[50] = 0;
- data[51] = 1;
- } else {
- throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat);
- }
- }
- }
-
- function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {
- var itemSize, itemDecode, itemEncode;
-
- if (isGlyphLocationsLong) {
- itemSize = 4;
-
- itemDecode = function fontItemDecodeLong(data, offset) {
- return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
- };
-
- itemEncode = function fontItemEncodeLong(data, offset, value) {
- data[offset] = value >>> 24 & 0xff;
- data[offset + 1] = value >> 16 & 0xff;
- data[offset + 2] = value >> 8 & 0xff;
- data[offset + 3] = value & 0xff;
- };
- } else {
- itemSize = 2;
-
- itemDecode = function fontItemDecode(data, offset) {
- return data[offset] << 9 | data[offset + 1] << 1;
- };
-
- itemEncode = function fontItemEncode(data, offset, value) {
- data[offset] = value >> 9 & 0xff;
- data[offset + 1] = value >> 1 & 0xff;
- };
- }
-
- var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;
- var locaDataSize = itemSize * (1 + numGlyphsOut);
- var locaData = new Uint8Array(locaDataSize);
- locaData.set(loca.data.subarray(0, locaDataSize));
- loca.data = locaData;
- var oldGlyfData = glyf.data;
- var oldGlyfDataLength = oldGlyfData.length;
- var newGlyfData = new Uint8Array(oldGlyfDataLength);
- var startOffset = itemDecode(locaData, 0);
- var writeOffset = 0;
- var missingGlyphs = Object.create(null);
- itemEncode(locaData, 0, writeOffset);
- var i, j;
-
- for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
- var endOffset = itemDecode(locaData, j);
-
- if (endOffset === 0) {
- endOffset = startOffset;
- }
-
- if (endOffset > oldGlyfDataLength && (oldGlyfDataLength + 3 & ~3) === endOffset) {
- endOffset = oldGlyfDataLength;
- }
-
- if (endOffset > oldGlyfDataLength) {
- startOffset = endOffset;
- }
-
- var glyphProfile = sanitizeGlyph(oldGlyfData, startOffset, endOffset, newGlyfData, writeOffset, hintsValid);
- var newLength = glyphProfile.length;
-
- if (newLength === 0) {
- missingGlyphs[i] = true;
- }
-
- if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {
- maxSizeOfInstructions = glyphProfile.sizeOfInstructions;
- }
-
- writeOffset += newLength;
- itemEncode(locaData, j, writeOffset);
- startOffset = endOffset;
- }
-
- if (writeOffset === 0) {
- var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);
-
- for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {
- itemEncode(locaData, j, simpleGlyph.length);
- }
-
- glyf.data = simpleGlyph;
- } else if (dupFirstEntry) {
- var firstEntryLength = itemDecode(locaData, itemSize);
-
- if (newGlyfData.length > firstEntryLength + writeOffset) {
- glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
- } else {
- glyf.data = new Uint8Array(firstEntryLength + writeOffset);
- glyf.data.set(newGlyfData.subarray(0, writeOffset));
- }
-
- glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
- itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);
- } else {
- glyf.data = newGlyfData.subarray(0, writeOffset);
- }
-
- return {
- missingGlyphs,
- maxSizeOfInstructions
- };
- }
-
- function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {
- var start = (font.start ? font.start : 0) + post.offset;
- font.pos = start;
- var length = post.length,
- end = start + length;
- var version = font.getInt32();
- font.skip(28);
- var glyphNames;
- var valid = true;
- var i;
-
- switch (version) {
- case 0x00010000:
- glyphNames = MacStandardGlyphOrdering;
- break;
-
- case 0x00020000:
- var numGlyphs = font.getUint16();
-
- if (numGlyphs !== maxpNumGlyphs) {
- valid = false;
- break;
- }
-
- var glyphNameIndexes = [];
-
- for (i = 0; i < numGlyphs; ++i) {
- var index = font.getUint16();
-
- if (index >= 32768) {
- valid = false;
- break;
- }
-
- glyphNameIndexes.push(index);
- }
-
- if (!valid) {
- break;
- }
-
- var customNames = [];
- var strBuf = [];
-
- while (font.pos < end) {
- var stringLength = font.getByte();
- strBuf.length = stringLength;
-
- for (i = 0; i < stringLength; ++i) {
- strBuf[i] = String.fromCharCode(font.getByte());
- }
-
- customNames.push(strBuf.join(""));
- }
-
- glyphNames = [];
-
- for (i = 0; i < numGlyphs; ++i) {
- var j = glyphNameIndexes[i];
-
- if (j < 258) {
- glyphNames.push(MacStandardGlyphOrdering[j]);
- continue;
- }
-
- glyphNames.push(customNames[j - 258]);
- }
-
- break;
-
- case 0x00030000:
- break;
-
- default:
- (0, _util.warn)("Unknown/unsupported post table version " + version);
- valid = false;
-
- if (propertiesObj.defaultEncoding) {
- glyphNames = propertiesObj.defaultEncoding;
- }
-
- break;
- }
-
- propertiesObj.glyphNames = glyphNames;
- return valid;
- }
-
- function readNameTable(nameTable) {
- var start = (font.start ? font.start : 0) + nameTable.offset;
- font.pos = start;
- var names = [[], []];
- var length = nameTable.length,
- end = start + length;
- var format = font.getUint16();
- var FORMAT_0_HEADER_LENGTH = 6;
-
- if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
- return names;
- }
-
- var numRecords = font.getUint16();
- var stringsStart = font.getUint16();
- var records = [];
- var NAME_RECORD_LENGTH = 12;
- var i, ii;
-
- for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {
- var r = {
- platform: font.getUint16(),
- encoding: font.getUint16(),
- language: font.getUint16(),
- name: font.getUint16(),
- length: font.getUint16(),
- offset: font.getUint16()
- };
-
- if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) {
- records.push(r);
- }
- }
-
- for (i = 0, ii = records.length; i < ii; i++) {
- var record = records[i];
-
- if (record.length <= 0) {
- continue;
- }
-
- var pos = start + stringsStart + record.offset;
-
- if (pos + record.length > end) {
- continue;
- }
-
- font.pos = pos;
- var nameIndex = record.name;
-
- if (record.encoding) {
- var str = "";
-
- for (var j = 0, jj = record.length; j < jj; j += 2) {
- str += String.fromCharCode(font.getUint16());
- }
-
- names[1][nameIndex] = str;
- } else {
- names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length));
- }
- }
-
- return names;
- }
-
- var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
-
- function sanitizeTTProgram(table, ttContext) {
- var data = table.data;
- var i = 0,
- j,
- n,
- b,
- funcId,
- pc,
- lastEndf = 0,
- lastDeff = 0;
- var stack = [];
- var callstack = [];
- var functionsCalled = [];
- var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;
- var inFDEF = false,
- ifLevel = 0,
- inELSE = 0;
-
- for (var ii = data.length; i < ii;) {
- var op = data[i++];
-
- if (op === 0x40) {
- n = data[i++];
-
- if (inFDEF || inELSE) {
- i += n;
- } else {
- for (j = 0; j < n; j++) {
- stack.push(data[i++]);
- }
- }
- } else if (op === 0x41) {
- n = data[i++];
-
- if (inFDEF || inELSE) {
- i += n * 2;
- } else {
- for (j = 0; j < n; j++) {
- b = data[i++];
- stack.push(b << 8 | data[i++]);
- }
- }
- } else if ((op & 0xf8) === 0xb0) {
- n = op - 0xb0 + 1;
-
- if (inFDEF || inELSE) {
- i += n;
- } else {
- for (j = 0; j < n; j++) {
- stack.push(data[i++]);
- }
- }
- } else if ((op & 0xf8) === 0xb8) {
- n = op - 0xb8 + 1;
-
- if (inFDEF || inELSE) {
- i += n * 2;
- } else {
- for (j = 0; j < n; j++) {
- b = data[i++];
- stack.push(b << 8 | data[i++]);
- }
- }
- } else if (op === 0x2b && !tooComplexToFollowFunctions) {
- if (!inFDEF && !inELSE) {
- funcId = stack[stack.length - 1];
-
- if (isNaN(funcId)) {
- (0, _util.info)("TT: CALL empty stack (or invalid entry).");
- } else {
- ttContext.functionsUsed[funcId] = true;
-
- if (funcId in ttContext.functionsStackDeltas) {
- const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];
-
- if (newStackLength < 0) {
- (0, _util.warn)("TT: CALL invalid functions stack delta.");
- ttContext.hintsValid = false;
- return;
- }
-
- stack.length = newStackLength;
- } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {
- callstack.push({
- data,
- i,
- stackTop: stack.length - 1
- });
- functionsCalled.push(funcId);
- pc = ttContext.functionsDefined[funcId];
-
- if (!pc) {
- (0, _util.warn)("TT: CALL non-existent function");
- ttContext.hintsValid = false;
- return;
- }
-
- data = pc.data;
- i = pc.i;
- }
- }
- }
- } else if (op === 0x2c && !tooComplexToFollowFunctions) {
- if (inFDEF || inELSE) {
- (0, _util.warn)("TT: nested FDEFs not allowed");
- tooComplexToFollowFunctions = true;
- }
-
- inFDEF = true;
- lastDeff = i;
- funcId = stack.pop();
- ttContext.functionsDefined[funcId] = {
- data,
- i
- };
- } else if (op === 0x2d) {
- if (inFDEF) {
- inFDEF = false;
- lastEndf = i;
- } else {
- pc = callstack.pop();
-
- if (!pc) {
- (0, _util.warn)("TT: ENDF bad stack");
- ttContext.hintsValid = false;
- return;
- }
-
- funcId = functionsCalled.pop();
- data = pc.data;
- i = pc.i;
- ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;
- }
- } else if (op === 0x89) {
- if (inFDEF || inELSE) {
- (0, _util.warn)("TT: nested IDEFs not allowed");
- tooComplexToFollowFunctions = true;
- }
-
- inFDEF = true;
- lastDeff = i;
- } else if (op === 0x58) {
- ++ifLevel;
- } else if (op === 0x1b) {
- inELSE = ifLevel;
- } else if (op === 0x59) {
- if (inELSE === ifLevel) {
- inELSE = 0;
- }
-
- --ifLevel;
- } else if (op === 0x1c) {
- if (!inFDEF && !inELSE) {
- var offset = stack[stack.length - 1];
-
- if (offset > 0) {
- i += offset - 1;
- }
- }
- }
-
- if (!inFDEF && !inELSE) {
- let stackDelta = 0;
-
- if (op <= 0x8e) {
- stackDelta = TTOpsStackDeltas[op];
- } else if (op >= 0xc0 && op <= 0xdf) {
- stackDelta = -1;
- } else if (op >= 0xe0) {
- stackDelta = -2;
- }
-
- if (op >= 0x71 && op <= 0x75) {
- n = stack.pop();
-
- if (!isNaN(n)) {
- stackDelta = -n * 2;
- }
- }
-
- while (stackDelta < 0 && stack.length > 0) {
- stack.pop();
- stackDelta++;
- }
-
- while (stackDelta > 0) {
- stack.push(NaN);
- stackDelta--;
- }
- }
- }
-
- ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
- var content = [data];
-
- if (i > data.length) {
- content.push(new Uint8Array(i - data.length));
- }
-
- if (lastDeff > lastEndf) {
- (0, _util.warn)("TT: complementing a missing function tail");
- content.push(new Uint8Array([0x22, 0x2d]));
- }
-
- foldTTTable(table, content);
- }
-
- function checkInvalidFunctions(ttContext, maxFunctionDefs) {
- if (ttContext.tooComplexToFollowFunctions) {
- return;
- }
-
- if (ttContext.functionsDefined.length > maxFunctionDefs) {
- (0, _util.warn)("TT: more functions defined than expected");
- ttContext.hintsValid = false;
- return;
- }
-
- for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
- if (j > maxFunctionDefs) {
- (0, _util.warn)("TT: invalid function id: " + j);
- ttContext.hintsValid = false;
- return;
- }
-
- if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
- (0, _util.warn)("TT: undefined function: " + j);
- ttContext.hintsValid = false;
- return;
- }
- }
- }
-
- function foldTTTable(table, content) {
- if (content.length > 1) {
- var newLength = 0;
- var j, jj;
-
- for (j = 0, jj = content.length; j < jj; j++) {
- newLength += content[j].length;
- }
-
- newLength = newLength + 3 & ~3;
- var result = new Uint8Array(newLength);
- var pos = 0;
-
- for (j = 0, jj = content.length; j < jj; j++) {
- result.set(content[j], pos);
- pos += content[j].length;
- }
-
- table.data = result;
- table.length = newLength;
- }
- }
-
- function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {
- var ttContext = {
- functionsDefined: [],
- functionsUsed: [],
- functionsStackDeltas: [],
- tooComplexToFollowFunctions: false,
- hintsValid: true
- };
-
- if (fpgm) {
- sanitizeTTProgram(fpgm, ttContext);
- }
-
- if (prep) {
- sanitizeTTProgram(prep, ttContext);
- }
-
- if (fpgm) {
- checkInvalidFunctions(ttContext, maxFunctionDefs);
- }
-
- if (cvt && cvt.length & 1) {
- var cvtData = new Uint8Array(cvt.length + 1);
- cvtData.set(cvt.data);
- cvt.data = cvtData;
- }
-
- return ttContext.hintsValid;
- }
-
- font = new _stream.Stream(new Uint8Array(font.getBytes()));
- let header, tables;
-
- if (isTrueTypeCollectionFile(font)) {
- const ttcData = readTrueTypeCollectionData(font, this.name);
- header = ttcData.header;
- tables = ttcData.tables;
- } else {
- header = readOpenTypeHeader(font);
- tables = readTables(font, header.numTables);
- }
-
- let cff, cffFile;
- var isTrueType = !tables["CFF "];
-
- if (!isTrueType) {
- const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));
-
- if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {
- cffFile = new _stream.Stream(tables["CFF "].data);
- cff = new CFFFont(cffFile, properties);
- adjustWidths(properties);
- return this.convert(name, cff, properties);
- }
-
- delete tables.glyf;
- delete tables.loca;
- delete tables.fpgm;
- delete tables.prep;
- delete tables["cvt "];
- this.isOpenType = true;
- } else {
- if (!tables.loca) {
- throw new _util.FormatError('Required "loca" table is not found');
- }
-
- if (!tables.glyf) {
- (0, _util.warn)('Required "glyf" table is not found -- trying to recover.');
- tables.glyf = {
- tag: "glyf",
- data: new Uint8Array(0)
- };
- }
-
- this.isOpenType = false;
- }
-
- if (!tables.maxp) {
- throw new _util.FormatError('Required "maxp" table is not found');
- }
-
- font.pos = (font.start || 0) + tables.maxp.offset;
- var version = font.getInt32();
- const numGlyphs = font.getUint16();
- let numGlyphsOut = numGlyphs + 1;
- let dupFirstEntry = true;
-
- if (numGlyphsOut > 0xffff) {
- dupFirstEntry = false;
- numGlyphsOut = numGlyphs;
- (0, _util.warn)("Not enough space in glyfs to duplicate first glyph.");
- }
-
- var maxFunctionDefs = 0;
- var maxSizeOfInstructions = 0;
-
- if (version >= 0x00010000 && tables.maxp.length >= 22) {
- font.pos += 8;
- var maxZones = font.getUint16();
-
- if (maxZones > 2) {
- tables.maxp.data[14] = 0;
- tables.maxp.data[15] = 2;
- }
-
- font.pos += 4;
- maxFunctionDefs = font.getUint16();
- font.pos += 4;
- maxSizeOfInstructions = font.getUint16();
- }
-
- tables.maxp.data[4] = numGlyphsOut >> 8;
- tables.maxp.data[5] = numGlyphsOut & 255;
- var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs);
-
- if (!hintsValid) {
- delete tables.fpgm;
- delete tables.prep;
- delete tables["cvt "];
- }
-
- sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry);
-
- if (!tables.head) {
- throw new _util.FormatError('Required "head" table is not found');
- }
-
- sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
- var missingGlyphs = Object.create(null);
-
- if (isTrueType) {
- var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
- var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);
- missingGlyphs = glyphsInfo.missingGlyphs;
-
- if (version >= 0x00010000 && tables.maxp.length >= 22) {
- tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
- tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;
- }
- }
-
- if (!tables.hhea) {
- throw new _util.FormatError('Required "hhea" table is not found');
- }
-
- if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
- tables.hhea.data[10] = 0xff;
- tables.hhea.data[11] = 0xff;
- }
-
- var metricsOverride = {
- unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),
- yMax: int16(tables.head.data[42], tables.head.data[43]),
- yMin: signedInt16(tables.head.data[38], tables.head.data[39]),
- ascent: int16(tables.hhea.data[4], tables.hhea.data[5]),
- descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7])
- };
- this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;
- this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;
-
- if (tables.post) {
- readPostScriptTable(tables.post, properties, numGlyphs);
- }
-
- tables.post = {
- tag: "post",
- data: createPostTable(properties)
- };
- const charCodeToGlyphId = [];
-
- function hasGlyph(glyphId) {
- return !missingGlyphs[glyphId];
- }
-
- if (properties.composite) {
- var cidToGidMap = properties.cidToGidMap || [];
- var isCidToGidMapEmpty = cidToGidMap.length === 0;
- properties.cMap.forEach(function (charCode, cid) {
- if (cid > 0xffff) {
- throw new _util.FormatError("Max size of CID is 65,535");
- }
-
- var glyphId = -1;
-
- if (isCidToGidMapEmpty) {
- glyphId = cid;
- } else if (cidToGidMap[cid] !== undefined) {
- glyphId = cidToGidMap[cid];
- }
-
- if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {
- charCodeToGlyphId[charCode] = glyphId;
- }
- });
- } else {
- var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);
- var cmapPlatformId = cmapTable.platformId;
- var cmapEncodingId = cmapTable.encodingId;
- var cmapMappings = cmapTable.mappings;
- var cmapMappingsLength = cmapMappings.length;
-
- if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || cmapPlatformId === -1 && cmapEncodingId === -1 && !!(0, _encodings.getEncoding)(properties.baseEncodingName)) {
- var baseEncoding = [];
-
- if (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding") {
- baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
- }
-
- var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
-
- for (let charCode = 0; charCode < 256; charCode++) {
- var glyphName, standardGlyphName;
-
- if (this.differences && charCode in this.differences) {
- glyphName = this.differences[charCode];
- } else if (charCode in baseEncoding && baseEncoding[charCode] !== "") {
- glyphName = baseEncoding[charCode];
- } else {
- glyphName = _encodings.StandardEncoding[charCode];
- }
-
- if (!glyphName) {
- continue;
- }
-
- standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
- var unicodeOrCharCode;
-
- if (cmapPlatformId === 3 && cmapEncodingId === 1) {
- unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];
- } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {
- unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName);
- }
-
- var found = false;
-
- for (let i = 0; i < cmapMappingsLength; ++i) {
- if (cmapMappings[i].charCode !== unicodeOrCharCode) {
- continue;
- }
-
- charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
- found = true;
- break;
- }
-
- if (!found && properties.glyphNames) {
- var glyphId = properties.glyphNames.indexOf(glyphName);
-
- if (glyphId === -1 && standardGlyphName !== glyphName) {
- glyphId = properties.glyphNames.indexOf(standardGlyphName);
- }
-
- if (glyphId > 0 && hasGlyph(glyphId)) {
- charCodeToGlyphId[charCode] = glyphId;
- }
- }
- }
- } else if (cmapPlatformId === 0 && cmapEncodingId === 0) {
- for (let i = 0; i < cmapMappingsLength; ++i) {
- charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId;
- }
- } else {
- for (let i = 0; i < cmapMappingsLength; ++i) {
- let charCode = cmapMappings[i].charCode;
-
- if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) {
- charCode &= 0xff;
- }
-
- charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
- }
- }
- }
-
- if (charCodeToGlyphId.length === 0) {
- charCodeToGlyphId[0] = 0;
- }
-
- let glyphZeroId = numGlyphsOut - 1;
-
- if (!dupFirstEntry) {
- glyphZeroId = 0;
- }
-
- var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);
- this.toFontChar = newMapping.toFontChar;
- tables.cmap = {
- tag: "cmap",
- data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut)
- };
-
- if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) {
- tables["OS/2"] = {
- tag: "OS/2",
- data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)
- };
- }
-
- if (!isTrueType) {
- try {
- cffFile = new _stream.Stream(tables["CFF "].data);
- var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED);
- cff = parser.parse();
- cff.duplicateFirstGlyph();
- var compiler = new _cff_parser.CFFCompiler(cff);
- tables["CFF "].data = compiler.compile();
- } catch (e) {
- (0, _util.warn)("Failed to compile font " + properties.loadedName);
- }
- }
-
- if (!tables.name) {
- tables.name = {
- tag: "name",
- data: createNameTable(this.name)
- };
- } else {
- var namePrototype = readNameTable(tables.name);
- tables.name.data = createNameTable(name, namePrototype);
- }
-
- var builder = new OpenTypeFileBuilder(header.version);
-
- for (var tableTag in tables) {
- builder.addTable(tableTag, tables[tableTag].data);
- }
-
- return builder.toArray();
- },
- convert: function Font_convert(fontName, font, properties) {
- properties.fixedPitch = false;
-
- if (properties.builtInEncoding) {
- adjustToUnicode(properties, properties.builtInEncoding);
- }
-
- let glyphZeroId = 1;
-
- if (font instanceof CFFFont) {
- glyphZeroId = font.numGlyphs - 1;
- }
-
- var mapping = font.getGlyphMapping(properties);
- var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId);
- this.toFontChar = newMapping.toFontChar;
- var numGlyphs = font.numGlyphs;
-
- function getCharCodes(charCodeToGlyphId, glyphId) {
- var charCodes = null;
-
- for (var charCode in charCodeToGlyphId) {
- if (glyphId === charCodeToGlyphId[charCode]) {
- if (!charCodes) {
- charCodes = [];
- }
-
- charCodes.push(charCode | 0);
- }
- }
-
- return charCodes;
- }
-
- function createCharCode(charCodeToGlyphId, glyphId) {
- for (var charCode in charCodeToGlyphId) {
- if (glyphId === charCodeToGlyphId[charCode]) {
- return charCode | 0;
- }
- }
-
- newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;
- return newMapping.nextAvailableFontCharCode++;
- }
-
- var seacs = font.seacs;
-
- if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {
- var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX;
- var charset = font.getCharset();
- var seacMap = Object.create(null);
-
- for (var glyphId in seacs) {
- glyphId |= 0;
- var seac = seacs[glyphId];
- var baseGlyphName = _encodings.StandardEncoding[seac[2]];
- var accentGlyphName = _encodings.StandardEncoding[seac[3]];
- var baseGlyphId = charset.indexOf(baseGlyphName);
- var accentGlyphId = charset.indexOf(accentGlyphName);
-
- if (baseGlyphId < 0 || accentGlyphId < 0) {
- continue;
- }
-
- var accentOffset = {
- x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
- y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
- };
- var charCodes = getCharCodes(mapping, glyphId);
-
- if (!charCodes) {
- continue;
- }
-
- for (let i = 0, ii = charCodes.length; i < ii; i++) {
- var charCode = charCodes[i];
- var charCodeToGlyphId = newMapping.charCodeToGlyphId;
- var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);
- var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);
- seacMap[charCode] = {
- baseFontCharCode,
- accentFontCharCode,
- accentOffset
- };
- }
- }
-
- properties.seacMap = seacMap;
- }
-
- var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
- var builder = new OpenTypeFileBuilder("\x4F\x54\x54\x4F");
- builder.addTable("CFF ", font.data);
- builder.addTable("OS/2", createOS2Table(properties, newMapping.charCodeToGlyphId));
- builder.addTable("cmap", createCmapTable(newMapping.charCodeToGlyphId, numGlyphs));
- builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00");
- builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs));
- builder.addTable("hmtx", function fontFieldsHmtx() {
- var charstrings = font.charstrings;
- var cffWidths = font.cff ? font.cff.widths : null;
- var hmtx = "\x00\x00\x00\x00";
-
- for (let i = 1, ii = numGlyphs; i < ii; i++) {
- var width = 0;
-
- if (charstrings) {
- var charstring = charstrings[i - 1];
- width = "width" in charstring ? charstring.width : 0;
- } else if (cffWidths) {
- width = Math.ceil(cffWidths[i] || 0);
- }
-
- hmtx += string16(width) + string16(0);
- }
-
- return hmtx;
- }());
- builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs));
- builder.addTable("name", createNameTable(fontName));
- builder.addTable("post", createPostTable(properties));
- return builder.toArray();
- },
-
- get spaceWidth() {
- var possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
- var width;
-
- for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {
- var glyphName = possibleSpaceReplacements[i];
-
- if (glyphName in this.widths) {
- width = this.widths[glyphName];
- break;
- }
-
- var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
- var glyphUnicode = glyphsUnicodeMap[glyphName];
- var charcode = 0;
-
- if (this.composite && this.cMap.contains(glyphUnicode)) {
- charcode = this.cMap.lookup(glyphUnicode);
- }
-
- if (!charcode && this.toUnicode) {
- charcode = this.toUnicode.charCodeOf(glyphUnicode);
- }
-
- if (charcode <= 0) {
- charcode = glyphUnicode;
- }
-
- width = this.widths[charcode];
-
- if (width) {
- break;
- }
- }
-
- width = width || this.defaultWidth;
- return (0, _util.shadow)(this, "spaceWidth", width);
- },
-
- charToGlyph: function Font_charToGlyph(charcode, isSpace) {
- var fontCharCode, width, operatorListId;
- var widthCode = charcode;
-
- if (this.cMap && this.cMap.contains(charcode)) {
- widthCode = this.cMap.lookup(charcode);
- }
-
- width = this.widths[widthCode];
- width = (0, _util.isNum)(width) ? width : this.defaultWidth;
- var vmetric = this.vmetrics && this.vmetrics[widthCode];
- let unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode;
-
- if (typeof unicode === "number") {
- unicode = String.fromCharCode(unicode);
- }
-
- var isInFont = (charcode in this.toFontChar);
- fontCharCode = this.toFontChar[charcode] || charcode;
-
- if (this.missingFile) {
- const glyphName = this.differences[charcode] || this.defaultEncoding[charcode];
-
- if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") {
- fontCharCode = 0x20;
- }
-
- fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode);
- }
-
- if (this.isType3Font) {
- operatorListId = fontCharCode;
- }
-
- var accent = null;
-
- if (this.seacMap && this.seacMap[charcode]) {
- isInFont = true;
- var seac = this.seacMap[charcode];
- fontCharCode = seac.baseFontCharCode;
- accent = {
- fontChar: String.fromCodePoint(seac.accentFontCharCode),
- offset: seac.accentOffset
- };
- }
-
- let fontChar = "";
-
- if (typeof fontCharCode === "number") {
- if (fontCharCode <= 0x10ffff) {
- fontChar = String.fromCodePoint(fontCharCode);
- } else {
- (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);
- }
- }
-
- var glyph = this.glyphCache[charcode];
-
- if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) {
- glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);
- this.glyphCache[charcode] = glyph;
- }
-
- return glyph;
- },
- charsToGlyphs: function Font_charsToGlyphs(chars) {
- var charsCache = this.charsCache;
- var glyphs, glyph, charcode;
-
- if (charsCache) {
- glyphs = charsCache[chars];
-
- if (glyphs) {
- return glyphs;
- }
- }
-
- if (!charsCache) {
- charsCache = this.charsCache = Object.create(null);
- }
-
- glyphs = [];
- var charsCacheKey = chars;
- var i = 0,
- ii;
-
- if (this.cMap) {
- var c = Object.create(null);
-
- while (i < chars.length) {
- this.cMap.readCharCode(chars, i, c);
- charcode = c.charcode;
- var length = c.length;
- i += length;
- var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20;
- glyph = this.charToGlyph(charcode, isSpace);
- glyphs.push(glyph);
- }
- } else {
- for (i = 0, ii = chars.length; i < ii; ++i) {
- charcode = chars.charCodeAt(i);
- glyph = this.charToGlyph(charcode, charcode === 0x20);
- glyphs.push(glyph);
- }
- }
-
- return charsCache[charsCacheKey] = glyphs;
- },
-
- get glyphCacheValues() {
- return Object.values(this.glyphCache);
- }
-
- };
- return Font;
-}();
-
-exports.Font = Font;
-
-var ErrorFont = function ErrorFontClosure() {
- function ErrorFont(error) {
- this.error = error;
- this.loadedName = "g_font_error";
- this.missingFile = true;
- }
-
- ErrorFont.prototype = {
- charsToGlyphs: function ErrorFont_charsToGlyphs() {
- return [];
- },
-
- exportData(extraProperties = false) {
- return {
- error: this.error
- };
- }
-
- };
- return ErrorFont;
-}();
-
-exports.ErrorFont = ErrorFont;
-
-function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
- var charCodeToGlyphId = Object.create(null);
- var glyphId, charCode, baseEncoding;
- var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
-
- if (properties.baseEncodingName) {
- baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
-
- for (charCode = 0; charCode < baseEncoding.length; charCode++) {
- glyphId = glyphNames.indexOf(baseEncoding[charCode]);
-
- if (glyphId >= 0) {
- charCodeToGlyphId[charCode] = glyphId;
- } else {
- charCodeToGlyphId[charCode] = 0;
- }
- }
- } else if (isSymbolicFont) {
- for (charCode in builtInEncoding) {
- charCodeToGlyphId[charCode] = builtInEncoding[charCode];
- }
- } else {
- baseEncoding = _encodings.StandardEncoding;
-
- for (charCode = 0; charCode < baseEncoding.length; charCode++) {
- glyphId = glyphNames.indexOf(baseEncoding[charCode]);
-
- if (glyphId >= 0) {
- charCodeToGlyphId[charCode] = glyphId;
- } else {
- charCodeToGlyphId[charCode] = 0;
- }
- }
- }
-
- var differences = properties.differences,
- glyphsUnicodeMap;
-
- if (differences) {
- for (charCode in differences) {
- var glyphName = differences[charCode];
- glyphId = glyphNames.indexOf(glyphName);
-
- if (glyphId === -1) {
- if (!glyphsUnicodeMap) {
- glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
- }
-
- var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
-
- if (standardGlyphName !== glyphName) {
- glyphId = glyphNames.indexOf(standardGlyphName);
- }
- }
-
- if (glyphId >= 0) {
- charCodeToGlyphId[charCode] = glyphId;
- } else {
- charCodeToGlyphId[charCode] = 0;
- }
- }
- }
-
- return charCodeToGlyphId;
-}
-
-var Type1Font = function Type1FontClosure() {
- function findBlock(streamBytes, signature, startIndex) {
- var streamBytesLength = streamBytes.length;
- var signatureLength = signature.length;
- var scanLength = streamBytesLength - signatureLength;
- var i = startIndex,
- j,
- found = false;
-
- while (i < scanLength) {
- j = 0;
-
- while (j < signatureLength && streamBytes[i + j] === signature[j]) {
- j++;
- }
-
- if (j >= signatureLength) {
- i += j;
-
- while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) {
- i++;
- }
-
- found = true;
- break;
- }
-
- i++;
- }
-
- return {
- found,
- length: i
- };
- }
-
- function getHeaderBlock(stream, suggestedLength) {
- var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];
- var streamStartPos = stream.pos;
- var headerBytes, headerBytesLength, block;
-
- try {
- headerBytes = stream.getBytes(suggestedLength);
- headerBytesLength = headerBytes.length;
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
- }
-
- if (headerBytesLength === suggestedLength) {
- block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);
-
- if (block.found && block.length === suggestedLength) {
- return {
- stream: new _stream.Stream(headerBytes),
- length: suggestedLength
- };
- }
- }
-
- (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.');
- stream.pos = streamStartPos;
- var SCAN_BLOCK_LENGTH = 2048;
- var actualLength;
-
- while (true) {
- var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
- block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);
-
- if (block.length === 0) {
- break;
- }
-
- stream.pos += block.length;
-
- if (block.found) {
- actualLength = stream.pos - streamStartPos;
- break;
- }
- }
-
- stream.pos = streamStartPos;
-
- if (actualLength) {
- return {
- stream: new _stream.Stream(stream.getBytes(actualLength)),
- length: actualLength
- };
- }
-
- (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.');
- return {
- stream: new _stream.Stream(stream.getBytes(suggestedLength)),
- length: suggestedLength
- };
- }
-
- function getEexecBlock(stream, suggestedLength) {
- var eexecBytes = stream.getBytes();
- return {
- stream: new _stream.Stream(eexecBytes),
- length: eexecBytes.length
- };
- }
-
- function Type1Font(name, file, properties) {
- var PFB_HEADER_SIZE = 6;
- var headerBlockLength = properties.length1;
- var eexecBlockLength = properties.length2;
- var pfbHeader = file.peekBytes(PFB_HEADER_SIZE);
- var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;
-
- if (pfbHeaderPresent) {
- file.skip(PFB_HEADER_SIZE);
- headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
- }
-
- var headerBlock = getHeaderBlock(file, headerBlockLength);
- var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED);
- headerBlockParser.extractFontHeader(properties);
-
- if (pfbHeaderPresent) {
- pfbHeader = file.getBytes(PFB_HEADER_SIZE);
- eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
- }
-
- var eexecBlock = getEexecBlock(file, eexecBlockLength);
- var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED);
- var data = eexecBlockParser.extractFontProgram(properties);
-
- for (const key in data.properties) {
- properties[key] = data.properties[key];
- }
-
- var charstrings = data.charstrings;
- var type2Charstrings = this.getType2Charstrings(charstrings);
- var subrs = this.getType2Subrs(data.subrs);
- this.charstrings = charstrings;
- this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);
- this.seacs = this.getSeacs(data.charstrings);
- }
-
- Type1Font.prototype = {
- get numGlyphs() {
- return this.charstrings.length + 1;
- },
-
- getCharset: function Type1Font_getCharset() {
- var charset = [".notdef"];
- var charstrings = this.charstrings;
-
- for (var glyphId = 0; glyphId < charstrings.length; glyphId++) {
- charset.push(charstrings[glyphId].glyphName);
- }
-
- return charset;
- },
- getGlyphMapping: function Type1Font_getGlyphMapping(properties) {
- var charstrings = this.charstrings;
-
- if (properties.composite) {
- const charCodeToGlyphId = Object.create(null);
-
- for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {
- const charCode = properties.cMap.charCodeOf(glyphId);
- charCodeToGlyphId[charCode] = glyphId + 1;
- }
-
- return charCodeToGlyphId;
- }
-
- var glyphNames = [".notdef"],
- glyphId;
-
- for (glyphId = 0; glyphId < charstrings.length; glyphId++) {
- glyphNames.push(charstrings[glyphId].glyphName);
- }
-
- var encoding = properties.builtInEncoding;
-
- if (encoding) {
- var builtInEncoding = Object.create(null);
-
- for (var charCode in encoding) {
- glyphId = glyphNames.indexOf(encoding[charCode]);
-
- if (glyphId >= 0) {
- builtInEncoding[charCode] = glyphId;
- }
- }
- }
-
- return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);
- },
- hasGlyphId: function Type1Font_hasGlyphID(id) {
- if (id < 0 || id >= this.numGlyphs) {
- return false;
- }
-
- if (id === 0) {
- return true;
- }
-
- var glyph = this.charstrings[id - 1];
- return glyph.charstring.length > 0;
- },
- getSeacs: function Type1Font_getSeacs(charstrings) {
- var i, ii;
- var seacMap = [];
-
- for (i = 0, ii = charstrings.length; i < ii; i++) {
- var charstring = charstrings[i];
-
- if (charstring.seac) {
- seacMap[i + 1] = charstring.seac;
- }
- }
-
- return seacMap;
- },
- getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) {
- var type2Charstrings = [];
-
- for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {
- type2Charstrings.push(type1Charstrings[i].charstring);
- }
-
- return type2Charstrings;
- },
- getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {
- var bias = 0;
- var count = type1Subrs.length;
-
- if (count < 1133) {
- bias = 107;
- } else if (count < 33769) {
- bias = 1131;
- } else {
- bias = 32768;
- }
-
- var type2Subrs = [];
- var i;
-
- for (i = 0; i < bias; i++) {
- type2Subrs.push([0x0b]);
- }
-
- for (i = 0; i < count; i++) {
- type2Subrs.push(type1Subrs[i]);
- }
-
- return type2Subrs;
- },
- wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) {
- var cff = new _cff_parser.CFF();
- cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4);
- cff.names = [name];
- var topDict = new _cff_parser.CFFTopDict();
- topDict.setByName("version", 391);
- topDict.setByName("Notice", 392);
- topDict.setByName("FullName", 393);
- topDict.setByName("FamilyName", 394);
- topDict.setByName("Weight", 395);
- topDict.setByName("Encoding", null);
- topDict.setByName("FontMatrix", properties.fontMatrix);
- topDict.setByName("FontBBox", properties.bbox);
- topDict.setByName("charset", null);
- topDict.setByName("CharStrings", null);
- topDict.setByName("Private", null);
- cff.topDict = topDict;
- var strings = new _cff_parser.CFFStrings();
- strings.add("Version 0.11");
- strings.add("See original notice");
- strings.add(name);
- strings.add(name);
- strings.add("Medium");
- cff.strings = strings;
- cff.globalSubrIndex = new _cff_parser.CFFIndex();
- var count = glyphs.length;
- var charsetArray = [".notdef"];
- var i, ii;
-
- for (i = 0; i < count; i++) {
- const glyphName = charstrings[i].glyphName;
-
- const index = _cff_parser.CFFStandardStrings.indexOf(glyphName);
-
- if (index === -1) {
- strings.add(glyphName);
- }
-
- charsetArray.push(glyphName);
- }
-
- cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray);
- var charStringsIndex = new _cff_parser.CFFIndex();
- charStringsIndex.add([0x8b, 0x0e]);
-
- for (i = 0; i < count; i++) {
- charStringsIndex.add(glyphs[i]);
- }
-
- cff.charStrings = charStringsIndex;
- var privateDict = new _cff_parser.CFFPrivateDict();
- privateDict.setByName("Subrs", null);
- var fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"];
-
- for (i = 0, ii = fields.length; i < ii; i++) {
- var field = fields[i];
-
- if (!(field in properties.privateData)) {
- continue;
- }
-
- var value = properties.privateData[field];
-
- if (Array.isArray(value)) {
- for (var j = value.length - 1; j > 0; j--) {
- value[j] -= value[j - 1];
- }
- }
-
- privateDict.setByName(field, value);
- }
-
- cff.topDict.privateDict = privateDict;
- var subrIndex = new _cff_parser.CFFIndex();
-
- for (i = 0, ii = subrs.length; i < ii; i++) {
- subrIndex.add(subrs[i]);
- }
-
- privateDict.subrsIndex = subrIndex;
- var compiler = new _cff_parser.CFFCompiler(cff);
- return compiler.compile();
- }
- };
- return Type1Font;
-}();
-
-var CFFFont = function CFFFontClosure() {
- function CFFFont(file, properties) {
- this.properties = properties;
- var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);
- this.cff = parser.parse();
- this.cff.duplicateFirstGlyph();
- var compiler = new _cff_parser.CFFCompiler(this.cff);
- this.seacs = this.cff.seacs;
-
- try {
- this.data = compiler.compile();
- } catch (e) {
- (0, _util.warn)("Failed to compile font " + properties.loadedName);
- this.data = file;
- }
- }
-
- CFFFont.prototype = {
- get numGlyphs() {
- return this.cff.charStrings.count;
- },
-
- getCharset: function CFFFont_getCharset() {
- return this.cff.charset.charset;
- },
- getGlyphMapping: function CFFFont_getGlyphMapping() {
- var cff = this.cff;
- var properties = this.properties;
- var charsets = cff.charset.charset;
- var charCodeToGlyphId;
- var glyphId;
-
- if (properties.composite) {
- charCodeToGlyphId = Object.create(null);
- let charCode;
-
- if (cff.isCIDFont) {
- for (glyphId = 0; glyphId < charsets.length; glyphId++) {
- var cid = charsets[glyphId];
- charCode = properties.cMap.charCodeOf(cid);
- charCodeToGlyphId[charCode] = glyphId;
- }
- } else {
- for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {
- charCode = properties.cMap.charCodeOf(glyphId);
- charCodeToGlyphId[charCode] = glyphId;
- }
- }
-
- return charCodeToGlyphId;
- }
-
- var encoding = cff.encoding ? cff.encoding.encoding : null;
- charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);
- return charCodeToGlyphId;
- },
- hasGlyphId: function CFFFont_hasGlyphID(id) {
- return this.cff.hasGlyphId(id);
- }
- };
- return CFFFont;
-}();
-
-/***/ }),
-/* 30 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _charsets = __w_pdfjs_require__(31);
-
-var _encodings = __w_pdfjs_require__(32);
-
-var MAX_SUBR_NESTING = 10;
-var CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"];
-exports.CFFStandardStrings = CFFStandardStrings;
-const NUM_STANDARD_CFF_STRINGS = 391;
-
-var CFFParser = function CFFParserClosure() {
- var CharstringValidationData = [null, {
- id: "hstem",
- min: 2,
- stackClearing: true,
- stem: true
- }, null, {
- id: "vstem",
- min: 2,
- stackClearing: true,
- stem: true
- }, {
- id: "vmoveto",
- min: 1,
- stackClearing: true
- }, {
- id: "rlineto",
- min: 2,
- resetStack: true
- }, {
- id: "hlineto",
- min: 1,
- resetStack: true
- }, {
- id: "vlineto",
- min: 1,
- resetStack: true
- }, {
- id: "rrcurveto",
- min: 6,
- resetStack: true
- }, null, {
- id: "callsubr",
- min: 1,
- undefStack: true
- }, {
- id: "return",
- min: 0,
- undefStack: true
- }, null, null, {
- id: "endchar",
- min: 0,
- stackClearing: true
- }, null, null, null, {
- id: "hstemhm",
- min: 2,
- stackClearing: true,
- stem: true
- }, {
- id: "hintmask",
- min: 0,
- stackClearing: true
- }, {
- id: "cntrmask",
- min: 0,
- stackClearing: true
- }, {
- id: "rmoveto",
- min: 2,
- stackClearing: true
- }, {
- id: "hmoveto",
- min: 1,
- stackClearing: true
- }, {
- id: "vstemhm",
- min: 2,
- stackClearing: true,
- stem: true
- }, {
- id: "rcurveline",
- min: 8,
- resetStack: true
- }, {
- id: "rlinecurve",
- min: 8,
- resetStack: true
- }, {
- id: "vvcurveto",
- min: 4,
- resetStack: true
- }, {
- id: "hhcurveto",
- min: 4,
- resetStack: true
- }, null, {
- id: "callgsubr",
- min: 1,
- undefStack: true
- }, {
- id: "vhcurveto",
- min: 4,
- resetStack: true
- }, {
- id: "hvcurveto",
- min: 4,
- resetStack: true
- }];
- var CharstringValidationData12 = [null, null, null, {
- id: "and",
- min: 2,
- stackDelta: -1
- }, {
- id: "or",
- min: 2,
- stackDelta: -1
- }, {
- id: "not",
- min: 1,
- stackDelta: 0
- }, null, null, null, {
- id: "abs",
- min: 1,
- stackDelta: 0
- }, {
- id: "add",
- min: 2,
- stackDelta: -1,
- stackFn: function stack_div(stack, index) {
- stack[index - 2] = stack[index - 2] + stack[index - 1];
- }
- }, {
- id: "sub",
- min: 2,
- stackDelta: -1,
- stackFn: function stack_div(stack, index) {
- stack[index - 2] = stack[index - 2] - stack[index - 1];
- }
- }, {
- id: "div",
- min: 2,
- stackDelta: -1,
- stackFn: function stack_div(stack, index) {
- stack[index - 2] = stack[index - 2] / stack[index - 1];
- }
- }, null, {
- id: "neg",
- min: 1,
- stackDelta: 0,
- stackFn: function stack_div(stack, index) {
- stack[index - 1] = -stack[index - 1];
- }
- }, {
- id: "eq",
- min: 2,
- stackDelta: -1
- }, null, null, {
- id: "drop",
- min: 1,
- stackDelta: -1
- }, null, {
- id: "put",
- min: 2,
- stackDelta: -2
- }, {
- id: "get",
- min: 1,
- stackDelta: 0
- }, {
- id: "ifelse",
- min: 4,
- stackDelta: -3
- }, {
- id: "random",
- min: 0,
- stackDelta: 1
- }, {
- id: "mul",
- min: 2,
- stackDelta: -1,
- stackFn: function stack_div(stack, index) {
- stack[index - 2] = stack[index - 2] * stack[index - 1];
- }
- }, null, {
- id: "sqrt",
- min: 1,
- stackDelta: 0
- }, {
- id: "dup",
- min: 1,
- stackDelta: 1
- }, {
- id: "exch",
- min: 2,
- stackDelta: 0
- }, {
- id: "index",
- min: 2,
- stackDelta: 0
- }, {
- id: "roll",
- min: 3,
- stackDelta: -2
- }, null, null, null, {
- id: "hflex",
- min: 7,
- resetStack: true
- }, {
- id: "flex",
- min: 13,
- resetStack: true
- }, {
- id: "hflex1",
- min: 9,
- resetStack: true
- }, {
- id: "flex1",
- min: 11,
- resetStack: true
- }];
-
- function CFFParser(file, properties, seacAnalysisEnabled) {
- this.bytes = file.getBytes();
- this.properties = properties;
- this.seacAnalysisEnabled = !!seacAnalysisEnabled;
- }
-
- CFFParser.prototype = {
- parse: function CFFParser_parse() {
- var properties = this.properties;
- var cff = new CFF();
- this.cff = cff;
- var header = this.parseHeader();
- var nameIndex = this.parseIndex(header.endPos);
- var topDictIndex = this.parseIndex(nameIndex.endPos);
- var stringIndex = this.parseIndex(topDictIndex.endPos);
- var globalSubrIndex = this.parseIndex(stringIndex.endPos);
- var topDictParsed = this.parseDict(topDictIndex.obj.get(0));
- var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
- cff.header = header.obj;
- cff.names = this.parseNameIndex(nameIndex.obj);
- cff.strings = this.parseStringIndex(stringIndex.obj);
- cff.topDict = topDict;
- cff.globalSubrIndex = globalSubrIndex.obj;
- this.parsePrivateDict(cff.topDict);
- cff.isCIDFont = topDict.hasName("ROS");
- var charStringOffset = topDict.getByName("CharStrings");
- var charStringIndex = this.parseIndex(charStringOffset).obj;
- var fontMatrix = topDict.getByName("FontMatrix");
-
- if (fontMatrix) {
- properties.fontMatrix = fontMatrix;
- }
-
- var fontBBox = topDict.getByName("FontBBox");
-
- if (fontBBox) {
- properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
- properties.descent = Math.min(fontBBox[1], fontBBox[3]);
- properties.ascentScaled = true;
- }
-
- var charset, encoding;
-
- if (cff.isCIDFont) {
- var fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj;
-
- for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
- var dictRaw = fdArrayIndex.get(i);
- var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);
- this.parsePrivateDict(fontDict);
- cff.fdArray.push(fontDict);
- }
-
- encoding = null;
- charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true);
- cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count);
- } else {
- charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false);
- encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset);
- }
-
- cff.charset = charset;
- cff.encoding = encoding;
- var charStringsAndSeacs = this.parseCharStrings({
- charStrings: charStringIndex,
- localSubrIndex: topDict.privateDict.subrsIndex,
- globalSubrIndex: globalSubrIndex.obj,
- fdSelect: cff.fdSelect,
- fdArray: cff.fdArray,
- privateDict: topDict.privateDict
- });
- cff.charStrings = charStringsAndSeacs.charStrings;
- cff.seacs = charStringsAndSeacs.seacs;
- cff.widths = charStringsAndSeacs.widths;
- return cff;
- },
- parseHeader: function CFFParser_parseHeader() {
- var bytes = this.bytes;
- var bytesLength = bytes.length;
- var offset = 0;
-
- while (offset < bytesLength && bytes[offset] !== 1) {
- ++offset;
- }
-
- if (offset >= bytesLength) {
- throw new _util.FormatError("Invalid CFF header");
- }
-
- if (offset !== 0) {
- (0, _util.info)("cff data is shifted");
- bytes = bytes.subarray(offset);
- this.bytes = bytes;
- }
-
- var major = bytes[0];
- var minor = bytes[1];
- var hdrSize = bytes[2];
- var offSize = bytes[3];
- var header = new CFFHeader(major, minor, hdrSize, offSize);
- return {
- obj: header,
- endPos: hdrSize
- };
- },
- parseDict: function CFFParser_parseDict(dict) {
- var pos = 0;
-
- function parseOperand() {
- var value = dict[pos++];
-
- if (value === 30) {
- return parseFloatOperand();
- } else if (value === 28) {
- value = dict[pos++];
- value = (value << 24 | dict[pos++] << 16) >> 16;
- return value;
- } else if (value === 29) {
- value = dict[pos++];
- value = value << 8 | dict[pos++];
- value = value << 8 | dict[pos++];
- value = value << 8 | dict[pos++];
- return value;
- } else if (value >= 32 && value <= 246) {
- return value - 139;
- } else if (value >= 247 && value <= 250) {
- return (value - 247) * 256 + dict[pos++] + 108;
- } else if (value >= 251 && value <= 254) {
- return -((value - 251) * 256) - dict[pos++] - 108;
- }
-
- (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.');
- return NaN;
- }
-
- function parseFloatOperand() {
- var str = "";
- var eof = 15;
- const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"];
- var length = dict.length;
-
- while (pos < length) {
- var b = dict[pos++];
- var b1 = b >> 4;
- var b2 = b & 15;
-
- if (b1 === eof) {
- break;
- }
-
- str += lookup[b1];
-
- if (b2 === eof) {
- break;
- }
-
- str += lookup[b2];
- }
-
- return parseFloat(str);
- }
-
- var operands = [];
- var entries = [];
- pos = 0;
- var end = dict.length;
-
- while (pos < end) {
- var b = dict[pos];
-
- if (b <= 21) {
- if (b === 12) {
- b = b << 8 | dict[++pos];
- }
-
- entries.push([b, operands]);
- operands = [];
- ++pos;
- } else {
- operands.push(parseOperand());
- }
- }
-
- return entries;
- },
- parseIndex: function CFFParser_parseIndex(pos) {
- var cffIndex = new CFFIndex();
- var bytes = this.bytes;
- var count = bytes[pos++] << 8 | bytes[pos++];
- var offsets = [];
- var end = pos;
- var i, ii;
-
- if (count !== 0) {
- var offsetSize = bytes[pos++];
- var startPos = pos + (count + 1) * offsetSize - 1;
-
- for (i = 0, ii = count + 1; i < ii; ++i) {
- var offset = 0;
-
- for (var j = 0; j < offsetSize; ++j) {
- offset <<= 8;
- offset += bytes[pos++];
- }
-
- offsets.push(startPos + offset);
- }
-
- end = offsets[count];
- }
-
- for (i = 0, ii = offsets.length - 1; i < ii; ++i) {
- var offsetStart = offsets[i];
- var offsetEnd = offsets[i + 1];
- cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
- }
-
- return {
- obj: cffIndex,
- endPos: end
- };
- },
- parseNameIndex: function CFFParser_parseNameIndex(index) {
- var names = [];
-
- for (var i = 0, ii = index.count; i < ii; ++i) {
- var name = index.get(i);
- names.push((0, _util.bytesToString)(name));
- }
-
- return names;
- },
- parseStringIndex: function CFFParser_parseStringIndex(index) {
- var strings = new CFFStrings();
-
- for (var i = 0, ii = index.count; i < ii; ++i) {
- var data = index.get(i);
- strings.add((0, _util.bytesToString)(data));
- }
-
- return strings;
- },
- createDict: function CFFParser_createDict(Type, dict, strings) {
- var cffDict = new Type(strings);
-
- for (var i = 0, ii = dict.length; i < ii; ++i) {
- var pair = dict[i];
- var key = pair[0];
- var value = pair[1];
- cffDict.setByKey(key, value);
- }
-
- return cffDict;
- },
- parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) {
- if (!data || state.callDepth > MAX_SUBR_NESTING) {
- return false;
- }
-
- var stackSize = state.stackSize;
- var stack = state.stack;
- var length = data.length;
-
- for (var j = 0; j < length;) {
- var value = data[j++];
- var validationCommand = null;
-
- if (value === 12) {
- var q = data[j++];
-
- if (q === 0) {
- data[j - 2] = 139;
- data[j - 1] = 22;
- stackSize = 0;
- } else {
- validationCommand = CharstringValidationData12[q];
- }
- } else if (value === 28) {
- stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16;
- j += 2;
- stackSize++;
- } else if (value === 14) {
- if (stackSize >= 4) {
- stackSize -= 4;
-
- if (this.seacAnalysisEnabled) {
- state.seac = stack.slice(stackSize, stackSize + 4);
- return false;
- }
- }
-
- validationCommand = CharstringValidationData[value];
- } else if (value >= 32 && value <= 246) {
- stack[stackSize] = value - 139;
- stackSize++;
- } else if (value >= 247 && value <= 254) {
- stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108;
- j++;
- stackSize++;
- } else if (value === 255) {
- stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536;
- j += 4;
- stackSize++;
- } else if (value === 19 || value === 20) {
- state.hints += stackSize >> 1;
- j += state.hints + 7 >> 3;
- stackSize %= 2;
- validationCommand = CharstringValidationData[value];
- } else if (value === 10 || value === 29) {
- var subrsIndex;
-
- if (value === 10) {
- subrsIndex = localSubrIndex;
- } else {
- subrsIndex = globalSubrIndex;
- }
-
- if (!subrsIndex) {
- validationCommand = CharstringValidationData[value];
- (0, _util.warn)("Missing subrsIndex for " + validationCommand.id);
- return false;
- }
-
- var bias = 32768;
-
- if (subrsIndex.count < 1240) {
- bias = 107;
- } else if (subrsIndex.count < 33900) {
- bias = 1131;
- }
-
- var subrNumber = stack[--stackSize] + bias;
-
- if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {
- validationCommand = CharstringValidationData[value];
- (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id);
- return false;
- }
-
- state.stackSize = stackSize;
- state.callDepth++;
- var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);
-
- if (!valid) {
- return false;
- }
-
- state.callDepth--;
- stackSize = state.stackSize;
- continue;
- } else if (value === 11) {
- state.stackSize = stackSize;
- return true;
- } else {
- validationCommand = CharstringValidationData[value];
- }
-
- if (validationCommand) {
- if (validationCommand.stem) {
- state.hints += stackSize >> 1;
-
- if (value === 3 || value === 23) {
- state.hasVStems = true;
- } else if (state.hasVStems && (value === 1 || value === 18)) {
- (0, _util.warn)("CFF stem hints are in wrong order");
- data[j - 1] = value === 1 ? 3 : 23;
- }
- }
-
- if ("min" in validationCommand) {
- if (!state.undefStack && stackSize < validationCommand.min) {
- (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min);
- return false;
- }
- }
-
- if (state.firstStackClearing && validationCommand.stackClearing) {
- state.firstStackClearing = false;
- stackSize -= validationCommand.min;
-
- if (stackSize >= 2 && validationCommand.stem) {
- stackSize %= 2;
- } else if (stackSize > 1) {
- (0, _util.warn)("Found too many parameters for stack-clearing command");
- }
-
- if (stackSize > 0 && stack[stackSize - 1] >= 0) {
- state.width = stack[stackSize - 1];
- }
- }
-
- if ("stackDelta" in validationCommand) {
- if ("stackFn" in validationCommand) {
- validationCommand.stackFn(stack, stackSize);
- }
-
- stackSize += validationCommand.stackDelta;
- } else if (validationCommand.stackClearing) {
- stackSize = 0;
- } else if (validationCommand.resetStack) {
- stackSize = 0;
- state.undefStack = false;
- } else if (validationCommand.undefStack) {
- stackSize = 0;
- state.undefStack = true;
- state.firstStackClearing = false;
- }
- }
- }
-
- state.stackSize = stackSize;
- return true;
- },
-
- parseCharStrings({
- charStrings,
- localSubrIndex,
- globalSubrIndex,
- fdSelect,
- fdArray,
- privateDict
- }) {
- var seacs = [];
- var widths = [];
- var count = charStrings.count;
-
- for (var i = 0; i < count; i++) {
- var charstring = charStrings.get(i);
- var state = {
- callDepth: 0,
- stackSize: 0,
- stack: [],
- undefStack: true,
- hints: 0,
- firstStackClearing: true,
- seac: null,
- width: null,
- hasVStems: false
- };
- var valid = true;
- var localSubrToUse = null;
- var privateDictToUse = privateDict;
-
- if (fdSelect && fdArray.length) {
- var fdIndex = fdSelect.getFDIndex(i);
-
- if (fdIndex === -1) {
- (0, _util.warn)("Glyph index is not in fd select.");
- valid = false;
- }
-
- if (fdIndex >= fdArray.length) {
- (0, _util.warn)("Invalid fd index for glyph index.");
- valid = false;
- }
-
- if (valid) {
- privateDictToUse = fdArray[fdIndex].privateDict;
- localSubrToUse = privateDictToUse.subrsIndex;
- }
- } else if (localSubrIndex) {
- localSubrToUse = localSubrIndex;
- }
-
- if (valid) {
- valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex);
- }
-
- if (state.width !== null) {
- const nominalWidth = privateDictToUse.getByName("nominalWidthX");
- widths[i] = nominalWidth + state.width;
- } else {
- const defaultWidth = privateDictToUse.getByName("defaultWidthX");
- widths[i] = defaultWidth;
- }
-
- if (state.seac !== null) {
- seacs[i] = state.seac;
- }
-
- if (!valid) {
- charStrings.set(i, new Uint8Array([14]));
- }
- }
-
- return {
- charStrings,
- seacs,
- widths
- };
- },
-
- emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) {
- var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
- parentDict.setByKey(18, [0, 0]);
- parentDict.privateDict = privateDict;
- },
- parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) {
- if (!parentDict.hasName("Private")) {
- this.emptyPrivateDictionary(parentDict);
- return;
- }
-
- var privateOffset = parentDict.getByName("Private");
-
- if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {
- parentDict.removeByName("Private");
- return;
- }
-
- var size = privateOffset[0];
- var offset = privateOffset[1];
-
- if (size === 0 || offset >= this.bytes.length) {
- this.emptyPrivateDictionary(parentDict);
- return;
- }
-
- var privateDictEnd = offset + size;
- var dictData = this.bytes.subarray(offset, privateDictEnd);
- var dict = this.parseDict(dictData);
- var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);
- parentDict.privateDict = privateDict;
-
- if (!privateDict.getByName("Subrs")) {
- return;
- }
-
- var subrsOffset = privateDict.getByName("Subrs");
- var relativeOffset = offset + subrsOffset;
-
- if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
- this.emptyPrivateDictionary(parentDict);
- return;
- }
-
- var subrsIndex = this.parseIndex(relativeOffset);
- privateDict.subrsIndex = subrsIndex.obj;
- },
- parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) {
- if (pos === 0) {
- return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset);
- } else if (pos === 1) {
- return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset);
- } else if (pos === 2) {
- return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);
- }
-
- var bytes = this.bytes;
- var start = pos;
- var format = bytes[pos++];
- const charset = [cid ? 0 : ".notdef"];
- var id, count, i;
- length -= 1;
-
- switch (format) {
- case 0:
- for (i = 0; i < length; i++) {
- id = bytes[pos++] << 8 | bytes[pos++];
- charset.push(cid ? id : strings.get(id));
- }
-
- break;
-
- case 1:
- while (charset.length <= length) {
- id = bytes[pos++] << 8 | bytes[pos++];
- count = bytes[pos++];
-
- for (i = 0; i <= count; i++) {
- charset.push(cid ? id++ : strings.get(id++));
- }
- }
-
- break;
-
- case 2:
- while (charset.length <= length) {
- id = bytes[pos++] << 8 | bytes[pos++];
- count = bytes[pos++] << 8 | bytes[pos++];
-
- for (i = 0; i <= count; i++) {
- charset.push(cid ? id++ : strings.get(id++));
- }
- }
-
- break;
-
- default:
- throw new _util.FormatError("Unknown charset format");
- }
-
- var end = pos;
- var raw = bytes.subarray(start, end);
- return new CFFCharset(false, format, charset, raw);
- },
- parseEncoding: function CFFParser_parseEncoding(pos, properties, strings, charset) {
- var encoding = Object.create(null);
- var bytes = this.bytes;
- var predefined = false;
- var format, i, ii;
- var raw = null;
-
- function readSupplement() {
- var supplementsCount = bytes[pos++];
-
- for (i = 0; i < supplementsCount; i++) {
- var code = bytes[pos++];
- var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
- encoding[code] = charset.indexOf(strings.get(sid));
- }
- }
-
- if (pos === 0 || pos === 1) {
- predefined = true;
- format = pos;
- var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
-
- for (i = 0, ii = charset.length; i < ii; i++) {
- var index = baseEncoding.indexOf(charset[i]);
-
- if (index !== -1) {
- encoding[index] = i;
- }
- }
- } else {
- var dataStart = pos;
- format = bytes[pos++];
-
- switch (format & 0x7f) {
- case 0:
- var glyphsCount = bytes[pos++];
-
- for (i = 1; i <= glyphsCount; i++) {
- encoding[bytes[pos++]] = i;
- }
-
- break;
-
- case 1:
- var rangesCount = bytes[pos++];
- var gid = 1;
-
- for (i = 0; i < rangesCount; i++) {
- var start = bytes[pos++];
- var left = bytes[pos++];
-
- for (var j = start; j <= start + left; j++) {
- encoding[j] = gid++;
- }
- }
-
- break;
-
- default:
- throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`);
- }
-
- var dataEnd = pos;
-
- if (format & 0x80) {
- bytes[dataStart] &= 0x7f;
- readSupplement();
- }
-
- raw = bytes.subarray(dataStart, dataEnd);
- }
-
- format = format & 0x7f;
- return new CFFEncoding(predefined, format, encoding, raw);
- },
- parseFDSelect: function CFFParser_parseFDSelect(pos, length) {
- var bytes = this.bytes;
- var format = bytes[pos++];
- var fdSelect = [];
- var i;
-
- switch (format) {
- case 0:
- for (i = 0; i < length; ++i) {
- var id = bytes[pos++];
- fdSelect.push(id);
- }
-
- break;
-
- case 3:
- var rangesCount = bytes[pos++] << 8 | bytes[pos++];
-
- for (i = 0; i < rangesCount; ++i) {
- var first = bytes[pos++] << 8 | bytes[pos++];
-
- if (i === 0 && first !== 0) {
- (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover.");
- first = 0;
- }
-
- var fdIndex = bytes[pos++];
- var next = bytes[pos] << 8 | bytes[pos + 1];
-
- for (var j = first; j < next; ++j) {
- fdSelect.push(fdIndex);
- }
- }
-
- pos += 2;
- break;
-
- default:
- throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`);
- }
-
- if (fdSelect.length !== length) {
- throw new _util.FormatError("parseFDSelect: Invalid font data.");
- }
-
- return new CFFFDSelect(format, fdSelect);
- }
- };
- return CFFParser;
-}();
-
-exports.CFFParser = CFFParser;
-
-var CFF = function CFFClosure() {
- function CFF() {
- this.header = null;
- this.names = [];
- this.topDict = null;
- this.strings = new CFFStrings();
- this.globalSubrIndex = null;
- this.encoding = null;
- this.charset = null;
- this.charStrings = null;
- this.fdArray = [];
- this.fdSelect = null;
- this.isCIDFont = false;
- }
-
- CFF.prototype = {
- duplicateFirstGlyph: function CFF_duplicateFirstGlyph() {
- if (this.charStrings.count >= 65535) {
- (0, _util.warn)("Not enough space in charstrings to duplicate first glyph.");
- return;
- }
-
- var glyphZero = this.charStrings.get(0);
- this.charStrings.add(glyphZero);
-
- if (this.isCIDFont) {
- this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);
- }
- },
- hasGlyphId: function CFF_hasGlyphID(id) {
- if (id < 0 || id >= this.charStrings.count) {
- return false;
- }
-
- var glyph = this.charStrings.get(id);
- return glyph.length > 0;
- }
- };
- return CFF;
-}();
-
-exports.CFF = CFF;
-
-var CFFHeader = function CFFHeaderClosure() {
- function CFFHeader(major, minor, hdrSize, offSize) {
- this.major = major;
- this.minor = minor;
- this.hdrSize = hdrSize;
- this.offSize = offSize;
- }
-
- return CFFHeader;
-}();
-
-exports.CFFHeader = CFFHeader;
-
-var CFFStrings = function CFFStringsClosure() {
- function CFFStrings() {
- this.strings = [];
- }
-
- CFFStrings.prototype = {
- get: function CFFStrings_get(index) {
- if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {
- return CFFStandardStrings[index];
- }
-
- if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {
- return this.strings[index - NUM_STANDARD_CFF_STRINGS];
- }
-
- return CFFStandardStrings[0];
- },
- getSID: function CFFStrings_getSID(str) {
- let index = CFFStandardStrings.indexOf(str);
-
- if (index !== -1) {
- return index;
- }
-
- index = this.strings.indexOf(str);
-
- if (index !== -1) {
- return index + NUM_STANDARD_CFF_STRINGS;
- }
-
- return -1;
- },
- add: function CFFStrings_add(value) {
- this.strings.push(value);
- },
-
- get count() {
- return this.strings.length;
- }
-
- };
- return CFFStrings;
-}();
-
-exports.CFFStrings = CFFStrings;
-
-var CFFIndex = function CFFIndexClosure() {
- function CFFIndex() {
- this.objects = [];
- this.length = 0;
- }
-
- CFFIndex.prototype = {
- add: function CFFIndex_add(data) {
- this.length += data.length;
- this.objects.push(data);
- },
- set: function CFFIndex_set(index, data) {
- this.length += data.length - this.objects[index].length;
- this.objects[index] = data;
- },
- get: function CFFIndex_get(index) {
- return this.objects[index];
- },
-
- get count() {
- return this.objects.length;
- }
-
- };
- return CFFIndex;
-}();
-
-exports.CFFIndex = CFFIndex;
-
-var CFFDict = function CFFDictClosure() {
- function CFFDict(tables, strings) {
- this.keyToNameMap = tables.keyToNameMap;
- this.nameToKeyMap = tables.nameToKeyMap;
- this.defaults = tables.defaults;
- this.types = tables.types;
- this.opcodes = tables.opcodes;
- this.order = tables.order;
- this.strings = strings;
- this.values = Object.create(null);
- }
-
- CFFDict.prototype = {
- setByKey: function CFFDict_setByKey(key, value) {
- if (!(key in this.keyToNameMap)) {
- return false;
- }
-
- var valueLength = value.length;
-
- if (valueLength === 0) {
- return true;
- }
-
- for (var i = 0; i < valueLength; i++) {
- if (isNaN(value[i])) {
- (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".');
- return true;
- }
- }
-
- var type = this.types[key];
-
- if (type === "num" || type === "sid" || type === "offset") {
- value = value[0];
- }
-
- this.values[key] = value;
- return true;
- },
- setByName: function CFFDict_setByName(name, value) {
- if (!(name in this.nameToKeyMap)) {
- throw new _util.FormatError(`Invalid dictionary name "${name}"`);
- }
-
- this.values[this.nameToKeyMap[name]] = value;
- },
- hasName: function CFFDict_hasName(name) {
- return this.nameToKeyMap[name] in this.values;
- },
- getByName: function CFFDict_getByName(name) {
- if (!(name in this.nameToKeyMap)) {
- throw new _util.FormatError(`Invalid dictionary name ${name}"`);
- }
-
- var key = this.nameToKeyMap[name];
-
- if (!(key in this.values)) {
- return this.defaults[key];
- }
-
- return this.values[key];
- },
- removeByName: function CFFDict_removeByName(name) {
- delete this.values[this.nameToKeyMap[name]];
- }
- };
-
- CFFDict.createTables = function CFFDict_createTables(layout) {
- var tables = {
- keyToNameMap: {},
- nameToKeyMap: {},
- defaults: {},
- types: {},
- opcodes: {},
- order: []
- };
-
- for (var i = 0, ii = layout.length; i < ii; ++i) {
- var entry = layout[i];
- var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
- tables.keyToNameMap[key] = entry[1];
- tables.nameToKeyMap[entry[1]] = key;
- tables.types[key] = entry[2];
- tables.defaults[key] = entry[3];
- tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];
- tables.order.push(key);
- }
-
- return tables;
- };
-
- return CFFDict;
-}();
-
-var CFFTopDict = function CFFTopDictClosure() {
- var layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]];
- var tables = null;
-
- function CFFTopDict(strings) {
- if (tables === null) {
- tables = CFFDict.createTables(layout);
- }
-
- CFFDict.call(this, tables, strings);
- this.privateDict = null;
- }
-
- CFFTopDict.prototype = Object.create(CFFDict.prototype);
- return CFFTopDict;
-}();
-
-exports.CFFTopDict = CFFTopDict;
-
-var CFFPrivateDict = function CFFPrivateDictClosure() {
- var layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]];
- var tables = null;
-
- function CFFPrivateDict(strings) {
- if (tables === null) {
- tables = CFFDict.createTables(layout);
- }
-
- CFFDict.call(this, tables, strings);
- this.subrsIndex = null;
- }
-
- CFFPrivateDict.prototype = Object.create(CFFDict.prototype);
- return CFFPrivateDict;
-}();
-
-exports.CFFPrivateDict = CFFPrivateDict;
-var CFFCharsetPredefinedTypes = {
- ISO_ADOBE: 0,
- EXPERT: 1,
- EXPERT_SUBSET: 2
-};
-
-var CFFCharset = function CFFCharsetClosure() {
- function CFFCharset(predefined, format, charset, raw) {
- this.predefined = predefined;
- this.format = format;
- this.charset = charset;
- this.raw = raw;
- }
-
- return CFFCharset;
-}();
-
-exports.CFFCharset = CFFCharset;
-
-var CFFEncoding = function CFFEncodingClosure() {
- function CFFEncoding(predefined, format, encoding, raw) {
- this.predefined = predefined;
- this.format = format;
- this.encoding = encoding;
- this.raw = raw;
- }
-
- return CFFEncoding;
-}();
-
-var CFFFDSelect = function CFFFDSelectClosure() {
- function CFFFDSelect(format, fdSelect) {
- this.format = format;
- this.fdSelect = fdSelect;
- }
-
- CFFFDSelect.prototype = {
- getFDIndex: function CFFFDSelect_get(glyphIndex) {
- if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
- return -1;
- }
-
- return this.fdSelect[glyphIndex];
- }
- };
- return CFFFDSelect;
-}();
-
-exports.CFFFDSelect = CFFFDSelect;
-
-var CFFOffsetTracker = function CFFOffsetTrackerClosure() {
- function CFFOffsetTracker() {
- this.offsets = Object.create(null);
- }
-
- CFFOffsetTracker.prototype = {
- isTracking: function CFFOffsetTracker_isTracking(key) {
- return key in this.offsets;
- },
- track: function CFFOffsetTracker_track(key, location) {
- if (key in this.offsets) {
- throw new _util.FormatError(`Already tracking location of ${key}`);
- }
-
- this.offsets[key] = location;
- },
- offset: function CFFOffsetTracker_offset(value) {
- for (var key in this.offsets) {
- this.offsets[key] += value;
- }
- },
- setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) {
- if (!(key in this.offsets)) {
- throw new _util.FormatError(`Not tracking location of ${key}`);
- }
-
- var data = output.data;
- var dataOffset = this.offsets[key];
- var size = 5;
-
- for (var i = 0, ii = values.length; i < ii; ++i) {
- var offset0 = i * size + dataOffset;
- var offset1 = offset0 + 1;
- var offset2 = offset0 + 2;
- var offset3 = offset0 + 3;
- var offset4 = offset0 + 4;
-
- if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
- throw new _util.FormatError("writing to an offset that is not empty");
- }
-
- var value = values[i];
- data[offset0] = 0x1d;
- data[offset1] = value >> 24 & 0xff;
- data[offset2] = value >> 16 & 0xff;
- data[offset3] = value >> 8 & 0xff;
- data[offset4] = value & 0xff;
- }
- }
- };
- return CFFOffsetTracker;
-}();
-
-var CFFCompiler = function CFFCompilerClosure() {
- function CFFCompiler(cff) {
- this.cff = cff;
- }
-
- CFFCompiler.prototype = {
- compile: function CFFCompiler_compile() {
- var cff = this.cff;
- var output = {
- data: [],
- length: 0,
- add: function CFFCompiler_add(data) {
- this.data = this.data.concat(data);
- this.length = this.data.length;
- }
- };
- var header = this.compileHeader(cff.header);
- output.add(header);
- var nameIndex = this.compileNameIndex(cff.names);
- output.add(nameIndex);
-
- if (cff.isCIDFont) {
- if (cff.topDict.hasName("FontMatrix")) {
- var base = cff.topDict.getByName("FontMatrix");
- cff.topDict.removeByName("FontMatrix");
-
- for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
- var subDict = cff.fdArray[i];
- var matrix = base.slice(0);
-
- if (subDict.hasName("FontMatrix")) {
- matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix"));
- }
-
- subDict.setByName("FontMatrix", matrix);
- }
- }
- }
-
- cff.topDict.setByName("charset", 0);
- var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
- output.add(compiled.output);
- var topDictTracker = compiled.trackers[0];
- var stringIndex = this.compileStringIndex(cff.strings.strings);
- output.add(stringIndex);
- var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
- output.add(globalSubrIndex);
-
- if (cff.encoding && cff.topDict.hasName("Encoding")) {
- if (cff.encoding.predefined) {
- topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output);
- } else {
- var encoding = this.compileEncoding(cff.encoding);
- topDictTracker.setEntryLocation("Encoding", [output.length], output);
- output.add(encoding);
- }
- }
-
- var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
- topDictTracker.setEntryLocation("charset", [output.length], output);
- output.add(charset);
- var charStrings = this.compileCharStrings(cff.charStrings);
- topDictTracker.setEntryLocation("CharStrings", [output.length], output);
- output.add(charStrings);
-
- if (cff.isCIDFont) {
- topDictTracker.setEntryLocation("FDSelect", [output.length], output);
- var fdSelect = this.compileFDSelect(cff.fdSelect);
- output.add(fdSelect);
- compiled = this.compileTopDicts(cff.fdArray, output.length, true);
- topDictTracker.setEntryLocation("FDArray", [output.length], output);
- output.add(compiled.output);
- var fontDictTrackers = compiled.trackers;
- this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
- }
-
- this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
- output.add([0]);
- return output.data;
- },
- encodeNumber: function CFFCompiler_encodeNumber(value) {
- if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) {
- return this.encodeInteger(value);
- }
-
- return this.encodeFloat(value);
- },
- encodeFloat: function CFFCompiler_encodeFloat(num) {
- var value = num.toString();
- var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
-
- if (m) {
- var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
- value = (Math.round(num * epsilon) / epsilon).toString();
- }
-
- var nibbles = "";
- var i, ii;
-
- for (i = 0, ii = value.length; i < ii; ++i) {
- var a = value[i];
-
- if (a === "e") {
- nibbles += value[++i] === "-" ? "c" : "b";
- } else if (a === ".") {
- nibbles += "a";
- } else if (a === "-") {
- nibbles += "e";
- } else {
- nibbles += a;
- }
- }
-
- nibbles += nibbles.length & 1 ? "f" : "ff";
- var out = [30];
-
- for (i = 0, ii = nibbles.length; i < ii; i += 2) {
- out.push(parseInt(nibbles.substring(i, i + 2), 16));
- }
-
- return out;
- },
- encodeInteger: function CFFCompiler_encodeInteger(value) {
- var code;
-
- if (value >= -107 && value <= 107) {
- code = [value + 139];
- } else if (value >= 108 && value <= 1131) {
- value = value - 108;
- code = [(value >> 8) + 247, value & 0xff];
- } else if (value >= -1131 && value <= -108) {
- value = -value - 108;
- code = [(value >> 8) + 251, value & 0xff];
- } else if (value >= -32768 && value <= 32767) {
- code = [0x1c, value >> 8 & 0xff, value & 0xff];
- } else {
- code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];
- }
-
- return code;
- },
- compileHeader: function CFFCompiler_compileHeader(header) {
- return [header.major, header.minor, header.hdrSize, header.offSize];
- },
- compileNameIndex: function CFFCompiler_compileNameIndex(names) {
- var nameIndex = new CFFIndex();
-
- for (var i = 0, ii = names.length; i < ii; ++i) {
- var name = names[i];
- var length = Math.min(name.length, 127);
- var sanitizedName = new Array(length);
-
- for (var j = 0; j < length; j++) {
- var char = name[j];
-
- if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
- char = "_";
- }
-
- sanitizedName[j] = char;
- }
-
- sanitizedName = sanitizedName.join("");
-
- if (sanitizedName === "") {
- sanitizedName = "Bad_Font_Name";
- }
-
- nameIndex.add((0, _util.stringToBytes)(sanitizedName));
- }
-
- return this.compileIndex(nameIndex);
- },
- compileTopDicts: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) {
- var fontDictTrackers = [];
- var fdArrayIndex = new CFFIndex();
-
- for (var i = 0, ii = dicts.length; i < ii; ++i) {
- var fontDict = dicts[i];
-
- if (removeCidKeys) {
- fontDict.removeByName("CIDFontVersion");
- fontDict.removeByName("CIDFontRevision");
- fontDict.removeByName("CIDFontType");
- fontDict.removeByName("CIDCount");
- fontDict.removeByName("UIDBase");
- }
-
- var fontDictTracker = new CFFOffsetTracker();
- var fontDictData = this.compileDict(fontDict, fontDictTracker);
- fontDictTrackers.push(fontDictTracker);
- fdArrayIndex.add(fontDictData);
- fontDictTracker.offset(length);
- }
-
- fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
- return {
- trackers: fontDictTrackers,
- output: fdArrayIndex
- };
- },
- compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts, trackers, output) {
- for (var i = 0, ii = dicts.length; i < ii; ++i) {
- var fontDict = dicts[i];
- var privateDict = fontDict.privateDict;
-
- if (!privateDict || !fontDict.hasName("Private")) {
- throw new _util.FormatError("There must be a private dictionary.");
- }
-
- var privateDictTracker = new CFFOffsetTracker();
- var privateDictData = this.compileDict(privateDict, privateDictTracker);
- var outputLength = output.length;
- privateDictTracker.offset(outputLength);
-
- if (!privateDictData.length) {
- outputLength = 0;
- }
-
- trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output);
- output.add(privateDictData);
-
- if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
- var subrs = this.compileIndex(privateDict.subrsIndex);
- privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
- output.add(subrs);
- }
- }
- },
- compileDict: function CFFCompiler_compileDict(dict, offsetTracker) {
- var out = [];
- var order = dict.order;
-
- for (var i = 0; i < order.length; ++i) {
- var key = order[i];
-
- if (!(key in dict.values)) {
- continue;
- }
-
- var values = dict.values[key];
- var types = dict.types[key];
-
- if (!Array.isArray(types)) {
- types = [types];
- }
-
- if (!Array.isArray(values)) {
- values = [values];
- }
-
- if (values.length === 0) {
- continue;
- }
-
- for (var j = 0, jj = types.length; j < jj; ++j) {
- var type = types[j];
- var value = values[j];
-
- switch (type) {
- case "num":
- case "sid":
- out = out.concat(this.encodeNumber(value));
- break;
-
- case "offset":
- var name = dict.keyToNameMap[key];
-
- if (!offsetTracker.isTracking(name)) {
- offsetTracker.track(name, out.length);
- }
-
- out = out.concat([0x1d, 0, 0, 0, 0]);
- break;
-
- case "array":
- case "delta":
- out = out.concat(this.encodeNumber(value));
-
- for (var k = 1, kk = values.length; k < kk; ++k) {
- out = out.concat(this.encodeNumber(values[k]));
- }
-
- break;
-
- default:
- throw new _util.FormatError(`Unknown data type of ${type}`);
- }
- }
-
- out = out.concat(dict.opcodes[key]);
- }
-
- return out;
- },
- compileStringIndex: function CFFCompiler_compileStringIndex(strings) {
- var stringIndex = new CFFIndex();
-
- for (var i = 0, ii = strings.length; i < ii; ++i) {
- stringIndex.add((0, _util.stringToBytes)(strings[i]));
- }
-
- return this.compileIndex(stringIndex);
- },
- compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() {
- var globalSubrIndex = this.cff.globalSubrIndex;
- this.out.writeByteArray(this.compileIndex(globalSubrIndex));
- },
- compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) {
- var charStringsIndex = new CFFIndex();
-
- for (var i = 0; i < charStrings.count; i++) {
- var glyph = charStrings.get(i);
-
- if (glyph.length === 0) {
- charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
- continue;
- }
-
- charStringsIndex.add(glyph);
- }
-
- return this.compileIndex(charStringsIndex);
- },
- compileCharset: function CFFCompiler_compileCharset(charset, numGlyphs, strings, isCIDFont) {
- let out;
- const numGlyphsLessNotDef = numGlyphs - 1;
-
- if (isCIDFont) {
- out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);
- } else {
- const length = 1 + numGlyphsLessNotDef * 2;
- out = new Uint8Array(length);
- out[0] = 0;
- let charsetIndex = 0;
- const numCharsets = charset.charset.length;
- let warned = false;
-
- for (let i = 1; i < out.length; i += 2) {
- let sid = 0;
-
- if (charsetIndex < numCharsets) {
- const name = charset.charset[charsetIndex++];
- sid = strings.getSID(name);
-
- if (sid === -1) {
- sid = 0;
-
- if (!warned) {
- warned = true;
- (0, _util.warn)(`Couldn't find ${name} in CFF strings`);
- }
- }
- }
-
- out[i] = sid >> 8 & 0xff;
- out[i + 1] = sid & 0xff;
- }
- }
-
- return this.compileTypedArray(out);
- },
- compileEncoding: function CFFCompiler_compileEncoding(encoding) {
- return this.compileTypedArray(encoding.raw);
- },
- compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) {
- const format = fdSelect.format;
- let out, i;
-
- switch (format) {
- case 0:
- out = new Uint8Array(1 + fdSelect.fdSelect.length);
- out[0] = format;
-
- for (i = 0; i < fdSelect.fdSelect.length; i++) {
- out[i + 1] = fdSelect.fdSelect[i];
- }
-
- break;
-
- case 3:
- const start = 0;
- let lastFD = fdSelect.fdSelect[0];
- const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];
-
- for (i = 1; i < fdSelect.fdSelect.length; i++) {
- const currentFD = fdSelect.fdSelect[i];
-
- if (currentFD !== lastFD) {
- ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);
- lastFD = currentFD;
- }
- }
-
- const numRanges = (ranges.length - 3) / 3;
- ranges[1] = numRanges >> 8 & 0xff;
- ranges[2] = numRanges & 0xff;
- ranges.push(i >> 8 & 0xff, i & 0xff);
- out = new Uint8Array(ranges);
- break;
- }
-
- return this.compileTypedArray(out);
- },
- compileTypedArray: function CFFCompiler_compileTypedArray(data) {
- var out = [];
-
- for (var i = 0, ii = data.length; i < ii; ++i) {
- out[i] = data[i];
- }
-
- return out;
- },
- compileIndex: function CFFCompiler_compileIndex(index, trackers) {
- trackers = trackers || [];
- var objects = index.objects;
- var count = objects.length;
-
- if (count === 0) {
- return [0, 0, 0];
- }
-
- var data = [count >> 8 & 0xff, count & 0xff];
- var lastOffset = 1,
- i;
-
- for (i = 0; i < count; ++i) {
- lastOffset += objects[i].length;
- }
-
- var offsetSize;
-
- if (lastOffset < 0x100) {
- offsetSize = 1;
- } else if (lastOffset < 0x10000) {
- offsetSize = 2;
- } else if (lastOffset < 0x1000000) {
- offsetSize = 3;
- } else {
- offsetSize = 4;
- }
-
- data.push(offsetSize);
- var relativeOffset = 1;
-
- for (i = 0; i < count + 1; i++) {
- if (offsetSize === 1) {
- data.push(relativeOffset & 0xff);
- } else if (offsetSize === 2) {
- data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
- } else if (offsetSize === 3) {
- data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
- } else {
- data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
- }
-
- if (objects[i]) {
- relativeOffset += objects[i].length;
- }
- }
-
- for (i = 0; i < count; i++) {
- if (trackers[i]) {
- trackers[i].offset(data.length);
- }
-
- for (var j = 0, jj = objects[i].length; j < jj; j++) {
- data.push(objects[i][j]);
- }
- }
-
- return data;
- }
- };
- return CFFCompiler;
-}();
-
-exports.CFFCompiler = CFFCompiler;
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0;
-const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"];
-exports.ISOAdobeCharset = ISOAdobeCharset;
-const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
-exports.ExpertCharset = ExpertCharset;
-const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"];
-exports.ExpertSubsetCharset = ExpertSubsetCharset;
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getEncoding = getEncoding;
-exports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding = exports.StandardEncoding = exports.WinAnsiEncoding = void 0;
-const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
-exports.ExpertEncoding = ExpertEncoding;
-const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""];
-const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"];
-exports.MacRomanEncoding = MacRomanEncoding;
-const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""];
-exports.StandardEncoding = StandardEncoding;
-const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"];
-exports.WinAnsiEncoding = WinAnsiEncoding;
-const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""];
-exports.SymbolSetEncoding = SymbolSetEncoding;
-const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""];
-exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding;
-
-function getEncoding(encodingName) {
- switch (encodingName) {
- case "WinAnsiEncoding":
- return WinAnsiEncoding;
-
- case "StandardEncoding":
- return StandardEncoding;
-
- case "MacRomanEncoding":
- return MacRomanEncoding;
-
- case "SymbolSetEncoding":
- return SymbolSetEncoding;
-
- case "ZapfDingbatsEncoding":
- return ZapfDingbatsEncoding;
-
- case "ExpertEncoding":
- return ExpertEncoding;
-
- case "MacExpertEncoding":
- return MacExpertEncoding;
-
- default:
- return null;
- }
-}
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
-var getGlyphsUnicode = getLookupTableFactory(function (t) {
- t.A = 0x0041;
- t.AE = 0x00c6;
- t.AEacute = 0x01fc;
- t.AEmacron = 0x01e2;
- t.AEsmall = 0xf7e6;
- t.Aacute = 0x00c1;
- t.Aacutesmall = 0xf7e1;
- t.Abreve = 0x0102;
- t.Abreveacute = 0x1eae;
- t.Abrevecyrillic = 0x04d0;
- t.Abrevedotbelow = 0x1eb6;
- t.Abrevegrave = 0x1eb0;
- t.Abrevehookabove = 0x1eb2;
- t.Abrevetilde = 0x1eb4;
- t.Acaron = 0x01cd;
- t.Acircle = 0x24b6;
- t.Acircumflex = 0x00c2;
- t.Acircumflexacute = 0x1ea4;
- t.Acircumflexdotbelow = 0x1eac;
- t.Acircumflexgrave = 0x1ea6;
- t.Acircumflexhookabove = 0x1ea8;
- t.Acircumflexsmall = 0xf7e2;
- t.Acircumflextilde = 0x1eaa;
- t.Acute = 0xf6c9;
- t.Acutesmall = 0xf7b4;
- t.Acyrillic = 0x0410;
- t.Adblgrave = 0x0200;
- t.Adieresis = 0x00c4;
- t.Adieresiscyrillic = 0x04d2;
- t.Adieresismacron = 0x01de;
- t.Adieresissmall = 0xf7e4;
- t.Adotbelow = 0x1ea0;
- t.Adotmacron = 0x01e0;
- t.Agrave = 0x00c0;
- t.Agravesmall = 0xf7e0;
- t.Ahookabove = 0x1ea2;
- t.Aiecyrillic = 0x04d4;
- t.Ainvertedbreve = 0x0202;
- t.Alpha = 0x0391;
- t.Alphatonos = 0x0386;
- t.Amacron = 0x0100;
- t.Amonospace = 0xff21;
- t.Aogonek = 0x0104;
- t.Aring = 0x00c5;
- t.Aringacute = 0x01fa;
- t.Aringbelow = 0x1e00;
- t.Aringsmall = 0xf7e5;
- t.Asmall = 0xf761;
- t.Atilde = 0x00c3;
- t.Atildesmall = 0xf7e3;
- t.Aybarmenian = 0x0531;
- t.B = 0x0042;
- t.Bcircle = 0x24b7;
- t.Bdotaccent = 0x1e02;
- t.Bdotbelow = 0x1e04;
- t.Becyrillic = 0x0411;
- t.Benarmenian = 0x0532;
- t.Beta = 0x0392;
- t.Bhook = 0x0181;
- t.Blinebelow = 0x1e06;
- t.Bmonospace = 0xff22;
- t.Brevesmall = 0xf6f4;
- t.Bsmall = 0xf762;
- t.Btopbar = 0x0182;
- t.C = 0x0043;
- t.Caarmenian = 0x053e;
- t.Cacute = 0x0106;
- t.Caron = 0xf6ca;
- t.Caronsmall = 0xf6f5;
- t.Ccaron = 0x010c;
- t.Ccedilla = 0x00c7;
- t.Ccedillaacute = 0x1e08;
- t.Ccedillasmall = 0xf7e7;
- t.Ccircle = 0x24b8;
- t.Ccircumflex = 0x0108;
- t.Cdot = 0x010a;
- t.Cdotaccent = 0x010a;
- t.Cedillasmall = 0xf7b8;
- t.Chaarmenian = 0x0549;
- t.Cheabkhasiancyrillic = 0x04bc;
- t.Checyrillic = 0x0427;
- t.Chedescenderabkhasiancyrillic = 0x04be;
- t.Chedescendercyrillic = 0x04b6;
- t.Chedieresiscyrillic = 0x04f4;
- t.Cheharmenian = 0x0543;
- t.Chekhakassiancyrillic = 0x04cb;
- t.Cheverticalstrokecyrillic = 0x04b8;
- t.Chi = 0x03a7;
- t.Chook = 0x0187;
- t.Circumflexsmall = 0xf6f6;
- t.Cmonospace = 0xff23;
- t.Coarmenian = 0x0551;
- t.Csmall = 0xf763;
- t.D = 0x0044;
- t.DZ = 0x01f1;
- t.DZcaron = 0x01c4;
- t.Daarmenian = 0x0534;
- t.Dafrican = 0x0189;
- t.Dcaron = 0x010e;
- t.Dcedilla = 0x1e10;
- t.Dcircle = 0x24b9;
- t.Dcircumflexbelow = 0x1e12;
- t.Dcroat = 0x0110;
- t.Ddotaccent = 0x1e0a;
- t.Ddotbelow = 0x1e0c;
- t.Decyrillic = 0x0414;
- t.Deicoptic = 0x03ee;
- t.Delta = 0x2206;
- t.Deltagreek = 0x0394;
- t.Dhook = 0x018a;
- t.Dieresis = 0xf6cb;
- t.DieresisAcute = 0xf6cc;
- t.DieresisGrave = 0xf6cd;
- t.Dieresissmall = 0xf7a8;
- t.Digammagreek = 0x03dc;
- t.Djecyrillic = 0x0402;
- t.Dlinebelow = 0x1e0e;
- t.Dmonospace = 0xff24;
- t.Dotaccentsmall = 0xf6f7;
- t.Dslash = 0x0110;
- t.Dsmall = 0xf764;
- t.Dtopbar = 0x018b;
- t.Dz = 0x01f2;
- t.Dzcaron = 0x01c5;
- t.Dzeabkhasiancyrillic = 0x04e0;
- t.Dzecyrillic = 0x0405;
- t.Dzhecyrillic = 0x040f;
- t.E = 0x0045;
- t.Eacute = 0x00c9;
- t.Eacutesmall = 0xf7e9;
- t.Ebreve = 0x0114;
- t.Ecaron = 0x011a;
- t.Ecedillabreve = 0x1e1c;
- t.Echarmenian = 0x0535;
- t.Ecircle = 0x24ba;
- t.Ecircumflex = 0x00ca;
- t.Ecircumflexacute = 0x1ebe;
- t.Ecircumflexbelow = 0x1e18;
- t.Ecircumflexdotbelow = 0x1ec6;
- t.Ecircumflexgrave = 0x1ec0;
- t.Ecircumflexhookabove = 0x1ec2;
- t.Ecircumflexsmall = 0xf7ea;
- t.Ecircumflextilde = 0x1ec4;
- t.Ecyrillic = 0x0404;
- t.Edblgrave = 0x0204;
- t.Edieresis = 0x00cb;
- t.Edieresissmall = 0xf7eb;
- t.Edot = 0x0116;
- t.Edotaccent = 0x0116;
- t.Edotbelow = 0x1eb8;
- t.Efcyrillic = 0x0424;
- t.Egrave = 0x00c8;
- t.Egravesmall = 0xf7e8;
- t.Eharmenian = 0x0537;
- t.Ehookabove = 0x1eba;
- t.Eightroman = 0x2167;
- t.Einvertedbreve = 0x0206;
- t.Eiotifiedcyrillic = 0x0464;
- t.Elcyrillic = 0x041b;
- t.Elevenroman = 0x216a;
- t.Emacron = 0x0112;
- t.Emacronacute = 0x1e16;
- t.Emacrongrave = 0x1e14;
- t.Emcyrillic = 0x041c;
- t.Emonospace = 0xff25;
- t.Encyrillic = 0x041d;
- t.Endescendercyrillic = 0x04a2;
- t.Eng = 0x014a;
- t.Enghecyrillic = 0x04a4;
- t.Enhookcyrillic = 0x04c7;
- t.Eogonek = 0x0118;
- t.Eopen = 0x0190;
- t.Epsilon = 0x0395;
- t.Epsilontonos = 0x0388;
- t.Ercyrillic = 0x0420;
- t.Ereversed = 0x018e;
- t.Ereversedcyrillic = 0x042d;
- t.Escyrillic = 0x0421;
- t.Esdescendercyrillic = 0x04aa;
- t.Esh = 0x01a9;
- t.Esmall = 0xf765;
- t.Eta = 0x0397;
- t.Etarmenian = 0x0538;
- t.Etatonos = 0x0389;
- t.Eth = 0x00d0;
- t.Ethsmall = 0xf7f0;
- t.Etilde = 0x1ebc;
- t.Etildebelow = 0x1e1a;
- t.Euro = 0x20ac;
- t.Ezh = 0x01b7;
- t.Ezhcaron = 0x01ee;
- t.Ezhreversed = 0x01b8;
- t.F = 0x0046;
- t.Fcircle = 0x24bb;
- t.Fdotaccent = 0x1e1e;
- t.Feharmenian = 0x0556;
- t.Feicoptic = 0x03e4;
- t.Fhook = 0x0191;
- t.Fitacyrillic = 0x0472;
- t.Fiveroman = 0x2164;
- t.Fmonospace = 0xff26;
- t.Fourroman = 0x2163;
- t.Fsmall = 0xf766;
- t.G = 0x0047;
- t.GBsquare = 0x3387;
- t.Gacute = 0x01f4;
- t.Gamma = 0x0393;
- t.Gammaafrican = 0x0194;
- t.Gangiacoptic = 0x03ea;
- t.Gbreve = 0x011e;
- t.Gcaron = 0x01e6;
- t.Gcedilla = 0x0122;
- t.Gcircle = 0x24bc;
- t.Gcircumflex = 0x011c;
- t.Gcommaaccent = 0x0122;
- t.Gdot = 0x0120;
- t.Gdotaccent = 0x0120;
- t.Gecyrillic = 0x0413;
- t.Ghadarmenian = 0x0542;
- t.Ghemiddlehookcyrillic = 0x0494;
- t.Ghestrokecyrillic = 0x0492;
- t.Gheupturncyrillic = 0x0490;
- t.Ghook = 0x0193;
- t.Gimarmenian = 0x0533;
- t.Gjecyrillic = 0x0403;
- t.Gmacron = 0x1e20;
- t.Gmonospace = 0xff27;
- t.Grave = 0xf6ce;
- t.Gravesmall = 0xf760;
- t.Gsmall = 0xf767;
- t.Gsmallhook = 0x029b;
- t.Gstroke = 0x01e4;
- t.H = 0x0048;
- t.H18533 = 0x25cf;
- t.H18543 = 0x25aa;
- t.H18551 = 0x25ab;
- t.H22073 = 0x25a1;
- t.HPsquare = 0x33cb;
- t.Haabkhasiancyrillic = 0x04a8;
- t.Hadescendercyrillic = 0x04b2;
- t.Hardsigncyrillic = 0x042a;
- t.Hbar = 0x0126;
- t.Hbrevebelow = 0x1e2a;
- t.Hcedilla = 0x1e28;
- t.Hcircle = 0x24bd;
- t.Hcircumflex = 0x0124;
- t.Hdieresis = 0x1e26;
- t.Hdotaccent = 0x1e22;
- t.Hdotbelow = 0x1e24;
- t.Hmonospace = 0xff28;
- t.Hoarmenian = 0x0540;
- t.Horicoptic = 0x03e8;
- t.Hsmall = 0xf768;
- t.Hungarumlaut = 0xf6cf;
- t.Hungarumlautsmall = 0xf6f8;
- t.Hzsquare = 0x3390;
- t.I = 0x0049;
- t.IAcyrillic = 0x042f;
- t.IJ = 0x0132;
- t.IUcyrillic = 0x042e;
- t.Iacute = 0x00cd;
- t.Iacutesmall = 0xf7ed;
- t.Ibreve = 0x012c;
- t.Icaron = 0x01cf;
- t.Icircle = 0x24be;
- t.Icircumflex = 0x00ce;
- t.Icircumflexsmall = 0xf7ee;
- t.Icyrillic = 0x0406;
- t.Idblgrave = 0x0208;
- t.Idieresis = 0x00cf;
- t.Idieresisacute = 0x1e2e;
- t.Idieresiscyrillic = 0x04e4;
- t.Idieresissmall = 0xf7ef;
- t.Idot = 0x0130;
- t.Idotaccent = 0x0130;
- t.Idotbelow = 0x1eca;
- t.Iebrevecyrillic = 0x04d6;
- t.Iecyrillic = 0x0415;
- t.Ifraktur = 0x2111;
- t.Igrave = 0x00cc;
- t.Igravesmall = 0xf7ec;
- t.Ihookabove = 0x1ec8;
- t.Iicyrillic = 0x0418;
- t.Iinvertedbreve = 0x020a;
- t.Iishortcyrillic = 0x0419;
- t.Imacron = 0x012a;
- t.Imacroncyrillic = 0x04e2;
- t.Imonospace = 0xff29;
- t.Iniarmenian = 0x053b;
- t.Iocyrillic = 0x0401;
- t.Iogonek = 0x012e;
- t.Iota = 0x0399;
- t.Iotaafrican = 0x0196;
- t.Iotadieresis = 0x03aa;
- t.Iotatonos = 0x038a;
- t.Ismall = 0xf769;
- t.Istroke = 0x0197;
- t.Itilde = 0x0128;
- t.Itildebelow = 0x1e2c;
- t.Izhitsacyrillic = 0x0474;
- t.Izhitsadblgravecyrillic = 0x0476;
- t.J = 0x004a;
- t.Jaarmenian = 0x0541;
- t.Jcircle = 0x24bf;
- t.Jcircumflex = 0x0134;
- t.Jecyrillic = 0x0408;
- t.Jheharmenian = 0x054b;
- t.Jmonospace = 0xff2a;
- t.Jsmall = 0xf76a;
- t.K = 0x004b;
- t.KBsquare = 0x3385;
- t.KKsquare = 0x33cd;
- t.Kabashkircyrillic = 0x04a0;
- t.Kacute = 0x1e30;
- t.Kacyrillic = 0x041a;
- t.Kadescendercyrillic = 0x049a;
- t.Kahookcyrillic = 0x04c3;
- t.Kappa = 0x039a;
- t.Kastrokecyrillic = 0x049e;
- t.Kaverticalstrokecyrillic = 0x049c;
- t.Kcaron = 0x01e8;
- t.Kcedilla = 0x0136;
- t.Kcircle = 0x24c0;
- t.Kcommaaccent = 0x0136;
- t.Kdotbelow = 0x1e32;
- t.Keharmenian = 0x0554;
- t.Kenarmenian = 0x053f;
- t.Khacyrillic = 0x0425;
- t.Kheicoptic = 0x03e6;
- t.Khook = 0x0198;
- t.Kjecyrillic = 0x040c;
- t.Klinebelow = 0x1e34;
- t.Kmonospace = 0xff2b;
- t.Koppacyrillic = 0x0480;
- t.Koppagreek = 0x03de;
- t.Ksicyrillic = 0x046e;
- t.Ksmall = 0xf76b;
- t.L = 0x004c;
- t.LJ = 0x01c7;
- t.LL = 0xf6bf;
- t.Lacute = 0x0139;
- t.Lambda = 0x039b;
- t.Lcaron = 0x013d;
- t.Lcedilla = 0x013b;
- t.Lcircle = 0x24c1;
- t.Lcircumflexbelow = 0x1e3c;
- t.Lcommaaccent = 0x013b;
- t.Ldot = 0x013f;
- t.Ldotaccent = 0x013f;
- t.Ldotbelow = 0x1e36;
- t.Ldotbelowmacron = 0x1e38;
- t.Liwnarmenian = 0x053c;
- t.Lj = 0x01c8;
- t.Ljecyrillic = 0x0409;
- t.Llinebelow = 0x1e3a;
- t.Lmonospace = 0xff2c;
- t.Lslash = 0x0141;
- t.Lslashsmall = 0xf6f9;
- t.Lsmall = 0xf76c;
- t.M = 0x004d;
- t.MBsquare = 0x3386;
- t.Macron = 0xf6d0;
- t.Macronsmall = 0xf7af;
- t.Macute = 0x1e3e;
- t.Mcircle = 0x24c2;
- t.Mdotaccent = 0x1e40;
- t.Mdotbelow = 0x1e42;
- t.Menarmenian = 0x0544;
- t.Mmonospace = 0xff2d;
- t.Msmall = 0xf76d;
- t.Mturned = 0x019c;
- t.Mu = 0x039c;
- t.N = 0x004e;
- t.NJ = 0x01ca;
- t.Nacute = 0x0143;
- t.Ncaron = 0x0147;
- t.Ncedilla = 0x0145;
- t.Ncircle = 0x24c3;
- t.Ncircumflexbelow = 0x1e4a;
- t.Ncommaaccent = 0x0145;
- t.Ndotaccent = 0x1e44;
- t.Ndotbelow = 0x1e46;
- t.Nhookleft = 0x019d;
- t.Nineroman = 0x2168;
- t.Nj = 0x01cb;
- t.Njecyrillic = 0x040a;
- t.Nlinebelow = 0x1e48;
- t.Nmonospace = 0xff2e;
- t.Nowarmenian = 0x0546;
- t.Nsmall = 0xf76e;
- t.Ntilde = 0x00d1;
- t.Ntildesmall = 0xf7f1;
- t.Nu = 0x039d;
- t.O = 0x004f;
- t.OE = 0x0152;
- t.OEsmall = 0xf6fa;
- t.Oacute = 0x00d3;
- t.Oacutesmall = 0xf7f3;
- t.Obarredcyrillic = 0x04e8;
- t.Obarreddieresiscyrillic = 0x04ea;
- t.Obreve = 0x014e;
- t.Ocaron = 0x01d1;
- t.Ocenteredtilde = 0x019f;
- t.Ocircle = 0x24c4;
- t.Ocircumflex = 0x00d4;
- t.Ocircumflexacute = 0x1ed0;
- t.Ocircumflexdotbelow = 0x1ed8;
- t.Ocircumflexgrave = 0x1ed2;
- t.Ocircumflexhookabove = 0x1ed4;
- t.Ocircumflexsmall = 0xf7f4;
- t.Ocircumflextilde = 0x1ed6;
- t.Ocyrillic = 0x041e;
- t.Odblacute = 0x0150;
- t.Odblgrave = 0x020c;
- t.Odieresis = 0x00d6;
- t.Odieresiscyrillic = 0x04e6;
- t.Odieresissmall = 0xf7f6;
- t.Odotbelow = 0x1ecc;
- t.Ogoneksmall = 0xf6fb;
- t.Ograve = 0x00d2;
- t.Ogravesmall = 0xf7f2;
- t.Oharmenian = 0x0555;
- t.Ohm = 0x2126;
- t.Ohookabove = 0x1ece;
- t.Ohorn = 0x01a0;
- t.Ohornacute = 0x1eda;
- t.Ohorndotbelow = 0x1ee2;
- t.Ohorngrave = 0x1edc;
- t.Ohornhookabove = 0x1ede;
- t.Ohorntilde = 0x1ee0;
- t.Ohungarumlaut = 0x0150;
- t.Oi = 0x01a2;
- t.Oinvertedbreve = 0x020e;
- t.Omacron = 0x014c;
- t.Omacronacute = 0x1e52;
- t.Omacrongrave = 0x1e50;
- t.Omega = 0x2126;
- t.Omegacyrillic = 0x0460;
- t.Omegagreek = 0x03a9;
- t.Omegaroundcyrillic = 0x047a;
- t.Omegatitlocyrillic = 0x047c;
- t.Omegatonos = 0x038f;
- t.Omicron = 0x039f;
- t.Omicrontonos = 0x038c;
- t.Omonospace = 0xff2f;
- t.Oneroman = 0x2160;
- t.Oogonek = 0x01ea;
- t.Oogonekmacron = 0x01ec;
- t.Oopen = 0x0186;
- t.Oslash = 0x00d8;
- t.Oslashacute = 0x01fe;
- t.Oslashsmall = 0xf7f8;
- t.Osmall = 0xf76f;
- t.Ostrokeacute = 0x01fe;
- t.Otcyrillic = 0x047e;
- t.Otilde = 0x00d5;
- t.Otildeacute = 0x1e4c;
- t.Otildedieresis = 0x1e4e;
- t.Otildesmall = 0xf7f5;
- t.P = 0x0050;
- t.Pacute = 0x1e54;
- t.Pcircle = 0x24c5;
- t.Pdotaccent = 0x1e56;
- t.Pecyrillic = 0x041f;
- t.Peharmenian = 0x054a;
- t.Pemiddlehookcyrillic = 0x04a6;
- t.Phi = 0x03a6;
- t.Phook = 0x01a4;
- t.Pi = 0x03a0;
- t.Piwrarmenian = 0x0553;
- t.Pmonospace = 0xff30;
- t.Psi = 0x03a8;
- t.Psicyrillic = 0x0470;
- t.Psmall = 0xf770;
- t.Q = 0x0051;
- t.Qcircle = 0x24c6;
- t.Qmonospace = 0xff31;
- t.Qsmall = 0xf771;
- t.R = 0x0052;
- t.Raarmenian = 0x054c;
- t.Racute = 0x0154;
- t.Rcaron = 0x0158;
- t.Rcedilla = 0x0156;
- t.Rcircle = 0x24c7;
- t.Rcommaaccent = 0x0156;
- t.Rdblgrave = 0x0210;
- t.Rdotaccent = 0x1e58;
- t.Rdotbelow = 0x1e5a;
- t.Rdotbelowmacron = 0x1e5c;
- t.Reharmenian = 0x0550;
- t.Rfraktur = 0x211c;
- t.Rho = 0x03a1;
- t.Ringsmall = 0xf6fc;
- t.Rinvertedbreve = 0x0212;
- t.Rlinebelow = 0x1e5e;
- t.Rmonospace = 0xff32;
- t.Rsmall = 0xf772;
- t.Rsmallinverted = 0x0281;
- t.Rsmallinvertedsuperior = 0x02b6;
- t.S = 0x0053;
- t.SF010000 = 0x250c;
- t.SF020000 = 0x2514;
- t.SF030000 = 0x2510;
- t.SF040000 = 0x2518;
- t.SF050000 = 0x253c;
- t.SF060000 = 0x252c;
- t.SF070000 = 0x2534;
- t.SF080000 = 0x251c;
- t.SF090000 = 0x2524;
- t.SF100000 = 0x2500;
- t.SF110000 = 0x2502;
- t.SF190000 = 0x2561;
- t.SF200000 = 0x2562;
- t.SF210000 = 0x2556;
- t.SF220000 = 0x2555;
- t.SF230000 = 0x2563;
- t.SF240000 = 0x2551;
- t.SF250000 = 0x2557;
- t.SF260000 = 0x255d;
- t.SF270000 = 0x255c;
- t.SF280000 = 0x255b;
- t.SF360000 = 0x255e;
- t.SF370000 = 0x255f;
- t.SF380000 = 0x255a;
- t.SF390000 = 0x2554;
- t.SF400000 = 0x2569;
- t.SF410000 = 0x2566;
- t.SF420000 = 0x2560;
- t.SF430000 = 0x2550;
- t.SF440000 = 0x256c;
- t.SF450000 = 0x2567;
- t.SF460000 = 0x2568;
- t.SF470000 = 0x2564;
- t.SF480000 = 0x2565;
- t.SF490000 = 0x2559;
- t.SF500000 = 0x2558;
- t.SF510000 = 0x2552;
- t.SF520000 = 0x2553;
- t.SF530000 = 0x256b;
- t.SF540000 = 0x256a;
- t.Sacute = 0x015a;
- t.Sacutedotaccent = 0x1e64;
- t.Sampigreek = 0x03e0;
- t.Scaron = 0x0160;
- t.Scarondotaccent = 0x1e66;
- t.Scaronsmall = 0xf6fd;
- t.Scedilla = 0x015e;
- t.Schwa = 0x018f;
- t.Schwacyrillic = 0x04d8;
- t.Schwadieresiscyrillic = 0x04da;
- t.Scircle = 0x24c8;
- t.Scircumflex = 0x015c;
- t.Scommaaccent = 0x0218;
- t.Sdotaccent = 0x1e60;
- t.Sdotbelow = 0x1e62;
- t.Sdotbelowdotaccent = 0x1e68;
- t.Seharmenian = 0x054d;
- t.Sevenroman = 0x2166;
- t.Shaarmenian = 0x0547;
- t.Shacyrillic = 0x0428;
- t.Shchacyrillic = 0x0429;
- t.Sheicoptic = 0x03e2;
- t.Shhacyrillic = 0x04ba;
- t.Shimacoptic = 0x03ec;
- t.Sigma = 0x03a3;
- t.Sixroman = 0x2165;
- t.Smonospace = 0xff33;
- t.Softsigncyrillic = 0x042c;
- t.Ssmall = 0xf773;
- t.Stigmagreek = 0x03da;
- t.T = 0x0054;
- t.Tau = 0x03a4;
- t.Tbar = 0x0166;
- t.Tcaron = 0x0164;
- t.Tcedilla = 0x0162;
- t.Tcircle = 0x24c9;
- t.Tcircumflexbelow = 0x1e70;
- t.Tcommaaccent = 0x0162;
- t.Tdotaccent = 0x1e6a;
- t.Tdotbelow = 0x1e6c;
- t.Tecyrillic = 0x0422;
- t.Tedescendercyrillic = 0x04ac;
- t.Tenroman = 0x2169;
- t.Tetsecyrillic = 0x04b4;
- t.Theta = 0x0398;
- t.Thook = 0x01ac;
- t.Thorn = 0x00de;
- t.Thornsmall = 0xf7fe;
- t.Threeroman = 0x2162;
- t.Tildesmall = 0xf6fe;
- t.Tiwnarmenian = 0x054f;
- t.Tlinebelow = 0x1e6e;
- t.Tmonospace = 0xff34;
- t.Toarmenian = 0x0539;
- t.Tonefive = 0x01bc;
- t.Tonesix = 0x0184;
- t.Tonetwo = 0x01a7;
- t.Tretroflexhook = 0x01ae;
- t.Tsecyrillic = 0x0426;
- t.Tshecyrillic = 0x040b;
- t.Tsmall = 0xf774;
- t.Twelveroman = 0x216b;
- t.Tworoman = 0x2161;
- t.U = 0x0055;
- t.Uacute = 0x00da;
- t.Uacutesmall = 0xf7fa;
- t.Ubreve = 0x016c;
- t.Ucaron = 0x01d3;
- t.Ucircle = 0x24ca;
- t.Ucircumflex = 0x00db;
- t.Ucircumflexbelow = 0x1e76;
- t.Ucircumflexsmall = 0xf7fb;
- t.Ucyrillic = 0x0423;
- t.Udblacute = 0x0170;
- t.Udblgrave = 0x0214;
- t.Udieresis = 0x00dc;
- t.Udieresisacute = 0x01d7;
- t.Udieresisbelow = 0x1e72;
- t.Udieresiscaron = 0x01d9;
- t.Udieresiscyrillic = 0x04f0;
- t.Udieresisgrave = 0x01db;
- t.Udieresismacron = 0x01d5;
- t.Udieresissmall = 0xf7fc;
- t.Udotbelow = 0x1ee4;
- t.Ugrave = 0x00d9;
- t.Ugravesmall = 0xf7f9;
- t.Uhookabove = 0x1ee6;
- t.Uhorn = 0x01af;
- t.Uhornacute = 0x1ee8;
- t.Uhorndotbelow = 0x1ef0;
- t.Uhorngrave = 0x1eea;
- t.Uhornhookabove = 0x1eec;
- t.Uhorntilde = 0x1eee;
- t.Uhungarumlaut = 0x0170;
- t.Uhungarumlautcyrillic = 0x04f2;
- t.Uinvertedbreve = 0x0216;
- t.Ukcyrillic = 0x0478;
- t.Umacron = 0x016a;
- t.Umacroncyrillic = 0x04ee;
- t.Umacrondieresis = 0x1e7a;
- t.Umonospace = 0xff35;
- t.Uogonek = 0x0172;
- t.Upsilon = 0x03a5;
- t.Upsilon1 = 0x03d2;
- t.Upsilonacutehooksymbolgreek = 0x03d3;
- t.Upsilonafrican = 0x01b1;
- t.Upsilondieresis = 0x03ab;
- t.Upsilondieresishooksymbolgreek = 0x03d4;
- t.Upsilonhooksymbol = 0x03d2;
- t.Upsilontonos = 0x038e;
- t.Uring = 0x016e;
- t.Ushortcyrillic = 0x040e;
- t.Usmall = 0xf775;
- t.Ustraightcyrillic = 0x04ae;
- t.Ustraightstrokecyrillic = 0x04b0;
- t.Utilde = 0x0168;
- t.Utildeacute = 0x1e78;
- t.Utildebelow = 0x1e74;
- t.V = 0x0056;
- t.Vcircle = 0x24cb;
- t.Vdotbelow = 0x1e7e;
- t.Vecyrillic = 0x0412;
- t.Vewarmenian = 0x054e;
- t.Vhook = 0x01b2;
- t.Vmonospace = 0xff36;
- t.Voarmenian = 0x0548;
- t.Vsmall = 0xf776;
- t.Vtilde = 0x1e7c;
- t.W = 0x0057;
- t.Wacute = 0x1e82;
- t.Wcircle = 0x24cc;
- t.Wcircumflex = 0x0174;
- t.Wdieresis = 0x1e84;
- t.Wdotaccent = 0x1e86;
- t.Wdotbelow = 0x1e88;
- t.Wgrave = 0x1e80;
- t.Wmonospace = 0xff37;
- t.Wsmall = 0xf777;
- t.X = 0x0058;
- t.Xcircle = 0x24cd;
- t.Xdieresis = 0x1e8c;
- t.Xdotaccent = 0x1e8a;
- t.Xeharmenian = 0x053d;
- t.Xi = 0x039e;
- t.Xmonospace = 0xff38;
- t.Xsmall = 0xf778;
- t.Y = 0x0059;
- t.Yacute = 0x00dd;
- t.Yacutesmall = 0xf7fd;
- t.Yatcyrillic = 0x0462;
- t.Ycircle = 0x24ce;
- t.Ycircumflex = 0x0176;
- t.Ydieresis = 0x0178;
- t.Ydieresissmall = 0xf7ff;
- t.Ydotaccent = 0x1e8e;
- t.Ydotbelow = 0x1ef4;
- t.Yericyrillic = 0x042b;
- t.Yerudieresiscyrillic = 0x04f8;
- t.Ygrave = 0x1ef2;
- t.Yhook = 0x01b3;
- t.Yhookabove = 0x1ef6;
- t.Yiarmenian = 0x0545;
- t.Yicyrillic = 0x0407;
- t.Yiwnarmenian = 0x0552;
- t.Ymonospace = 0xff39;
- t.Ysmall = 0xf779;
- t.Ytilde = 0x1ef8;
- t.Yusbigcyrillic = 0x046a;
- t.Yusbigiotifiedcyrillic = 0x046c;
- t.Yuslittlecyrillic = 0x0466;
- t.Yuslittleiotifiedcyrillic = 0x0468;
- t.Z = 0x005a;
- t.Zaarmenian = 0x0536;
- t.Zacute = 0x0179;
- t.Zcaron = 0x017d;
- t.Zcaronsmall = 0xf6ff;
- t.Zcircle = 0x24cf;
- t.Zcircumflex = 0x1e90;
- t.Zdot = 0x017b;
- t.Zdotaccent = 0x017b;
- t.Zdotbelow = 0x1e92;
- t.Zecyrillic = 0x0417;
- t.Zedescendercyrillic = 0x0498;
- t.Zedieresiscyrillic = 0x04de;
- t.Zeta = 0x0396;
- t.Zhearmenian = 0x053a;
- t.Zhebrevecyrillic = 0x04c1;
- t.Zhecyrillic = 0x0416;
- t.Zhedescendercyrillic = 0x0496;
- t.Zhedieresiscyrillic = 0x04dc;
- t.Zlinebelow = 0x1e94;
- t.Zmonospace = 0xff3a;
- t.Zsmall = 0xf77a;
- t.Zstroke = 0x01b5;
- t.a = 0x0061;
- t.aabengali = 0x0986;
- t.aacute = 0x00e1;
- t.aadeva = 0x0906;
- t.aagujarati = 0x0a86;
- t.aagurmukhi = 0x0a06;
- t.aamatragurmukhi = 0x0a3e;
- t.aarusquare = 0x3303;
- t.aavowelsignbengali = 0x09be;
- t.aavowelsigndeva = 0x093e;
- t.aavowelsigngujarati = 0x0abe;
- t.abbreviationmarkarmenian = 0x055f;
- t.abbreviationsigndeva = 0x0970;
- t.abengali = 0x0985;
- t.abopomofo = 0x311a;
- t.abreve = 0x0103;
- t.abreveacute = 0x1eaf;
- t.abrevecyrillic = 0x04d1;
- t.abrevedotbelow = 0x1eb7;
- t.abrevegrave = 0x1eb1;
- t.abrevehookabove = 0x1eb3;
- t.abrevetilde = 0x1eb5;
- t.acaron = 0x01ce;
- t.acircle = 0x24d0;
- t.acircumflex = 0x00e2;
- t.acircumflexacute = 0x1ea5;
- t.acircumflexdotbelow = 0x1ead;
- t.acircumflexgrave = 0x1ea7;
- t.acircumflexhookabove = 0x1ea9;
- t.acircumflextilde = 0x1eab;
- t.acute = 0x00b4;
- t.acutebelowcmb = 0x0317;
- t.acutecmb = 0x0301;
- t.acutecomb = 0x0301;
- t.acutedeva = 0x0954;
- t.acutelowmod = 0x02cf;
- t.acutetonecmb = 0x0341;
- t.acyrillic = 0x0430;
- t.adblgrave = 0x0201;
- t.addakgurmukhi = 0x0a71;
- t.adeva = 0x0905;
- t.adieresis = 0x00e4;
- t.adieresiscyrillic = 0x04d3;
- t.adieresismacron = 0x01df;
- t.adotbelow = 0x1ea1;
- t.adotmacron = 0x01e1;
- t.ae = 0x00e6;
- t.aeacute = 0x01fd;
- t.aekorean = 0x3150;
- t.aemacron = 0x01e3;
- t.afii00208 = 0x2015;
- t.afii08941 = 0x20a4;
- t.afii10017 = 0x0410;
- t.afii10018 = 0x0411;
- t.afii10019 = 0x0412;
- t.afii10020 = 0x0413;
- t.afii10021 = 0x0414;
- t.afii10022 = 0x0415;
- t.afii10023 = 0x0401;
- t.afii10024 = 0x0416;
- t.afii10025 = 0x0417;
- t.afii10026 = 0x0418;
- t.afii10027 = 0x0419;
- t.afii10028 = 0x041a;
- t.afii10029 = 0x041b;
- t.afii10030 = 0x041c;
- t.afii10031 = 0x041d;
- t.afii10032 = 0x041e;
- t.afii10033 = 0x041f;
- t.afii10034 = 0x0420;
- t.afii10035 = 0x0421;
- t.afii10036 = 0x0422;
- t.afii10037 = 0x0423;
- t.afii10038 = 0x0424;
- t.afii10039 = 0x0425;
- t.afii10040 = 0x0426;
- t.afii10041 = 0x0427;
- t.afii10042 = 0x0428;
- t.afii10043 = 0x0429;
- t.afii10044 = 0x042a;
- t.afii10045 = 0x042b;
- t.afii10046 = 0x042c;
- t.afii10047 = 0x042d;
- t.afii10048 = 0x042e;
- t.afii10049 = 0x042f;
- t.afii10050 = 0x0490;
- t.afii10051 = 0x0402;
- t.afii10052 = 0x0403;
- t.afii10053 = 0x0404;
- t.afii10054 = 0x0405;
- t.afii10055 = 0x0406;
- t.afii10056 = 0x0407;
- t.afii10057 = 0x0408;
- t.afii10058 = 0x0409;
- t.afii10059 = 0x040a;
- t.afii10060 = 0x040b;
- t.afii10061 = 0x040c;
- t.afii10062 = 0x040e;
- t.afii10063 = 0xf6c4;
- t.afii10064 = 0xf6c5;
- t.afii10065 = 0x0430;
- t.afii10066 = 0x0431;
- t.afii10067 = 0x0432;
- t.afii10068 = 0x0433;
- t.afii10069 = 0x0434;
- t.afii10070 = 0x0435;
- t.afii10071 = 0x0451;
- t.afii10072 = 0x0436;
- t.afii10073 = 0x0437;
- t.afii10074 = 0x0438;
- t.afii10075 = 0x0439;
- t.afii10076 = 0x043a;
- t.afii10077 = 0x043b;
- t.afii10078 = 0x043c;
- t.afii10079 = 0x043d;
- t.afii10080 = 0x043e;
- t.afii10081 = 0x043f;
- t.afii10082 = 0x0440;
- t.afii10083 = 0x0441;
- t.afii10084 = 0x0442;
- t.afii10085 = 0x0443;
- t.afii10086 = 0x0444;
- t.afii10087 = 0x0445;
- t.afii10088 = 0x0446;
- t.afii10089 = 0x0447;
- t.afii10090 = 0x0448;
- t.afii10091 = 0x0449;
- t.afii10092 = 0x044a;
- t.afii10093 = 0x044b;
- t.afii10094 = 0x044c;
- t.afii10095 = 0x044d;
- t.afii10096 = 0x044e;
- t.afii10097 = 0x044f;
- t.afii10098 = 0x0491;
- t.afii10099 = 0x0452;
- t.afii10100 = 0x0453;
- t.afii10101 = 0x0454;
- t.afii10102 = 0x0455;
- t.afii10103 = 0x0456;
- t.afii10104 = 0x0457;
- t.afii10105 = 0x0458;
- t.afii10106 = 0x0459;
- t.afii10107 = 0x045a;
- t.afii10108 = 0x045b;
- t.afii10109 = 0x045c;
- t.afii10110 = 0x045e;
- t.afii10145 = 0x040f;
- t.afii10146 = 0x0462;
- t.afii10147 = 0x0472;
- t.afii10148 = 0x0474;
- t.afii10192 = 0xf6c6;
- t.afii10193 = 0x045f;
- t.afii10194 = 0x0463;
- t.afii10195 = 0x0473;
- t.afii10196 = 0x0475;
- t.afii10831 = 0xf6c7;
- t.afii10832 = 0xf6c8;
- t.afii10846 = 0x04d9;
- t.afii299 = 0x200e;
- t.afii300 = 0x200f;
- t.afii301 = 0x200d;
- t.afii57381 = 0x066a;
- t.afii57388 = 0x060c;
- t.afii57392 = 0x0660;
- t.afii57393 = 0x0661;
- t.afii57394 = 0x0662;
- t.afii57395 = 0x0663;
- t.afii57396 = 0x0664;
- t.afii57397 = 0x0665;
- t.afii57398 = 0x0666;
- t.afii57399 = 0x0667;
- t.afii57400 = 0x0668;
- t.afii57401 = 0x0669;
- t.afii57403 = 0x061b;
- t.afii57407 = 0x061f;
- t.afii57409 = 0x0621;
- t.afii57410 = 0x0622;
- t.afii57411 = 0x0623;
- t.afii57412 = 0x0624;
- t.afii57413 = 0x0625;
- t.afii57414 = 0x0626;
- t.afii57415 = 0x0627;
- t.afii57416 = 0x0628;
- t.afii57417 = 0x0629;
- t.afii57418 = 0x062a;
- t.afii57419 = 0x062b;
- t.afii57420 = 0x062c;
- t.afii57421 = 0x062d;
- t.afii57422 = 0x062e;
- t.afii57423 = 0x062f;
- t.afii57424 = 0x0630;
- t.afii57425 = 0x0631;
- t.afii57426 = 0x0632;
- t.afii57427 = 0x0633;
- t.afii57428 = 0x0634;
- t.afii57429 = 0x0635;
- t.afii57430 = 0x0636;
- t.afii57431 = 0x0637;
- t.afii57432 = 0x0638;
- t.afii57433 = 0x0639;
- t.afii57434 = 0x063a;
- t.afii57440 = 0x0640;
- t.afii57441 = 0x0641;
- t.afii57442 = 0x0642;
- t.afii57443 = 0x0643;
- t.afii57444 = 0x0644;
- t.afii57445 = 0x0645;
- t.afii57446 = 0x0646;
- t.afii57448 = 0x0648;
- t.afii57449 = 0x0649;
- t.afii57450 = 0x064a;
- t.afii57451 = 0x064b;
- t.afii57452 = 0x064c;
- t.afii57453 = 0x064d;
- t.afii57454 = 0x064e;
- t.afii57455 = 0x064f;
- t.afii57456 = 0x0650;
- t.afii57457 = 0x0651;
- t.afii57458 = 0x0652;
- t.afii57470 = 0x0647;
- t.afii57505 = 0x06a4;
- t.afii57506 = 0x067e;
- t.afii57507 = 0x0686;
- t.afii57508 = 0x0698;
- t.afii57509 = 0x06af;
- t.afii57511 = 0x0679;
- t.afii57512 = 0x0688;
- t.afii57513 = 0x0691;
- t.afii57514 = 0x06ba;
- t.afii57519 = 0x06d2;
- t.afii57534 = 0x06d5;
- t.afii57636 = 0x20aa;
- t.afii57645 = 0x05be;
- t.afii57658 = 0x05c3;
- t.afii57664 = 0x05d0;
- t.afii57665 = 0x05d1;
- t.afii57666 = 0x05d2;
- t.afii57667 = 0x05d3;
- t.afii57668 = 0x05d4;
- t.afii57669 = 0x05d5;
- t.afii57670 = 0x05d6;
- t.afii57671 = 0x05d7;
- t.afii57672 = 0x05d8;
- t.afii57673 = 0x05d9;
- t.afii57674 = 0x05da;
- t.afii57675 = 0x05db;
- t.afii57676 = 0x05dc;
- t.afii57677 = 0x05dd;
- t.afii57678 = 0x05de;
- t.afii57679 = 0x05df;
- t.afii57680 = 0x05e0;
- t.afii57681 = 0x05e1;
- t.afii57682 = 0x05e2;
- t.afii57683 = 0x05e3;
- t.afii57684 = 0x05e4;
- t.afii57685 = 0x05e5;
- t.afii57686 = 0x05e6;
- t.afii57687 = 0x05e7;
- t.afii57688 = 0x05e8;
- t.afii57689 = 0x05e9;
- t.afii57690 = 0x05ea;
- t.afii57694 = 0xfb2a;
- t.afii57695 = 0xfb2b;
- t.afii57700 = 0xfb4b;
- t.afii57705 = 0xfb1f;
- t.afii57716 = 0x05f0;
- t.afii57717 = 0x05f1;
- t.afii57718 = 0x05f2;
- t.afii57723 = 0xfb35;
- t.afii57793 = 0x05b4;
- t.afii57794 = 0x05b5;
- t.afii57795 = 0x05b6;
- t.afii57796 = 0x05bb;
- t.afii57797 = 0x05b8;
- t.afii57798 = 0x05b7;
- t.afii57799 = 0x05b0;
- t.afii57800 = 0x05b2;
- t.afii57801 = 0x05b1;
- t.afii57802 = 0x05b3;
- t.afii57803 = 0x05c2;
- t.afii57804 = 0x05c1;
- t.afii57806 = 0x05b9;
- t.afii57807 = 0x05bc;
- t.afii57839 = 0x05bd;
- t.afii57841 = 0x05bf;
- t.afii57842 = 0x05c0;
- t.afii57929 = 0x02bc;
- t.afii61248 = 0x2105;
- t.afii61289 = 0x2113;
- t.afii61352 = 0x2116;
- t.afii61573 = 0x202c;
- t.afii61574 = 0x202d;
- t.afii61575 = 0x202e;
- t.afii61664 = 0x200c;
- t.afii63167 = 0x066d;
- t.afii64937 = 0x02bd;
- t.agrave = 0x00e0;
- t.agujarati = 0x0a85;
- t.agurmukhi = 0x0a05;
- t.ahiragana = 0x3042;
- t.ahookabove = 0x1ea3;
- t.aibengali = 0x0990;
- t.aibopomofo = 0x311e;
- t.aideva = 0x0910;
- t.aiecyrillic = 0x04d5;
- t.aigujarati = 0x0a90;
- t.aigurmukhi = 0x0a10;
- t.aimatragurmukhi = 0x0a48;
- t.ainarabic = 0x0639;
- t.ainfinalarabic = 0xfeca;
- t.aininitialarabic = 0xfecb;
- t.ainmedialarabic = 0xfecc;
- t.ainvertedbreve = 0x0203;
- t.aivowelsignbengali = 0x09c8;
- t.aivowelsigndeva = 0x0948;
- t.aivowelsigngujarati = 0x0ac8;
- t.akatakana = 0x30a2;
- t.akatakanahalfwidth = 0xff71;
- t.akorean = 0x314f;
- t.alef = 0x05d0;
- t.alefarabic = 0x0627;
- t.alefdageshhebrew = 0xfb30;
- t.aleffinalarabic = 0xfe8e;
- t.alefhamzaabovearabic = 0x0623;
- t.alefhamzaabovefinalarabic = 0xfe84;
- t.alefhamzabelowarabic = 0x0625;
- t.alefhamzabelowfinalarabic = 0xfe88;
- t.alefhebrew = 0x05d0;
- t.aleflamedhebrew = 0xfb4f;
- t.alefmaddaabovearabic = 0x0622;
- t.alefmaddaabovefinalarabic = 0xfe82;
- t.alefmaksuraarabic = 0x0649;
- t.alefmaksurafinalarabic = 0xfef0;
- t.alefmaksurainitialarabic = 0xfef3;
- t.alefmaksuramedialarabic = 0xfef4;
- t.alefpatahhebrew = 0xfb2e;
- t.alefqamatshebrew = 0xfb2f;
- t.aleph = 0x2135;
- t.allequal = 0x224c;
- t.alpha = 0x03b1;
- t.alphatonos = 0x03ac;
- t.amacron = 0x0101;
- t.amonospace = 0xff41;
- t.ampersand = 0x0026;
- t.ampersandmonospace = 0xff06;
- t.ampersandsmall = 0xf726;
- t.amsquare = 0x33c2;
- t.anbopomofo = 0x3122;
- t.angbopomofo = 0x3124;
- t.angbracketleft = 0x3008;
- t.angbracketright = 0x3009;
- t.angkhankhuthai = 0x0e5a;
- t.angle = 0x2220;
- t.anglebracketleft = 0x3008;
- t.anglebracketleftvertical = 0xfe3f;
- t.anglebracketright = 0x3009;
- t.anglebracketrightvertical = 0xfe40;
- t.angleleft = 0x2329;
- t.angleright = 0x232a;
- t.angstrom = 0x212b;
- t.anoteleia = 0x0387;
- t.anudattadeva = 0x0952;
- t.anusvarabengali = 0x0982;
- t.anusvaradeva = 0x0902;
- t.anusvaragujarati = 0x0a82;
- t.aogonek = 0x0105;
- t.apaatosquare = 0x3300;
- t.aparen = 0x249c;
- t.apostrophearmenian = 0x055a;
- t.apostrophemod = 0x02bc;
- t.apple = 0xf8ff;
- t.approaches = 0x2250;
- t.approxequal = 0x2248;
- t.approxequalorimage = 0x2252;
- t.approximatelyequal = 0x2245;
- t.araeaekorean = 0x318e;
- t.araeakorean = 0x318d;
- t.arc = 0x2312;
- t.arighthalfring = 0x1e9a;
- t.aring = 0x00e5;
- t.aringacute = 0x01fb;
- t.aringbelow = 0x1e01;
- t.arrowboth = 0x2194;
- t.arrowdashdown = 0x21e3;
- t.arrowdashleft = 0x21e0;
- t.arrowdashright = 0x21e2;
- t.arrowdashup = 0x21e1;
- t.arrowdblboth = 0x21d4;
- t.arrowdbldown = 0x21d3;
- t.arrowdblleft = 0x21d0;
- t.arrowdblright = 0x21d2;
- t.arrowdblup = 0x21d1;
- t.arrowdown = 0x2193;
- t.arrowdownleft = 0x2199;
- t.arrowdownright = 0x2198;
- t.arrowdownwhite = 0x21e9;
- t.arrowheaddownmod = 0x02c5;
- t.arrowheadleftmod = 0x02c2;
- t.arrowheadrightmod = 0x02c3;
- t.arrowheadupmod = 0x02c4;
- t.arrowhorizex = 0xf8e7;
- t.arrowleft = 0x2190;
- t.arrowleftdbl = 0x21d0;
- t.arrowleftdblstroke = 0x21cd;
- t.arrowleftoverright = 0x21c6;
- t.arrowleftwhite = 0x21e6;
- t.arrowright = 0x2192;
- t.arrowrightdblstroke = 0x21cf;
- t.arrowrightheavy = 0x279e;
- t.arrowrightoverleft = 0x21c4;
- t.arrowrightwhite = 0x21e8;
- t.arrowtableft = 0x21e4;
- t.arrowtabright = 0x21e5;
- t.arrowup = 0x2191;
- t.arrowupdn = 0x2195;
- t.arrowupdnbse = 0x21a8;
- t.arrowupdownbase = 0x21a8;
- t.arrowupleft = 0x2196;
- t.arrowupleftofdown = 0x21c5;
- t.arrowupright = 0x2197;
- t.arrowupwhite = 0x21e7;
- t.arrowvertex = 0xf8e6;
- t.asciicircum = 0x005e;
- t.asciicircummonospace = 0xff3e;
- t.asciitilde = 0x007e;
- t.asciitildemonospace = 0xff5e;
- t.ascript = 0x0251;
- t.ascriptturned = 0x0252;
- t.asmallhiragana = 0x3041;
- t.asmallkatakana = 0x30a1;
- t.asmallkatakanahalfwidth = 0xff67;
- t.asterisk = 0x002a;
- t.asteriskaltonearabic = 0x066d;
- t.asteriskarabic = 0x066d;
- t.asteriskmath = 0x2217;
- t.asteriskmonospace = 0xff0a;
- t.asterisksmall = 0xfe61;
- t.asterism = 0x2042;
- t.asuperior = 0xf6e9;
- t.asymptoticallyequal = 0x2243;
- t.at = 0x0040;
- t.atilde = 0x00e3;
- t.atmonospace = 0xff20;
- t.atsmall = 0xfe6b;
- t.aturned = 0x0250;
- t.aubengali = 0x0994;
- t.aubopomofo = 0x3120;
- t.audeva = 0x0914;
- t.augujarati = 0x0a94;
- t.augurmukhi = 0x0a14;
- t.aulengthmarkbengali = 0x09d7;
- t.aumatragurmukhi = 0x0a4c;
- t.auvowelsignbengali = 0x09cc;
- t.auvowelsigndeva = 0x094c;
- t.auvowelsigngujarati = 0x0acc;
- t.avagrahadeva = 0x093d;
- t.aybarmenian = 0x0561;
- t.ayin = 0x05e2;
- t.ayinaltonehebrew = 0xfb20;
- t.ayinhebrew = 0x05e2;
- t.b = 0x0062;
- t.babengali = 0x09ac;
- t.backslash = 0x005c;
- t.backslashmonospace = 0xff3c;
- t.badeva = 0x092c;
- t.bagujarati = 0x0aac;
- t.bagurmukhi = 0x0a2c;
- t.bahiragana = 0x3070;
- t.bahtthai = 0x0e3f;
- t.bakatakana = 0x30d0;
- t.bar = 0x007c;
- t.barmonospace = 0xff5c;
- t.bbopomofo = 0x3105;
- t.bcircle = 0x24d1;
- t.bdotaccent = 0x1e03;
- t.bdotbelow = 0x1e05;
- t.beamedsixteenthnotes = 0x266c;
- t.because = 0x2235;
- t.becyrillic = 0x0431;
- t.beharabic = 0x0628;
- t.behfinalarabic = 0xfe90;
- t.behinitialarabic = 0xfe91;
- t.behiragana = 0x3079;
- t.behmedialarabic = 0xfe92;
- t.behmeeminitialarabic = 0xfc9f;
- t.behmeemisolatedarabic = 0xfc08;
- t.behnoonfinalarabic = 0xfc6d;
- t.bekatakana = 0x30d9;
- t.benarmenian = 0x0562;
- t.bet = 0x05d1;
- t.beta = 0x03b2;
- t.betasymbolgreek = 0x03d0;
- t.betdagesh = 0xfb31;
- t.betdageshhebrew = 0xfb31;
- t.bethebrew = 0x05d1;
- t.betrafehebrew = 0xfb4c;
- t.bhabengali = 0x09ad;
- t.bhadeva = 0x092d;
- t.bhagujarati = 0x0aad;
- t.bhagurmukhi = 0x0a2d;
- t.bhook = 0x0253;
- t.bihiragana = 0x3073;
- t.bikatakana = 0x30d3;
- t.bilabialclick = 0x0298;
- t.bindigurmukhi = 0x0a02;
- t.birusquare = 0x3331;
- t.blackcircle = 0x25cf;
- t.blackdiamond = 0x25c6;
- t.blackdownpointingtriangle = 0x25bc;
- t.blackleftpointingpointer = 0x25c4;
- t.blackleftpointingtriangle = 0x25c0;
- t.blacklenticularbracketleft = 0x3010;
- t.blacklenticularbracketleftvertical = 0xfe3b;
- t.blacklenticularbracketright = 0x3011;
- t.blacklenticularbracketrightvertical = 0xfe3c;
- t.blacklowerlefttriangle = 0x25e3;
- t.blacklowerrighttriangle = 0x25e2;
- t.blackrectangle = 0x25ac;
- t.blackrightpointingpointer = 0x25ba;
- t.blackrightpointingtriangle = 0x25b6;
- t.blacksmallsquare = 0x25aa;
- t.blacksmilingface = 0x263b;
- t.blacksquare = 0x25a0;
- t.blackstar = 0x2605;
- t.blackupperlefttriangle = 0x25e4;
- t.blackupperrighttriangle = 0x25e5;
- t.blackuppointingsmalltriangle = 0x25b4;
- t.blackuppointingtriangle = 0x25b2;
- t.blank = 0x2423;
- t.blinebelow = 0x1e07;
- t.block = 0x2588;
- t.bmonospace = 0xff42;
- t.bobaimaithai = 0x0e1a;
- t.bohiragana = 0x307c;
- t.bokatakana = 0x30dc;
- t.bparen = 0x249d;
- t.bqsquare = 0x33c3;
- t.braceex = 0xf8f4;
- t.braceleft = 0x007b;
- t.braceleftbt = 0xf8f3;
- t.braceleftmid = 0xf8f2;
- t.braceleftmonospace = 0xff5b;
- t.braceleftsmall = 0xfe5b;
- t.bracelefttp = 0xf8f1;
- t.braceleftvertical = 0xfe37;
- t.braceright = 0x007d;
- t.bracerightbt = 0xf8fe;
- t.bracerightmid = 0xf8fd;
- t.bracerightmonospace = 0xff5d;
- t.bracerightsmall = 0xfe5c;
- t.bracerighttp = 0xf8fc;
- t.bracerightvertical = 0xfe38;
- t.bracketleft = 0x005b;
- t.bracketleftbt = 0xf8f0;
- t.bracketleftex = 0xf8ef;
- t.bracketleftmonospace = 0xff3b;
- t.bracketlefttp = 0xf8ee;
- t.bracketright = 0x005d;
- t.bracketrightbt = 0xf8fb;
- t.bracketrightex = 0xf8fa;
- t.bracketrightmonospace = 0xff3d;
- t.bracketrighttp = 0xf8f9;
- t.breve = 0x02d8;
- t.brevebelowcmb = 0x032e;
- t.brevecmb = 0x0306;
- t.breveinvertedbelowcmb = 0x032f;
- t.breveinvertedcmb = 0x0311;
- t.breveinverteddoublecmb = 0x0361;
- t.bridgebelowcmb = 0x032a;
- t.bridgeinvertedbelowcmb = 0x033a;
- t.brokenbar = 0x00a6;
- t.bstroke = 0x0180;
- t.bsuperior = 0xf6ea;
- t.btopbar = 0x0183;
- t.buhiragana = 0x3076;
- t.bukatakana = 0x30d6;
- t.bullet = 0x2022;
- t.bulletinverse = 0x25d8;
- t.bulletoperator = 0x2219;
- t.bullseye = 0x25ce;
- t.c = 0x0063;
- t.caarmenian = 0x056e;
- t.cabengali = 0x099a;
- t.cacute = 0x0107;
- t.cadeva = 0x091a;
- t.cagujarati = 0x0a9a;
- t.cagurmukhi = 0x0a1a;
- t.calsquare = 0x3388;
- t.candrabindubengali = 0x0981;
- t.candrabinducmb = 0x0310;
- t.candrabindudeva = 0x0901;
- t.candrabindugujarati = 0x0a81;
- t.capslock = 0x21ea;
- t.careof = 0x2105;
- t.caron = 0x02c7;
- t.caronbelowcmb = 0x032c;
- t.caroncmb = 0x030c;
- t.carriagereturn = 0x21b5;
- t.cbopomofo = 0x3118;
- t.ccaron = 0x010d;
- t.ccedilla = 0x00e7;
- t.ccedillaacute = 0x1e09;
- t.ccircle = 0x24d2;
- t.ccircumflex = 0x0109;
- t.ccurl = 0x0255;
- t.cdot = 0x010b;
- t.cdotaccent = 0x010b;
- t.cdsquare = 0x33c5;
- t.cedilla = 0x00b8;
- t.cedillacmb = 0x0327;
- t.cent = 0x00a2;
- t.centigrade = 0x2103;
- t.centinferior = 0xf6df;
- t.centmonospace = 0xffe0;
- t.centoldstyle = 0xf7a2;
- t.centsuperior = 0xf6e0;
- t.chaarmenian = 0x0579;
- t.chabengali = 0x099b;
- t.chadeva = 0x091b;
- t.chagujarati = 0x0a9b;
- t.chagurmukhi = 0x0a1b;
- t.chbopomofo = 0x3114;
- t.cheabkhasiancyrillic = 0x04bd;
- t.checkmark = 0x2713;
- t.checyrillic = 0x0447;
- t.chedescenderabkhasiancyrillic = 0x04bf;
- t.chedescendercyrillic = 0x04b7;
- t.chedieresiscyrillic = 0x04f5;
- t.cheharmenian = 0x0573;
- t.chekhakassiancyrillic = 0x04cc;
- t.cheverticalstrokecyrillic = 0x04b9;
- t.chi = 0x03c7;
- t.chieuchacirclekorean = 0x3277;
- t.chieuchaparenkorean = 0x3217;
- t.chieuchcirclekorean = 0x3269;
- t.chieuchkorean = 0x314a;
- t.chieuchparenkorean = 0x3209;
- t.chochangthai = 0x0e0a;
- t.chochanthai = 0x0e08;
- t.chochingthai = 0x0e09;
- t.chochoethai = 0x0e0c;
- t.chook = 0x0188;
- t.cieucacirclekorean = 0x3276;
- t.cieucaparenkorean = 0x3216;
- t.cieuccirclekorean = 0x3268;
- t.cieuckorean = 0x3148;
- t.cieucparenkorean = 0x3208;
- t.cieucuparenkorean = 0x321c;
- t.circle = 0x25cb;
- t.circlecopyrt = 0x00a9;
- t.circlemultiply = 0x2297;
- t.circleot = 0x2299;
- t.circleplus = 0x2295;
- t.circlepostalmark = 0x3036;
- t.circlewithlefthalfblack = 0x25d0;
- t.circlewithrighthalfblack = 0x25d1;
- t.circumflex = 0x02c6;
- t.circumflexbelowcmb = 0x032d;
- t.circumflexcmb = 0x0302;
- t.clear = 0x2327;
- t.clickalveolar = 0x01c2;
- t.clickdental = 0x01c0;
- t.clicklateral = 0x01c1;
- t.clickretroflex = 0x01c3;
- t.club = 0x2663;
- t.clubsuitblack = 0x2663;
- t.clubsuitwhite = 0x2667;
- t.cmcubedsquare = 0x33a4;
- t.cmonospace = 0xff43;
- t.cmsquaredsquare = 0x33a0;
- t.coarmenian = 0x0581;
- t.colon = 0x003a;
- t.colonmonetary = 0x20a1;
- t.colonmonospace = 0xff1a;
- t.colonsign = 0x20a1;
- t.colonsmall = 0xfe55;
- t.colontriangularhalfmod = 0x02d1;
- t.colontriangularmod = 0x02d0;
- t.comma = 0x002c;
- t.commaabovecmb = 0x0313;
- t.commaaboverightcmb = 0x0315;
- t.commaaccent = 0xf6c3;
- t.commaarabic = 0x060c;
- t.commaarmenian = 0x055d;
- t.commainferior = 0xf6e1;
- t.commamonospace = 0xff0c;
- t.commareversedabovecmb = 0x0314;
- t.commareversedmod = 0x02bd;
- t.commasmall = 0xfe50;
- t.commasuperior = 0xf6e2;
- t.commaturnedabovecmb = 0x0312;
- t.commaturnedmod = 0x02bb;
- t.compass = 0x263c;
- t.congruent = 0x2245;
- t.contourintegral = 0x222e;
- t.control = 0x2303;
- t.controlACK = 0x0006;
- t.controlBEL = 0x0007;
- t.controlBS = 0x0008;
- t.controlCAN = 0x0018;
- t.controlCR = 0x000d;
- t.controlDC1 = 0x0011;
- t.controlDC2 = 0x0012;
- t.controlDC3 = 0x0013;
- t.controlDC4 = 0x0014;
- t.controlDEL = 0x007f;
- t.controlDLE = 0x0010;
- t.controlEM = 0x0019;
- t.controlENQ = 0x0005;
- t.controlEOT = 0x0004;
- t.controlESC = 0x001b;
- t.controlETB = 0x0017;
- t.controlETX = 0x0003;
- t.controlFF = 0x000c;
- t.controlFS = 0x001c;
- t.controlGS = 0x001d;
- t.controlHT = 0x0009;
- t.controlLF = 0x000a;
- t.controlNAK = 0x0015;
- t.controlNULL = 0x0000;
- t.controlRS = 0x001e;
- t.controlSI = 0x000f;
- t.controlSO = 0x000e;
- t.controlSOT = 0x0002;
- t.controlSTX = 0x0001;
- t.controlSUB = 0x001a;
- t.controlSYN = 0x0016;
- t.controlUS = 0x001f;
- t.controlVT = 0x000b;
- t.copyright = 0x00a9;
- t.copyrightsans = 0xf8e9;
- t.copyrightserif = 0xf6d9;
- t.cornerbracketleft = 0x300c;
- t.cornerbracketlefthalfwidth = 0xff62;
- t.cornerbracketleftvertical = 0xfe41;
- t.cornerbracketright = 0x300d;
- t.cornerbracketrighthalfwidth = 0xff63;
- t.cornerbracketrightvertical = 0xfe42;
- t.corporationsquare = 0x337f;
- t.cosquare = 0x33c7;
- t.coverkgsquare = 0x33c6;
- t.cparen = 0x249e;
- t.cruzeiro = 0x20a2;
- t.cstretched = 0x0297;
- t.curlyand = 0x22cf;
- t.curlyor = 0x22ce;
- t.currency = 0x00a4;
- t.cyrBreve = 0xf6d1;
- t.cyrFlex = 0xf6d2;
- t.cyrbreve = 0xf6d4;
- t.cyrflex = 0xf6d5;
- t.d = 0x0064;
- t.daarmenian = 0x0564;
- t.dabengali = 0x09a6;
- t.dadarabic = 0x0636;
- t.dadeva = 0x0926;
- t.dadfinalarabic = 0xfebe;
- t.dadinitialarabic = 0xfebf;
- t.dadmedialarabic = 0xfec0;
- t.dagesh = 0x05bc;
- t.dageshhebrew = 0x05bc;
- t.dagger = 0x2020;
- t.daggerdbl = 0x2021;
- t.dagujarati = 0x0aa6;
- t.dagurmukhi = 0x0a26;
- t.dahiragana = 0x3060;
- t.dakatakana = 0x30c0;
- t.dalarabic = 0x062f;
- t.dalet = 0x05d3;
- t.daletdagesh = 0xfb33;
- t.daletdageshhebrew = 0xfb33;
- t.dalethebrew = 0x05d3;
- t.dalfinalarabic = 0xfeaa;
- t.dammaarabic = 0x064f;
- t.dammalowarabic = 0x064f;
- t.dammatanaltonearabic = 0x064c;
- t.dammatanarabic = 0x064c;
- t.danda = 0x0964;
- t.dargahebrew = 0x05a7;
- t.dargalefthebrew = 0x05a7;
- t.dasiapneumatacyrilliccmb = 0x0485;
- t.dblGrave = 0xf6d3;
- t.dblanglebracketleft = 0x300a;
- t.dblanglebracketleftvertical = 0xfe3d;
- t.dblanglebracketright = 0x300b;
- t.dblanglebracketrightvertical = 0xfe3e;
- t.dblarchinvertedbelowcmb = 0x032b;
- t.dblarrowleft = 0x21d4;
- t.dblarrowright = 0x21d2;
- t.dbldanda = 0x0965;
- t.dblgrave = 0xf6d6;
- t.dblgravecmb = 0x030f;
- t.dblintegral = 0x222c;
- t.dbllowline = 0x2017;
- t.dbllowlinecmb = 0x0333;
- t.dbloverlinecmb = 0x033f;
- t.dblprimemod = 0x02ba;
- t.dblverticalbar = 0x2016;
- t.dblverticallineabovecmb = 0x030e;
- t.dbopomofo = 0x3109;
- t.dbsquare = 0x33c8;
- t.dcaron = 0x010f;
- t.dcedilla = 0x1e11;
- t.dcircle = 0x24d3;
- t.dcircumflexbelow = 0x1e13;
- t.dcroat = 0x0111;
- t.ddabengali = 0x09a1;
- t.ddadeva = 0x0921;
- t.ddagujarati = 0x0aa1;
- t.ddagurmukhi = 0x0a21;
- t.ddalarabic = 0x0688;
- t.ddalfinalarabic = 0xfb89;
- t.dddhadeva = 0x095c;
- t.ddhabengali = 0x09a2;
- t.ddhadeva = 0x0922;
- t.ddhagujarati = 0x0aa2;
- t.ddhagurmukhi = 0x0a22;
- t.ddotaccent = 0x1e0b;
- t.ddotbelow = 0x1e0d;
- t.decimalseparatorarabic = 0x066b;
- t.decimalseparatorpersian = 0x066b;
- t.decyrillic = 0x0434;
- t.degree = 0x00b0;
- t.dehihebrew = 0x05ad;
- t.dehiragana = 0x3067;
- t.deicoptic = 0x03ef;
- t.dekatakana = 0x30c7;
- t.deleteleft = 0x232b;
- t.deleteright = 0x2326;
- t.delta = 0x03b4;
- t.deltaturned = 0x018d;
- t.denominatorminusonenumeratorbengali = 0x09f8;
- t.dezh = 0x02a4;
- t.dhabengali = 0x09a7;
- t.dhadeva = 0x0927;
- t.dhagujarati = 0x0aa7;
- t.dhagurmukhi = 0x0a27;
- t.dhook = 0x0257;
- t.dialytikatonos = 0x0385;
- t.dialytikatonoscmb = 0x0344;
- t.diamond = 0x2666;
- t.diamondsuitwhite = 0x2662;
- t.dieresis = 0x00a8;
- t.dieresisacute = 0xf6d7;
- t.dieresisbelowcmb = 0x0324;
- t.dieresiscmb = 0x0308;
- t.dieresisgrave = 0xf6d8;
- t.dieresistonos = 0x0385;
- t.dihiragana = 0x3062;
- t.dikatakana = 0x30c2;
- t.dittomark = 0x3003;
- t.divide = 0x00f7;
- t.divides = 0x2223;
- t.divisionslash = 0x2215;
- t.djecyrillic = 0x0452;
- t.dkshade = 0x2593;
- t.dlinebelow = 0x1e0f;
- t.dlsquare = 0x3397;
- t.dmacron = 0x0111;
- t.dmonospace = 0xff44;
- t.dnblock = 0x2584;
- t.dochadathai = 0x0e0e;
- t.dodekthai = 0x0e14;
- t.dohiragana = 0x3069;
- t.dokatakana = 0x30c9;
- t.dollar = 0x0024;
- t.dollarinferior = 0xf6e3;
- t.dollarmonospace = 0xff04;
- t.dollaroldstyle = 0xf724;
- t.dollarsmall = 0xfe69;
- t.dollarsuperior = 0xf6e4;
- t.dong = 0x20ab;
- t.dorusquare = 0x3326;
- t.dotaccent = 0x02d9;
- t.dotaccentcmb = 0x0307;
- t.dotbelowcmb = 0x0323;
- t.dotbelowcomb = 0x0323;
- t.dotkatakana = 0x30fb;
- t.dotlessi = 0x0131;
- t.dotlessj = 0xf6be;
- t.dotlessjstrokehook = 0x0284;
- t.dotmath = 0x22c5;
- t.dottedcircle = 0x25cc;
- t.doubleyodpatah = 0xfb1f;
- t.doubleyodpatahhebrew = 0xfb1f;
- t.downtackbelowcmb = 0x031e;
- t.downtackmod = 0x02d5;
- t.dparen = 0x249f;
- t.dsuperior = 0xf6eb;
- t.dtail = 0x0256;
- t.dtopbar = 0x018c;
- t.duhiragana = 0x3065;
- t.dukatakana = 0x30c5;
- t.dz = 0x01f3;
- t.dzaltone = 0x02a3;
- t.dzcaron = 0x01c6;
- t.dzcurl = 0x02a5;
- t.dzeabkhasiancyrillic = 0x04e1;
- t.dzecyrillic = 0x0455;
- t.dzhecyrillic = 0x045f;
- t.e = 0x0065;
- t.eacute = 0x00e9;
- t.earth = 0x2641;
- t.ebengali = 0x098f;
- t.ebopomofo = 0x311c;
- t.ebreve = 0x0115;
- t.ecandradeva = 0x090d;
- t.ecandragujarati = 0x0a8d;
- t.ecandravowelsigndeva = 0x0945;
- t.ecandravowelsigngujarati = 0x0ac5;
- t.ecaron = 0x011b;
- t.ecedillabreve = 0x1e1d;
- t.echarmenian = 0x0565;
- t.echyiwnarmenian = 0x0587;
- t.ecircle = 0x24d4;
- t.ecircumflex = 0x00ea;
- t.ecircumflexacute = 0x1ebf;
- t.ecircumflexbelow = 0x1e19;
- t.ecircumflexdotbelow = 0x1ec7;
- t.ecircumflexgrave = 0x1ec1;
- t.ecircumflexhookabove = 0x1ec3;
- t.ecircumflextilde = 0x1ec5;
- t.ecyrillic = 0x0454;
- t.edblgrave = 0x0205;
- t.edeva = 0x090f;
- t.edieresis = 0x00eb;
- t.edot = 0x0117;
- t.edotaccent = 0x0117;
- t.edotbelow = 0x1eb9;
- t.eegurmukhi = 0x0a0f;
- t.eematragurmukhi = 0x0a47;
- t.efcyrillic = 0x0444;
- t.egrave = 0x00e8;
- t.egujarati = 0x0a8f;
- t.eharmenian = 0x0567;
- t.ehbopomofo = 0x311d;
- t.ehiragana = 0x3048;
- t.ehookabove = 0x1ebb;
- t.eibopomofo = 0x311f;
- t.eight = 0x0038;
- t.eightarabic = 0x0668;
- t.eightbengali = 0x09ee;
- t.eightcircle = 0x2467;
- t.eightcircleinversesansserif = 0x2791;
- t.eightdeva = 0x096e;
- t.eighteencircle = 0x2471;
- t.eighteenparen = 0x2485;
- t.eighteenperiod = 0x2499;
- t.eightgujarati = 0x0aee;
- t.eightgurmukhi = 0x0a6e;
- t.eighthackarabic = 0x0668;
- t.eighthangzhou = 0x3028;
- t.eighthnotebeamed = 0x266b;
- t.eightideographicparen = 0x3227;
- t.eightinferior = 0x2088;
- t.eightmonospace = 0xff18;
- t.eightoldstyle = 0xf738;
- t.eightparen = 0x247b;
- t.eightperiod = 0x248f;
- t.eightpersian = 0x06f8;
- t.eightroman = 0x2177;
- t.eightsuperior = 0x2078;
- t.eightthai = 0x0e58;
- t.einvertedbreve = 0x0207;
- t.eiotifiedcyrillic = 0x0465;
- t.ekatakana = 0x30a8;
- t.ekatakanahalfwidth = 0xff74;
- t.ekonkargurmukhi = 0x0a74;
- t.ekorean = 0x3154;
- t.elcyrillic = 0x043b;
- t.element = 0x2208;
- t.elevencircle = 0x246a;
- t.elevenparen = 0x247e;
- t.elevenperiod = 0x2492;
- t.elevenroman = 0x217a;
- t.ellipsis = 0x2026;
- t.ellipsisvertical = 0x22ee;
- t.emacron = 0x0113;
- t.emacronacute = 0x1e17;
- t.emacrongrave = 0x1e15;
- t.emcyrillic = 0x043c;
- t.emdash = 0x2014;
- t.emdashvertical = 0xfe31;
- t.emonospace = 0xff45;
- t.emphasismarkarmenian = 0x055b;
- t.emptyset = 0x2205;
- t.enbopomofo = 0x3123;
- t.encyrillic = 0x043d;
- t.endash = 0x2013;
- t.endashvertical = 0xfe32;
- t.endescendercyrillic = 0x04a3;
- t.eng = 0x014b;
- t.engbopomofo = 0x3125;
- t.enghecyrillic = 0x04a5;
- t.enhookcyrillic = 0x04c8;
- t.enspace = 0x2002;
- t.eogonek = 0x0119;
- t.eokorean = 0x3153;
- t.eopen = 0x025b;
- t.eopenclosed = 0x029a;
- t.eopenreversed = 0x025c;
- t.eopenreversedclosed = 0x025e;
- t.eopenreversedhook = 0x025d;
- t.eparen = 0x24a0;
- t.epsilon = 0x03b5;
- t.epsilontonos = 0x03ad;
- t.equal = 0x003d;
- t.equalmonospace = 0xff1d;
- t.equalsmall = 0xfe66;
- t.equalsuperior = 0x207c;
- t.equivalence = 0x2261;
- t.erbopomofo = 0x3126;
- t.ercyrillic = 0x0440;
- t.ereversed = 0x0258;
- t.ereversedcyrillic = 0x044d;
- t.escyrillic = 0x0441;
- t.esdescendercyrillic = 0x04ab;
- t.esh = 0x0283;
- t.eshcurl = 0x0286;
- t.eshortdeva = 0x090e;
- t.eshortvowelsigndeva = 0x0946;
- t.eshreversedloop = 0x01aa;
- t.eshsquatreversed = 0x0285;
- t.esmallhiragana = 0x3047;
- t.esmallkatakana = 0x30a7;
- t.esmallkatakanahalfwidth = 0xff6a;
- t.estimated = 0x212e;
- t.esuperior = 0xf6ec;
- t.eta = 0x03b7;
- t.etarmenian = 0x0568;
- t.etatonos = 0x03ae;
- t.eth = 0x00f0;
- t.etilde = 0x1ebd;
- t.etildebelow = 0x1e1b;
- t.etnahtafoukhhebrew = 0x0591;
- t.etnahtafoukhlefthebrew = 0x0591;
- t.etnahtahebrew = 0x0591;
- t.etnahtalefthebrew = 0x0591;
- t.eturned = 0x01dd;
- t.eukorean = 0x3161;
- t.euro = 0x20ac;
- t.evowelsignbengali = 0x09c7;
- t.evowelsigndeva = 0x0947;
- t.evowelsigngujarati = 0x0ac7;
- t.exclam = 0x0021;
- t.exclamarmenian = 0x055c;
- t.exclamdbl = 0x203c;
- t.exclamdown = 0x00a1;
- t.exclamdownsmall = 0xf7a1;
- t.exclammonospace = 0xff01;
- t.exclamsmall = 0xf721;
- t.existential = 0x2203;
- t.ezh = 0x0292;
- t.ezhcaron = 0x01ef;
- t.ezhcurl = 0x0293;
- t.ezhreversed = 0x01b9;
- t.ezhtail = 0x01ba;
- t.f = 0x0066;
- t.fadeva = 0x095e;
- t.fagurmukhi = 0x0a5e;
- t.fahrenheit = 0x2109;
- t.fathaarabic = 0x064e;
- t.fathalowarabic = 0x064e;
- t.fathatanarabic = 0x064b;
- t.fbopomofo = 0x3108;
- t.fcircle = 0x24d5;
- t.fdotaccent = 0x1e1f;
- t.feharabic = 0x0641;
- t.feharmenian = 0x0586;
- t.fehfinalarabic = 0xfed2;
- t.fehinitialarabic = 0xfed3;
- t.fehmedialarabic = 0xfed4;
- t.feicoptic = 0x03e5;
- t.female = 0x2640;
- t.ff = 0xfb00;
- t.f_f = 0xfb00;
- t.ffi = 0xfb03;
- t.ffl = 0xfb04;
- t.fi = 0xfb01;
- t.fifteencircle = 0x246e;
- t.fifteenparen = 0x2482;
- t.fifteenperiod = 0x2496;
- t.figuredash = 0x2012;
- t.filledbox = 0x25a0;
- t.filledrect = 0x25ac;
- t.finalkaf = 0x05da;
- t.finalkafdagesh = 0xfb3a;
- t.finalkafdageshhebrew = 0xfb3a;
- t.finalkafhebrew = 0x05da;
- t.finalmem = 0x05dd;
- t.finalmemhebrew = 0x05dd;
- t.finalnun = 0x05df;
- t.finalnunhebrew = 0x05df;
- t.finalpe = 0x05e3;
- t.finalpehebrew = 0x05e3;
- t.finaltsadi = 0x05e5;
- t.finaltsadihebrew = 0x05e5;
- t.firsttonechinese = 0x02c9;
- t.fisheye = 0x25c9;
- t.fitacyrillic = 0x0473;
- t.five = 0x0035;
- t.fivearabic = 0x0665;
- t.fivebengali = 0x09eb;
- t.fivecircle = 0x2464;
- t.fivecircleinversesansserif = 0x278e;
- t.fivedeva = 0x096b;
- t.fiveeighths = 0x215d;
- t.fivegujarati = 0x0aeb;
- t.fivegurmukhi = 0x0a6b;
- t.fivehackarabic = 0x0665;
- t.fivehangzhou = 0x3025;
- t.fiveideographicparen = 0x3224;
- t.fiveinferior = 0x2085;
- t.fivemonospace = 0xff15;
- t.fiveoldstyle = 0xf735;
- t.fiveparen = 0x2478;
- t.fiveperiod = 0x248c;
- t.fivepersian = 0x06f5;
- t.fiveroman = 0x2174;
- t.fivesuperior = 0x2075;
- t.fivethai = 0x0e55;
- t.fl = 0xfb02;
- t.florin = 0x0192;
- t.fmonospace = 0xff46;
- t.fmsquare = 0x3399;
- t.fofanthai = 0x0e1f;
- t.fofathai = 0x0e1d;
- t.fongmanthai = 0x0e4f;
- t.forall = 0x2200;
- t.four = 0x0034;
- t.fourarabic = 0x0664;
- t.fourbengali = 0x09ea;
- t.fourcircle = 0x2463;
- t.fourcircleinversesansserif = 0x278d;
- t.fourdeva = 0x096a;
- t.fourgujarati = 0x0aea;
- t.fourgurmukhi = 0x0a6a;
- t.fourhackarabic = 0x0664;
- t.fourhangzhou = 0x3024;
- t.fourideographicparen = 0x3223;
- t.fourinferior = 0x2084;
- t.fourmonospace = 0xff14;
- t.fournumeratorbengali = 0x09f7;
- t.fouroldstyle = 0xf734;
- t.fourparen = 0x2477;
- t.fourperiod = 0x248b;
- t.fourpersian = 0x06f4;
- t.fourroman = 0x2173;
- t.foursuperior = 0x2074;
- t.fourteencircle = 0x246d;
- t.fourteenparen = 0x2481;
- t.fourteenperiod = 0x2495;
- t.fourthai = 0x0e54;
- t.fourthtonechinese = 0x02cb;
- t.fparen = 0x24a1;
- t.fraction = 0x2044;
- t.franc = 0x20a3;
- t.g = 0x0067;
- t.gabengali = 0x0997;
- t.gacute = 0x01f5;
- t.gadeva = 0x0917;
- t.gafarabic = 0x06af;
- t.gaffinalarabic = 0xfb93;
- t.gafinitialarabic = 0xfb94;
- t.gafmedialarabic = 0xfb95;
- t.gagujarati = 0x0a97;
- t.gagurmukhi = 0x0a17;
- t.gahiragana = 0x304c;
- t.gakatakana = 0x30ac;
- t.gamma = 0x03b3;
- t.gammalatinsmall = 0x0263;
- t.gammasuperior = 0x02e0;
- t.gangiacoptic = 0x03eb;
- t.gbopomofo = 0x310d;
- t.gbreve = 0x011f;
- t.gcaron = 0x01e7;
- t.gcedilla = 0x0123;
- t.gcircle = 0x24d6;
- t.gcircumflex = 0x011d;
- t.gcommaaccent = 0x0123;
- t.gdot = 0x0121;
- t.gdotaccent = 0x0121;
- t.gecyrillic = 0x0433;
- t.gehiragana = 0x3052;
- t.gekatakana = 0x30b2;
- t.geometricallyequal = 0x2251;
- t.gereshaccenthebrew = 0x059c;
- t.gereshhebrew = 0x05f3;
- t.gereshmuqdamhebrew = 0x059d;
- t.germandbls = 0x00df;
- t.gershayimaccenthebrew = 0x059e;
- t.gershayimhebrew = 0x05f4;
- t.getamark = 0x3013;
- t.ghabengali = 0x0998;
- t.ghadarmenian = 0x0572;
- t.ghadeva = 0x0918;
- t.ghagujarati = 0x0a98;
- t.ghagurmukhi = 0x0a18;
- t.ghainarabic = 0x063a;
- t.ghainfinalarabic = 0xfece;
- t.ghaininitialarabic = 0xfecf;
- t.ghainmedialarabic = 0xfed0;
- t.ghemiddlehookcyrillic = 0x0495;
- t.ghestrokecyrillic = 0x0493;
- t.gheupturncyrillic = 0x0491;
- t.ghhadeva = 0x095a;
- t.ghhagurmukhi = 0x0a5a;
- t.ghook = 0x0260;
- t.ghzsquare = 0x3393;
- t.gihiragana = 0x304e;
- t.gikatakana = 0x30ae;
- t.gimarmenian = 0x0563;
- t.gimel = 0x05d2;
- t.gimeldagesh = 0xfb32;
- t.gimeldageshhebrew = 0xfb32;
- t.gimelhebrew = 0x05d2;
- t.gjecyrillic = 0x0453;
- t.glottalinvertedstroke = 0x01be;
- t.glottalstop = 0x0294;
- t.glottalstopinverted = 0x0296;
- t.glottalstopmod = 0x02c0;
- t.glottalstopreversed = 0x0295;
- t.glottalstopreversedmod = 0x02c1;
- t.glottalstopreversedsuperior = 0x02e4;
- t.glottalstopstroke = 0x02a1;
- t.glottalstopstrokereversed = 0x02a2;
- t.gmacron = 0x1e21;
- t.gmonospace = 0xff47;
- t.gohiragana = 0x3054;
- t.gokatakana = 0x30b4;
- t.gparen = 0x24a2;
- t.gpasquare = 0x33ac;
- t.gradient = 0x2207;
- t.grave = 0x0060;
- t.gravebelowcmb = 0x0316;
- t.gravecmb = 0x0300;
- t.gravecomb = 0x0300;
- t.gravedeva = 0x0953;
- t.gravelowmod = 0x02ce;
- t.gravemonospace = 0xff40;
- t.gravetonecmb = 0x0340;
- t.greater = 0x003e;
- t.greaterequal = 0x2265;
- t.greaterequalorless = 0x22db;
- t.greatermonospace = 0xff1e;
- t.greaterorequivalent = 0x2273;
- t.greaterorless = 0x2277;
- t.greateroverequal = 0x2267;
- t.greatersmall = 0xfe65;
- t.gscript = 0x0261;
- t.gstroke = 0x01e5;
- t.guhiragana = 0x3050;
- t.guillemotleft = 0x00ab;
- t.guillemotright = 0x00bb;
- t.guilsinglleft = 0x2039;
- t.guilsinglright = 0x203a;
- t.gukatakana = 0x30b0;
- t.guramusquare = 0x3318;
- t.gysquare = 0x33c9;
- t.h = 0x0068;
- t.haabkhasiancyrillic = 0x04a9;
- t.haaltonearabic = 0x06c1;
- t.habengali = 0x09b9;
- t.hadescendercyrillic = 0x04b3;
- t.hadeva = 0x0939;
- t.hagujarati = 0x0ab9;
- t.hagurmukhi = 0x0a39;
- t.haharabic = 0x062d;
- t.hahfinalarabic = 0xfea2;
- t.hahinitialarabic = 0xfea3;
- t.hahiragana = 0x306f;
- t.hahmedialarabic = 0xfea4;
- t.haitusquare = 0x332a;
- t.hakatakana = 0x30cf;
- t.hakatakanahalfwidth = 0xff8a;
- t.halantgurmukhi = 0x0a4d;
- t.hamzaarabic = 0x0621;
- t.hamzalowarabic = 0x0621;
- t.hangulfiller = 0x3164;
- t.hardsigncyrillic = 0x044a;
- t.harpoonleftbarbup = 0x21bc;
- t.harpoonrightbarbup = 0x21c0;
- t.hasquare = 0x33ca;
- t.hatafpatah = 0x05b2;
- t.hatafpatah16 = 0x05b2;
- t.hatafpatah23 = 0x05b2;
- t.hatafpatah2f = 0x05b2;
- t.hatafpatahhebrew = 0x05b2;
- t.hatafpatahnarrowhebrew = 0x05b2;
- t.hatafpatahquarterhebrew = 0x05b2;
- t.hatafpatahwidehebrew = 0x05b2;
- t.hatafqamats = 0x05b3;
- t.hatafqamats1b = 0x05b3;
- t.hatafqamats28 = 0x05b3;
- t.hatafqamats34 = 0x05b3;
- t.hatafqamatshebrew = 0x05b3;
- t.hatafqamatsnarrowhebrew = 0x05b3;
- t.hatafqamatsquarterhebrew = 0x05b3;
- t.hatafqamatswidehebrew = 0x05b3;
- t.hatafsegol = 0x05b1;
- t.hatafsegol17 = 0x05b1;
- t.hatafsegol24 = 0x05b1;
- t.hatafsegol30 = 0x05b1;
- t.hatafsegolhebrew = 0x05b1;
- t.hatafsegolnarrowhebrew = 0x05b1;
- t.hatafsegolquarterhebrew = 0x05b1;
- t.hatafsegolwidehebrew = 0x05b1;
- t.hbar = 0x0127;
- t.hbopomofo = 0x310f;
- t.hbrevebelow = 0x1e2b;
- t.hcedilla = 0x1e29;
- t.hcircle = 0x24d7;
- t.hcircumflex = 0x0125;
- t.hdieresis = 0x1e27;
- t.hdotaccent = 0x1e23;
- t.hdotbelow = 0x1e25;
- t.he = 0x05d4;
- t.heart = 0x2665;
- t.heartsuitblack = 0x2665;
- t.heartsuitwhite = 0x2661;
- t.hedagesh = 0xfb34;
- t.hedageshhebrew = 0xfb34;
- t.hehaltonearabic = 0x06c1;
- t.heharabic = 0x0647;
- t.hehebrew = 0x05d4;
- t.hehfinalaltonearabic = 0xfba7;
- t.hehfinalalttwoarabic = 0xfeea;
- t.hehfinalarabic = 0xfeea;
- t.hehhamzaabovefinalarabic = 0xfba5;
- t.hehhamzaaboveisolatedarabic = 0xfba4;
- t.hehinitialaltonearabic = 0xfba8;
- t.hehinitialarabic = 0xfeeb;
- t.hehiragana = 0x3078;
- t.hehmedialaltonearabic = 0xfba9;
- t.hehmedialarabic = 0xfeec;
- t.heiseierasquare = 0x337b;
- t.hekatakana = 0x30d8;
- t.hekatakanahalfwidth = 0xff8d;
- t.hekutaarusquare = 0x3336;
- t.henghook = 0x0267;
- t.herutusquare = 0x3339;
- t.het = 0x05d7;
- t.hethebrew = 0x05d7;
- t.hhook = 0x0266;
- t.hhooksuperior = 0x02b1;
- t.hieuhacirclekorean = 0x327b;
- t.hieuhaparenkorean = 0x321b;
- t.hieuhcirclekorean = 0x326d;
- t.hieuhkorean = 0x314e;
- t.hieuhparenkorean = 0x320d;
- t.hihiragana = 0x3072;
- t.hikatakana = 0x30d2;
- t.hikatakanahalfwidth = 0xff8b;
- t.hiriq = 0x05b4;
- t.hiriq14 = 0x05b4;
- t.hiriq21 = 0x05b4;
- t.hiriq2d = 0x05b4;
- t.hiriqhebrew = 0x05b4;
- t.hiriqnarrowhebrew = 0x05b4;
- t.hiriqquarterhebrew = 0x05b4;
- t.hiriqwidehebrew = 0x05b4;
- t.hlinebelow = 0x1e96;
- t.hmonospace = 0xff48;
- t.hoarmenian = 0x0570;
- t.hohipthai = 0x0e2b;
- t.hohiragana = 0x307b;
- t.hokatakana = 0x30db;
- t.hokatakanahalfwidth = 0xff8e;
- t.holam = 0x05b9;
- t.holam19 = 0x05b9;
- t.holam26 = 0x05b9;
- t.holam32 = 0x05b9;
- t.holamhebrew = 0x05b9;
- t.holamnarrowhebrew = 0x05b9;
- t.holamquarterhebrew = 0x05b9;
- t.holamwidehebrew = 0x05b9;
- t.honokhukthai = 0x0e2e;
- t.hookabovecomb = 0x0309;
- t.hookcmb = 0x0309;
- t.hookpalatalizedbelowcmb = 0x0321;
- t.hookretroflexbelowcmb = 0x0322;
- t.hoonsquare = 0x3342;
- t.horicoptic = 0x03e9;
- t.horizontalbar = 0x2015;
- t.horncmb = 0x031b;
- t.hotsprings = 0x2668;
- t.house = 0x2302;
- t.hparen = 0x24a3;
- t.hsuperior = 0x02b0;
- t.hturned = 0x0265;
- t.huhiragana = 0x3075;
- t.huiitosquare = 0x3333;
- t.hukatakana = 0x30d5;
- t.hukatakanahalfwidth = 0xff8c;
- t.hungarumlaut = 0x02dd;
- t.hungarumlautcmb = 0x030b;
- t.hv = 0x0195;
- t.hyphen = 0x002d;
- t.hypheninferior = 0xf6e5;
- t.hyphenmonospace = 0xff0d;
- t.hyphensmall = 0xfe63;
- t.hyphensuperior = 0xf6e6;
- t.hyphentwo = 0x2010;
- t.i = 0x0069;
- t.iacute = 0x00ed;
- t.iacyrillic = 0x044f;
- t.ibengali = 0x0987;
- t.ibopomofo = 0x3127;
- t.ibreve = 0x012d;
- t.icaron = 0x01d0;
- t.icircle = 0x24d8;
- t.icircumflex = 0x00ee;
- t.icyrillic = 0x0456;
- t.idblgrave = 0x0209;
- t.ideographearthcircle = 0x328f;
- t.ideographfirecircle = 0x328b;
- t.ideographicallianceparen = 0x323f;
- t.ideographiccallparen = 0x323a;
- t.ideographiccentrecircle = 0x32a5;
- t.ideographicclose = 0x3006;
- t.ideographiccomma = 0x3001;
- t.ideographiccommaleft = 0xff64;
- t.ideographiccongratulationparen = 0x3237;
- t.ideographiccorrectcircle = 0x32a3;
- t.ideographicearthparen = 0x322f;
- t.ideographicenterpriseparen = 0x323d;
- t.ideographicexcellentcircle = 0x329d;
- t.ideographicfestivalparen = 0x3240;
- t.ideographicfinancialcircle = 0x3296;
- t.ideographicfinancialparen = 0x3236;
- t.ideographicfireparen = 0x322b;
- t.ideographichaveparen = 0x3232;
- t.ideographichighcircle = 0x32a4;
- t.ideographiciterationmark = 0x3005;
- t.ideographiclaborcircle = 0x3298;
- t.ideographiclaborparen = 0x3238;
- t.ideographicleftcircle = 0x32a7;
- t.ideographiclowcircle = 0x32a6;
- t.ideographicmedicinecircle = 0x32a9;
- t.ideographicmetalparen = 0x322e;
- t.ideographicmoonparen = 0x322a;
- t.ideographicnameparen = 0x3234;
- t.ideographicperiod = 0x3002;
- t.ideographicprintcircle = 0x329e;
- t.ideographicreachparen = 0x3243;
- t.ideographicrepresentparen = 0x3239;
- t.ideographicresourceparen = 0x323e;
- t.ideographicrightcircle = 0x32a8;
- t.ideographicsecretcircle = 0x3299;
- t.ideographicselfparen = 0x3242;
- t.ideographicsocietyparen = 0x3233;
- t.ideographicspace = 0x3000;
- t.ideographicspecialparen = 0x3235;
- t.ideographicstockparen = 0x3231;
- t.ideographicstudyparen = 0x323b;
- t.ideographicsunparen = 0x3230;
- t.ideographicsuperviseparen = 0x323c;
- t.ideographicwaterparen = 0x322c;
- t.ideographicwoodparen = 0x322d;
- t.ideographiczero = 0x3007;
- t.ideographmetalcircle = 0x328e;
- t.ideographmooncircle = 0x328a;
- t.ideographnamecircle = 0x3294;
- t.ideographsuncircle = 0x3290;
- t.ideographwatercircle = 0x328c;
- t.ideographwoodcircle = 0x328d;
- t.ideva = 0x0907;
- t.idieresis = 0x00ef;
- t.idieresisacute = 0x1e2f;
- t.idieresiscyrillic = 0x04e5;
- t.idotbelow = 0x1ecb;
- t.iebrevecyrillic = 0x04d7;
- t.iecyrillic = 0x0435;
- t.ieungacirclekorean = 0x3275;
- t.ieungaparenkorean = 0x3215;
- t.ieungcirclekorean = 0x3267;
- t.ieungkorean = 0x3147;
- t.ieungparenkorean = 0x3207;
- t.igrave = 0x00ec;
- t.igujarati = 0x0a87;
- t.igurmukhi = 0x0a07;
- t.ihiragana = 0x3044;
- t.ihookabove = 0x1ec9;
- t.iibengali = 0x0988;
- t.iicyrillic = 0x0438;
- t.iideva = 0x0908;
- t.iigujarati = 0x0a88;
- t.iigurmukhi = 0x0a08;
- t.iimatragurmukhi = 0x0a40;
- t.iinvertedbreve = 0x020b;
- t.iishortcyrillic = 0x0439;
- t.iivowelsignbengali = 0x09c0;
- t.iivowelsigndeva = 0x0940;
- t.iivowelsigngujarati = 0x0ac0;
- t.ij = 0x0133;
- t.ikatakana = 0x30a4;
- t.ikatakanahalfwidth = 0xff72;
- t.ikorean = 0x3163;
- t.ilde = 0x02dc;
- t.iluyhebrew = 0x05ac;
- t.imacron = 0x012b;
- t.imacroncyrillic = 0x04e3;
- t.imageorapproximatelyequal = 0x2253;
- t.imatragurmukhi = 0x0a3f;
- t.imonospace = 0xff49;
- t.increment = 0x2206;
- t.infinity = 0x221e;
- t.iniarmenian = 0x056b;
- t.integral = 0x222b;
- t.integralbottom = 0x2321;
- t.integralbt = 0x2321;
- t.integralex = 0xf8f5;
- t.integraltop = 0x2320;
- t.integraltp = 0x2320;
- t.intersection = 0x2229;
- t.intisquare = 0x3305;
- t.invbullet = 0x25d8;
- t.invcircle = 0x25d9;
- t.invsmileface = 0x263b;
- t.iocyrillic = 0x0451;
- t.iogonek = 0x012f;
- t.iota = 0x03b9;
- t.iotadieresis = 0x03ca;
- t.iotadieresistonos = 0x0390;
- t.iotalatin = 0x0269;
- t.iotatonos = 0x03af;
- t.iparen = 0x24a4;
- t.irigurmukhi = 0x0a72;
- t.ismallhiragana = 0x3043;
- t.ismallkatakana = 0x30a3;
- t.ismallkatakanahalfwidth = 0xff68;
- t.issharbengali = 0x09fa;
- t.istroke = 0x0268;
- t.isuperior = 0xf6ed;
- t.iterationhiragana = 0x309d;
- t.iterationkatakana = 0x30fd;
- t.itilde = 0x0129;
- t.itildebelow = 0x1e2d;
- t.iubopomofo = 0x3129;
- t.iucyrillic = 0x044e;
- t.ivowelsignbengali = 0x09bf;
- t.ivowelsigndeva = 0x093f;
- t.ivowelsigngujarati = 0x0abf;
- t.izhitsacyrillic = 0x0475;
- t.izhitsadblgravecyrillic = 0x0477;
- t.j = 0x006a;
- t.jaarmenian = 0x0571;
- t.jabengali = 0x099c;
- t.jadeva = 0x091c;
- t.jagujarati = 0x0a9c;
- t.jagurmukhi = 0x0a1c;
- t.jbopomofo = 0x3110;
- t.jcaron = 0x01f0;
- t.jcircle = 0x24d9;
- t.jcircumflex = 0x0135;
- t.jcrossedtail = 0x029d;
- t.jdotlessstroke = 0x025f;
- t.jecyrillic = 0x0458;
- t.jeemarabic = 0x062c;
- t.jeemfinalarabic = 0xfe9e;
- t.jeeminitialarabic = 0xfe9f;
- t.jeemmedialarabic = 0xfea0;
- t.jeharabic = 0x0698;
- t.jehfinalarabic = 0xfb8b;
- t.jhabengali = 0x099d;
- t.jhadeva = 0x091d;
- t.jhagujarati = 0x0a9d;
- t.jhagurmukhi = 0x0a1d;
- t.jheharmenian = 0x057b;
- t.jis = 0x3004;
- t.jmonospace = 0xff4a;
- t.jparen = 0x24a5;
- t.jsuperior = 0x02b2;
- t.k = 0x006b;
- t.kabashkircyrillic = 0x04a1;
- t.kabengali = 0x0995;
- t.kacute = 0x1e31;
- t.kacyrillic = 0x043a;
- t.kadescendercyrillic = 0x049b;
- t.kadeva = 0x0915;
- t.kaf = 0x05db;
- t.kafarabic = 0x0643;
- t.kafdagesh = 0xfb3b;
- t.kafdageshhebrew = 0xfb3b;
- t.kaffinalarabic = 0xfeda;
- t.kafhebrew = 0x05db;
- t.kafinitialarabic = 0xfedb;
- t.kafmedialarabic = 0xfedc;
- t.kafrafehebrew = 0xfb4d;
- t.kagujarati = 0x0a95;
- t.kagurmukhi = 0x0a15;
- t.kahiragana = 0x304b;
- t.kahookcyrillic = 0x04c4;
- t.kakatakana = 0x30ab;
- t.kakatakanahalfwidth = 0xff76;
- t.kappa = 0x03ba;
- t.kappasymbolgreek = 0x03f0;
- t.kapyeounmieumkorean = 0x3171;
- t.kapyeounphieuphkorean = 0x3184;
- t.kapyeounpieupkorean = 0x3178;
- t.kapyeounssangpieupkorean = 0x3179;
- t.karoriisquare = 0x330d;
- t.kashidaautoarabic = 0x0640;
- t.kashidaautonosidebearingarabic = 0x0640;
- t.kasmallkatakana = 0x30f5;
- t.kasquare = 0x3384;
- t.kasraarabic = 0x0650;
- t.kasratanarabic = 0x064d;
- t.kastrokecyrillic = 0x049f;
- t.katahiraprolongmarkhalfwidth = 0xff70;
- t.kaverticalstrokecyrillic = 0x049d;
- t.kbopomofo = 0x310e;
- t.kcalsquare = 0x3389;
- t.kcaron = 0x01e9;
- t.kcedilla = 0x0137;
- t.kcircle = 0x24da;
- t.kcommaaccent = 0x0137;
- t.kdotbelow = 0x1e33;
- t.keharmenian = 0x0584;
- t.kehiragana = 0x3051;
- t.kekatakana = 0x30b1;
- t.kekatakanahalfwidth = 0xff79;
- t.kenarmenian = 0x056f;
- t.kesmallkatakana = 0x30f6;
- t.kgreenlandic = 0x0138;
- t.khabengali = 0x0996;
- t.khacyrillic = 0x0445;
- t.khadeva = 0x0916;
- t.khagujarati = 0x0a96;
- t.khagurmukhi = 0x0a16;
- t.khaharabic = 0x062e;
- t.khahfinalarabic = 0xfea6;
- t.khahinitialarabic = 0xfea7;
- t.khahmedialarabic = 0xfea8;
- t.kheicoptic = 0x03e7;
- t.khhadeva = 0x0959;
- t.khhagurmukhi = 0x0a59;
- t.khieukhacirclekorean = 0x3278;
- t.khieukhaparenkorean = 0x3218;
- t.khieukhcirclekorean = 0x326a;
- t.khieukhkorean = 0x314b;
- t.khieukhparenkorean = 0x320a;
- t.khokhaithai = 0x0e02;
- t.khokhonthai = 0x0e05;
- t.khokhuatthai = 0x0e03;
- t.khokhwaithai = 0x0e04;
- t.khomutthai = 0x0e5b;
- t.khook = 0x0199;
- t.khorakhangthai = 0x0e06;
- t.khzsquare = 0x3391;
- t.kihiragana = 0x304d;
- t.kikatakana = 0x30ad;
- t.kikatakanahalfwidth = 0xff77;
- t.kiroguramusquare = 0x3315;
- t.kiromeetorusquare = 0x3316;
- t.kirosquare = 0x3314;
- t.kiyeokacirclekorean = 0x326e;
- t.kiyeokaparenkorean = 0x320e;
- t.kiyeokcirclekorean = 0x3260;
- t.kiyeokkorean = 0x3131;
- t.kiyeokparenkorean = 0x3200;
- t.kiyeoksioskorean = 0x3133;
- t.kjecyrillic = 0x045c;
- t.klinebelow = 0x1e35;
- t.klsquare = 0x3398;
- t.kmcubedsquare = 0x33a6;
- t.kmonospace = 0xff4b;
- t.kmsquaredsquare = 0x33a2;
- t.kohiragana = 0x3053;
- t.kohmsquare = 0x33c0;
- t.kokaithai = 0x0e01;
- t.kokatakana = 0x30b3;
- t.kokatakanahalfwidth = 0xff7a;
- t.kooposquare = 0x331e;
- t.koppacyrillic = 0x0481;
- t.koreanstandardsymbol = 0x327f;
- t.koroniscmb = 0x0343;
- t.kparen = 0x24a6;
- t.kpasquare = 0x33aa;
- t.ksicyrillic = 0x046f;
- t.ktsquare = 0x33cf;
- t.kturned = 0x029e;
- t.kuhiragana = 0x304f;
- t.kukatakana = 0x30af;
- t.kukatakanahalfwidth = 0xff78;
- t.kvsquare = 0x33b8;
- t.kwsquare = 0x33be;
- t.l = 0x006c;
- t.labengali = 0x09b2;
- t.lacute = 0x013a;
- t.ladeva = 0x0932;
- t.lagujarati = 0x0ab2;
- t.lagurmukhi = 0x0a32;
- t.lakkhangyaothai = 0x0e45;
- t.lamaleffinalarabic = 0xfefc;
- t.lamalefhamzaabovefinalarabic = 0xfef8;
- t.lamalefhamzaaboveisolatedarabic = 0xfef7;
- t.lamalefhamzabelowfinalarabic = 0xfefa;
- t.lamalefhamzabelowisolatedarabic = 0xfef9;
- t.lamalefisolatedarabic = 0xfefb;
- t.lamalefmaddaabovefinalarabic = 0xfef6;
- t.lamalefmaddaaboveisolatedarabic = 0xfef5;
- t.lamarabic = 0x0644;
- t.lambda = 0x03bb;
- t.lambdastroke = 0x019b;
- t.lamed = 0x05dc;
- t.lameddagesh = 0xfb3c;
- t.lameddageshhebrew = 0xfb3c;
- t.lamedhebrew = 0x05dc;
- t.lamfinalarabic = 0xfede;
- t.lamhahinitialarabic = 0xfcca;
- t.laminitialarabic = 0xfedf;
- t.lamjeeminitialarabic = 0xfcc9;
- t.lamkhahinitialarabic = 0xfccb;
- t.lamlamhehisolatedarabic = 0xfdf2;
- t.lammedialarabic = 0xfee0;
- t.lammeemhahinitialarabic = 0xfd88;
- t.lammeeminitialarabic = 0xfccc;
- t.largecircle = 0x25ef;
- t.lbar = 0x019a;
- t.lbelt = 0x026c;
- t.lbopomofo = 0x310c;
- t.lcaron = 0x013e;
- t.lcedilla = 0x013c;
- t.lcircle = 0x24db;
- t.lcircumflexbelow = 0x1e3d;
- t.lcommaaccent = 0x013c;
- t.ldot = 0x0140;
- t.ldotaccent = 0x0140;
- t.ldotbelow = 0x1e37;
- t.ldotbelowmacron = 0x1e39;
- t.leftangleabovecmb = 0x031a;
- t.lefttackbelowcmb = 0x0318;
- t.less = 0x003c;
- t.lessequal = 0x2264;
- t.lessequalorgreater = 0x22da;
- t.lessmonospace = 0xff1c;
- t.lessorequivalent = 0x2272;
- t.lessorgreater = 0x2276;
- t.lessoverequal = 0x2266;
- t.lesssmall = 0xfe64;
- t.lezh = 0x026e;
- t.lfblock = 0x258c;
- t.lhookretroflex = 0x026d;
- t.lira = 0x20a4;
- t.liwnarmenian = 0x056c;
- t.lj = 0x01c9;
- t.ljecyrillic = 0x0459;
- t.ll = 0xf6c0;
- t.lladeva = 0x0933;
- t.llagujarati = 0x0ab3;
- t.llinebelow = 0x1e3b;
- t.llladeva = 0x0934;
- t.llvocalicbengali = 0x09e1;
- t.llvocalicdeva = 0x0961;
- t.llvocalicvowelsignbengali = 0x09e3;
- t.llvocalicvowelsigndeva = 0x0963;
- t.lmiddletilde = 0x026b;
- t.lmonospace = 0xff4c;
- t.lmsquare = 0x33d0;
- t.lochulathai = 0x0e2c;
- t.logicaland = 0x2227;
- t.logicalnot = 0x00ac;
- t.logicalnotreversed = 0x2310;
- t.logicalor = 0x2228;
- t.lolingthai = 0x0e25;
- t.longs = 0x017f;
- t.lowlinecenterline = 0xfe4e;
- t.lowlinecmb = 0x0332;
- t.lowlinedashed = 0xfe4d;
- t.lozenge = 0x25ca;
- t.lparen = 0x24a7;
- t.lslash = 0x0142;
- t.lsquare = 0x2113;
- t.lsuperior = 0xf6ee;
- t.ltshade = 0x2591;
- t.luthai = 0x0e26;
- t.lvocalicbengali = 0x098c;
- t.lvocalicdeva = 0x090c;
- t.lvocalicvowelsignbengali = 0x09e2;
- t.lvocalicvowelsigndeva = 0x0962;
- t.lxsquare = 0x33d3;
- t.m = 0x006d;
- t.mabengali = 0x09ae;
- t.macron = 0x00af;
- t.macronbelowcmb = 0x0331;
- t.macroncmb = 0x0304;
- t.macronlowmod = 0x02cd;
- t.macronmonospace = 0xffe3;
- t.macute = 0x1e3f;
- t.madeva = 0x092e;
- t.magujarati = 0x0aae;
- t.magurmukhi = 0x0a2e;
- t.mahapakhhebrew = 0x05a4;
- t.mahapakhlefthebrew = 0x05a4;
- t.mahiragana = 0x307e;
- t.maichattawalowleftthai = 0xf895;
- t.maichattawalowrightthai = 0xf894;
- t.maichattawathai = 0x0e4b;
- t.maichattawaupperleftthai = 0xf893;
- t.maieklowleftthai = 0xf88c;
- t.maieklowrightthai = 0xf88b;
- t.maiekthai = 0x0e48;
- t.maiekupperleftthai = 0xf88a;
- t.maihanakatleftthai = 0xf884;
- t.maihanakatthai = 0x0e31;
- t.maitaikhuleftthai = 0xf889;
- t.maitaikhuthai = 0x0e47;
- t.maitholowleftthai = 0xf88f;
- t.maitholowrightthai = 0xf88e;
- t.maithothai = 0x0e49;
- t.maithoupperleftthai = 0xf88d;
- t.maitrilowleftthai = 0xf892;
- t.maitrilowrightthai = 0xf891;
- t.maitrithai = 0x0e4a;
- t.maitriupperleftthai = 0xf890;
- t.maiyamokthai = 0x0e46;
- t.makatakana = 0x30de;
- t.makatakanahalfwidth = 0xff8f;
- t.male = 0x2642;
- t.mansyonsquare = 0x3347;
- t.maqafhebrew = 0x05be;
- t.mars = 0x2642;
- t.masoracirclehebrew = 0x05af;
- t.masquare = 0x3383;
- t.mbopomofo = 0x3107;
- t.mbsquare = 0x33d4;
- t.mcircle = 0x24dc;
- t.mcubedsquare = 0x33a5;
- t.mdotaccent = 0x1e41;
- t.mdotbelow = 0x1e43;
- t.meemarabic = 0x0645;
- t.meemfinalarabic = 0xfee2;
- t.meeminitialarabic = 0xfee3;
- t.meemmedialarabic = 0xfee4;
- t.meemmeeminitialarabic = 0xfcd1;
- t.meemmeemisolatedarabic = 0xfc48;
- t.meetorusquare = 0x334d;
- t.mehiragana = 0x3081;
- t.meizierasquare = 0x337e;
- t.mekatakana = 0x30e1;
- t.mekatakanahalfwidth = 0xff92;
- t.mem = 0x05de;
- t.memdagesh = 0xfb3e;
- t.memdageshhebrew = 0xfb3e;
- t.memhebrew = 0x05de;
- t.menarmenian = 0x0574;
- t.merkhahebrew = 0x05a5;
- t.merkhakefulahebrew = 0x05a6;
- t.merkhakefulalefthebrew = 0x05a6;
- t.merkhalefthebrew = 0x05a5;
- t.mhook = 0x0271;
- t.mhzsquare = 0x3392;
- t.middledotkatakanahalfwidth = 0xff65;
- t.middot = 0x00b7;
- t.mieumacirclekorean = 0x3272;
- t.mieumaparenkorean = 0x3212;
- t.mieumcirclekorean = 0x3264;
- t.mieumkorean = 0x3141;
- t.mieumpansioskorean = 0x3170;
- t.mieumparenkorean = 0x3204;
- t.mieumpieupkorean = 0x316e;
- t.mieumsioskorean = 0x316f;
- t.mihiragana = 0x307f;
- t.mikatakana = 0x30df;
- t.mikatakanahalfwidth = 0xff90;
- t.minus = 0x2212;
- t.minusbelowcmb = 0x0320;
- t.minuscircle = 0x2296;
- t.minusmod = 0x02d7;
- t.minusplus = 0x2213;
- t.minute = 0x2032;
- t.miribaarusquare = 0x334a;
- t.mirisquare = 0x3349;
- t.mlonglegturned = 0x0270;
- t.mlsquare = 0x3396;
- t.mmcubedsquare = 0x33a3;
- t.mmonospace = 0xff4d;
- t.mmsquaredsquare = 0x339f;
- t.mohiragana = 0x3082;
- t.mohmsquare = 0x33c1;
- t.mokatakana = 0x30e2;
- t.mokatakanahalfwidth = 0xff93;
- t.molsquare = 0x33d6;
- t.momathai = 0x0e21;
- t.moverssquare = 0x33a7;
- t.moverssquaredsquare = 0x33a8;
- t.mparen = 0x24a8;
- t.mpasquare = 0x33ab;
- t.mssquare = 0x33b3;
- t.msuperior = 0xf6ef;
- t.mturned = 0x026f;
- t.mu = 0x00b5;
- t.mu1 = 0x00b5;
- t.muasquare = 0x3382;
- t.muchgreater = 0x226b;
- t.muchless = 0x226a;
- t.mufsquare = 0x338c;
- t.mugreek = 0x03bc;
- t.mugsquare = 0x338d;
- t.muhiragana = 0x3080;
- t.mukatakana = 0x30e0;
- t.mukatakanahalfwidth = 0xff91;
- t.mulsquare = 0x3395;
- t.multiply = 0x00d7;
- t.mumsquare = 0x339b;
- t.munahhebrew = 0x05a3;
- t.munahlefthebrew = 0x05a3;
- t.musicalnote = 0x266a;
- t.musicalnotedbl = 0x266b;
- t.musicflatsign = 0x266d;
- t.musicsharpsign = 0x266f;
- t.mussquare = 0x33b2;
- t.muvsquare = 0x33b6;
- t.muwsquare = 0x33bc;
- t.mvmegasquare = 0x33b9;
- t.mvsquare = 0x33b7;
- t.mwmegasquare = 0x33bf;
- t.mwsquare = 0x33bd;
- t.n = 0x006e;
- t.nabengali = 0x09a8;
- t.nabla = 0x2207;
- t.nacute = 0x0144;
- t.nadeva = 0x0928;
- t.nagujarati = 0x0aa8;
- t.nagurmukhi = 0x0a28;
- t.nahiragana = 0x306a;
- t.nakatakana = 0x30ca;
- t.nakatakanahalfwidth = 0xff85;
- t.napostrophe = 0x0149;
- t.nasquare = 0x3381;
- t.nbopomofo = 0x310b;
- t.nbspace = 0x00a0;
- t.ncaron = 0x0148;
- t.ncedilla = 0x0146;
- t.ncircle = 0x24dd;
- t.ncircumflexbelow = 0x1e4b;
- t.ncommaaccent = 0x0146;
- t.ndotaccent = 0x1e45;
- t.ndotbelow = 0x1e47;
- t.nehiragana = 0x306d;
- t.nekatakana = 0x30cd;
- t.nekatakanahalfwidth = 0xff88;
- t.newsheqelsign = 0x20aa;
- t.nfsquare = 0x338b;
- t.ngabengali = 0x0999;
- t.ngadeva = 0x0919;
- t.ngagujarati = 0x0a99;
- t.ngagurmukhi = 0x0a19;
- t.ngonguthai = 0x0e07;
- t.nhiragana = 0x3093;
- t.nhookleft = 0x0272;
- t.nhookretroflex = 0x0273;
- t.nieunacirclekorean = 0x326f;
- t.nieunaparenkorean = 0x320f;
- t.nieuncieuckorean = 0x3135;
- t.nieuncirclekorean = 0x3261;
- t.nieunhieuhkorean = 0x3136;
- t.nieunkorean = 0x3134;
- t.nieunpansioskorean = 0x3168;
- t.nieunparenkorean = 0x3201;
- t.nieunsioskorean = 0x3167;
- t.nieuntikeutkorean = 0x3166;
- t.nihiragana = 0x306b;
- t.nikatakana = 0x30cb;
- t.nikatakanahalfwidth = 0xff86;
- t.nikhahitleftthai = 0xf899;
- t.nikhahitthai = 0x0e4d;
- t.nine = 0x0039;
- t.ninearabic = 0x0669;
- t.ninebengali = 0x09ef;
- t.ninecircle = 0x2468;
- t.ninecircleinversesansserif = 0x2792;
- t.ninedeva = 0x096f;
- t.ninegujarati = 0x0aef;
- t.ninegurmukhi = 0x0a6f;
- t.ninehackarabic = 0x0669;
- t.ninehangzhou = 0x3029;
- t.nineideographicparen = 0x3228;
- t.nineinferior = 0x2089;
- t.ninemonospace = 0xff19;
- t.nineoldstyle = 0xf739;
- t.nineparen = 0x247c;
- t.nineperiod = 0x2490;
- t.ninepersian = 0x06f9;
- t.nineroman = 0x2178;
- t.ninesuperior = 0x2079;
- t.nineteencircle = 0x2472;
- t.nineteenparen = 0x2486;
- t.nineteenperiod = 0x249a;
- t.ninethai = 0x0e59;
- t.nj = 0x01cc;
- t.njecyrillic = 0x045a;
- t.nkatakana = 0x30f3;
- t.nkatakanahalfwidth = 0xff9d;
- t.nlegrightlong = 0x019e;
- t.nlinebelow = 0x1e49;
- t.nmonospace = 0xff4e;
- t.nmsquare = 0x339a;
- t.nnabengali = 0x09a3;
- t.nnadeva = 0x0923;
- t.nnagujarati = 0x0aa3;
- t.nnagurmukhi = 0x0a23;
- t.nnnadeva = 0x0929;
- t.nohiragana = 0x306e;
- t.nokatakana = 0x30ce;
- t.nokatakanahalfwidth = 0xff89;
- t.nonbreakingspace = 0x00a0;
- t.nonenthai = 0x0e13;
- t.nonuthai = 0x0e19;
- t.noonarabic = 0x0646;
- t.noonfinalarabic = 0xfee6;
- t.noonghunnaarabic = 0x06ba;
- t.noonghunnafinalarabic = 0xfb9f;
- t.nooninitialarabic = 0xfee7;
- t.noonjeeminitialarabic = 0xfcd2;
- t.noonjeemisolatedarabic = 0xfc4b;
- t.noonmedialarabic = 0xfee8;
- t.noonmeeminitialarabic = 0xfcd5;
- t.noonmeemisolatedarabic = 0xfc4e;
- t.noonnoonfinalarabic = 0xfc8d;
- t.notcontains = 0x220c;
- t.notelement = 0x2209;
- t.notelementof = 0x2209;
- t.notequal = 0x2260;
- t.notgreater = 0x226f;
- t.notgreaternorequal = 0x2271;
- t.notgreaternorless = 0x2279;
- t.notidentical = 0x2262;
- t.notless = 0x226e;
- t.notlessnorequal = 0x2270;
- t.notparallel = 0x2226;
- t.notprecedes = 0x2280;
- t.notsubset = 0x2284;
- t.notsucceeds = 0x2281;
- t.notsuperset = 0x2285;
- t.nowarmenian = 0x0576;
- t.nparen = 0x24a9;
- t.nssquare = 0x33b1;
- t.nsuperior = 0x207f;
- t.ntilde = 0x00f1;
- t.nu = 0x03bd;
- t.nuhiragana = 0x306c;
- t.nukatakana = 0x30cc;
- t.nukatakanahalfwidth = 0xff87;
- t.nuktabengali = 0x09bc;
- t.nuktadeva = 0x093c;
- t.nuktagujarati = 0x0abc;
- t.nuktagurmukhi = 0x0a3c;
- t.numbersign = 0x0023;
- t.numbersignmonospace = 0xff03;
- t.numbersignsmall = 0xfe5f;
- t.numeralsigngreek = 0x0374;
- t.numeralsignlowergreek = 0x0375;
- t.numero = 0x2116;
- t.nun = 0x05e0;
- t.nundagesh = 0xfb40;
- t.nundageshhebrew = 0xfb40;
- t.nunhebrew = 0x05e0;
- t.nvsquare = 0x33b5;
- t.nwsquare = 0x33bb;
- t.nyabengali = 0x099e;
- t.nyadeva = 0x091e;
- t.nyagujarati = 0x0a9e;
- t.nyagurmukhi = 0x0a1e;
- t.o = 0x006f;
- t.oacute = 0x00f3;
- t.oangthai = 0x0e2d;
- t.obarred = 0x0275;
- t.obarredcyrillic = 0x04e9;
- t.obarreddieresiscyrillic = 0x04eb;
- t.obengali = 0x0993;
- t.obopomofo = 0x311b;
- t.obreve = 0x014f;
- t.ocandradeva = 0x0911;
- t.ocandragujarati = 0x0a91;
- t.ocandravowelsigndeva = 0x0949;
- t.ocandravowelsigngujarati = 0x0ac9;
- t.ocaron = 0x01d2;
- t.ocircle = 0x24de;
- t.ocircumflex = 0x00f4;
- t.ocircumflexacute = 0x1ed1;
- t.ocircumflexdotbelow = 0x1ed9;
- t.ocircumflexgrave = 0x1ed3;
- t.ocircumflexhookabove = 0x1ed5;
- t.ocircumflextilde = 0x1ed7;
- t.ocyrillic = 0x043e;
- t.odblacute = 0x0151;
- t.odblgrave = 0x020d;
- t.odeva = 0x0913;
- t.odieresis = 0x00f6;
- t.odieresiscyrillic = 0x04e7;
- t.odotbelow = 0x1ecd;
- t.oe = 0x0153;
- t.oekorean = 0x315a;
- t.ogonek = 0x02db;
- t.ogonekcmb = 0x0328;
- t.ograve = 0x00f2;
- t.ogujarati = 0x0a93;
- t.oharmenian = 0x0585;
- t.ohiragana = 0x304a;
- t.ohookabove = 0x1ecf;
- t.ohorn = 0x01a1;
- t.ohornacute = 0x1edb;
- t.ohorndotbelow = 0x1ee3;
- t.ohorngrave = 0x1edd;
- t.ohornhookabove = 0x1edf;
- t.ohorntilde = 0x1ee1;
- t.ohungarumlaut = 0x0151;
- t.oi = 0x01a3;
- t.oinvertedbreve = 0x020f;
- t.okatakana = 0x30aa;
- t.okatakanahalfwidth = 0xff75;
- t.okorean = 0x3157;
- t.olehebrew = 0x05ab;
- t.omacron = 0x014d;
- t.omacronacute = 0x1e53;
- t.omacrongrave = 0x1e51;
- t.omdeva = 0x0950;
- t.omega = 0x03c9;
- t.omega1 = 0x03d6;
- t.omegacyrillic = 0x0461;
- t.omegalatinclosed = 0x0277;
- t.omegaroundcyrillic = 0x047b;
- t.omegatitlocyrillic = 0x047d;
- t.omegatonos = 0x03ce;
- t.omgujarati = 0x0ad0;
- t.omicron = 0x03bf;
- t.omicrontonos = 0x03cc;
- t.omonospace = 0xff4f;
- t.one = 0x0031;
- t.onearabic = 0x0661;
- t.onebengali = 0x09e7;
- t.onecircle = 0x2460;
- t.onecircleinversesansserif = 0x278a;
- t.onedeva = 0x0967;
- t.onedotenleader = 0x2024;
- t.oneeighth = 0x215b;
- t.onefitted = 0xf6dc;
- t.onegujarati = 0x0ae7;
- t.onegurmukhi = 0x0a67;
- t.onehackarabic = 0x0661;
- t.onehalf = 0x00bd;
- t.onehangzhou = 0x3021;
- t.oneideographicparen = 0x3220;
- t.oneinferior = 0x2081;
- t.onemonospace = 0xff11;
- t.onenumeratorbengali = 0x09f4;
- t.oneoldstyle = 0xf731;
- t.oneparen = 0x2474;
- t.oneperiod = 0x2488;
- t.onepersian = 0x06f1;
- t.onequarter = 0x00bc;
- t.oneroman = 0x2170;
- t.onesuperior = 0x00b9;
- t.onethai = 0x0e51;
- t.onethird = 0x2153;
- t.oogonek = 0x01eb;
- t.oogonekmacron = 0x01ed;
- t.oogurmukhi = 0x0a13;
- t.oomatragurmukhi = 0x0a4b;
- t.oopen = 0x0254;
- t.oparen = 0x24aa;
- t.openbullet = 0x25e6;
- t.option = 0x2325;
- t.ordfeminine = 0x00aa;
- t.ordmasculine = 0x00ba;
- t.orthogonal = 0x221f;
- t.oshortdeva = 0x0912;
- t.oshortvowelsigndeva = 0x094a;
- t.oslash = 0x00f8;
- t.oslashacute = 0x01ff;
- t.osmallhiragana = 0x3049;
- t.osmallkatakana = 0x30a9;
- t.osmallkatakanahalfwidth = 0xff6b;
- t.ostrokeacute = 0x01ff;
- t.osuperior = 0xf6f0;
- t.otcyrillic = 0x047f;
- t.otilde = 0x00f5;
- t.otildeacute = 0x1e4d;
- t.otildedieresis = 0x1e4f;
- t.oubopomofo = 0x3121;
- t.overline = 0x203e;
- t.overlinecenterline = 0xfe4a;
- t.overlinecmb = 0x0305;
- t.overlinedashed = 0xfe49;
- t.overlinedblwavy = 0xfe4c;
- t.overlinewavy = 0xfe4b;
- t.overscore = 0x00af;
- t.ovowelsignbengali = 0x09cb;
- t.ovowelsigndeva = 0x094b;
- t.ovowelsigngujarati = 0x0acb;
- t.p = 0x0070;
- t.paampssquare = 0x3380;
- t.paasentosquare = 0x332b;
- t.pabengali = 0x09aa;
- t.pacute = 0x1e55;
- t.padeva = 0x092a;
- t.pagedown = 0x21df;
- t.pageup = 0x21de;
- t.pagujarati = 0x0aaa;
- t.pagurmukhi = 0x0a2a;
- t.pahiragana = 0x3071;
- t.paiyannoithai = 0x0e2f;
- t.pakatakana = 0x30d1;
- t.palatalizationcyrilliccmb = 0x0484;
- t.palochkacyrillic = 0x04c0;
- t.pansioskorean = 0x317f;
- t.paragraph = 0x00b6;
- t.parallel = 0x2225;
- t.parenleft = 0x0028;
- t.parenleftaltonearabic = 0xfd3e;
- t.parenleftbt = 0xf8ed;
- t.parenleftex = 0xf8ec;
- t.parenleftinferior = 0x208d;
- t.parenleftmonospace = 0xff08;
- t.parenleftsmall = 0xfe59;
- t.parenleftsuperior = 0x207d;
- t.parenlefttp = 0xf8eb;
- t.parenleftvertical = 0xfe35;
- t.parenright = 0x0029;
- t.parenrightaltonearabic = 0xfd3f;
- t.parenrightbt = 0xf8f8;
- t.parenrightex = 0xf8f7;
- t.parenrightinferior = 0x208e;
- t.parenrightmonospace = 0xff09;
- t.parenrightsmall = 0xfe5a;
- t.parenrightsuperior = 0x207e;
- t.parenrighttp = 0xf8f6;
- t.parenrightvertical = 0xfe36;
- t.partialdiff = 0x2202;
- t.paseqhebrew = 0x05c0;
- t.pashtahebrew = 0x0599;
- t.pasquare = 0x33a9;
- t.patah = 0x05b7;
- t.patah11 = 0x05b7;
- t.patah1d = 0x05b7;
- t.patah2a = 0x05b7;
- t.patahhebrew = 0x05b7;
- t.patahnarrowhebrew = 0x05b7;
- t.patahquarterhebrew = 0x05b7;
- t.patahwidehebrew = 0x05b7;
- t.pazerhebrew = 0x05a1;
- t.pbopomofo = 0x3106;
- t.pcircle = 0x24df;
- t.pdotaccent = 0x1e57;
- t.pe = 0x05e4;
- t.pecyrillic = 0x043f;
- t.pedagesh = 0xfb44;
- t.pedageshhebrew = 0xfb44;
- t.peezisquare = 0x333b;
- t.pefinaldageshhebrew = 0xfb43;
- t.peharabic = 0x067e;
- t.peharmenian = 0x057a;
- t.pehebrew = 0x05e4;
- t.pehfinalarabic = 0xfb57;
- t.pehinitialarabic = 0xfb58;
- t.pehiragana = 0x307a;
- t.pehmedialarabic = 0xfb59;
- t.pekatakana = 0x30da;
- t.pemiddlehookcyrillic = 0x04a7;
- t.perafehebrew = 0xfb4e;
- t.percent = 0x0025;
- t.percentarabic = 0x066a;
- t.percentmonospace = 0xff05;
- t.percentsmall = 0xfe6a;
- t.period = 0x002e;
- t.periodarmenian = 0x0589;
- t.periodcentered = 0x00b7;
- t.periodhalfwidth = 0xff61;
- t.periodinferior = 0xf6e7;
- t.periodmonospace = 0xff0e;
- t.periodsmall = 0xfe52;
- t.periodsuperior = 0xf6e8;
- t.perispomenigreekcmb = 0x0342;
- t.perpendicular = 0x22a5;
- t.perthousand = 0x2030;
- t.peseta = 0x20a7;
- t.pfsquare = 0x338a;
- t.phabengali = 0x09ab;
- t.phadeva = 0x092b;
- t.phagujarati = 0x0aab;
- t.phagurmukhi = 0x0a2b;
- t.phi = 0x03c6;
- t.phi1 = 0x03d5;
- t.phieuphacirclekorean = 0x327a;
- t.phieuphaparenkorean = 0x321a;
- t.phieuphcirclekorean = 0x326c;
- t.phieuphkorean = 0x314d;
- t.phieuphparenkorean = 0x320c;
- t.philatin = 0x0278;
- t.phinthuthai = 0x0e3a;
- t.phisymbolgreek = 0x03d5;
- t.phook = 0x01a5;
- t.phophanthai = 0x0e1e;
- t.phophungthai = 0x0e1c;
- t.phosamphaothai = 0x0e20;
- t.pi = 0x03c0;
- t.pieupacirclekorean = 0x3273;
- t.pieupaparenkorean = 0x3213;
- t.pieupcieuckorean = 0x3176;
- t.pieupcirclekorean = 0x3265;
- t.pieupkiyeokkorean = 0x3172;
- t.pieupkorean = 0x3142;
- t.pieupparenkorean = 0x3205;
- t.pieupsioskiyeokkorean = 0x3174;
- t.pieupsioskorean = 0x3144;
- t.pieupsiostikeutkorean = 0x3175;
- t.pieupthieuthkorean = 0x3177;
- t.pieuptikeutkorean = 0x3173;
- t.pihiragana = 0x3074;
- t.pikatakana = 0x30d4;
- t.pisymbolgreek = 0x03d6;
- t.piwrarmenian = 0x0583;
- t.plus = 0x002b;
- t.plusbelowcmb = 0x031f;
- t.pluscircle = 0x2295;
- t.plusminus = 0x00b1;
- t.plusmod = 0x02d6;
- t.plusmonospace = 0xff0b;
- t.plussmall = 0xfe62;
- t.plussuperior = 0x207a;
- t.pmonospace = 0xff50;
- t.pmsquare = 0x33d8;
- t.pohiragana = 0x307d;
- t.pointingindexdownwhite = 0x261f;
- t.pointingindexleftwhite = 0x261c;
- t.pointingindexrightwhite = 0x261e;
- t.pointingindexupwhite = 0x261d;
- t.pokatakana = 0x30dd;
- t.poplathai = 0x0e1b;
- t.postalmark = 0x3012;
- t.postalmarkface = 0x3020;
- t.pparen = 0x24ab;
- t.precedes = 0x227a;
- t.prescription = 0x211e;
- t.primemod = 0x02b9;
- t.primereversed = 0x2035;
- t.product = 0x220f;
- t.projective = 0x2305;
- t.prolongedkana = 0x30fc;
- t.propellor = 0x2318;
- t.propersubset = 0x2282;
- t.propersuperset = 0x2283;
- t.proportion = 0x2237;
- t.proportional = 0x221d;
- t.psi = 0x03c8;
- t.psicyrillic = 0x0471;
- t.psilipneumatacyrilliccmb = 0x0486;
- t.pssquare = 0x33b0;
- t.puhiragana = 0x3077;
- t.pukatakana = 0x30d7;
- t.pvsquare = 0x33b4;
- t.pwsquare = 0x33ba;
- t.q = 0x0071;
- t.qadeva = 0x0958;
- t.qadmahebrew = 0x05a8;
- t.qafarabic = 0x0642;
- t.qaffinalarabic = 0xfed6;
- t.qafinitialarabic = 0xfed7;
- t.qafmedialarabic = 0xfed8;
- t.qamats = 0x05b8;
- t.qamats10 = 0x05b8;
- t.qamats1a = 0x05b8;
- t.qamats1c = 0x05b8;
- t.qamats27 = 0x05b8;
- t.qamats29 = 0x05b8;
- t.qamats33 = 0x05b8;
- t.qamatsde = 0x05b8;
- t.qamatshebrew = 0x05b8;
- t.qamatsnarrowhebrew = 0x05b8;
- t.qamatsqatanhebrew = 0x05b8;
- t.qamatsqatannarrowhebrew = 0x05b8;
- t.qamatsqatanquarterhebrew = 0x05b8;
- t.qamatsqatanwidehebrew = 0x05b8;
- t.qamatsquarterhebrew = 0x05b8;
- t.qamatswidehebrew = 0x05b8;
- t.qarneyparahebrew = 0x059f;
- t.qbopomofo = 0x3111;
- t.qcircle = 0x24e0;
- t.qhook = 0x02a0;
- t.qmonospace = 0xff51;
- t.qof = 0x05e7;
- t.qofdagesh = 0xfb47;
- t.qofdageshhebrew = 0xfb47;
- t.qofhebrew = 0x05e7;
- t.qparen = 0x24ac;
- t.quarternote = 0x2669;
- t.qubuts = 0x05bb;
- t.qubuts18 = 0x05bb;
- t.qubuts25 = 0x05bb;
- t.qubuts31 = 0x05bb;
- t.qubutshebrew = 0x05bb;
- t.qubutsnarrowhebrew = 0x05bb;
- t.qubutsquarterhebrew = 0x05bb;
- t.qubutswidehebrew = 0x05bb;
- t.question = 0x003f;
- t.questionarabic = 0x061f;
- t.questionarmenian = 0x055e;
- t.questiondown = 0x00bf;
- t.questiondownsmall = 0xf7bf;
- t.questiongreek = 0x037e;
- t.questionmonospace = 0xff1f;
- t.questionsmall = 0xf73f;
- t.quotedbl = 0x0022;
- t.quotedblbase = 0x201e;
- t.quotedblleft = 0x201c;
- t.quotedblmonospace = 0xff02;
- t.quotedblprime = 0x301e;
- t.quotedblprimereversed = 0x301d;
- t.quotedblright = 0x201d;
- t.quoteleft = 0x2018;
- t.quoteleftreversed = 0x201b;
- t.quotereversed = 0x201b;
- t.quoteright = 0x2019;
- t.quoterightn = 0x0149;
- t.quotesinglbase = 0x201a;
- t.quotesingle = 0x0027;
- t.quotesinglemonospace = 0xff07;
- t.r = 0x0072;
- t.raarmenian = 0x057c;
- t.rabengali = 0x09b0;
- t.racute = 0x0155;
- t.radeva = 0x0930;
- t.radical = 0x221a;
- t.radicalex = 0xf8e5;
- t.radoverssquare = 0x33ae;
- t.radoverssquaredsquare = 0x33af;
- t.radsquare = 0x33ad;
- t.rafe = 0x05bf;
- t.rafehebrew = 0x05bf;
- t.ragujarati = 0x0ab0;
- t.ragurmukhi = 0x0a30;
- t.rahiragana = 0x3089;
- t.rakatakana = 0x30e9;
- t.rakatakanahalfwidth = 0xff97;
- t.ralowerdiagonalbengali = 0x09f1;
- t.ramiddlediagonalbengali = 0x09f0;
- t.ramshorn = 0x0264;
- t.ratio = 0x2236;
- t.rbopomofo = 0x3116;
- t.rcaron = 0x0159;
- t.rcedilla = 0x0157;
- t.rcircle = 0x24e1;
- t.rcommaaccent = 0x0157;
- t.rdblgrave = 0x0211;
- t.rdotaccent = 0x1e59;
- t.rdotbelow = 0x1e5b;
- t.rdotbelowmacron = 0x1e5d;
- t.referencemark = 0x203b;
- t.reflexsubset = 0x2286;
- t.reflexsuperset = 0x2287;
- t.registered = 0x00ae;
- t.registersans = 0xf8e8;
- t.registerserif = 0xf6da;
- t.reharabic = 0x0631;
- t.reharmenian = 0x0580;
- t.rehfinalarabic = 0xfeae;
- t.rehiragana = 0x308c;
- t.rekatakana = 0x30ec;
- t.rekatakanahalfwidth = 0xff9a;
- t.resh = 0x05e8;
- t.reshdageshhebrew = 0xfb48;
- t.reshhebrew = 0x05e8;
- t.reversedtilde = 0x223d;
- t.reviahebrew = 0x0597;
- t.reviamugrashhebrew = 0x0597;
- t.revlogicalnot = 0x2310;
- t.rfishhook = 0x027e;
- t.rfishhookreversed = 0x027f;
- t.rhabengali = 0x09dd;
- t.rhadeva = 0x095d;
- t.rho = 0x03c1;
- t.rhook = 0x027d;
- t.rhookturned = 0x027b;
- t.rhookturnedsuperior = 0x02b5;
- t.rhosymbolgreek = 0x03f1;
- t.rhotichookmod = 0x02de;
- t.rieulacirclekorean = 0x3271;
- t.rieulaparenkorean = 0x3211;
- t.rieulcirclekorean = 0x3263;
- t.rieulhieuhkorean = 0x3140;
- t.rieulkiyeokkorean = 0x313a;
- t.rieulkiyeoksioskorean = 0x3169;
- t.rieulkorean = 0x3139;
- t.rieulmieumkorean = 0x313b;
- t.rieulpansioskorean = 0x316c;
- t.rieulparenkorean = 0x3203;
- t.rieulphieuphkorean = 0x313f;
- t.rieulpieupkorean = 0x313c;
- t.rieulpieupsioskorean = 0x316b;
- t.rieulsioskorean = 0x313d;
- t.rieulthieuthkorean = 0x313e;
- t.rieultikeutkorean = 0x316a;
- t.rieulyeorinhieuhkorean = 0x316d;
- t.rightangle = 0x221f;
- t.righttackbelowcmb = 0x0319;
- t.righttriangle = 0x22bf;
- t.rihiragana = 0x308a;
- t.rikatakana = 0x30ea;
- t.rikatakanahalfwidth = 0xff98;
- t.ring = 0x02da;
- t.ringbelowcmb = 0x0325;
- t.ringcmb = 0x030a;
- t.ringhalfleft = 0x02bf;
- t.ringhalfleftarmenian = 0x0559;
- t.ringhalfleftbelowcmb = 0x031c;
- t.ringhalfleftcentered = 0x02d3;
- t.ringhalfright = 0x02be;
- t.ringhalfrightbelowcmb = 0x0339;
- t.ringhalfrightcentered = 0x02d2;
- t.rinvertedbreve = 0x0213;
- t.rittorusquare = 0x3351;
- t.rlinebelow = 0x1e5f;
- t.rlongleg = 0x027c;
- t.rlonglegturned = 0x027a;
- t.rmonospace = 0xff52;
- t.rohiragana = 0x308d;
- t.rokatakana = 0x30ed;
- t.rokatakanahalfwidth = 0xff9b;
- t.roruathai = 0x0e23;
- t.rparen = 0x24ad;
- t.rrabengali = 0x09dc;
- t.rradeva = 0x0931;
- t.rragurmukhi = 0x0a5c;
- t.rreharabic = 0x0691;
- t.rrehfinalarabic = 0xfb8d;
- t.rrvocalicbengali = 0x09e0;
- t.rrvocalicdeva = 0x0960;
- t.rrvocalicgujarati = 0x0ae0;
- t.rrvocalicvowelsignbengali = 0x09c4;
- t.rrvocalicvowelsigndeva = 0x0944;
- t.rrvocalicvowelsigngujarati = 0x0ac4;
- t.rsuperior = 0xf6f1;
- t.rtblock = 0x2590;
- t.rturned = 0x0279;
- t.rturnedsuperior = 0x02b4;
- t.ruhiragana = 0x308b;
- t.rukatakana = 0x30eb;
- t.rukatakanahalfwidth = 0xff99;
- t.rupeemarkbengali = 0x09f2;
- t.rupeesignbengali = 0x09f3;
- t.rupiah = 0xf6dd;
- t.ruthai = 0x0e24;
- t.rvocalicbengali = 0x098b;
- t.rvocalicdeva = 0x090b;
- t.rvocalicgujarati = 0x0a8b;
- t.rvocalicvowelsignbengali = 0x09c3;
- t.rvocalicvowelsigndeva = 0x0943;
- t.rvocalicvowelsigngujarati = 0x0ac3;
- t.s = 0x0073;
- t.sabengali = 0x09b8;
- t.sacute = 0x015b;
- t.sacutedotaccent = 0x1e65;
- t.sadarabic = 0x0635;
- t.sadeva = 0x0938;
- t.sadfinalarabic = 0xfeba;
- t.sadinitialarabic = 0xfebb;
- t.sadmedialarabic = 0xfebc;
- t.sagujarati = 0x0ab8;
- t.sagurmukhi = 0x0a38;
- t.sahiragana = 0x3055;
- t.sakatakana = 0x30b5;
- t.sakatakanahalfwidth = 0xff7b;
- t.sallallahoualayhewasallamarabic = 0xfdfa;
- t.samekh = 0x05e1;
- t.samekhdagesh = 0xfb41;
- t.samekhdageshhebrew = 0xfb41;
- t.samekhhebrew = 0x05e1;
- t.saraaathai = 0x0e32;
- t.saraaethai = 0x0e41;
- t.saraaimaimalaithai = 0x0e44;
- t.saraaimaimuanthai = 0x0e43;
- t.saraamthai = 0x0e33;
- t.saraathai = 0x0e30;
- t.saraethai = 0x0e40;
- t.saraiileftthai = 0xf886;
- t.saraiithai = 0x0e35;
- t.saraileftthai = 0xf885;
- t.saraithai = 0x0e34;
- t.saraothai = 0x0e42;
- t.saraueeleftthai = 0xf888;
- t.saraueethai = 0x0e37;
- t.saraueleftthai = 0xf887;
- t.sarauethai = 0x0e36;
- t.sarauthai = 0x0e38;
- t.sarauuthai = 0x0e39;
- t.sbopomofo = 0x3119;
- t.scaron = 0x0161;
- t.scarondotaccent = 0x1e67;
- t.scedilla = 0x015f;
- t.schwa = 0x0259;
- t.schwacyrillic = 0x04d9;
- t.schwadieresiscyrillic = 0x04db;
- t.schwahook = 0x025a;
- t.scircle = 0x24e2;
- t.scircumflex = 0x015d;
- t.scommaaccent = 0x0219;
- t.sdotaccent = 0x1e61;
- t.sdotbelow = 0x1e63;
- t.sdotbelowdotaccent = 0x1e69;
- t.seagullbelowcmb = 0x033c;
- t.second = 0x2033;
- t.secondtonechinese = 0x02ca;
- t.section = 0x00a7;
- t.seenarabic = 0x0633;
- t.seenfinalarabic = 0xfeb2;
- t.seeninitialarabic = 0xfeb3;
- t.seenmedialarabic = 0xfeb4;
- t.segol = 0x05b6;
- t.segol13 = 0x05b6;
- t.segol1f = 0x05b6;
- t.segol2c = 0x05b6;
- t.segolhebrew = 0x05b6;
- t.segolnarrowhebrew = 0x05b6;
- t.segolquarterhebrew = 0x05b6;
- t.segoltahebrew = 0x0592;
- t.segolwidehebrew = 0x05b6;
- t.seharmenian = 0x057d;
- t.sehiragana = 0x305b;
- t.sekatakana = 0x30bb;
- t.sekatakanahalfwidth = 0xff7e;
- t.semicolon = 0x003b;
- t.semicolonarabic = 0x061b;
- t.semicolonmonospace = 0xff1b;
- t.semicolonsmall = 0xfe54;
- t.semivoicedmarkkana = 0x309c;
- t.semivoicedmarkkanahalfwidth = 0xff9f;
- t.sentisquare = 0x3322;
- t.sentosquare = 0x3323;
- t.seven = 0x0037;
- t.sevenarabic = 0x0667;
- t.sevenbengali = 0x09ed;
- t.sevencircle = 0x2466;
- t.sevencircleinversesansserif = 0x2790;
- t.sevendeva = 0x096d;
- t.seveneighths = 0x215e;
- t.sevengujarati = 0x0aed;
- t.sevengurmukhi = 0x0a6d;
- t.sevenhackarabic = 0x0667;
- t.sevenhangzhou = 0x3027;
- t.sevenideographicparen = 0x3226;
- t.seveninferior = 0x2087;
- t.sevenmonospace = 0xff17;
- t.sevenoldstyle = 0xf737;
- t.sevenparen = 0x247a;
- t.sevenperiod = 0x248e;
- t.sevenpersian = 0x06f7;
- t.sevenroman = 0x2176;
- t.sevensuperior = 0x2077;
- t.seventeencircle = 0x2470;
- t.seventeenparen = 0x2484;
- t.seventeenperiod = 0x2498;
- t.seventhai = 0x0e57;
- t.sfthyphen = 0x00ad;
- t.shaarmenian = 0x0577;
- t.shabengali = 0x09b6;
- t.shacyrillic = 0x0448;
- t.shaddaarabic = 0x0651;
- t.shaddadammaarabic = 0xfc61;
- t.shaddadammatanarabic = 0xfc5e;
- t.shaddafathaarabic = 0xfc60;
- t.shaddakasraarabic = 0xfc62;
- t.shaddakasratanarabic = 0xfc5f;
- t.shade = 0x2592;
- t.shadedark = 0x2593;
- t.shadelight = 0x2591;
- t.shademedium = 0x2592;
- t.shadeva = 0x0936;
- t.shagujarati = 0x0ab6;
- t.shagurmukhi = 0x0a36;
- t.shalshelethebrew = 0x0593;
- t.shbopomofo = 0x3115;
- t.shchacyrillic = 0x0449;
- t.sheenarabic = 0x0634;
- t.sheenfinalarabic = 0xfeb6;
- t.sheeninitialarabic = 0xfeb7;
- t.sheenmedialarabic = 0xfeb8;
- t.sheicoptic = 0x03e3;
- t.sheqel = 0x20aa;
- t.sheqelhebrew = 0x20aa;
- t.sheva = 0x05b0;
- t.sheva115 = 0x05b0;
- t.sheva15 = 0x05b0;
- t.sheva22 = 0x05b0;
- t.sheva2e = 0x05b0;
- t.shevahebrew = 0x05b0;
- t.shevanarrowhebrew = 0x05b0;
- t.shevaquarterhebrew = 0x05b0;
- t.shevawidehebrew = 0x05b0;
- t.shhacyrillic = 0x04bb;
- t.shimacoptic = 0x03ed;
- t.shin = 0x05e9;
- t.shindagesh = 0xfb49;
- t.shindageshhebrew = 0xfb49;
- t.shindageshshindot = 0xfb2c;
- t.shindageshshindothebrew = 0xfb2c;
- t.shindageshsindot = 0xfb2d;
- t.shindageshsindothebrew = 0xfb2d;
- t.shindothebrew = 0x05c1;
- t.shinhebrew = 0x05e9;
- t.shinshindot = 0xfb2a;
- t.shinshindothebrew = 0xfb2a;
- t.shinsindot = 0xfb2b;
- t.shinsindothebrew = 0xfb2b;
- t.shook = 0x0282;
- t.sigma = 0x03c3;
- t.sigma1 = 0x03c2;
- t.sigmafinal = 0x03c2;
- t.sigmalunatesymbolgreek = 0x03f2;
- t.sihiragana = 0x3057;
- t.sikatakana = 0x30b7;
- t.sikatakanahalfwidth = 0xff7c;
- t.siluqhebrew = 0x05bd;
- t.siluqlefthebrew = 0x05bd;
- t.similar = 0x223c;
- t.sindothebrew = 0x05c2;
- t.siosacirclekorean = 0x3274;
- t.siosaparenkorean = 0x3214;
- t.sioscieuckorean = 0x317e;
- t.sioscirclekorean = 0x3266;
- t.sioskiyeokkorean = 0x317a;
- t.sioskorean = 0x3145;
- t.siosnieunkorean = 0x317b;
- t.siosparenkorean = 0x3206;
- t.siospieupkorean = 0x317d;
- t.siostikeutkorean = 0x317c;
- t.six = 0x0036;
- t.sixarabic = 0x0666;
- t.sixbengali = 0x09ec;
- t.sixcircle = 0x2465;
- t.sixcircleinversesansserif = 0x278f;
- t.sixdeva = 0x096c;
- t.sixgujarati = 0x0aec;
- t.sixgurmukhi = 0x0a6c;
- t.sixhackarabic = 0x0666;
- t.sixhangzhou = 0x3026;
- t.sixideographicparen = 0x3225;
- t.sixinferior = 0x2086;
- t.sixmonospace = 0xff16;
- t.sixoldstyle = 0xf736;
- t.sixparen = 0x2479;
- t.sixperiod = 0x248d;
- t.sixpersian = 0x06f6;
- t.sixroman = 0x2175;
- t.sixsuperior = 0x2076;
- t.sixteencircle = 0x246f;
- t.sixteencurrencydenominatorbengali = 0x09f9;
- t.sixteenparen = 0x2483;
- t.sixteenperiod = 0x2497;
- t.sixthai = 0x0e56;
- t.slash = 0x002f;
- t.slashmonospace = 0xff0f;
- t.slong = 0x017f;
- t.slongdotaccent = 0x1e9b;
- t.smileface = 0x263a;
- t.smonospace = 0xff53;
- t.sofpasuqhebrew = 0x05c3;
- t.softhyphen = 0x00ad;
- t.softsigncyrillic = 0x044c;
- t.sohiragana = 0x305d;
- t.sokatakana = 0x30bd;
- t.sokatakanahalfwidth = 0xff7f;
- t.soliduslongoverlaycmb = 0x0338;
- t.solidusshortoverlaycmb = 0x0337;
- t.sorusithai = 0x0e29;
- t.sosalathai = 0x0e28;
- t.sosothai = 0x0e0b;
- t.sosuathai = 0x0e2a;
- t.space = 0x0020;
- t.spacehackarabic = 0x0020;
- t.spade = 0x2660;
- t.spadesuitblack = 0x2660;
- t.spadesuitwhite = 0x2664;
- t.sparen = 0x24ae;
- t.squarebelowcmb = 0x033b;
- t.squarecc = 0x33c4;
- t.squarecm = 0x339d;
- t.squarediagonalcrosshatchfill = 0x25a9;
- t.squarehorizontalfill = 0x25a4;
- t.squarekg = 0x338f;
- t.squarekm = 0x339e;
- t.squarekmcapital = 0x33ce;
- t.squareln = 0x33d1;
- t.squarelog = 0x33d2;
- t.squaremg = 0x338e;
- t.squaremil = 0x33d5;
- t.squaremm = 0x339c;
- t.squaremsquared = 0x33a1;
- t.squareorthogonalcrosshatchfill = 0x25a6;
- t.squareupperlefttolowerrightfill = 0x25a7;
- t.squareupperrighttolowerleftfill = 0x25a8;
- t.squareverticalfill = 0x25a5;
- t.squarewhitewithsmallblack = 0x25a3;
- t.srsquare = 0x33db;
- t.ssabengali = 0x09b7;
- t.ssadeva = 0x0937;
- t.ssagujarati = 0x0ab7;
- t.ssangcieuckorean = 0x3149;
- t.ssanghieuhkorean = 0x3185;
- t.ssangieungkorean = 0x3180;
- t.ssangkiyeokkorean = 0x3132;
- t.ssangnieunkorean = 0x3165;
- t.ssangpieupkorean = 0x3143;
- t.ssangsioskorean = 0x3146;
- t.ssangtikeutkorean = 0x3138;
- t.ssuperior = 0xf6f2;
- t.sterling = 0x00a3;
- t.sterlingmonospace = 0xffe1;
- t.strokelongoverlaycmb = 0x0336;
- t.strokeshortoverlaycmb = 0x0335;
- t.subset = 0x2282;
- t.subsetnotequal = 0x228a;
- t.subsetorequal = 0x2286;
- t.succeeds = 0x227b;
- t.suchthat = 0x220b;
- t.suhiragana = 0x3059;
- t.sukatakana = 0x30b9;
- t.sukatakanahalfwidth = 0xff7d;
- t.sukunarabic = 0x0652;
- t.summation = 0x2211;
- t.sun = 0x263c;
- t.superset = 0x2283;
- t.supersetnotequal = 0x228b;
- t.supersetorequal = 0x2287;
- t.svsquare = 0x33dc;
- t.syouwaerasquare = 0x337c;
- t.t = 0x0074;
- t.tabengali = 0x09a4;
- t.tackdown = 0x22a4;
- t.tackleft = 0x22a3;
- t.tadeva = 0x0924;
- t.tagujarati = 0x0aa4;
- t.tagurmukhi = 0x0a24;
- t.taharabic = 0x0637;
- t.tahfinalarabic = 0xfec2;
- t.tahinitialarabic = 0xfec3;
- t.tahiragana = 0x305f;
- t.tahmedialarabic = 0xfec4;
- t.taisyouerasquare = 0x337d;
- t.takatakana = 0x30bf;
- t.takatakanahalfwidth = 0xff80;
- t.tatweelarabic = 0x0640;
- t.tau = 0x03c4;
- t.tav = 0x05ea;
- t.tavdages = 0xfb4a;
- t.tavdagesh = 0xfb4a;
- t.tavdageshhebrew = 0xfb4a;
- t.tavhebrew = 0x05ea;
- t.tbar = 0x0167;
- t.tbopomofo = 0x310a;
- t.tcaron = 0x0165;
- t.tccurl = 0x02a8;
- t.tcedilla = 0x0163;
- t.tcheharabic = 0x0686;
- t.tchehfinalarabic = 0xfb7b;
- t.tchehinitialarabic = 0xfb7c;
- t.tchehmedialarabic = 0xfb7d;
- t.tcircle = 0x24e3;
- t.tcircumflexbelow = 0x1e71;
- t.tcommaaccent = 0x0163;
- t.tdieresis = 0x1e97;
- t.tdotaccent = 0x1e6b;
- t.tdotbelow = 0x1e6d;
- t.tecyrillic = 0x0442;
- t.tedescendercyrillic = 0x04ad;
- t.teharabic = 0x062a;
- t.tehfinalarabic = 0xfe96;
- t.tehhahinitialarabic = 0xfca2;
- t.tehhahisolatedarabic = 0xfc0c;
- t.tehinitialarabic = 0xfe97;
- t.tehiragana = 0x3066;
- t.tehjeeminitialarabic = 0xfca1;
- t.tehjeemisolatedarabic = 0xfc0b;
- t.tehmarbutaarabic = 0x0629;
- t.tehmarbutafinalarabic = 0xfe94;
- t.tehmedialarabic = 0xfe98;
- t.tehmeeminitialarabic = 0xfca4;
- t.tehmeemisolatedarabic = 0xfc0e;
- t.tehnoonfinalarabic = 0xfc73;
- t.tekatakana = 0x30c6;
- t.tekatakanahalfwidth = 0xff83;
- t.telephone = 0x2121;
- t.telephoneblack = 0x260e;
- t.telishagedolahebrew = 0x05a0;
- t.telishaqetanahebrew = 0x05a9;
- t.tencircle = 0x2469;
- t.tenideographicparen = 0x3229;
- t.tenparen = 0x247d;
- t.tenperiod = 0x2491;
- t.tenroman = 0x2179;
- t.tesh = 0x02a7;
- t.tet = 0x05d8;
- t.tetdagesh = 0xfb38;
- t.tetdageshhebrew = 0xfb38;
- t.tethebrew = 0x05d8;
- t.tetsecyrillic = 0x04b5;
- t.tevirhebrew = 0x059b;
- t.tevirlefthebrew = 0x059b;
- t.thabengali = 0x09a5;
- t.thadeva = 0x0925;
- t.thagujarati = 0x0aa5;
- t.thagurmukhi = 0x0a25;
- t.thalarabic = 0x0630;
- t.thalfinalarabic = 0xfeac;
- t.thanthakhatlowleftthai = 0xf898;
- t.thanthakhatlowrightthai = 0xf897;
- t.thanthakhatthai = 0x0e4c;
- t.thanthakhatupperleftthai = 0xf896;
- t.theharabic = 0x062b;
- t.thehfinalarabic = 0xfe9a;
- t.thehinitialarabic = 0xfe9b;
- t.thehmedialarabic = 0xfe9c;
- t.thereexists = 0x2203;
- t.therefore = 0x2234;
- t.theta = 0x03b8;
- t.theta1 = 0x03d1;
- t.thetasymbolgreek = 0x03d1;
- t.thieuthacirclekorean = 0x3279;
- t.thieuthaparenkorean = 0x3219;
- t.thieuthcirclekorean = 0x326b;
- t.thieuthkorean = 0x314c;
- t.thieuthparenkorean = 0x320b;
- t.thirteencircle = 0x246c;
- t.thirteenparen = 0x2480;
- t.thirteenperiod = 0x2494;
- t.thonangmonthothai = 0x0e11;
- t.thook = 0x01ad;
- t.thophuthaothai = 0x0e12;
- t.thorn = 0x00fe;
- t.thothahanthai = 0x0e17;
- t.thothanthai = 0x0e10;
- t.thothongthai = 0x0e18;
- t.thothungthai = 0x0e16;
- t.thousandcyrillic = 0x0482;
- t.thousandsseparatorarabic = 0x066c;
- t.thousandsseparatorpersian = 0x066c;
- t.three = 0x0033;
- t.threearabic = 0x0663;
- t.threebengali = 0x09e9;
- t.threecircle = 0x2462;
- t.threecircleinversesansserif = 0x278c;
- t.threedeva = 0x0969;
- t.threeeighths = 0x215c;
- t.threegujarati = 0x0ae9;
- t.threegurmukhi = 0x0a69;
- t.threehackarabic = 0x0663;
- t.threehangzhou = 0x3023;
- t.threeideographicparen = 0x3222;
- t.threeinferior = 0x2083;
- t.threemonospace = 0xff13;
- t.threenumeratorbengali = 0x09f6;
- t.threeoldstyle = 0xf733;
- t.threeparen = 0x2476;
- t.threeperiod = 0x248a;
- t.threepersian = 0x06f3;
- t.threequarters = 0x00be;
- t.threequartersemdash = 0xf6de;
- t.threeroman = 0x2172;
- t.threesuperior = 0x00b3;
- t.threethai = 0x0e53;
- t.thzsquare = 0x3394;
- t.tihiragana = 0x3061;
- t.tikatakana = 0x30c1;
- t.tikatakanahalfwidth = 0xff81;
- t.tikeutacirclekorean = 0x3270;
- t.tikeutaparenkorean = 0x3210;
- t.tikeutcirclekorean = 0x3262;
- t.tikeutkorean = 0x3137;
- t.tikeutparenkorean = 0x3202;
- t.tilde = 0x02dc;
- t.tildebelowcmb = 0x0330;
- t.tildecmb = 0x0303;
- t.tildecomb = 0x0303;
- t.tildedoublecmb = 0x0360;
- t.tildeoperator = 0x223c;
- t.tildeoverlaycmb = 0x0334;
- t.tildeverticalcmb = 0x033e;
- t.timescircle = 0x2297;
- t.tipehahebrew = 0x0596;
- t.tipehalefthebrew = 0x0596;
- t.tippigurmukhi = 0x0a70;
- t.titlocyrilliccmb = 0x0483;
- t.tiwnarmenian = 0x057f;
- t.tlinebelow = 0x1e6f;
- t.tmonospace = 0xff54;
- t.toarmenian = 0x0569;
- t.tohiragana = 0x3068;
- t.tokatakana = 0x30c8;
- t.tokatakanahalfwidth = 0xff84;
- t.tonebarextrahighmod = 0x02e5;
- t.tonebarextralowmod = 0x02e9;
- t.tonebarhighmod = 0x02e6;
- t.tonebarlowmod = 0x02e8;
- t.tonebarmidmod = 0x02e7;
- t.tonefive = 0x01bd;
- t.tonesix = 0x0185;
- t.tonetwo = 0x01a8;
- t.tonos = 0x0384;
- t.tonsquare = 0x3327;
- t.topatakthai = 0x0e0f;
- t.tortoiseshellbracketleft = 0x3014;
- t.tortoiseshellbracketleftsmall = 0xfe5d;
- t.tortoiseshellbracketleftvertical = 0xfe39;
- t.tortoiseshellbracketright = 0x3015;
- t.tortoiseshellbracketrightsmall = 0xfe5e;
- t.tortoiseshellbracketrightvertical = 0xfe3a;
- t.totaothai = 0x0e15;
- t.tpalatalhook = 0x01ab;
- t.tparen = 0x24af;
- t.trademark = 0x2122;
- t.trademarksans = 0xf8ea;
- t.trademarkserif = 0xf6db;
- t.tretroflexhook = 0x0288;
- t.triagdn = 0x25bc;
- t.triaglf = 0x25c4;
- t.triagrt = 0x25ba;
- t.triagup = 0x25b2;
- t.ts = 0x02a6;
- t.tsadi = 0x05e6;
- t.tsadidagesh = 0xfb46;
- t.tsadidageshhebrew = 0xfb46;
- t.tsadihebrew = 0x05e6;
- t.tsecyrillic = 0x0446;
- t.tsere = 0x05b5;
- t.tsere12 = 0x05b5;
- t.tsere1e = 0x05b5;
- t.tsere2b = 0x05b5;
- t.tserehebrew = 0x05b5;
- t.tserenarrowhebrew = 0x05b5;
- t.tserequarterhebrew = 0x05b5;
- t.tserewidehebrew = 0x05b5;
- t.tshecyrillic = 0x045b;
- t.tsuperior = 0xf6f3;
- t.ttabengali = 0x099f;
- t.ttadeva = 0x091f;
- t.ttagujarati = 0x0a9f;
- t.ttagurmukhi = 0x0a1f;
- t.tteharabic = 0x0679;
- t.ttehfinalarabic = 0xfb67;
- t.ttehinitialarabic = 0xfb68;
- t.ttehmedialarabic = 0xfb69;
- t.tthabengali = 0x09a0;
- t.tthadeva = 0x0920;
- t.tthagujarati = 0x0aa0;
- t.tthagurmukhi = 0x0a20;
- t.tturned = 0x0287;
- t.tuhiragana = 0x3064;
- t.tukatakana = 0x30c4;
- t.tukatakanahalfwidth = 0xff82;
- t.tusmallhiragana = 0x3063;
- t.tusmallkatakana = 0x30c3;
- t.tusmallkatakanahalfwidth = 0xff6f;
- t.twelvecircle = 0x246b;
- t.twelveparen = 0x247f;
- t.twelveperiod = 0x2493;
- t.twelveroman = 0x217b;
- t.twentycircle = 0x2473;
- t.twentyhangzhou = 0x5344;
- t.twentyparen = 0x2487;
- t.twentyperiod = 0x249b;
- t.two = 0x0032;
- t.twoarabic = 0x0662;
- t.twobengali = 0x09e8;
- t.twocircle = 0x2461;
- t.twocircleinversesansserif = 0x278b;
- t.twodeva = 0x0968;
- t.twodotenleader = 0x2025;
- t.twodotleader = 0x2025;
- t.twodotleadervertical = 0xfe30;
- t.twogujarati = 0x0ae8;
- t.twogurmukhi = 0x0a68;
- t.twohackarabic = 0x0662;
- t.twohangzhou = 0x3022;
- t.twoideographicparen = 0x3221;
- t.twoinferior = 0x2082;
- t.twomonospace = 0xff12;
- t.twonumeratorbengali = 0x09f5;
- t.twooldstyle = 0xf732;
- t.twoparen = 0x2475;
- t.twoperiod = 0x2489;
- t.twopersian = 0x06f2;
- t.tworoman = 0x2171;
- t.twostroke = 0x01bb;
- t.twosuperior = 0x00b2;
- t.twothai = 0x0e52;
- t.twothirds = 0x2154;
- t.u = 0x0075;
- t.uacute = 0x00fa;
- t.ubar = 0x0289;
- t.ubengali = 0x0989;
- t.ubopomofo = 0x3128;
- t.ubreve = 0x016d;
- t.ucaron = 0x01d4;
- t.ucircle = 0x24e4;
- t.ucircumflex = 0x00fb;
- t.ucircumflexbelow = 0x1e77;
- t.ucyrillic = 0x0443;
- t.udattadeva = 0x0951;
- t.udblacute = 0x0171;
- t.udblgrave = 0x0215;
- t.udeva = 0x0909;
- t.udieresis = 0x00fc;
- t.udieresisacute = 0x01d8;
- t.udieresisbelow = 0x1e73;
- t.udieresiscaron = 0x01da;
- t.udieresiscyrillic = 0x04f1;
- t.udieresisgrave = 0x01dc;
- t.udieresismacron = 0x01d6;
- t.udotbelow = 0x1ee5;
- t.ugrave = 0x00f9;
- t.ugujarati = 0x0a89;
- t.ugurmukhi = 0x0a09;
- t.uhiragana = 0x3046;
- t.uhookabove = 0x1ee7;
- t.uhorn = 0x01b0;
- t.uhornacute = 0x1ee9;
- t.uhorndotbelow = 0x1ef1;
- t.uhorngrave = 0x1eeb;
- t.uhornhookabove = 0x1eed;
- t.uhorntilde = 0x1eef;
- t.uhungarumlaut = 0x0171;
- t.uhungarumlautcyrillic = 0x04f3;
- t.uinvertedbreve = 0x0217;
- t.ukatakana = 0x30a6;
- t.ukatakanahalfwidth = 0xff73;
- t.ukcyrillic = 0x0479;
- t.ukorean = 0x315c;
- t.umacron = 0x016b;
- t.umacroncyrillic = 0x04ef;
- t.umacrondieresis = 0x1e7b;
- t.umatragurmukhi = 0x0a41;
- t.umonospace = 0xff55;
- t.underscore = 0x005f;
- t.underscoredbl = 0x2017;
- t.underscoremonospace = 0xff3f;
- t.underscorevertical = 0xfe33;
- t.underscorewavy = 0xfe4f;
- t.union = 0x222a;
- t.universal = 0x2200;
- t.uogonek = 0x0173;
- t.uparen = 0x24b0;
- t.upblock = 0x2580;
- t.upperdothebrew = 0x05c4;
- t.upsilon = 0x03c5;
- t.upsilondieresis = 0x03cb;
- t.upsilondieresistonos = 0x03b0;
- t.upsilonlatin = 0x028a;
- t.upsilontonos = 0x03cd;
- t.uptackbelowcmb = 0x031d;
- t.uptackmod = 0x02d4;
- t.uragurmukhi = 0x0a73;
- t.uring = 0x016f;
- t.ushortcyrillic = 0x045e;
- t.usmallhiragana = 0x3045;
- t.usmallkatakana = 0x30a5;
- t.usmallkatakanahalfwidth = 0xff69;
- t.ustraightcyrillic = 0x04af;
- t.ustraightstrokecyrillic = 0x04b1;
- t.utilde = 0x0169;
- t.utildeacute = 0x1e79;
- t.utildebelow = 0x1e75;
- t.uubengali = 0x098a;
- t.uudeva = 0x090a;
- t.uugujarati = 0x0a8a;
- t.uugurmukhi = 0x0a0a;
- t.uumatragurmukhi = 0x0a42;
- t.uuvowelsignbengali = 0x09c2;
- t.uuvowelsigndeva = 0x0942;
- t.uuvowelsigngujarati = 0x0ac2;
- t.uvowelsignbengali = 0x09c1;
- t.uvowelsigndeva = 0x0941;
- t.uvowelsigngujarati = 0x0ac1;
- t.v = 0x0076;
- t.vadeva = 0x0935;
- t.vagujarati = 0x0ab5;
- t.vagurmukhi = 0x0a35;
- t.vakatakana = 0x30f7;
- t.vav = 0x05d5;
- t.vavdagesh = 0xfb35;
- t.vavdagesh65 = 0xfb35;
- t.vavdageshhebrew = 0xfb35;
- t.vavhebrew = 0x05d5;
- t.vavholam = 0xfb4b;
- t.vavholamhebrew = 0xfb4b;
- t.vavvavhebrew = 0x05f0;
- t.vavyodhebrew = 0x05f1;
- t.vcircle = 0x24e5;
- t.vdotbelow = 0x1e7f;
- t.vecyrillic = 0x0432;
- t.veharabic = 0x06a4;
- t.vehfinalarabic = 0xfb6b;
- t.vehinitialarabic = 0xfb6c;
- t.vehmedialarabic = 0xfb6d;
- t.vekatakana = 0x30f9;
- t.venus = 0x2640;
- t.verticalbar = 0x007c;
- t.verticallineabovecmb = 0x030d;
- t.verticallinebelowcmb = 0x0329;
- t.verticallinelowmod = 0x02cc;
- t.verticallinemod = 0x02c8;
- t.vewarmenian = 0x057e;
- t.vhook = 0x028b;
- t.vikatakana = 0x30f8;
- t.viramabengali = 0x09cd;
- t.viramadeva = 0x094d;
- t.viramagujarati = 0x0acd;
- t.visargabengali = 0x0983;
- t.visargadeva = 0x0903;
- t.visargagujarati = 0x0a83;
- t.vmonospace = 0xff56;
- t.voarmenian = 0x0578;
- t.voicediterationhiragana = 0x309e;
- t.voicediterationkatakana = 0x30fe;
- t.voicedmarkkana = 0x309b;
- t.voicedmarkkanahalfwidth = 0xff9e;
- t.vokatakana = 0x30fa;
- t.vparen = 0x24b1;
- t.vtilde = 0x1e7d;
- t.vturned = 0x028c;
- t.vuhiragana = 0x3094;
- t.vukatakana = 0x30f4;
- t.w = 0x0077;
- t.wacute = 0x1e83;
- t.waekorean = 0x3159;
- t.wahiragana = 0x308f;
- t.wakatakana = 0x30ef;
- t.wakatakanahalfwidth = 0xff9c;
- t.wakorean = 0x3158;
- t.wasmallhiragana = 0x308e;
- t.wasmallkatakana = 0x30ee;
- t.wattosquare = 0x3357;
- t.wavedash = 0x301c;
- t.wavyunderscorevertical = 0xfe34;
- t.wawarabic = 0x0648;
- t.wawfinalarabic = 0xfeee;
- t.wawhamzaabovearabic = 0x0624;
- t.wawhamzaabovefinalarabic = 0xfe86;
- t.wbsquare = 0x33dd;
- t.wcircle = 0x24e6;
- t.wcircumflex = 0x0175;
- t.wdieresis = 0x1e85;
- t.wdotaccent = 0x1e87;
- t.wdotbelow = 0x1e89;
- t.wehiragana = 0x3091;
- t.weierstrass = 0x2118;
- t.wekatakana = 0x30f1;
- t.wekorean = 0x315e;
- t.weokorean = 0x315d;
- t.wgrave = 0x1e81;
- t.whitebullet = 0x25e6;
- t.whitecircle = 0x25cb;
- t.whitecircleinverse = 0x25d9;
- t.whitecornerbracketleft = 0x300e;
- t.whitecornerbracketleftvertical = 0xfe43;
- t.whitecornerbracketright = 0x300f;
- t.whitecornerbracketrightvertical = 0xfe44;
- t.whitediamond = 0x25c7;
- t.whitediamondcontainingblacksmalldiamond = 0x25c8;
- t.whitedownpointingsmalltriangle = 0x25bf;
- t.whitedownpointingtriangle = 0x25bd;
- t.whiteleftpointingsmalltriangle = 0x25c3;
- t.whiteleftpointingtriangle = 0x25c1;
- t.whitelenticularbracketleft = 0x3016;
- t.whitelenticularbracketright = 0x3017;
- t.whiterightpointingsmalltriangle = 0x25b9;
- t.whiterightpointingtriangle = 0x25b7;
- t.whitesmallsquare = 0x25ab;
- t.whitesmilingface = 0x263a;
- t.whitesquare = 0x25a1;
- t.whitestar = 0x2606;
- t.whitetelephone = 0x260f;
- t.whitetortoiseshellbracketleft = 0x3018;
- t.whitetortoiseshellbracketright = 0x3019;
- t.whiteuppointingsmalltriangle = 0x25b5;
- t.whiteuppointingtriangle = 0x25b3;
- t.wihiragana = 0x3090;
- t.wikatakana = 0x30f0;
- t.wikorean = 0x315f;
- t.wmonospace = 0xff57;
- t.wohiragana = 0x3092;
- t.wokatakana = 0x30f2;
- t.wokatakanahalfwidth = 0xff66;
- t.won = 0x20a9;
- t.wonmonospace = 0xffe6;
- t.wowaenthai = 0x0e27;
- t.wparen = 0x24b2;
- t.wring = 0x1e98;
- t.wsuperior = 0x02b7;
- t.wturned = 0x028d;
- t.wynn = 0x01bf;
- t.x = 0x0078;
- t.xabovecmb = 0x033d;
- t.xbopomofo = 0x3112;
- t.xcircle = 0x24e7;
- t.xdieresis = 0x1e8d;
- t.xdotaccent = 0x1e8b;
- t.xeharmenian = 0x056d;
- t.xi = 0x03be;
- t.xmonospace = 0xff58;
- t.xparen = 0x24b3;
- t.xsuperior = 0x02e3;
- t.y = 0x0079;
- t.yaadosquare = 0x334e;
- t.yabengali = 0x09af;
- t.yacute = 0x00fd;
- t.yadeva = 0x092f;
- t.yaekorean = 0x3152;
- t.yagujarati = 0x0aaf;
- t.yagurmukhi = 0x0a2f;
- t.yahiragana = 0x3084;
- t.yakatakana = 0x30e4;
- t.yakatakanahalfwidth = 0xff94;
- t.yakorean = 0x3151;
- t.yamakkanthai = 0x0e4e;
- t.yasmallhiragana = 0x3083;
- t.yasmallkatakana = 0x30e3;
- t.yasmallkatakanahalfwidth = 0xff6c;
- t.yatcyrillic = 0x0463;
- t.ycircle = 0x24e8;
- t.ycircumflex = 0x0177;
- t.ydieresis = 0x00ff;
- t.ydotaccent = 0x1e8f;
- t.ydotbelow = 0x1ef5;
- t.yeharabic = 0x064a;
- t.yehbarreearabic = 0x06d2;
- t.yehbarreefinalarabic = 0xfbaf;
- t.yehfinalarabic = 0xfef2;
- t.yehhamzaabovearabic = 0x0626;
- t.yehhamzaabovefinalarabic = 0xfe8a;
- t.yehhamzaaboveinitialarabic = 0xfe8b;
- t.yehhamzaabovemedialarabic = 0xfe8c;
- t.yehinitialarabic = 0xfef3;
- t.yehmedialarabic = 0xfef4;
- t.yehmeeminitialarabic = 0xfcdd;
- t.yehmeemisolatedarabic = 0xfc58;
- t.yehnoonfinalarabic = 0xfc94;
- t.yehthreedotsbelowarabic = 0x06d1;
- t.yekorean = 0x3156;
- t.yen = 0x00a5;
- t.yenmonospace = 0xffe5;
- t.yeokorean = 0x3155;
- t.yeorinhieuhkorean = 0x3186;
- t.yerahbenyomohebrew = 0x05aa;
- t.yerahbenyomolefthebrew = 0x05aa;
- t.yericyrillic = 0x044b;
- t.yerudieresiscyrillic = 0x04f9;
- t.yesieungkorean = 0x3181;
- t.yesieungpansioskorean = 0x3183;
- t.yesieungsioskorean = 0x3182;
- t.yetivhebrew = 0x059a;
- t.ygrave = 0x1ef3;
- t.yhook = 0x01b4;
- t.yhookabove = 0x1ef7;
- t.yiarmenian = 0x0575;
- t.yicyrillic = 0x0457;
- t.yikorean = 0x3162;
- t.yinyang = 0x262f;
- t.yiwnarmenian = 0x0582;
- t.ymonospace = 0xff59;
- t.yod = 0x05d9;
- t.yoddagesh = 0xfb39;
- t.yoddageshhebrew = 0xfb39;
- t.yodhebrew = 0x05d9;
- t.yodyodhebrew = 0x05f2;
- t.yodyodpatahhebrew = 0xfb1f;
- t.yohiragana = 0x3088;
- t.yoikorean = 0x3189;
- t.yokatakana = 0x30e8;
- t.yokatakanahalfwidth = 0xff96;
- t.yokorean = 0x315b;
- t.yosmallhiragana = 0x3087;
- t.yosmallkatakana = 0x30e7;
- t.yosmallkatakanahalfwidth = 0xff6e;
- t.yotgreek = 0x03f3;
- t.yoyaekorean = 0x3188;
- t.yoyakorean = 0x3187;
- t.yoyakthai = 0x0e22;
- t.yoyingthai = 0x0e0d;
- t.yparen = 0x24b4;
- t.ypogegrammeni = 0x037a;
- t.ypogegrammenigreekcmb = 0x0345;
- t.yr = 0x01a6;
- t.yring = 0x1e99;
- t.ysuperior = 0x02b8;
- t.ytilde = 0x1ef9;
- t.yturned = 0x028e;
- t.yuhiragana = 0x3086;
- t.yuikorean = 0x318c;
- t.yukatakana = 0x30e6;
- t.yukatakanahalfwidth = 0xff95;
- t.yukorean = 0x3160;
- t.yusbigcyrillic = 0x046b;
- t.yusbigiotifiedcyrillic = 0x046d;
- t.yuslittlecyrillic = 0x0467;
- t.yuslittleiotifiedcyrillic = 0x0469;
- t.yusmallhiragana = 0x3085;
- t.yusmallkatakana = 0x30e5;
- t.yusmallkatakanahalfwidth = 0xff6d;
- t.yuyekorean = 0x318b;
- t.yuyeokorean = 0x318a;
- t.yyabengali = 0x09df;
- t.yyadeva = 0x095f;
- t.z = 0x007a;
- t.zaarmenian = 0x0566;
- t.zacute = 0x017a;
- t.zadeva = 0x095b;
- t.zagurmukhi = 0x0a5b;
- t.zaharabic = 0x0638;
- t.zahfinalarabic = 0xfec6;
- t.zahinitialarabic = 0xfec7;
- t.zahiragana = 0x3056;
- t.zahmedialarabic = 0xfec8;
- t.zainarabic = 0x0632;
- t.zainfinalarabic = 0xfeb0;
- t.zakatakana = 0x30b6;
- t.zaqefgadolhebrew = 0x0595;
- t.zaqefqatanhebrew = 0x0594;
- t.zarqahebrew = 0x0598;
- t.zayin = 0x05d6;
- t.zayindagesh = 0xfb36;
- t.zayindageshhebrew = 0xfb36;
- t.zayinhebrew = 0x05d6;
- t.zbopomofo = 0x3117;
- t.zcaron = 0x017e;
- t.zcircle = 0x24e9;
- t.zcircumflex = 0x1e91;
- t.zcurl = 0x0291;
- t.zdot = 0x017c;
- t.zdotaccent = 0x017c;
- t.zdotbelow = 0x1e93;
- t.zecyrillic = 0x0437;
- t.zedescendercyrillic = 0x0499;
- t.zedieresiscyrillic = 0x04df;
- t.zehiragana = 0x305c;
- t.zekatakana = 0x30bc;
- t.zero = 0x0030;
- t.zeroarabic = 0x0660;
- t.zerobengali = 0x09e6;
- t.zerodeva = 0x0966;
- t.zerogujarati = 0x0ae6;
- t.zerogurmukhi = 0x0a66;
- t.zerohackarabic = 0x0660;
- t.zeroinferior = 0x2080;
- t.zeromonospace = 0xff10;
- t.zerooldstyle = 0xf730;
- t.zeropersian = 0x06f0;
- t.zerosuperior = 0x2070;
- t.zerothai = 0x0e50;
- t.zerowidthjoiner = 0xfeff;
- t.zerowidthnonjoiner = 0x200c;
- t.zerowidthspace = 0x200b;
- t.zeta = 0x03b6;
- t.zhbopomofo = 0x3113;
- t.zhearmenian = 0x056a;
- t.zhebrevecyrillic = 0x04c2;
- t.zhecyrillic = 0x0436;
- t.zhedescendercyrillic = 0x0497;
- t.zhedieresiscyrillic = 0x04dd;
- t.zihiragana = 0x3058;
- t.zikatakana = 0x30b8;
- t.zinorhebrew = 0x05ae;
- t.zlinebelow = 0x1e95;
- t.zmonospace = 0xff5a;
- t.zohiragana = 0x305e;
- t.zokatakana = 0x30be;
- t.zparen = 0x24b5;
- t.zretroflexhook = 0x0290;
- t.zstroke = 0x01b6;
- t.zuhiragana = 0x305a;
- t.zukatakana = 0x30ba;
- t[".notdef"] = 0x0000;
- t.angbracketleftbig = 0x2329;
- t.angbracketleftBig = 0x2329;
- t.angbracketleftbigg = 0x2329;
- t.angbracketleftBigg = 0x2329;
- t.angbracketrightBig = 0x232a;
- t.angbracketrightbig = 0x232a;
- t.angbracketrightBigg = 0x232a;
- t.angbracketrightbigg = 0x232a;
- t.arrowhookleft = 0x21aa;
- t.arrowhookright = 0x21a9;
- t.arrowlefttophalf = 0x21bc;
- t.arrowleftbothalf = 0x21bd;
- t.arrownortheast = 0x2197;
- t.arrownorthwest = 0x2196;
- t.arrowrighttophalf = 0x21c0;
- t.arrowrightbothalf = 0x21c1;
- t.arrowsoutheast = 0x2198;
- t.arrowsouthwest = 0x2199;
- t.backslashbig = 0x2216;
- t.backslashBig = 0x2216;
- t.backslashBigg = 0x2216;
- t.backslashbigg = 0x2216;
- t.bardbl = 0x2016;
- t.bracehtipdownleft = 0xfe37;
- t.bracehtipdownright = 0xfe37;
- t.bracehtipupleft = 0xfe38;
- t.bracehtipupright = 0xfe38;
- t.braceleftBig = 0x007b;
- t.braceleftbig = 0x007b;
- t.braceleftbigg = 0x007b;
- t.braceleftBigg = 0x007b;
- t.bracerightBig = 0x007d;
- t.bracerightbig = 0x007d;
- t.bracerightbigg = 0x007d;
- t.bracerightBigg = 0x007d;
- t.bracketleftbig = 0x005b;
- t.bracketleftBig = 0x005b;
- t.bracketleftbigg = 0x005b;
- t.bracketleftBigg = 0x005b;
- t.bracketrightBig = 0x005d;
- t.bracketrightbig = 0x005d;
- t.bracketrightbigg = 0x005d;
- t.bracketrightBigg = 0x005d;
- t.ceilingleftbig = 0x2308;
- t.ceilingleftBig = 0x2308;
- t.ceilingleftBigg = 0x2308;
- t.ceilingleftbigg = 0x2308;
- t.ceilingrightbig = 0x2309;
- t.ceilingrightBig = 0x2309;
- t.ceilingrightbigg = 0x2309;
- t.ceilingrightBigg = 0x2309;
- t.circledotdisplay = 0x2299;
- t.circledottext = 0x2299;
- t.circlemultiplydisplay = 0x2297;
- t.circlemultiplytext = 0x2297;
- t.circleplusdisplay = 0x2295;
- t.circleplustext = 0x2295;
- t.contintegraldisplay = 0x222e;
- t.contintegraltext = 0x222e;
- t.coproductdisplay = 0x2210;
- t.coproducttext = 0x2210;
- t.floorleftBig = 0x230a;
- t.floorleftbig = 0x230a;
- t.floorleftbigg = 0x230a;
- t.floorleftBigg = 0x230a;
- t.floorrightbig = 0x230b;
- t.floorrightBig = 0x230b;
- t.floorrightBigg = 0x230b;
- t.floorrightbigg = 0x230b;
- t.hatwide = 0x0302;
- t.hatwider = 0x0302;
- t.hatwidest = 0x0302;
- t.intercal = 0x1d40;
- t.integraldisplay = 0x222b;
- t.integraltext = 0x222b;
- t.intersectiondisplay = 0x22c2;
- t.intersectiontext = 0x22c2;
- t.logicalanddisplay = 0x2227;
- t.logicalandtext = 0x2227;
- t.logicalordisplay = 0x2228;
- t.logicalortext = 0x2228;
- t.parenleftBig = 0x0028;
- t.parenleftbig = 0x0028;
- t.parenleftBigg = 0x0028;
- t.parenleftbigg = 0x0028;
- t.parenrightBig = 0x0029;
- t.parenrightbig = 0x0029;
- t.parenrightBigg = 0x0029;
- t.parenrightbigg = 0x0029;
- t.prime = 0x2032;
- t.productdisplay = 0x220f;
- t.producttext = 0x220f;
- t.radicalbig = 0x221a;
- t.radicalBig = 0x221a;
- t.radicalBigg = 0x221a;
- t.radicalbigg = 0x221a;
- t.radicalbt = 0x221a;
- t.radicaltp = 0x221a;
- t.radicalvertex = 0x221a;
- t.slashbig = 0x002f;
- t.slashBig = 0x002f;
- t.slashBigg = 0x002f;
- t.slashbigg = 0x002f;
- t.summationdisplay = 0x2211;
- t.summationtext = 0x2211;
- t.tildewide = 0x02dc;
- t.tildewider = 0x02dc;
- t.tildewidest = 0x02dc;
- t.uniondisplay = 0x22c3;
- t.unionmultidisplay = 0x228e;
- t.unionmultitext = 0x228e;
- t.unionsqdisplay = 0x2294;
- t.unionsqtext = 0x2294;
- t.uniontext = 0x22c3;
- t.vextenddouble = 0x2225;
- t.vextendsingle = 0x2223;
-});
-var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {
- t.space = 0x0020;
- t.a1 = 0x2701;
- t.a2 = 0x2702;
- t.a202 = 0x2703;
- t.a3 = 0x2704;
- t.a4 = 0x260e;
- t.a5 = 0x2706;
- t.a119 = 0x2707;
- t.a118 = 0x2708;
- t.a117 = 0x2709;
- t.a11 = 0x261b;
- t.a12 = 0x261e;
- t.a13 = 0x270c;
- t.a14 = 0x270d;
- t.a15 = 0x270e;
- t.a16 = 0x270f;
- t.a105 = 0x2710;
- t.a17 = 0x2711;
- t.a18 = 0x2712;
- t.a19 = 0x2713;
- t.a20 = 0x2714;
- t.a21 = 0x2715;
- t.a22 = 0x2716;
- t.a23 = 0x2717;
- t.a24 = 0x2718;
- t.a25 = 0x2719;
- t.a26 = 0x271a;
- t.a27 = 0x271b;
- t.a28 = 0x271c;
- t.a6 = 0x271d;
- t.a7 = 0x271e;
- t.a8 = 0x271f;
- t.a9 = 0x2720;
- t.a10 = 0x2721;
- t.a29 = 0x2722;
- t.a30 = 0x2723;
- t.a31 = 0x2724;
- t.a32 = 0x2725;
- t.a33 = 0x2726;
- t.a34 = 0x2727;
- t.a35 = 0x2605;
- t.a36 = 0x2729;
- t.a37 = 0x272a;
- t.a38 = 0x272b;
- t.a39 = 0x272c;
- t.a40 = 0x272d;
- t.a41 = 0x272e;
- t.a42 = 0x272f;
- t.a43 = 0x2730;
- t.a44 = 0x2731;
- t.a45 = 0x2732;
- t.a46 = 0x2733;
- t.a47 = 0x2734;
- t.a48 = 0x2735;
- t.a49 = 0x2736;
- t.a50 = 0x2737;
- t.a51 = 0x2738;
- t.a52 = 0x2739;
- t.a53 = 0x273a;
- t.a54 = 0x273b;
- t.a55 = 0x273c;
- t.a56 = 0x273d;
- t.a57 = 0x273e;
- t.a58 = 0x273f;
- t.a59 = 0x2740;
- t.a60 = 0x2741;
- t.a61 = 0x2742;
- t.a62 = 0x2743;
- t.a63 = 0x2744;
- t.a64 = 0x2745;
- t.a65 = 0x2746;
- t.a66 = 0x2747;
- t.a67 = 0x2748;
- t.a68 = 0x2749;
- t.a69 = 0x274a;
- t.a70 = 0x274b;
- t.a71 = 0x25cf;
- t.a72 = 0x274d;
- t.a73 = 0x25a0;
- t.a74 = 0x274f;
- t.a203 = 0x2750;
- t.a75 = 0x2751;
- t.a204 = 0x2752;
- t.a76 = 0x25b2;
- t.a77 = 0x25bc;
- t.a78 = 0x25c6;
- t.a79 = 0x2756;
- t.a81 = 0x25d7;
- t.a82 = 0x2758;
- t.a83 = 0x2759;
- t.a84 = 0x275a;
- t.a97 = 0x275b;
- t.a98 = 0x275c;
- t.a99 = 0x275d;
- t.a100 = 0x275e;
- t.a101 = 0x2761;
- t.a102 = 0x2762;
- t.a103 = 0x2763;
- t.a104 = 0x2764;
- t.a106 = 0x2765;
- t.a107 = 0x2766;
- t.a108 = 0x2767;
- t.a112 = 0x2663;
- t.a111 = 0x2666;
- t.a110 = 0x2665;
- t.a109 = 0x2660;
- t.a120 = 0x2460;
- t.a121 = 0x2461;
- t.a122 = 0x2462;
- t.a123 = 0x2463;
- t.a124 = 0x2464;
- t.a125 = 0x2465;
- t.a126 = 0x2466;
- t.a127 = 0x2467;
- t.a128 = 0x2468;
- t.a129 = 0x2469;
- t.a130 = 0x2776;
- t.a131 = 0x2777;
- t.a132 = 0x2778;
- t.a133 = 0x2779;
- t.a134 = 0x277a;
- t.a135 = 0x277b;
- t.a136 = 0x277c;
- t.a137 = 0x277d;
- t.a138 = 0x277e;
- t.a139 = 0x277f;
- t.a140 = 0x2780;
- t.a141 = 0x2781;
- t.a142 = 0x2782;
- t.a143 = 0x2783;
- t.a144 = 0x2784;
- t.a145 = 0x2785;
- t.a146 = 0x2786;
- t.a147 = 0x2787;
- t.a148 = 0x2788;
- t.a149 = 0x2789;
- t.a150 = 0x278a;
- t.a151 = 0x278b;
- t.a152 = 0x278c;
- t.a153 = 0x278d;
- t.a154 = 0x278e;
- t.a155 = 0x278f;
- t.a156 = 0x2790;
- t.a157 = 0x2791;
- t.a158 = 0x2792;
- t.a159 = 0x2793;
- t.a160 = 0x2794;
- t.a161 = 0x2192;
- t.a163 = 0x2194;
- t.a164 = 0x2195;
- t.a196 = 0x2798;
- t.a165 = 0x2799;
- t.a192 = 0x279a;
- t.a166 = 0x279b;
- t.a167 = 0x279c;
- t.a168 = 0x279d;
- t.a169 = 0x279e;
- t.a170 = 0x279f;
- t.a171 = 0x27a0;
- t.a172 = 0x27a1;
- t.a173 = 0x27a2;
- t.a162 = 0x27a3;
- t.a174 = 0x27a4;
- t.a175 = 0x27a5;
- t.a176 = 0x27a6;
- t.a177 = 0x27a7;
- t.a178 = 0x27a8;
- t.a179 = 0x27a9;
- t.a193 = 0x27aa;
- t.a180 = 0x27ab;
- t.a199 = 0x27ac;
- t.a181 = 0x27ad;
- t.a200 = 0x27ae;
- t.a182 = 0x27af;
- t.a201 = 0x27b1;
- t.a183 = 0x27b2;
- t.a184 = 0x27b3;
- t.a197 = 0x27b4;
- t.a185 = 0x27b5;
- t.a194 = 0x27b6;
- t.a198 = 0x27b7;
- t.a186 = 0x27b8;
- t.a195 = 0x27b9;
- t.a187 = 0x27ba;
- t.a188 = 0x27bb;
- t.a189 = 0x27bc;
- t.a190 = 0x27bd;
- t.a191 = 0x27be;
- t.a89 = 0x2768;
- t.a90 = 0x2769;
- t.a93 = 0x276a;
- t.a94 = 0x276b;
- t.a91 = 0x276c;
- t.a92 = 0x276d;
- t.a205 = 0x276e;
- t.a85 = 0x276f;
- t.a206 = 0x2770;
- t.a86 = 0x2771;
- t.a87 = 0x2772;
- t.a88 = 0x2773;
- t.a95 = 0x2774;
- t.a96 = 0x2775;
- t[".notdef"] = 0x0000;
-});
-exports.getGlyphsUnicode = getGlyphsUnicode;
-exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode;
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = exports.getNonStdFontMap = exports.getStdFontMap = void 0;
-
-var _core_utils = __w_pdfjs_require__(8);
-
-const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.ArialNarrow = "Helvetica";
- t["ArialNarrow-Bold"] = "Helvetica-Bold";
- t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique";
- t["ArialNarrow-Italic"] = "Helvetica-Oblique";
- t.ArialBlack = "Helvetica";
- t["ArialBlack-Bold"] = "Helvetica-Bold";
- t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique";
- t["ArialBlack-Italic"] = "Helvetica-Oblique";
- t["Arial-Black"] = "Helvetica";
- t["Arial-Black-Bold"] = "Helvetica-Bold";
- t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique";
- t["Arial-Black-Italic"] = "Helvetica-Oblique";
- t.Arial = "Helvetica";
- t["Arial-Bold"] = "Helvetica-Bold";
- t["Arial-BoldItalic"] = "Helvetica-BoldOblique";
- t["Arial-Italic"] = "Helvetica-Oblique";
- t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique";
- t["Arial-BoldMT"] = "Helvetica-Bold";
- t["Arial-ItalicMT"] = "Helvetica-Oblique";
- t.ArialMT = "Helvetica";
- t["Courier-Bold"] = "Courier-Bold";
- t["Courier-BoldItalic"] = "Courier-BoldOblique";
- t["Courier-Italic"] = "Courier-Oblique";
- t.CourierNew = "Courier";
- t["CourierNew-Bold"] = "Courier-Bold";
- t["CourierNew-BoldItalic"] = "Courier-BoldOblique";
- t["CourierNew-Italic"] = "Courier-Oblique";
- t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique";
- t["CourierNewPS-BoldMT"] = "Courier-Bold";
- t["CourierNewPS-ItalicMT"] = "Courier-Oblique";
- t.CourierNewPSMT = "Courier";
- t.Helvetica = "Helvetica";
- t["Helvetica-Bold"] = "Helvetica-Bold";
- t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique";
- t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique";
- t["Helvetica-Italic"] = "Helvetica-Oblique";
- t["Helvetica-Oblique"] = "Helvetica-Oblique";
- t["Symbol-Bold"] = "Symbol";
- t["Symbol-BoldItalic"] = "Symbol";
- t["Symbol-Italic"] = "Symbol";
- t.TimesNewRoman = "Times-Roman";
- t["TimesNewRoman-Bold"] = "Times-Bold";
- t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic";
- t["TimesNewRoman-Italic"] = "Times-Italic";
- t.TimesNewRomanPS = "Times-Roman";
- t["TimesNewRomanPS-Bold"] = "Times-Bold";
- t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic";
- t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic";
- t["TimesNewRomanPS-BoldMT"] = "Times-Bold";
- t["TimesNewRomanPS-Italic"] = "Times-Italic";
- t["TimesNewRomanPS-ItalicMT"] = "Times-Italic";
- t.TimesNewRomanPSMT = "Times-Roman";
- t["TimesNewRomanPSMT-Bold"] = "Times-Bold";
- t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic";
- t["TimesNewRomanPSMT-Italic"] = "Times-Italic";
-});
-exports.getStdFontMap = getStdFontMap;
-const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.Calibri = "Helvetica";
- t["Calibri-Bold"] = "Helvetica-Bold";
- t["Calibri-BoldItalic"] = "Helvetica-BoldOblique";
- t["Calibri-Italic"] = "Helvetica-Oblique";
- t.CenturyGothic = "Helvetica";
- t["CenturyGothic-Bold"] = "Helvetica-Bold";
- t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique";
- t["CenturyGothic-Italic"] = "Helvetica-Oblique";
- t.ComicSansMS = "Comic Sans MS";
- t["ComicSansMS-Bold"] = "Comic Sans MS-Bold";
- t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic";
- t["ComicSansMS-Italic"] = "Comic Sans MS-Italic";
- t.LucidaConsole = "Courier";
- t["LucidaConsole-Bold"] = "Courier-Bold";
- t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique";
- t["LucidaConsole-Italic"] = "Courier-Oblique";
- t["LucidaSans-Demi"] = "Helvetica-Bold";
- t["MS-Gothic"] = "MS Gothic";
- t["MS-Gothic-Bold"] = "MS Gothic-Bold";
- t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic";
- t["MS-Gothic-Italic"] = "MS Gothic-Italic";
- t["MS-Mincho"] = "MS Mincho";
- t["MS-Mincho-Bold"] = "MS Mincho-Bold";
- t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic";
- t["MS-Mincho-Italic"] = "MS Mincho-Italic";
- t["MS-PGothic"] = "MS PGothic";
- t["MS-PGothic-Bold"] = "MS PGothic-Bold";
- t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic";
- t["MS-PGothic-Italic"] = "MS PGothic-Italic";
- t["MS-PMincho"] = "MS PMincho";
- t["MS-PMincho-Bold"] = "MS PMincho-Bold";
- t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic";
- t["MS-PMincho-Italic"] = "MS PMincho-Italic";
- t.NuptialScript = "Times-Italic";
- t.SegoeUISymbol = "Helvetica";
- t.Wingdings = "ZapfDingbats";
- t["Wingdings-Regular"] = "ZapfDingbats";
-});
-exports.getNonStdFontMap = getNonStdFontMap;
-const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
- t["Adobe Jenson"] = true;
- t["Adobe Text"] = true;
- t.Albertus = true;
- t.Aldus = true;
- t.Alexandria = true;
- t.Algerian = true;
- t["American Typewriter"] = true;
- t.Antiqua = true;
- t.Apex = true;
- t.Arno = true;
- t.Aster = true;
- t.Aurora = true;
- t.Baskerville = true;
- t.Bell = true;
- t.Bembo = true;
- t["Bembo Schoolbook"] = true;
- t.Benguiat = true;
- t["Berkeley Old Style"] = true;
- t["Bernhard Modern"] = true;
- t["Berthold City"] = true;
- t.Bodoni = true;
- t["Bauer Bodoni"] = true;
- t["Book Antiqua"] = true;
- t.Bookman = true;
- t["Bordeaux Roman"] = true;
- t["Californian FB"] = true;
- t.Calisto = true;
- t.Calvert = true;
- t.Capitals = true;
- t.Cambria = true;
- t.Cartier = true;
- t.Caslon = true;
- t.Catull = true;
- t.Centaur = true;
- t["Century Old Style"] = true;
- t["Century Schoolbook"] = true;
- t.Chaparral = true;
- t["Charis SIL"] = true;
- t.Cheltenham = true;
- t["Cholla Slab"] = true;
- t.Clarendon = true;
- t.Clearface = true;
- t.Cochin = true;
- t.Colonna = true;
- t["Computer Modern"] = true;
- t["Concrete Roman"] = true;
- t.Constantia = true;
- t["Cooper Black"] = true;
- t.Corona = true;
- t.Ecotype = true;
- t.Egyptienne = true;
- t.Elephant = true;
- t.Excelsior = true;
- t.Fairfield = true;
- t["FF Scala"] = true;
- t.Folkard = true;
- t.Footlight = true;
- t.FreeSerif = true;
- t["Friz Quadrata"] = true;
- t.Garamond = true;
- t.Gentium = true;
- t.Georgia = true;
- t.Gloucester = true;
- t["Goudy Old Style"] = true;
- t["Goudy Schoolbook"] = true;
- t["Goudy Pro Font"] = true;
- t.Granjon = true;
- t["Guardian Egyptian"] = true;
- t.Heather = true;
- t.Hercules = true;
- t["High Tower Text"] = true;
- t.Hiroshige = true;
- t["Hoefler Text"] = true;
- t["Humana Serif"] = true;
- t.Imprint = true;
- t["Ionic No. 5"] = true;
- t.Janson = true;
- t.Joanna = true;
- t.Korinna = true;
- t.Lexicon = true;
- t["Liberation Serif"] = true;
- t["Linux Libertine"] = true;
- t.Literaturnaya = true;
- t.Lucida = true;
- t["Lucida Bright"] = true;
- t.Melior = true;
- t.Memphis = true;
- t.Miller = true;
- t.Minion = true;
- t.Modern = true;
- t["Mona Lisa"] = true;
- t["Mrs Eaves"] = true;
- t["MS Serif"] = true;
- t["Museo Slab"] = true;
- t["New York"] = true;
- t["Nimbus Roman"] = true;
- t["NPS Rawlinson Roadway"] = true;
- t.NuptialScript = true;
- t.Palatino = true;
- t.Perpetua = true;
- t.Plantin = true;
- t["Plantin Schoolbook"] = true;
- t.Playbill = true;
- t["Poor Richard"] = true;
- t["Rawlinson Roadway"] = true;
- t.Renault = true;
- t.Requiem = true;
- t.Rockwell = true;
- t.Roman = true;
- t["Rotis Serif"] = true;
- t.Sabon = true;
- t.Scala = true;
- t.Seagull = true;
- t.Sistina = true;
- t.Souvenir = true;
- t.STIX = true;
- t["Stone Informal"] = true;
- t["Stone Serif"] = true;
- t.Sylfaen = true;
- t.Times = true;
- t.Trajan = true;
- t["Trinité"] = true;
- t["Trump Mediaeval"] = true;
- t.Utopia = true;
- t["Vale Type"] = true;
- t["Bitstream Vera"] = true;
- t["Vera Serif"] = true;
- t.Versailles = true;
- t.Wanted = true;
- t.Weiss = true;
- t["Wide Latin"] = true;
- t.Windsor = true;
- t.XITS = true;
-});
-exports.getSerifFonts = getSerifFonts;
-const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.Dingbats = true;
- t.Symbol = true;
- t.ZapfDingbats = true;
-});
-exports.getSymbolsFonts = getSymbolsFonts;
-const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
- t[2] = 10;
- t[3] = 32;
- t[4] = 33;
- t[5] = 34;
- t[6] = 35;
- t[7] = 36;
- t[8] = 37;
- t[9] = 38;
- t[10] = 39;
- t[11] = 40;
- t[12] = 41;
- t[13] = 42;
- t[14] = 43;
- t[15] = 44;
- t[16] = 45;
- t[17] = 46;
- t[18] = 47;
- t[19] = 48;
- t[20] = 49;
- t[21] = 50;
- t[22] = 51;
- t[23] = 52;
- t[24] = 53;
- t[25] = 54;
- t[26] = 55;
- t[27] = 56;
- t[28] = 57;
- t[29] = 58;
- t[30] = 894;
- t[31] = 60;
- t[32] = 61;
- t[33] = 62;
- t[34] = 63;
- t[35] = 64;
- t[36] = 65;
- t[37] = 66;
- t[38] = 67;
- t[39] = 68;
- t[40] = 69;
- t[41] = 70;
- t[42] = 71;
- t[43] = 72;
- t[44] = 73;
- t[45] = 74;
- t[46] = 75;
- t[47] = 76;
- t[48] = 77;
- t[49] = 78;
- t[50] = 79;
- t[51] = 80;
- t[52] = 81;
- t[53] = 82;
- t[54] = 83;
- t[55] = 84;
- t[56] = 85;
- t[57] = 86;
- t[58] = 87;
- t[59] = 88;
- t[60] = 89;
- t[61] = 90;
- t[62] = 91;
- t[63] = 92;
- t[64] = 93;
- t[65] = 94;
- t[66] = 95;
- t[67] = 96;
- t[68] = 97;
- t[69] = 98;
- t[70] = 99;
- t[71] = 100;
- t[72] = 101;
- t[73] = 102;
- t[74] = 103;
- t[75] = 104;
- t[76] = 105;
- t[77] = 106;
- t[78] = 107;
- t[79] = 108;
- t[80] = 109;
- t[81] = 110;
- t[82] = 111;
- t[83] = 112;
- t[84] = 113;
- t[85] = 114;
- t[86] = 115;
- t[87] = 116;
- t[88] = 117;
- t[89] = 118;
- t[90] = 119;
- t[91] = 120;
- t[92] = 121;
- t[93] = 122;
- t[94] = 123;
- t[95] = 124;
- t[96] = 125;
- t[97] = 126;
- t[98] = 196;
- t[99] = 197;
- t[100] = 199;
- t[101] = 201;
- t[102] = 209;
- t[103] = 214;
- t[104] = 220;
- t[105] = 225;
- t[106] = 224;
- t[107] = 226;
- t[108] = 228;
- t[109] = 227;
- t[110] = 229;
- t[111] = 231;
- t[112] = 233;
- t[113] = 232;
- t[114] = 234;
- t[115] = 235;
- t[116] = 237;
- t[117] = 236;
- t[118] = 238;
- t[119] = 239;
- t[120] = 241;
- t[121] = 243;
- t[122] = 242;
- t[123] = 244;
- t[124] = 246;
- t[125] = 245;
- t[126] = 250;
- t[127] = 249;
- t[128] = 251;
- t[129] = 252;
- t[130] = 8224;
- t[131] = 176;
- t[132] = 162;
- t[133] = 163;
- t[134] = 167;
- t[135] = 8226;
- t[136] = 182;
- t[137] = 223;
- t[138] = 174;
- t[139] = 169;
- t[140] = 8482;
- t[141] = 180;
- t[142] = 168;
- t[143] = 8800;
- t[144] = 198;
- t[145] = 216;
- t[146] = 8734;
- t[147] = 177;
- t[148] = 8804;
- t[149] = 8805;
- t[150] = 165;
- t[151] = 181;
- t[152] = 8706;
- t[153] = 8721;
- t[154] = 8719;
- t[156] = 8747;
- t[157] = 170;
- t[158] = 186;
- t[159] = 8486;
- t[160] = 230;
- t[161] = 248;
- t[162] = 191;
- t[163] = 161;
- t[164] = 172;
- t[165] = 8730;
- t[166] = 402;
- t[167] = 8776;
- t[168] = 8710;
- t[169] = 171;
- t[170] = 187;
- t[171] = 8230;
- t[210] = 218;
- t[223] = 711;
- t[224] = 321;
- t[225] = 322;
- t[227] = 353;
- t[229] = 382;
- t[234] = 253;
- t[252] = 263;
- t[253] = 268;
- t[254] = 269;
- t[258] = 258;
- t[260] = 260;
- t[261] = 261;
- t[265] = 280;
- t[266] = 281;
- t[268] = 283;
- t[269] = 313;
- t[275] = 323;
- t[276] = 324;
- t[278] = 328;
- t[284] = 345;
- t[285] = 346;
- t[286] = 347;
- t[292] = 367;
- t[295] = 377;
- t[296] = 378;
- t[298] = 380;
- t[305] = 963;
- t[306] = 964;
- t[307] = 966;
- t[308] = 8215;
- t[309] = 8252;
- t[310] = 8319;
- t[311] = 8359;
- t[312] = 8592;
- t[313] = 8593;
- t[337] = 9552;
- t[493] = 1039;
- t[494] = 1040;
- t[705] = 1524;
- t[706] = 8362;
- t[710] = 64288;
- t[711] = 64298;
- t[759] = 1617;
- t[761] = 1776;
- t[763] = 1778;
- t[775] = 1652;
- t[777] = 1764;
- t[778] = 1780;
- t[779] = 1781;
- t[780] = 1782;
- t[782] = 771;
- t[783] = 64726;
- t[786] = 8363;
- t[788] = 8532;
- t[790] = 768;
- t[791] = 769;
- t[792] = 768;
- t[795] = 803;
- t[797] = 64336;
- t[798] = 64337;
- t[799] = 64342;
- t[800] = 64343;
- t[801] = 64344;
- t[802] = 64345;
- t[803] = 64362;
- t[804] = 64363;
- t[805] = 64364;
- t[2424] = 7821;
- t[2425] = 7822;
- t[2426] = 7823;
- t[2427] = 7824;
- t[2428] = 7825;
- t[2429] = 7826;
- t[2430] = 7827;
- t[2433] = 7682;
- t[2678] = 8045;
- t[2679] = 8046;
- t[2830] = 1552;
- t[2838] = 686;
- t[2840] = 751;
- t[2842] = 753;
- t[2843] = 754;
- t[2844] = 755;
- t[2846] = 757;
- t[2856] = 767;
- t[2857] = 848;
- t[2858] = 849;
- t[2862] = 853;
- t[2863] = 854;
- t[2864] = 855;
- t[2865] = 861;
- t[2866] = 862;
- t[2906] = 7460;
- t[2908] = 7462;
- t[2909] = 7463;
- t[2910] = 7464;
- t[2912] = 7466;
- t[2913] = 7467;
- t[2914] = 7468;
- t[2916] = 7470;
- t[2917] = 7471;
- t[2918] = 7472;
- t[2920] = 7474;
- t[2921] = 7475;
- t[2922] = 7476;
- t[2924] = 7478;
- t[2925] = 7479;
- t[2926] = 7480;
- t[2928] = 7482;
- t[2929] = 7483;
- t[2930] = 7484;
- t[2932] = 7486;
- t[2933] = 7487;
- t[2934] = 7488;
- t[2936] = 7490;
- t[2937] = 7491;
- t[2938] = 7492;
- t[2940] = 7494;
- t[2941] = 7495;
- t[2942] = 7496;
- t[2944] = 7498;
- t[2946] = 7500;
- t[2948] = 7502;
- t[2950] = 7504;
- t[2951] = 7505;
- t[2952] = 7506;
- t[2954] = 7508;
- t[2955] = 7509;
- t[2956] = 7510;
- t[2958] = 7512;
- t[2959] = 7513;
- t[2960] = 7514;
- t[2962] = 7516;
- t[2963] = 7517;
- t[2964] = 7518;
- t[2966] = 7520;
- t[2967] = 7521;
- t[2968] = 7522;
- t[2970] = 7524;
- t[2971] = 7525;
- t[2972] = 7526;
- t[2974] = 7528;
- t[2975] = 7529;
- t[2976] = 7530;
- t[2978] = 1537;
- t[2979] = 1538;
- t[2980] = 1539;
- t[2982] = 1549;
- t[2983] = 1551;
- t[2984] = 1552;
- t[2986] = 1554;
- t[2987] = 1555;
- t[2988] = 1556;
- t[2990] = 1623;
- t[2991] = 1624;
- t[2995] = 1775;
- t[2999] = 1791;
- t[3002] = 64290;
- t[3003] = 64291;
- t[3004] = 64292;
- t[3006] = 64294;
- t[3007] = 64295;
- t[3008] = 64296;
- t[3011] = 1900;
- t[3014] = 8223;
- t[3015] = 8244;
- t[3017] = 7532;
- t[3018] = 7533;
- t[3019] = 7534;
- t[3075] = 7590;
- t[3076] = 7591;
- t[3079] = 7594;
- t[3080] = 7595;
- t[3083] = 7598;
- t[3084] = 7599;
- t[3087] = 7602;
- t[3088] = 7603;
- t[3091] = 7606;
- t[3092] = 7607;
- t[3095] = 7610;
- t[3096] = 7611;
- t[3099] = 7614;
- t[3100] = 7615;
- t[3103] = 7618;
- t[3104] = 7619;
- t[3107] = 8337;
- t[3108] = 8338;
- t[3116] = 1884;
- t[3119] = 1885;
- t[3120] = 1885;
- t[3123] = 1886;
- t[3124] = 1886;
- t[3127] = 1887;
- t[3128] = 1887;
- t[3131] = 1888;
- t[3132] = 1888;
- t[3135] = 1889;
- t[3136] = 1889;
- t[3139] = 1890;
- t[3140] = 1890;
- t[3143] = 1891;
- t[3144] = 1891;
- t[3147] = 1892;
- t[3148] = 1892;
- t[3153] = 580;
- t[3154] = 581;
- t[3157] = 584;
- t[3158] = 585;
- t[3161] = 588;
- t[3162] = 589;
- t[3165] = 891;
- t[3166] = 892;
- t[3169] = 1274;
- t[3170] = 1275;
- t[3173] = 1278;
- t[3174] = 1279;
- t[3181] = 7622;
- t[3182] = 7623;
- t[3282] = 11799;
- t[3316] = 578;
- t[3379] = 42785;
- t[3393] = 1159;
- t[3416] = 8377;
-});
-exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts;
-const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) {
- t[227] = 322;
- t[264] = 261;
- t[291] = 346;
-});
-exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack;
-const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) {
- t[1] = 32;
- t[4] = 65;
- t[17] = 66;
- t[18] = 67;
- t[24] = 68;
- t[28] = 69;
- t[38] = 70;
- t[39] = 71;
- t[44] = 72;
- t[47] = 73;
- t[58] = 74;
- t[60] = 75;
- t[62] = 76;
- t[68] = 77;
- t[69] = 78;
- t[75] = 79;
- t[87] = 80;
- t[89] = 81;
- t[90] = 82;
- t[94] = 83;
- t[100] = 84;
- t[104] = 85;
- t[115] = 86;
- t[116] = 87;
- t[121] = 88;
- t[122] = 89;
- t[127] = 90;
- t[258] = 97;
- t[268] = 261;
- t[271] = 98;
- t[272] = 99;
- t[273] = 263;
- t[282] = 100;
- t[286] = 101;
- t[295] = 281;
- t[296] = 102;
- t[336] = 103;
- t[346] = 104;
- t[349] = 105;
- t[361] = 106;
- t[364] = 107;
- t[367] = 108;
- t[371] = 322;
- t[373] = 109;
- t[374] = 110;
- t[381] = 111;
- t[383] = 243;
- t[393] = 112;
- t[395] = 113;
- t[396] = 114;
- t[400] = 115;
- t[401] = 347;
- t[410] = 116;
- t[437] = 117;
- t[448] = 118;
- t[449] = 119;
- t[454] = 120;
- t[455] = 121;
- t[460] = 122;
- t[463] = 380;
- t[853] = 44;
- t[855] = 58;
- t[856] = 46;
- t[876] = 47;
- t[878] = 45;
- t[882] = 45;
- t[894] = 40;
- t[895] = 41;
- t[896] = 91;
- t[897] = 93;
- t[923] = 64;
- t[1004] = 48;
- t[1005] = 49;
- t[1006] = 50;
- t[1007] = 51;
- t[1008] = 52;
- t[1009] = 53;
- t[1010] = 54;
- t[1011] = 55;
- t[1012] = 56;
- t[1013] = 57;
- t[1081] = 37;
- t[1085] = 43;
- t[1086] = 45;
-});
-exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri;
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
-var getSpecialPUASymbols = getLookupTableFactory(function (t) {
- t[63721] = 0x00a9;
- t[63193] = 0x00a9;
- t[63720] = 0x00ae;
- t[63194] = 0x00ae;
- t[63722] = 0x2122;
- t[63195] = 0x2122;
- t[63729] = 0x23a7;
- t[63730] = 0x23a8;
- t[63731] = 0x23a9;
- t[63740] = 0x23ab;
- t[63741] = 0x23ac;
- t[63742] = 0x23ad;
- t[63726] = 0x23a1;
- t[63727] = 0x23a2;
- t[63728] = 0x23a3;
- t[63737] = 0x23a4;
- t[63738] = 0x23a5;
- t[63739] = 0x23a6;
- t[63723] = 0x239b;
- t[63724] = 0x239c;
- t[63725] = 0x239d;
- t[63734] = 0x239e;
- t[63735] = 0x239f;
- t[63736] = 0x23a0;
-});
-function mapSpecialUnicodeValues(code) {
- if (code >= 0xfff0 && code <= 0xffff) {
- return 0;
- } else if (code >= 0xf600 && code <= 0xf8ff) {
- return getSpecialPUASymbols()[code] || code;
- } else if (code === 0x00ad) {
- return 0x002d;
- }
- return code;
-}
-function getUnicodeForGlyph(name, glyphsUnicodeMap) {
- var unicode = glyphsUnicodeMap[name];
- if (unicode !== undefined) {
- return unicode;
- }
- if (!name) {
- return -1;
- }
- if (name[0] === "u") {
- var nameLen = name.length, hexStr;
- if (nameLen === 7 && name[1] === "n" && name[2] === "i") {
- hexStr = name.substring(3);
- } else if (nameLen >= 5 && nameLen <= 7) {
- hexStr = name.substring(1);
- } else {
- return -1;
- }
- if (hexStr === hexStr.toUpperCase()) {
- unicode = parseInt(hexStr, 16);
- if (unicode >= 0) {
- return unicode;
- }
- }
- }
- return -1;
-}
-var UnicodeRanges = [
- {
- begin: 0x0000,
- end: 0x007f
- },
- {
- begin: 0x0080,
- end: 0x00ff
- },
- {
- begin: 0x0100,
- end: 0x017f
- },
- {
- begin: 0x0180,
- end: 0x024f
- },
- {
- begin: 0x0250,
- end: 0x02af
- },
- {
- begin: 0x02b0,
- end: 0x02ff
- },
- {
- begin: 0x0300,
- end: 0x036f
- },
- {
- begin: 0x0370,
- end: 0x03ff
- },
- {
- begin: 0x2c80,
- end: 0x2cff
- },
- {
- begin: 0x0400,
- end: 0x04ff
- },
- {
- begin: 0x0530,
- end: 0x058f
- },
- {
- begin: 0x0590,
- end: 0x05ff
- },
- {
- begin: 0xa500,
- end: 0xa63f
- },
- {
- begin: 0x0600,
- end: 0x06ff
- },
- {
- begin: 0x07c0,
- end: 0x07ff
- },
- {
- begin: 0x0900,
- end: 0x097f
- },
- {
- begin: 0x0980,
- end: 0x09ff
- },
- {
- begin: 0x0a00,
- end: 0x0a7f
- },
- {
- begin: 0x0a80,
- end: 0x0aff
- },
- {
- begin: 0x0b00,
- end: 0x0b7f
- },
- {
- begin: 0x0b80,
- end: 0x0bff
- },
- {
- begin: 0x0c00,
- end: 0x0c7f
- },
- {
- begin: 0x0c80,
- end: 0x0cff
- },
- {
- begin: 0x0d00,
- end: 0x0d7f
- },
- {
- begin: 0x0e00,
- end: 0x0e7f
- },
- {
- begin: 0x0e80,
- end: 0x0eff
- },
- {
- begin: 0x10a0,
- end: 0x10ff
- },
- {
- begin: 0x1b00,
- end: 0x1b7f
- },
- {
- begin: 0x1100,
- end: 0x11ff
- },
- {
- begin: 0x1e00,
- end: 0x1eff
- },
- {
- begin: 0x1f00,
- end: 0x1fff
- },
- {
- begin: 0x2000,
- end: 0x206f
- },
- {
- begin: 0x2070,
- end: 0x209f
- },
- {
- begin: 0x20a0,
- end: 0x20cf
- },
- {
- begin: 0x20d0,
- end: 0x20ff
- },
- {
- begin: 0x2100,
- end: 0x214f
- },
- {
- begin: 0x2150,
- end: 0x218f
- },
- {
- begin: 0x2190,
- end: 0x21ff
- },
- {
- begin: 0x2200,
- end: 0x22ff
- },
- {
- begin: 0x2300,
- end: 0x23ff
- },
- {
- begin: 0x2400,
- end: 0x243f
- },
- {
- begin: 0x2440,
- end: 0x245f
- },
- {
- begin: 0x2460,
- end: 0x24ff
- },
- {
- begin: 0x2500,
- end: 0x257f
- },
- {
- begin: 0x2580,
- end: 0x259f
- },
- {
- begin: 0x25a0,
- end: 0x25ff
- },
- {
- begin: 0x2600,
- end: 0x26ff
- },
- {
- begin: 0x2700,
- end: 0x27bf
- },
- {
- begin: 0x3000,
- end: 0x303f
- },
- {
- begin: 0x3040,
- end: 0x309f
- },
- {
- begin: 0x30a0,
- end: 0x30ff
- },
- {
- begin: 0x3100,
- end: 0x312f
- },
- {
- begin: 0x3130,
- end: 0x318f
- },
- {
- begin: 0xa840,
- end: 0xa87f
- },
- {
- begin: 0x3200,
- end: 0x32ff
- },
- {
- begin: 0x3300,
- end: 0x33ff
- },
- {
- begin: 0xac00,
- end: 0xd7af
- },
- {
- begin: 0xd800,
- end: 0xdfff
- },
- {
- begin: 0x10900,
- end: 0x1091f
- },
- {
- begin: 0x4e00,
- end: 0x9fff
- },
- {
- begin: 0xe000,
- end: 0xf8ff
- },
- {
- begin: 0x31c0,
- end: 0x31ef
- },
- {
- begin: 0xfb00,
- end: 0xfb4f
- },
- {
- begin: 0xfb50,
- end: 0xfdff
- },
- {
- begin: 0xfe20,
- end: 0xfe2f
- },
- {
- begin: 0xfe10,
- end: 0xfe1f
- },
- {
- begin: 0xfe50,
- end: 0xfe6f
- },
- {
- begin: 0xfe70,
- end: 0xfeff
- },
- {
- begin: 0xff00,
- end: 0xffef
- },
- {
- begin: 0xfff0,
- end: 0xffff
- },
- {
- begin: 0x0f00,
- end: 0x0fff
- },
- {
- begin: 0x0700,
- end: 0x074f
- },
- {
- begin: 0x0780,
- end: 0x07bf
- },
- {
- begin: 0x0d80,
- end: 0x0dff
- },
- {
- begin: 0x1000,
- end: 0x109f
- },
- {
- begin: 0x1200,
- end: 0x137f
- },
- {
- begin: 0x13a0,
- end: 0x13ff
- },
- {
- begin: 0x1400,
- end: 0x167f
- },
- {
- begin: 0x1680,
- end: 0x169f
- },
- {
- begin: 0x16a0,
- end: 0x16ff
- },
- {
- begin: 0x1780,
- end: 0x17ff
- },
- {
- begin: 0x1800,
- end: 0x18af
- },
- {
- begin: 0x2800,
- end: 0x28ff
- },
- {
- begin: 0xa000,
- end: 0xa48f
- },
- {
- begin: 0x1700,
- end: 0x171f
- },
- {
- begin: 0x10300,
- end: 0x1032f
- },
- {
- begin: 0x10330,
- end: 0x1034f
- },
- {
- begin: 0x10400,
- end: 0x1044f
- },
- {
- begin: 0x1d000,
- end: 0x1d0ff
- },
- {
- begin: 0x1d400,
- end: 0x1d7ff
- },
- {
- begin: 0xff000,
- end: 0xffffd
- },
- {
- begin: 0xfe00,
- end: 0xfe0f
- },
- {
- begin: 0xe0000,
- end: 0xe007f
- },
- {
- begin: 0x1900,
- end: 0x194f
- },
- {
- begin: 0x1950,
- end: 0x197f
- },
- {
- begin: 0x1980,
- end: 0x19df
- },
- {
- begin: 0x1a00,
- end: 0x1a1f
- },
- {
- begin: 0x2c00,
- end: 0x2c5f
- },
- {
- begin: 0x2d30,
- end: 0x2d7f
- },
- {
- begin: 0x4dc0,
- end: 0x4dff
- },
- {
- begin: 0xa800,
- end: 0xa82f
- },
- {
- begin: 0x10000,
- end: 0x1007f
- },
- {
- begin: 0x10140,
- end: 0x1018f
- },
- {
- begin: 0x10380,
- end: 0x1039f
- },
- {
- begin: 0x103a0,
- end: 0x103df
- },
- {
- begin: 0x10450,
- end: 0x1047f
- },
- {
- begin: 0x10480,
- end: 0x104af
- },
- {
- begin: 0x10800,
- end: 0x1083f
- },
- {
- begin: 0x10a00,
- end: 0x10a5f
- },
- {
- begin: 0x1d300,
- end: 0x1d35f
- },
- {
- begin: 0x12000,
- end: 0x123ff
- },
- {
- begin: 0x1d360,
- end: 0x1d37f
- },
- {
- begin: 0x1b80,
- end: 0x1bbf
- },
- {
- begin: 0x1c00,
- end: 0x1c4f
- },
- {
- begin: 0x1c50,
- end: 0x1c7f
- },
- {
- begin: 0xa880,
- end: 0xa8df
- },
- {
- begin: 0xa900,
- end: 0xa92f
- },
- {
- begin: 0xa930,
- end: 0xa95f
- },
- {
- begin: 0xaa00,
- end: 0xaa5f
- },
- {
- begin: 0x10190,
- end: 0x101cf
- },
- {
- begin: 0x101d0,
- end: 0x101ff
- },
- {
- begin: 0x102a0,
- end: 0x102df
- },
- {
- begin: 0x1f030,
- end: 0x1f09f
- }
-];
-function getUnicodeRangeFor(value) {
- for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {
- var range = UnicodeRanges[i];
- if (value >= range.begin && value < range.end) {
- return i;
- }
- }
- return -1;
-}
-function isRTLRangeFor(value) {
- var range = UnicodeRanges[13];
- if (value >= range.begin && value < range.end) {
- return true;
- }
- range = UnicodeRanges[11];
- if (value >= range.begin && value < range.end) {
- return true;
- }
- return false;
-}
-var getNormalizedUnicodes = getLookupTableFactory(function (t) {
- t["\u00A8"] = "\u0020\u0308";
- t["\u00AF"] = "\u0020\u0304";
- t["\u00B4"] = "\u0020\u0301";
- t["\u00B5"] = "\u03BC";
- t["\u00B8"] = "\u0020\u0327";
- t["\u0132"] = "\u0049\u004A";
- t["\u0133"] = "\u0069\u006A";
- t["\u013F"] = "\u004C\u00B7";
- t["\u0140"] = "\u006C\u00B7";
- t["\u0149"] = "\u02BC\u006E";
- t["\u017F"] = "\u0073";
- t["\u01C4"] = "\u0044\u017D";
- t["\u01C5"] = "\u0044\u017E";
- t["\u01C6"] = "\u0064\u017E";
- t["\u01C7"] = "\u004C\u004A";
- t["\u01C8"] = "\u004C\u006A";
- t["\u01C9"] = "\u006C\u006A";
- t["\u01CA"] = "\u004E\u004A";
- t["\u01CB"] = "\u004E\u006A";
- t["\u01CC"] = "\u006E\u006A";
- t["\u01F1"] = "\u0044\u005A";
- t["\u01F2"] = "\u0044\u007A";
- t["\u01F3"] = "\u0064\u007A";
- t["\u02D8"] = "\u0020\u0306";
- t["\u02D9"] = "\u0020\u0307";
- t["\u02DA"] = "\u0020\u030A";
- t["\u02DB"] = "\u0020\u0328";
- t["\u02DC"] = "\u0020\u0303";
- t["\u02DD"] = "\u0020\u030B";
- t["\u037A"] = "\u0020\u0345";
- t["\u0384"] = "\u0020\u0301";
- t["\u03D0"] = "\u03B2";
- t["\u03D1"] = "\u03B8";
- t["\u03D2"] = "\u03A5";
- t["\u03D5"] = "\u03C6";
- t["\u03D6"] = "\u03C0";
- t["\u03F0"] = "\u03BA";
- t["\u03F1"] = "\u03C1";
- t["\u03F2"] = "\u03C2";
- t["\u03F4"] = "\u0398";
- t["\u03F5"] = "\u03B5";
- t["\u03F9"] = "\u03A3";
- t["\u0587"] = "\u0565\u0582";
- t["\u0675"] = "\u0627\u0674";
- t["\u0676"] = "\u0648\u0674";
- t["\u0677"] = "\u06C7\u0674";
- t["\u0678"] = "\u064A\u0674";
- t["\u0E33"] = "\u0E4D\u0E32";
- t["\u0EB3"] = "\u0ECD\u0EB2";
- t["\u0EDC"] = "\u0EAB\u0E99";
- t["\u0EDD"] = "\u0EAB\u0EA1";
- t["\u0F77"] = "\u0FB2\u0F81";
- t["\u0F79"] = "\u0FB3\u0F81";
- t["\u1E9A"] = "\u0061\u02BE";
- t["\u1FBD"] = "\u0020\u0313";
- t["\u1FBF"] = "\u0020\u0313";
- t["\u1FC0"] = "\u0020\u0342";
- t["\u1FFE"] = "\u0020\u0314";
- t["\u2002"] = "\u0020";
- t["\u2003"] = "\u0020";
- t["\u2004"] = "\u0020";
- t["\u2005"] = "\u0020";
- t["\u2006"] = "\u0020";
- t["\u2008"] = "\u0020";
- t["\u2009"] = "\u0020";
- t["\u200A"] = "\u0020";
- t["\u2017"] = "\u0020\u0333";
- t["\u2024"] = "\u002E";
- t["\u2025"] = "\u002E\u002E";
- t["\u2026"] = "\u002E\u002E\u002E";
- t["\u2033"] = "\u2032\u2032";
- t["\u2034"] = "\u2032\u2032\u2032";
- t["\u2036"] = "\u2035\u2035";
- t["\u2037"] = "\u2035\u2035\u2035";
- t["\u203C"] = "\u0021\u0021";
- t["\u203E"] = "\u0020\u0305";
- t["\u2047"] = "\u003F\u003F";
- t["\u2048"] = "\u003F\u0021";
- t["\u2049"] = "\u0021\u003F";
- t["\u2057"] = "\u2032\u2032\u2032\u2032";
- t["\u205F"] = "\u0020";
- t["\u20A8"] = "\u0052\u0073";
- t["\u2100"] = "\u0061\u002F\u0063";
- t["\u2101"] = "\u0061\u002F\u0073";
- t["\u2103"] = "\u00B0\u0043";
- t["\u2105"] = "\u0063\u002F\u006F";
- t["\u2106"] = "\u0063\u002F\u0075";
- t["\u2107"] = "\u0190";
- t["\u2109"] = "\u00B0\u0046";
- t["\u2116"] = "\u004E\u006F";
- t["\u2121"] = "\u0054\u0045\u004C";
- t["\u2135"] = "\u05D0";
- t["\u2136"] = "\u05D1";
- t["\u2137"] = "\u05D2";
- t["\u2138"] = "\u05D3";
- t["\u213B"] = "\u0046\u0041\u0058";
- t["\u2160"] = "\u0049";
- t["\u2161"] = "\u0049\u0049";
- t["\u2162"] = "\u0049\u0049\u0049";
- t["\u2163"] = "\u0049\u0056";
- t["\u2164"] = "\u0056";
- t["\u2165"] = "\u0056\u0049";
- t["\u2166"] = "\u0056\u0049\u0049";
- t["\u2167"] = "\u0056\u0049\u0049\u0049";
- t["\u2168"] = "\u0049\u0058";
- t["\u2169"] = "\u0058";
- t["\u216A"] = "\u0058\u0049";
- t["\u216B"] = "\u0058\u0049\u0049";
- t["\u216C"] = "\u004C";
- t["\u216D"] = "\u0043";
- t["\u216E"] = "\u0044";
- t["\u216F"] = "\u004D";
- t["\u2170"] = "\u0069";
- t["\u2171"] = "\u0069\u0069";
- t["\u2172"] = "\u0069\u0069\u0069";
- t["\u2173"] = "\u0069\u0076";
- t["\u2174"] = "\u0076";
- t["\u2175"] = "\u0076\u0069";
- t["\u2176"] = "\u0076\u0069\u0069";
- t["\u2177"] = "\u0076\u0069\u0069\u0069";
- t["\u2178"] = "\u0069\u0078";
- t["\u2179"] = "\u0078";
- t["\u217A"] = "\u0078\u0069";
- t["\u217B"] = "\u0078\u0069\u0069";
- t["\u217C"] = "\u006C";
- t["\u217D"] = "\u0063";
- t["\u217E"] = "\u0064";
- t["\u217F"] = "\u006D";
- t["\u222C"] = "\u222B\u222B";
- t["\u222D"] = "\u222B\u222B\u222B";
- t["\u222F"] = "\u222E\u222E";
- t["\u2230"] = "\u222E\u222E\u222E";
- t["\u2474"] = "\u0028\u0031\u0029";
- t["\u2475"] = "\u0028\u0032\u0029";
- t["\u2476"] = "\u0028\u0033\u0029";
- t["\u2477"] = "\u0028\u0034\u0029";
- t["\u2478"] = "\u0028\u0035\u0029";
- t["\u2479"] = "\u0028\u0036\u0029";
- t["\u247A"] = "\u0028\u0037\u0029";
- t["\u247B"] = "\u0028\u0038\u0029";
- t["\u247C"] = "\u0028\u0039\u0029";
- t["\u247D"] = "\u0028\u0031\u0030\u0029";
- t["\u247E"] = "\u0028\u0031\u0031\u0029";
- t["\u247F"] = "\u0028\u0031\u0032\u0029";
- t["\u2480"] = "\u0028\u0031\u0033\u0029";
- t["\u2481"] = "\u0028\u0031\u0034\u0029";
- t["\u2482"] = "\u0028\u0031\u0035\u0029";
- t["\u2483"] = "\u0028\u0031\u0036\u0029";
- t["\u2484"] = "\u0028\u0031\u0037\u0029";
- t["\u2485"] = "\u0028\u0031\u0038\u0029";
- t["\u2486"] = "\u0028\u0031\u0039\u0029";
- t["\u2487"] = "\u0028\u0032\u0030\u0029";
- t["\u2488"] = "\u0031\u002E";
- t["\u2489"] = "\u0032\u002E";
- t["\u248A"] = "\u0033\u002E";
- t["\u248B"] = "\u0034\u002E";
- t["\u248C"] = "\u0035\u002E";
- t["\u248D"] = "\u0036\u002E";
- t["\u248E"] = "\u0037\u002E";
- t["\u248F"] = "\u0038\u002E";
- t["\u2490"] = "\u0039\u002E";
- t["\u2491"] = "\u0031\u0030\u002E";
- t["\u2492"] = "\u0031\u0031\u002E";
- t["\u2493"] = "\u0031\u0032\u002E";
- t["\u2494"] = "\u0031\u0033\u002E";
- t["\u2495"] = "\u0031\u0034\u002E";
- t["\u2496"] = "\u0031\u0035\u002E";
- t["\u2497"] = "\u0031\u0036\u002E";
- t["\u2498"] = "\u0031\u0037\u002E";
- t["\u2499"] = "\u0031\u0038\u002E";
- t["\u249A"] = "\u0031\u0039\u002E";
- t["\u249B"] = "\u0032\u0030\u002E";
- t["\u249C"] = "\u0028\u0061\u0029";
- t["\u249D"] = "\u0028\u0062\u0029";
- t["\u249E"] = "\u0028\u0063\u0029";
- t["\u249F"] = "\u0028\u0064\u0029";
- t["\u24A0"] = "\u0028\u0065\u0029";
- t["\u24A1"] = "\u0028\u0066\u0029";
- t["\u24A2"] = "\u0028\u0067\u0029";
- t["\u24A3"] = "\u0028\u0068\u0029";
- t["\u24A4"] = "\u0028\u0069\u0029";
- t["\u24A5"] = "\u0028\u006A\u0029";
- t["\u24A6"] = "\u0028\u006B\u0029";
- t["\u24A7"] = "\u0028\u006C\u0029";
- t["\u24A8"] = "\u0028\u006D\u0029";
- t["\u24A9"] = "\u0028\u006E\u0029";
- t["\u24AA"] = "\u0028\u006F\u0029";
- t["\u24AB"] = "\u0028\u0070\u0029";
- t["\u24AC"] = "\u0028\u0071\u0029";
- t["\u24AD"] = "\u0028\u0072\u0029";
- t["\u24AE"] = "\u0028\u0073\u0029";
- t["\u24AF"] = "\u0028\u0074\u0029";
- t["\u24B0"] = "\u0028\u0075\u0029";
- t["\u24B1"] = "\u0028\u0076\u0029";
- t["\u24B2"] = "\u0028\u0077\u0029";
- t["\u24B3"] = "\u0028\u0078\u0029";
- t["\u24B4"] = "\u0028\u0079\u0029";
- t["\u24B5"] = "\u0028\u007A\u0029";
- t["\u2A0C"] = "\u222B\u222B\u222B\u222B";
- t["\u2A74"] = "\u003A\u003A\u003D";
- t["\u2A75"] = "\u003D\u003D";
- t["\u2A76"] = "\u003D\u003D\u003D";
- t["\u2E9F"] = "\u6BCD";
- t["\u2EF3"] = "\u9F9F";
- t["\u2F00"] = "\u4E00";
- t["\u2F01"] = "\u4E28";
- t["\u2F02"] = "\u4E36";
- t["\u2F03"] = "\u4E3F";
- t["\u2F04"] = "\u4E59";
- t["\u2F05"] = "\u4E85";
- t["\u2F06"] = "\u4E8C";
- t["\u2F07"] = "\u4EA0";
- t["\u2F08"] = "\u4EBA";
- t["\u2F09"] = "\u513F";
- t["\u2F0A"] = "\u5165";
- t["\u2F0B"] = "\u516B";
- t["\u2F0C"] = "\u5182";
- t["\u2F0D"] = "\u5196";
- t["\u2F0E"] = "\u51AB";
- t["\u2F0F"] = "\u51E0";
- t["\u2F10"] = "\u51F5";
- t["\u2F11"] = "\u5200";
- t["\u2F12"] = "\u529B";
- t["\u2F13"] = "\u52F9";
- t["\u2F14"] = "\u5315";
- t["\u2F15"] = "\u531A";
- t["\u2F16"] = "\u5338";
- t["\u2F17"] = "\u5341";
- t["\u2F18"] = "\u535C";
- t["\u2F19"] = "\u5369";
- t["\u2F1A"] = "\u5382";
- t["\u2F1B"] = "\u53B6";
- t["\u2F1C"] = "\u53C8";
- t["\u2F1D"] = "\u53E3";
- t["\u2F1E"] = "\u56D7";
- t["\u2F1F"] = "\u571F";
- t["\u2F20"] = "\u58EB";
- t["\u2F21"] = "\u5902";
- t["\u2F22"] = "\u590A";
- t["\u2F23"] = "\u5915";
- t["\u2F24"] = "\u5927";
- t["\u2F25"] = "\u5973";
- t["\u2F26"] = "\u5B50";
- t["\u2F27"] = "\u5B80";
- t["\u2F28"] = "\u5BF8";
- t["\u2F29"] = "\u5C0F";
- t["\u2F2A"] = "\u5C22";
- t["\u2F2B"] = "\u5C38";
- t["\u2F2C"] = "\u5C6E";
- t["\u2F2D"] = "\u5C71";
- t["\u2F2E"] = "\u5DDB";
- t["\u2F2F"] = "\u5DE5";
- t["\u2F30"] = "\u5DF1";
- t["\u2F31"] = "\u5DFE";
- t["\u2F32"] = "\u5E72";
- t["\u2F33"] = "\u5E7A";
- t["\u2F34"] = "\u5E7F";
- t["\u2F35"] = "\u5EF4";
- t["\u2F36"] = "\u5EFE";
- t["\u2F37"] = "\u5F0B";
- t["\u2F38"] = "\u5F13";
- t["\u2F39"] = "\u5F50";
- t["\u2F3A"] = "\u5F61";
- t["\u2F3B"] = "\u5F73";
- t["\u2F3C"] = "\u5FC3";
- t["\u2F3D"] = "\u6208";
- t["\u2F3E"] = "\u6236";
- t["\u2F3F"] = "\u624B";
- t["\u2F40"] = "\u652F";
- t["\u2F41"] = "\u6534";
- t["\u2F42"] = "\u6587";
- t["\u2F43"] = "\u6597";
- t["\u2F44"] = "\u65A4";
- t["\u2F45"] = "\u65B9";
- t["\u2F46"] = "\u65E0";
- t["\u2F47"] = "\u65E5";
- t["\u2F48"] = "\u66F0";
- t["\u2F49"] = "\u6708";
- t["\u2F4A"] = "\u6728";
- t["\u2F4B"] = "\u6B20";
- t["\u2F4C"] = "\u6B62";
- t["\u2F4D"] = "\u6B79";
- t["\u2F4E"] = "\u6BB3";
- t["\u2F4F"] = "\u6BCB";
- t["\u2F50"] = "\u6BD4";
- t["\u2F51"] = "\u6BDB";
- t["\u2F52"] = "\u6C0F";
- t["\u2F53"] = "\u6C14";
- t["\u2F54"] = "\u6C34";
- t["\u2F55"] = "\u706B";
- t["\u2F56"] = "\u722A";
- t["\u2F57"] = "\u7236";
- t["\u2F58"] = "\u723B";
- t["\u2F59"] = "\u723F";
- t["\u2F5A"] = "\u7247";
- t["\u2F5B"] = "\u7259";
- t["\u2F5C"] = "\u725B";
- t["\u2F5D"] = "\u72AC";
- t["\u2F5E"] = "\u7384";
- t["\u2F5F"] = "\u7389";
- t["\u2F60"] = "\u74DC";
- t["\u2F61"] = "\u74E6";
- t["\u2F62"] = "\u7518";
- t["\u2F63"] = "\u751F";
- t["\u2F64"] = "\u7528";
- t["\u2F65"] = "\u7530";
- t["\u2F66"] = "\u758B";
- t["\u2F67"] = "\u7592";
- t["\u2F68"] = "\u7676";
- t["\u2F69"] = "\u767D";
- t["\u2F6A"] = "\u76AE";
- t["\u2F6B"] = "\u76BF";
- t["\u2F6C"] = "\u76EE";
- t["\u2F6D"] = "\u77DB";
- t["\u2F6E"] = "\u77E2";
- t["\u2F6F"] = "\u77F3";
- t["\u2F70"] = "\u793A";
- t["\u2F71"] = "\u79B8";
- t["\u2F72"] = "\u79BE";
- t["\u2F73"] = "\u7A74";
- t["\u2F74"] = "\u7ACB";
- t["\u2F75"] = "\u7AF9";
- t["\u2F76"] = "\u7C73";
- t["\u2F77"] = "\u7CF8";
- t["\u2F78"] = "\u7F36";
- t["\u2F79"] = "\u7F51";
- t["\u2F7A"] = "\u7F8A";
- t["\u2F7B"] = "\u7FBD";
- t["\u2F7C"] = "\u8001";
- t["\u2F7D"] = "\u800C";
- t["\u2F7E"] = "\u8012";
- t["\u2F7F"] = "\u8033";
- t["\u2F80"] = "\u807F";
- t["\u2F81"] = "\u8089";
- t["\u2F82"] = "\u81E3";
- t["\u2F83"] = "\u81EA";
- t["\u2F84"] = "\u81F3";
- t["\u2F85"] = "\u81FC";
- t["\u2F86"] = "\u820C";
- t["\u2F87"] = "\u821B";
- t["\u2F88"] = "\u821F";
- t["\u2F89"] = "\u826E";
- t["\u2F8A"] = "\u8272";
- t["\u2F8B"] = "\u8278";
- t["\u2F8C"] = "\u864D";
- t["\u2F8D"] = "\u866B";
- t["\u2F8E"] = "\u8840";
- t["\u2F8F"] = "\u884C";
- t["\u2F90"] = "\u8863";
- t["\u2F91"] = "\u897E";
- t["\u2F92"] = "\u898B";
- t["\u2F93"] = "\u89D2";
- t["\u2F94"] = "\u8A00";
- t["\u2F95"] = "\u8C37";
- t["\u2F96"] = "\u8C46";
- t["\u2F97"] = "\u8C55";
- t["\u2F98"] = "\u8C78";
- t["\u2F99"] = "\u8C9D";
- t["\u2F9A"] = "\u8D64";
- t["\u2F9B"] = "\u8D70";
- t["\u2F9C"] = "\u8DB3";
- t["\u2F9D"] = "\u8EAB";
- t["\u2F9E"] = "\u8ECA";
- t["\u2F9F"] = "\u8F9B";
- t["\u2FA0"] = "\u8FB0";
- t["\u2FA1"] = "\u8FB5";
- t["\u2FA2"] = "\u9091";
- t["\u2FA3"] = "\u9149";
- t["\u2FA4"] = "\u91C6";
- t["\u2FA5"] = "\u91CC";
- t["\u2FA6"] = "\u91D1";
- t["\u2FA7"] = "\u9577";
- t["\u2FA8"] = "\u9580";
- t["\u2FA9"] = "\u961C";
- t["\u2FAA"] = "\u96B6";
- t["\u2FAB"] = "\u96B9";
- t["\u2FAC"] = "\u96E8";
- t["\u2FAD"] = "\u9751";
- t["\u2FAE"] = "\u975E";
- t["\u2FAF"] = "\u9762";
- t["\u2FB0"] = "\u9769";
- t["\u2FB1"] = "\u97CB";
- t["\u2FB2"] = "\u97ED";
- t["\u2FB3"] = "\u97F3";
- t["\u2FB4"] = "\u9801";
- t["\u2FB5"] = "\u98A8";
- t["\u2FB6"] = "\u98DB";
- t["\u2FB7"] = "\u98DF";
- t["\u2FB8"] = "\u9996";
- t["\u2FB9"] = "\u9999";
- t["\u2FBA"] = "\u99AC";
- t["\u2FBB"] = "\u9AA8";
- t["\u2FBC"] = "\u9AD8";
- t["\u2FBD"] = "\u9ADF";
- t["\u2FBE"] = "\u9B25";
- t["\u2FBF"] = "\u9B2F";
- t["\u2FC0"] = "\u9B32";
- t["\u2FC1"] = "\u9B3C";
- t["\u2FC2"] = "\u9B5A";
- t["\u2FC3"] = "\u9CE5";
- t["\u2FC4"] = "\u9E75";
- t["\u2FC5"] = "\u9E7F";
- t["\u2FC6"] = "\u9EA5";
- t["\u2FC7"] = "\u9EBB";
- t["\u2FC8"] = "\u9EC3";
- t["\u2FC9"] = "\u9ECD";
- t["\u2FCA"] = "\u9ED1";
- t["\u2FCB"] = "\u9EF9";
- t["\u2FCC"] = "\u9EFD";
- t["\u2FCD"] = "\u9F0E";
- t["\u2FCE"] = "\u9F13";
- t["\u2FCF"] = "\u9F20";
- t["\u2FD0"] = "\u9F3B";
- t["\u2FD1"] = "\u9F4A";
- t["\u2FD2"] = "\u9F52";
- t["\u2FD3"] = "\u9F8D";
- t["\u2FD4"] = "\u9F9C";
- t["\u2FD5"] = "\u9FA0";
- t["\u3036"] = "\u3012";
- t["\u3038"] = "\u5341";
- t["\u3039"] = "\u5344";
- t["\u303A"] = "\u5345";
- t["\u309B"] = "\u0020\u3099";
- t["\u309C"] = "\u0020\u309A";
- t["\u3131"] = "\u1100";
- t["\u3132"] = "\u1101";
- t["\u3133"] = "\u11AA";
- t["\u3134"] = "\u1102";
- t["\u3135"] = "\u11AC";
- t["\u3136"] = "\u11AD";
- t["\u3137"] = "\u1103";
- t["\u3138"] = "\u1104";
- t["\u3139"] = "\u1105";
- t["\u313A"] = "\u11B0";
- t["\u313B"] = "\u11B1";
- t["\u313C"] = "\u11B2";
- t["\u313D"] = "\u11B3";
- t["\u313E"] = "\u11B4";
- t["\u313F"] = "\u11B5";
- t["\u3140"] = "\u111A";
- t["\u3141"] = "\u1106";
- t["\u3142"] = "\u1107";
- t["\u3143"] = "\u1108";
- t["\u3144"] = "\u1121";
- t["\u3145"] = "\u1109";
- t["\u3146"] = "\u110A";
- t["\u3147"] = "\u110B";
- t["\u3148"] = "\u110C";
- t["\u3149"] = "\u110D";
- t["\u314A"] = "\u110E";
- t["\u314B"] = "\u110F";
- t["\u314C"] = "\u1110";
- t["\u314D"] = "\u1111";
- t["\u314E"] = "\u1112";
- t["\u314F"] = "\u1161";
- t["\u3150"] = "\u1162";
- t["\u3151"] = "\u1163";
- t["\u3152"] = "\u1164";
- t["\u3153"] = "\u1165";
- t["\u3154"] = "\u1166";
- t["\u3155"] = "\u1167";
- t["\u3156"] = "\u1168";
- t["\u3157"] = "\u1169";
- t["\u3158"] = "\u116A";
- t["\u3159"] = "\u116B";
- t["\u315A"] = "\u116C";
- t["\u315B"] = "\u116D";
- t["\u315C"] = "\u116E";
- t["\u315D"] = "\u116F";
- t["\u315E"] = "\u1170";
- t["\u315F"] = "\u1171";
- t["\u3160"] = "\u1172";
- t["\u3161"] = "\u1173";
- t["\u3162"] = "\u1174";
- t["\u3163"] = "\u1175";
- t["\u3164"] = "\u1160";
- t["\u3165"] = "\u1114";
- t["\u3166"] = "\u1115";
- t["\u3167"] = "\u11C7";
- t["\u3168"] = "\u11C8";
- t["\u3169"] = "\u11CC";
- t["\u316A"] = "\u11CE";
- t["\u316B"] = "\u11D3";
- t["\u316C"] = "\u11D7";
- t["\u316D"] = "\u11D9";
- t["\u316E"] = "\u111C";
- t["\u316F"] = "\u11DD";
- t["\u3170"] = "\u11DF";
- t["\u3171"] = "\u111D";
- t["\u3172"] = "\u111E";
- t["\u3173"] = "\u1120";
- t["\u3174"] = "\u1122";
- t["\u3175"] = "\u1123";
- t["\u3176"] = "\u1127";
- t["\u3177"] = "\u1129";
- t["\u3178"] = "\u112B";
- t["\u3179"] = "\u112C";
- t["\u317A"] = "\u112D";
- t["\u317B"] = "\u112E";
- t["\u317C"] = "\u112F";
- t["\u317D"] = "\u1132";
- t["\u317E"] = "\u1136";
- t["\u317F"] = "\u1140";
- t["\u3180"] = "\u1147";
- t["\u3181"] = "\u114C";
- t["\u3182"] = "\u11F1";
- t["\u3183"] = "\u11F2";
- t["\u3184"] = "\u1157";
- t["\u3185"] = "\u1158";
- t["\u3186"] = "\u1159";
- t["\u3187"] = "\u1184";
- t["\u3188"] = "\u1185";
- t["\u3189"] = "\u1188";
- t["\u318A"] = "\u1191";
- t["\u318B"] = "\u1192";
- t["\u318C"] = "\u1194";
- t["\u318D"] = "\u119E";
- t["\u318E"] = "\u11A1";
- t["\u3200"] = "\u0028\u1100\u0029";
- t["\u3201"] = "\u0028\u1102\u0029";
- t["\u3202"] = "\u0028\u1103\u0029";
- t["\u3203"] = "\u0028\u1105\u0029";
- t["\u3204"] = "\u0028\u1106\u0029";
- t["\u3205"] = "\u0028\u1107\u0029";
- t["\u3206"] = "\u0028\u1109\u0029";
- t["\u3207"] = "\u0028\u110B\u0029";
- t["\u3208"] = "\u0028\u110C\u0029";
- t["\u3209"] = "\u0028\u110E\u0029";
- t["\u320A"] = "\u0028\u110F\u0029";
- t["\u320B"] = "\u0028\u1110\u0029";
- t["\u320C"] = "\u0028\u1111\u0029";
- t["\u320D"] = "\u0028\u1112\u0029";
- t["\u320E"] = "\u0028\u1100\u1161\u0029";
- t["\u320F"] = "\u0028\u1102\u1161\u0029";
- t["\u3210"] = "\u0028\u1103\u1161\u0029";
- t["\u3211"] = "\u0028\u1105\u1161\u0029";
- t["\u3212"] = "\u0028\u1106\u1161\u0029";
- t["\u3213"] = "\u0028\u1107\u1161\u0029";
- t["\u3214"] = "\u0028\u1109\u1161\u0029";
- t["\u3215"] = "\u0028\u110B\u1161\u0029";
- t["\u3216"] = "\u0028\u110C\u1161\u0029";
- t["\u3217"] = "\u0028\u110E\u1161\u0029";
- t["\u3218"] = "\u0028\u110F\u1161\u0029";
- t["\u3219"] = "\u0028\u1110\u1161\u0029";
- t["\u321A"] = "\u0028\u1111\u1161\u0029";
- t["\u321B"] = "\u0028\u1112\u1161\u0029";
- t["\u321C"] = "\u0028\u110C\u116E\u0029";
- t["\u321D"] = "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029";
- t["\u321E"] = "\u0028\u110B\u1169\u1112\u116E\u0029";
- t["\u3220"] = "\u0028\u4E00\u0029";
- t["\u3221"] = "\u0028\u4E8C\u0029";
- t["\u3222"] = "\u0028\u4E09\u0029";
- t["\u3223"] = "\u0028\u56DB\u0029";
- t["\u3224"] = "\u0028\u4E94\u0029";
- t["\u3225"] = "\u0028\u516D\u0029";
- t["\u3226"] = "\u0028\u4E03\u0029";
- t["\u3227"] = "\u0028\u516B\u0029";
- t["\u3228"] = "\u0028\u4E5D\u0029";
- t["\u3229"] = "\u0028\u5341\u0029";
- t["\u322A"] = "\u0028\u6708\u0029";
- t["\u322B"] = "\u0028\u706B\u0029";
- t["\u322C"] = "\u0028\u6C34\u0029";
- t["\u322D"] = "\u0028\u6728\u0029";
- t["\u322E"] = "\u0028\u91D1\u0029";
- t["\u322F"] = "\u0028\u571F\u0029";
- t["\u3230"] = "\u0028\u65E5\u0029";
- t["\u3231"] = "\u0028\u682A\u0029";
- t["\u3232"] = "\u0028\u6709\u0029";
- t["\u3233"] = "\u0028\u793E\u0029";
- t["\u3234"] = "\u0028\u540D\u0029";
- t["\u3235"] = "\u0028\u7279\u0029";
- t["\u3236"] = "\u0028\u8CA1\u0029";
- t["\u3237"] = "\u0028\u795D\u0029";
- t["\u3238"] = "\u0028\u52B4\u0029";
- t["\u3239"] = "\u0028\u4EE3\u0029";
- t["\u323A"] = "\u0028\u547C\u0029";
- t["\u323B"] = "\u0028\u5B66\u0029";
- t["\u323C"] = "\u0028\u76E3\u0029";
- t["\u323D"] = "\u0028\u4F01\u0029";
- t["\u323E"] = "\u0028\u8CC7\u0029";
- t["\u323F"] = "\u0028\u5354\u0029";
- t["\u3240"] = "\u0028\u796D\u0029";
- t["\u3241"] = "\u0028\u4F11\u0029";
- t["\u3242"] = "\u0028\u81EA\u0029";
- t["\u3243"] = "\u0028\u81F3\u0029";
- t["\u32C0"] = "\u0031\u6708";
- t["\u32C1"] = "\u0032\u6708";
- t["\u32C2"] = "\u0033\u6708";
- t["\u32C3"] = "\u0034\u6708";
- t["\u32C4"] = "\u0035\u6708";
- t["\u32C5"] = "\u0036\u6708";
- t["\u32C6"] = "\u0037\u6708";
- t["\u32C7"] = "\u0038\u6708";
- t["\u32C8"] = "\u0039\u6708";
- t["\u32C9"] = "\u0031\u0030\u6708";
- t["\u32CA"] = "\u0031\u0031\u6708";
- t["\u32CB"] = "\u0031\u0032\u6708";
- t["\u3358"] = "\u0030\u70B9";
- t["\u3359"] = "\u0031\u70B9";
- t["\u335A"] = "\u0032\u70B9";
- t["\u335B"] = "\u0033\u70B9";
- t["\u335C"] = "\u0034\u70B9";
- t["\u335D"] = "\u0035\u70B9";
- t["\u335E"] = "\u0036\u70B9";
- t["\u335F"] = "\u0037\u70B9";
- t["\u3360"] = "\u0038\u70B9";
- t["\u3361"] = "\u0039\u70B9";
- t["\u3362"] = "\u0031\u0030\u70B9";
- t["\u3363"] = "\u0031\u0031\u70B9";
- t["\u3364"] = "\u0031\u0032\u70B9";
- t["\u3365"] = "\u0031\u0033\u70B9";
- t["\u3366"] = "\u0031\u0034\u70B9";
- t["\u3367"] = "\u0031\u0035\u70B9";
- t["\u3368"] = "\u0031\u0036\u70B9";
- t["\u3369"] = "\u0031\u0037\u70B9";
- t["\u336A"] = "\u0031\u0038\u70B9";
- t["\u336B"] = "\u0031\u0039\u70B9";
- t["\u336C"] = "\u0032\u0030\u70B9";
- t["\u336D"] = "\u0032\u0031\u70B9";
- t["\u336E"] = "\u0032\u0032\u70B9";
- t["\u336F"] = "\u0032\u0033\u70B9";
- t["\u3370"] = "\u0032\u0034\u70B9";
- t["\u33E0"] = "\u0031\u65E5";
- t["\u33E1"] = "\u0032\u65E5";
- t["\u33E2"] = "\u0033\u65E5";
- t["\u33E3"] = "\u0034\u65E5";
- t["\u33E4"] = "\u0035\u65E5";
- t["\u33E5"] = "\u0036\u65E5";
- t["\u33E6"] = "\u0037\u65E5";
- t["\u33E7"] = "\u0038\u65E5";
- t["\u33E8"] = "\u0039\u65E5";
- t["\u33E9"] = "\u0031\u0030\u65E5";
- t["\u33EA"] = "\u0031\u0031\u65E5";
- t["\u33EB"] = "\u0031\u0032\u65E5";
- t["\u33EC"] = "\u0031\u0033\u65E5";
- t["\u33ED"] = "\u0031\u0034\u65E5";
- t["\u33EE"] = "\u0031\u0035\u65E5";
- t["\u33EF"] = "\u0031\u0036\u65E5";
- t["\u33F0"] = "\u0031\u0037\u65E5";
- t["\u33F1"] = "\u0031\u0038\u65E5";
- t["\u33F2"] = "\u0031\u0039\u65E5";
- t["\u33F3"] = "\u0032\u0030\u65E5";
- t["\u33F4"] = "\u0032\u0031\u65E5";
- t["\u33F5"] = "\u0032\u0032\u65E5";
- t["\u33F6"] = "\u0032\u0033\u65E5";
- t["\u33F7"] = "\u0032\u0034\u65E5";
- t["\u33F8"] = "\u0032\u0035\u65E5";
- t["\u33F9"] = "\u0032\u0036\u65E5";
- t["\u33FA"] = "\u0032\u0037\u65E5";
- t["\u33FB"] = "\u0032\u0038\u65E5";
- t["\u33FC"] = "\u0032\u0039\u65E5";
- t["\u33FD"] = "\u0033\u0030\u65E5";
- t["\u33FE"] = "\u0033\u0031\u65E5";
- t["\uFB00"] = "\u0066\u0066";
- t["\uFB01"] = "\u0066\u0069";
- t["\uFB02"] = "\u0066\u006C";
- t["\uFB03"] = "\u0066\u0066\u0069";
- t["\uFB04"] = "\u0066\u0066\u006C";
- t["\uFB05"] = "\u017F\u0074";
- t["\uFB06"] = "\u0073\u0074";
- t["\uFB13"] = "\u0574\u0576";
- t["\uFB14"] = "\u0574\u0565";
- t["\uFB15"] = "\u0574\u056B";
- t["\uFB16"] = "\u057E\u0576";
- t["\uFB17"] = "\u0574\u056D";
- t["\uFB4F"] = "\u05D0\u05DC";
- t["\uFB50"] = "\u0671";
- t["\uFB51"] = "\u0671";
- t["\uFB52"] = "\u067B";
- t["\uFB53"] = "\u067B";
- t["\uFB54"] = "\u067B";
- t["\uFB55"] = "\u067B";
- t["\uFB56"] = "\u067E";
- t["\uFB57"] = "\u067E";
- t["\uFB58"] = "\u067E";
- t["\uFB59"] = "\u067E";
- t["\uFB5A"] = "\u0680";
- t["\uFB5B"] = "\u0680";
- t["\uFB5C"] = "\u0680";
- t["\uFB5D"] = "\u0680";
- t["\uFB5E"] = "\u067A";
- t["\uFB5F"] = "\u067A";
- t["\uFB60"] = "\u067A";
- t["\uFB61"] = "\u067A";
- t["\uFB62"] = "\u067F";
- t["\uFB63"] = "\u067F";
- t["\uFB64"] = "\u067F";
- t["\uFB65"] = "\u067F";
- t["\uFB66"] = "\u0679";
- t["\uFB67"] = "\u0679";
- t["\uFB68"] = "\u0679";
- t["\uFB69"] = "\u0679";
- t["\uFB6A"] = "\u06A4";
- t["\uFB6B"] = "\u06A4";
- t["\uFB6C"] = "\u06A4";
- t["\uFB6D"] = "\u06A4";
- t["\uFB6E"] = "\u06A6";
- t["\uFB6F"] = "\u06A6";
- t["\uFB70"] = "\u06A6";
- t["\uFB71"] = "\u06A6";
- t["\uFB72"] = "\u0684";
- t["\uFB73"] = "\u0684";
- t["\uFB74"] = "\u0684";
- t["\uFB75"] = "\u0684";
- t["\uFB76"] = "\u0683";
- t["\uFB77"] = "\u0683";
- t["\uFB78"] = "\u0683";
- t["\uFB79"] = "\u0683";
- t["\uFB7A"] = "\u0686";
- t["\uFB7B"] = "\u0686";
- t["\uFB7C"] = "\u0686";
- t["\uFB7D"] = "\u0686";
- t["\uFB7E"] = "\u0687";
- t["\uFB7F"] = "\u0687";
- t["\uFB80"] = "\u0687";
- t["\uFB81"] = "\u0687";
- t["\uFB82"] = "\u068D";
- t["\uFB83"] = "\u068D";
- t["\uFB84"] = "\u068C";
- t["\uFB85"] = "\u068C";
- t["\uFB86"] = "\u068E";
- t["\uFB87"] = "\u068E";
- t["\uFB88"] = "\u0688";
- t["\uFB89"] = "\u0688";
- t["\uFB8A"] = "\u0698";
- t["\uFB8B"] = "\u0698";
- t["\uFB8C"] = "\u0691";
- t["\uFB8D"] = "\u0691";
- t["\uFB8E"] = "\u06A9";
- t["\uFB8F"] = "\u06A9";
- t["\uFB90"] = "\u06A9";
- t["\uFB91"] = "\u06A9";
- t["\uFB92"] = "\u06AF";
- t["\uFB93"] = "\u06AF";
- t["\uFB94"] = "\u06AF";
- t["\uFB95"] = "\u06AF";
- t["\uFB96"] = "\u06B3";
- t["\uFB97"] = "\u06B3";
- t["\uFB98"] = "\u06B3";
- t["\uFB99"] = "\u06B3";
- t["\uFB9A"] = "\u06B1";
- t["\uFB9B"] = "\u06B1";
- t["\uFB9C"] = "\u06B1";
- t["\uFB9D"] = "\u06B1";
- t["\uFB9E"] = "\u06BA";
- t["\uFB9F"] = "\u06BA";
- t["\uFBA0"] = "\u06BB";
- t["\uFBA1"] = "\u06BB";
- t["\uFBA2"] = "\u06BB";
- t["\uFBA3"] = "\u06BB";
- t["\uFBA4"] = "\u06C0";
- t["\uFBA5"] = "\u06C0";
- t["\uFBA6"] = "\u06C1";
- t["\uFBA7"] = "\u06C1";
- t["\uFBA8"] = "\u06C1";
- t["\uFBA9"] = "\u06C1";
- t["\uFBAA"] = "\u06BE";
- t["\uFBAB"] = "\u06BE";
- t["\uFBAC"] = "\u06BE";
- t["\uFBAD"] = "\u06BE";
- t["\uFBAE"] = "\u06D2";
- t["\uFBAF"] = "\u06D2";
- t["\uFBB0"] = "\u06D3";
- t["\uFBB1"] = "\u06D3";
- t["\uFBD3"] = "\u06AD";
- t["\uFBD4"] = "\u06AD";
- t["\uFBD5"] = "\u06AD";
- t["\uFBD6"] = "\u06AD";
- t["\uFBD7"] = "\u06C7";
- t["\uFBD8"] = "\u06C7";
- t["\uFBD9"] = "\u06C6";
- t["\uFBDA"] = "\u06C6";
- t["\uFBDB"] = "\u06C8";
- t["\uFBDC"] = "\u06C8";
- t["\uFBDD"] = "\u0677";
- t["\uFBDE"] = "\u06CB";
- t["\uFBDF"] = "\u06CB";
- t["\uFBE0"] = "\u06C5";
- t["\uFBE1"] = "\u06C5";
- t["\uFBE2"] = "\u06C9";
- t["\uFBE3"] = "\u06C9";
- t["\uFBE4"] = "\u06D0";
- t["\uFBE5"] = "\u06D0";
- t["\uFBE6"] = "\u06D0";
- t["\uFBE7"] = "\u06D0";
- t["\uFBE8"] = "\u0649";
- t["\uFBE9"] = "\u0649";
- t["\uFBEA"] = "\u0626\u0627";
- t["\uFBEB"] = "\u0626\u0627";
- t["\uFBEC"] = "\u0626\u06D5";
- t["\uFBED"] = "\u0626\u06D5";
- t["\uFBEE"] = "\u0626\u0648";
- t["\uFBEF"] = "\u0626\u0648";
- t["\uFBF0"] = "\u0626\u06C7";
- t["\uFBF1"] = "\u0626\u06C7";
- t["\uFBF2"] = "\u0626\u06C6";
- t["\uFBF3"] = "\u0626\u06C6";
- t["\uFBF4"] = "\u0626\u06C8";
- t["\uFBF5"] = "\u0626\u06C8";
- t["\uFBF6"] = "\u0626\u06D0";
- t["\uFBF7"] = "\u0626\u06D0";
- t["\uFBF8"] = "\u0626\u06D0";
- t["\uFBF9"] = "\u0626\u0649";
- t["\uFBFA"] = "\u0626\u0649";
- t["\uFBFB"] = "\u0626\u0649";
- t["\uFBFC"] = "\u06CC";
- t["\uFBFD"] = "\u06CC";
- t["\uFBFE"] = "\u06CC";
- t["\uFBFF"] = "\u06CC";
- t["\uFC00"] = "\u0626\u062C";
- t["\uFC01"] = "\u0626\u062D";
- t["\uFC02"] = "\u0626\u0645";
- t["\uFC03"] = "\u0626\u0649";
- t["\uFC04"] = "\u0626\u064A";
- t["\uFC05"] = "\u0628\u062C";
- t["\uFC06"] = "\u0628\u062D";
- t["\uFC07"] = "\u0628\u062E";
- t["\uFC08"] = "\u0628\u0645";
- t["\uFC09"] = "\u0628\u0649";
- t["\uFC0A"] = "\u0628\u064A";
- t["\uFC0B"] = "\u062A\u062C";
- t["\uFC0C"] = "\u062A\u062D";
- t["\uFC0D"] = "\u062A\u062E";
- t["\uFC0E"] = "\u062A\u0645";
- t["\uFC0F"] = "\u062A\u0649";
- t["\uFC10"] = "\u062A\u064A";
- t["\uFC11"] = "\u062B\u062C";
- t["\uFC12"] = "\u062B\u0645";
- t["\uFC13"] = "\u062B\u0649";
- t["\uFC14"] = "\u062B\u064A";
- t["\uFC15"] = "\u062C\u062D";
- t["\uFC16"] = "\u062C\u0645";
- t["\uFC17"] = "\u062D\u062C";
- t["\uFC18"] = "\u062D\u0645";
- t["\uFC19"] = "\u062E\u062C";
- t["\uFC1A"] = "\u062E\u062D";
- t["\uFC1B"] = "\u062E\u0645";
- t["\uFC1C"] = "\u0633\u062C";
- t["\uFC1D"] = "\u0633\u062D";
- t["\uFC1E"] = "\u0633\u062E";
- t["\uFC1F"] = "\u0633\u0645";
- t["\uFC20"] = "\u0635\u062D";
- t["\uFC21"] = "\u0635\u0645";
- t["\uFC22"] = "\u0636\u062C";
- t["\uFC23"] = "\u0636\u062D";
- t["\uFC24"] = "\u0636\u062E";
- t["\uFC25"] = "\u0636\u0645";
- t["\uFC26"] = "\u0637\u062D";
- t["\uFC27"] = "\u0637\u0645";
- t["\uFC28"] = "\u0638\u0645";
- t["\uFC29"] = "\u0639\u062C";
- t["\uFC2A"] = "\u0639\u0645";
- t["\uFC2B"] = "\u063A\u062C";
- t["\uFC2C"] = "\u063A\u0645";
- t["\uFC2D"] = "\u0641\u062C";
- t["\uFC2E"] = "\u0641\u062D";
- t["\uFC2F"] = "\u0641\u062E";
- t["\uFC30"] = "\u0641\u0645";
- t["\uFC31"] = "\u0641\u0649";
- t["\uFC32"] = "\u0641\u064A";
- t["\uFC33"] = "\u0642\u062D";
- t["\uFC34"] = "\u0642\u0645";
- t["\uFC35"] = "\u0642\u0649";
- t["\uFC36"] = "\u0642\u064A";
- t["\uFC37"] = "\u0643\u0627";
- t["\uFC38"] = "\u0643\u062C";
- t["\uFC39"] = "\u0643\u062D";
- t["\uFC3A"] = "\u0643\u062E";
- t["\uFC3B"] = "\u0643\u0644";
- t["\uFC3C"] = "\u0643\u0645";
- t["\uFC3D"] = "\u0643\u0649";
- t["\uFC3E"] = "\u0643\u064A";
- t["\uFC3F"] = "\u0644\u062C";
- t["\uFC40"] = "\u0644\u062D";
- t["\uFC41"] = "\u0644\u062E";
- t["\uFC42"] = "\u0644\u0645";
- t["\uFC43"] = "\u0644\u0649";
- t["\uFC44"] = "\u0644\u064A";
- t["\uFC45"] = "\u0645\u062C";
- t["\uFC46"] = "\u0645\u062D";
- t["\uFC47"] = "\u0645\u062E";
- t["\uFC48"] = "\u0645\u0645";
- t["\uFC49"] = "\u0645\u0649";
- t["\uFC4A"] = "\u0645\u064A";
- t["\uFC4B"] = "\u0646\u062C";
- t["\uFC4C"] = "\u0646\u062D";
- t["\uFC4D"] = "\u0646\u062E";
- t["\uFC4E"] = "\u0646\u0645";
- t["\uFC4F"] = "\u0646\u0649";
- t["\uFC50"] = "\u0646\u064A";
- t["\uFC51"] = "\u0647\u062C";
- t["\uFC52"] = "\u0647\u0645";
- t["\uFC53"] = "\u0647\u0649";
- t["\uFC54"] = "\u0647\u064A";
- t["\uFC55"] = "\u064A\u062C";
- t["\uFC56"] = "\u064A\u062D";
- t["\uFC57"] = "\u064A\u062E";
- t["\uFC58"] = "\u064A\u0645";
- t["\uFC59"] = "\u064A\u0649";
- t["\uFC5A"] = "\u064A\u064A";
- t["\uFC5B"] = "\u0630\u0670";
- t["\uFC5C"] = "\u0631\u0670";
- t["\uFC5D"] = "\u0649\u0670";
- t["\uFC5E"] = "\u0020\u064C\u0651";
- t["\uFC5F"] = "\u0020\u064D\u0651";
- t["\uFC60"] = "\u0020\u064E\u0651";
- t["\uFC61"] = "\u0020\u064F\u0651";
- t["\uFC62"] = "\u0020\u0650\u0651";
- t["\uFC63"] = "\u0020\u0651\u0670";
- t["\uFC64"] = "\u0626\u0631";
- t["\uFC65"] = "\u0626\u0632";
- t["\uFC66"] = "\u0626\u0645";
- t["\uFC67"] = "\u0626\u0646";
- t["\uFC68"] = "\u0626\u0649";
- t["\uFC69"] = "\u0626\u064A";
- t["\uFC6A"] = "\u0628\u0631";
- t["\uFC6B"] = "\u0628\u0632";
- t["\uFC6C"] = "\u0628\u0645";
- t["\uFC6D"] = "\u0628\u0646";
- t["\uFC6E"] = "\u0628\u0649";
- t["\uFC6F"] = "\u0628\u064A";
- t["\uFC70"] = "\u062A\u0631";
- t["\uFC71"] = "\u062A\u0632";
- t["\uFC72"] = "\u062A\u0645";
- t["\uFC73"] = "\u062A\u0646";
- t["\uFC74"] = "\u062A\u0649";
- t["\uFC75"] = "\u062A\u064A";
- t["\uFC76"] = "\u062B\u0631";
- t["\uFC77"] = "\u062B\u0632";
- t["\uFC78"] = "\u062B\u0645";
- t["\uFC79"] = "\u062B\u0646";
- t["\uFC7A"] = "\u062B\u0649";
- t["\uFC7B"] = "\u062B\u064A";
- t["\uFC7C"] = "\u0641\u0649";
- t["\uFC7D"] = "\u0641\u064A";
- t["\uFC7E"] = "\u0642\u0649";
- t["\uFC7F"] = "\u0642\u064A";
- t["\uFC80"] = "\u0643\u0627";
- t["\uFC81"] = "\u0643\u0644";
- t["\uFC82"] = "\u0643\u0645";
- t["\uFC83"] = "\u0643\u0649";
- t["\uFC84"] = "\u0643\u064A";
- t["\uFC85"] = "\u0644\u0645";
- t["\uFC86"] = "\u0644\u0649";
- t["\uFC87"] = "\u0644\u064A";
- t["\uFC88"] = "\u0645\u0627";
- t["\uFC89"] = "\u0645\u0645";
- t["\uFC8A"] = "\u0646\u0631";
- t["\uFC8B"] = "\u0646\u0632";
- t["\uFC8C"] = "\u0646\u0645";
- t["\uFC8D"] = "\u0646\u0646";
- t["\uFC8E"] = "\u0646\u0649";
- t["\uFC8F"] = "\u0646\u064A";
- t["\uFC90"] = "\u0649\u0670";
- t["\uFC91"] = "\u064A\u0631";
- t["\uFC92"] = "\u064A\u0632";
- t["\uFC93"] = "\u064A\u0645";
- t["\uFC94"] = "\u064A\u0646";
- t["\uFC95"] = "\u064A\u0649";
- t["\uFC96"] = "\u064A\u064A";
- t["\uFC97"] = "\u0626\u062C";
- t["\uFC98"] = "\u0626\u062D";
- t["\uFC99"] = "\u0626\u062E";
- t["\uFC9A"] = "\u0626\u0645";
- t["\uFC9B"] = "\u0626\u0647";
- t["\uFC9C"] = "\u0628\u062C";
- t["\uFC9D"] = "\u0628\u062D";
- t["\uFC9E"] = "\u0628\u062E";
- t["\uFC9F"] = "\u0628\u0645";
- t["\uFCA0"] = "\u0628\u0647";
- t["\uFCA1"] = "\u062A\u062C";
- t["\uFCA2"] = "\u062A\u062D";
- t["\uFCA3"] = "\u062A\u062E";
- t["\uFCA4"] = "\u062A\u0645";
- t["\uFCA5"] = "\u062A\u0647";
- t["\uFCA6"] = "\u062B\u0645";
- t["\uFCA7"] = "\u062C\u062D";
- t["\uFCA8"] = "\u062C\u0645";
- t["\uFCA9"] = "\u062D\u062C";
- t["\uFCAA"] = "\u062D\u0645";
- t["\uFCAB"] = "\u062E\u062C";
- t["\uFCAC"] = "\u062E\u0645";
- t["\uFCAD"] = "\u0633\u062C";
- t["\uFCAE"] = "\u0633\u062D";
- t["\uFCAF"] = "\u0633\u062E";
- t["\uFCB0"] = "\u0633\u0645";
- t["\uFCB1"] = "\u0635\u062D";
- t["\uFCB2"] = "\u0635\u062E";
- t["\uFCB3"] = "\u0635\u0645";
- t["\uFCB4"] = "\u0636\u062C";
- t["\uFCB5"] = "\u0636\u062D";
- t["\uFCB6"] = "\u0636\u062E";
- t["\uFCB7"] = "\u0636\u0645";
- t["\uFCB8"] = "\u0637\u062D";
- t["\uFCB9"] = "\u0638\u0645";
- t["\uFCBA"] = "\u0639\u062C";
- t["\uFCBB"] = "\u0639\u0645";
- t["\uFCBC"] = "\u063A\u062C";
- t["\uFCBD"] = "\u063A\u0645";
- t["\uFCBE"] = "\u0641\u062C";
- t["\uFCBF"] = "\u0641\u062D";
- t["\uFCC0"] = "\u0641\u062E";
- t["\uFCC1"] = "\u0641\u0645";
- t["\uFCC2"] = "\u0642\u062D";
- t["\uFCC3"] = "\u0642\u0645";
- t["\uFCC4"] = "\u0643\u062C";
- t["\uFCC5"] = "\u0643\u062D";
- t["\uFCC6"] = "\u0643\u062E";
- t["\uFCC7"] = "\u0643\u0644";
- t["\uFCC8"] = "\u0643\u0645";
- t["\uFCC9"] = "\u0644\u062C";
- t["\uFCCA"] = "\u0644\u062D";
- t["\uFCCB"] = "\u0644\u062E";
- t["\uFCCC"] = "\u0644\u0645";
- t["\uFCCD"] = "\u0644\u0647";
- t["\uFCCE"] = "\u0645\u062C";
- t["\uFCCF"] = "\u0645\u062D";
- t["\uFCD0"] = "\u0645\u062E";
- t["\uFCD1"] = "\u0645\u0645";
- t["\uFCD2"] = "\u0646\u062C";
- t["\uFCD3"] = "\u0646\u062D";
- t["\uFCD4"] = "\u0646\u062E";
- t["\uFCD5"] = "\u0646\u0645";
- t["\uFCD6"] = "\u0646\u0647";
- t["\uFCD7"] = "\u0647\u062C";
- t["\uFCD8"] = "\u0647\u0645";
- t["\uFCD9"] = "\u0647\u0670";
- t["\uFCDA"] = "\u064A\u062C";
- t["\uFCDB"] = "\u064A\u062D";
- t["\uFCDC"] = "\u064A\u062E";
- t["\uFCDD"] = "\u064A\u0645";
- t["\uFCDE"] = "\u064A\u0647";
- t["\uFCDF"] = "\u0626\u0645";
- t["\uFCE0"] = "\u0626\u0647";
- t["\uFCE1"] = "\u0628\u0645";
- t["\uFCE2"] = "\u0628\u0647";
- t["\uFCE3"] = "\u062A\u0645";
- t["\uFCE4"] = "\u062A\u0647";
- t["\uFCE5"] = "\u062B\u0645";
- t["\uFCE6"] = "\u062B\u0647";
- t["\uFCE7"] = "\u0633\u0645";
- t["\uFCE8"] = "\u0633\u0647";
- t["\uFCE9"] = "\u0634\u0645";
- t["\uFCEA"] = "\u0634\u0647";
- t["\uFCEB"] = "\u0643\u0644";
- t["\uFCEC"] = "\u0643\u0645";
- t["\uFCED"] = "\u0644\u0645";
- t["\uFCEE"] = "\u0646\u0645";
- t["\uFCEF"] = "\u0646\u0647";
- t["\uFCF0"] = "\u064A\u0645";
- t["\uFCF1"] = "\u064A\u0647";
- t["\uFCF2"] = "\u0640\u064E\u0651";
- t["\uFCF3"] = "\u0640\u064F\u0651";
- t["\uFCF4"] = "\u0640\u0650\u0651";
- t["\uFCF5"] = "\u0637\u0649";
- t["\uFCF6"] = "\u0637\u064A";
- t["\uFCF7"] = "\u0639\u0649";
- t["\uFCF8"] = "\u0639\u064A";
- t["\uFCF9"] = "\u063A\u0649";
- t["\uFCFA"] = "\u063A\u064A";
- t["\uFCFB"] = "\u0633\u0649";
- t["\uFCFC"] = "\u0633\u064A";
- t["\uFCFD"] = "\u0634\u0649";
- t["\uFCFE"] = "\u0634\u064A";
- t["\uFCFF"] = "\u062D\u0649";
- t["\uFD00"] = "\u062D\u064A";
- t["\uFD01"] = "\u062C\u0649";
- t["\uFD02"] = "\u062C\u064A";
- t["\uFD03"] = "\u062E\u0649";
- t["\uFD04"] = "\u062E\u064A";
- t["\uFD05"] = "\u0635\u0649";
- t["\uFD06"] = "\u0635\u064A";
- t["\uFD07"] = "\u0636\u0649";
- t["\uFD08"] = "\u0636\u064A";
- t["\uFD09"] = "\u0634\u062C";
- t["\uFD0A"] = "\u0634\u062D";
- t["\uFD0B"] = "\u0634\u062E";
- t["\uFD0C"] = "\u0634\u0645";
- t["\uFD0D"] = "\u0634\u0631";
- t["\uFD0E"] = "\u0633\u0631";
- t["\uFD0F"] = "\u0635\u0631";
- t["\uFD10"] = "\u0636\u0631";
- t["\uFD11"] = "\u0637\u0649";
- t["\uFD12"] = "\u0637\u064A";
- t["\uFD13"] = "\u0639\u0649";
- t["\uFD14"] = "\u0639\u064A";
- t["\uFD15"] = "\u063A\u0649";
- t["\uFD16"] = "\u063A\u064A";
- t["\uFD17"] = "\u0633\u0649";
- t["\uFD18"] = "\u0633\u064A";
- t["\uFD19"] = "\u0634\u0649";
- t["\uFD1A"] = "\u0634\u064A";
- t["\uFD1B"] = "\u062D\u0649";
- t["\uFD1C"] = "\u062D\u064A";
- t["\uFD1D"] = "\u062C\u0649";
- t["\uFD1E"] = "\u062C\u064A";
- t["\uFD1F"] = "\u062E\u0649";
- t["\uFD20"] = "\u062E\u064A";
- t["\uFD21"] = "\u0635\u0649";
- t["\uFD22"] = "\u0635\u064A";
- t["\uFD23"] = "\u0636\u0649";
- t["\uFD24"] = "\u0636\u064A";
- t["\uFD25"] = "\u0634\u062C";
- t["\uFD26"] = "\u0634\u062D";
- t["\uFD27"] = "\u0634\u062E";
- t["\uFD28"] = "\u0634\u0645";
- t["\uFD29"] = "\u0634\u0631";
- t["\uFD2A"] = "\u0633\u0631";
- t["\uFD2B"] = "\u0635\u0631";
- t["\uFD2C"] = "\u0636\u0631";
- t["\uFD2D"] = "\u0634\u062C";
- t["\uFD2E"] = "\u0634\u062D";
- t["\uFD2F"] = "\u0634\u062E";
- t["\uFD30"] = "\u0634\u0645";
- t["\uFD31"] = "\u0633\u0647";
- t["\uFD32"] = "\u0634\u0647";
- t["\uFD33"] = "\u0637\u0645";
- t["\uFD34"] = "\u0633\u062C";
- t["\uFD35"] = "\u0633\u062D";
- t["\uFD36"] = "\u0633\u062E";
- t["\uFD37"] = "\u0634\u062C";
- t["\uFD38"] = "\u0634\u062D";
- t["\uFD39"] = "\u0634\u062E";
- t["\uFD3A"] = "\u0637\u0645";
- t["\uFD3B"] = "\u0638\u0645";
- t["\uFD3C"] = "\u0627\u064B";
- t["\uFD3D"] = "\u0627\u064B";
- t["\uFD50"] = "\u062A\u062C\u0645";
- t["\uFD51"] = "\u062A\u062D\u062C";
- t["\uFD52"] = "\u062A\u062D\u062C";
- t["\uFD53"] = "\u062A\u062D\u0645";
- t["\uFD54"] = "\u062A\u062E\u0645";
- t["\uFD55"] = "\u062A\u0645\u062C";
- t["\uFD56"] = "\u062A\u0645\u062D";
- t["\uFD57"] = "\u062A\u0645\u062E";
- t["\uFD58"] = "\u062C\u0645\u062D";
- t["\uFD59"] = "\u062C\u0645\u062D";
- t["\uFD5A"] = "\u062D\u0645\u064A";
- t["\uFD5B"] = "\u062D\u0645\u0649";
- t["\uFD5C"] = "\u0633\u062D\u062C";
- t["\uFD5D"] = "\u0633\u062C\u062D";
- t["\uFD5E"] = "\u0633\u062C\u0649";
- t["\uFD5F"] = "\u0633\u0645\u062D";
- t["\uFD60"] = "\u0633\u0645\u062D";
- t["\uFD61"] = "\u0633\u0645\u062C";
- t["\uFD62"] = "\u0633\u0645\u0645";
- t["\uFD63"] = "\u0633\u0645\u0645";
- t["\uFD64"] = "\u0635\u062D\u062D";
- t["\uFD65"] = "\u0635\u062D\u062D";
- t["\uFD66"] = "\u0635\u0645\u0645";
- t["\uFD67"] = "\u0634\u062D\u0645";
- t["\uFD68"] = "\u0634\u062D\u0645";
- t["\uFD69"] = "\u0634\u062C\u064A";
- t["\uFD6A"] = "\u0634\u0645\u062E";
- t["\uFD6B"] = "\u0634\u0645\u062E";
- t["\uFD6C"] = "\u0634\u0645\u0645";
- t["\uFD6D"] = "\u0634\u0645\u0645";
- t["\uFD6E"] = "\u0636\u062D\u0649";
- t["\uFD6F"] = "\u0636\u062E\u0645";
- t["\uFD70"] = "\u0636\u062E\u0645";
- t["\uFD71"] = "\u0637\u0645\u062D";
- t["\uFD72"] = "\u0637\u0645\u062D";
- t["\uFD73"] = "\u0637\u0645\u0645";
- t["\uFD74"] = "\u0637\u0645\u064A";
- t["\uFD75"] = "\u0639\u062C\u0645";
- t["\uFD76"] = "\u0639\u0645\u0645";
- t["\uFD77"] = "\u0639\u0645\u0645";
- t["\uFD78"] = "\u0639\u0645\u0649";
- t["\uFD79"] = "\u063A\u0645\u0645";
- t["\uFD7A"] = "\u063A\u0645\u064A";
- t["\uFD7B"] = "\u063A\u0645\u0649";
- t["\uFD7C"] = "\u0641\u062E\u0645";
- t["\uFD7D"] = "\u0641\u062E\u0645";
- t["\uFD7E"] = "\u0642\u0645\u062D";
- t["\uFD7F"] = "\u0642\u0645\u0645";
- t["\uFD80"] = "\u0644\u062D\u0645";
- t["\uFD81"] = "\u0644\u062D\u064A";
- t["\uFD82"] = "\u0644\u062D\u0649";
- t["\uFD83"] = "\u0644\u062C\u062C";
- t["\uFD84"] = "\u0644\u062C\u062C";
- t["\uFD85"] = "\u0644\u062E\u0645";
- t["\uFD86"] = "\u0644\u062E\u0645";
- t["\uFD87"] = "\u0644\u0645\u062D";
- t["\uFD88"] = "\u0644\u0645\u062D";
- t["\uFD89"] = "\u0645\u062D\u062C";
- t["\uFD8A"] = "\u0645\u062D\u0645";
- t["\uFD8B"] = "\u0645\u062D\u064A";
- t["\uFD8C"] = "\u0645\u062C\u062D";
- t["\uFD8D"] = "\u0645\u062C\u0645";
- t["\uFD8E"] = "\u0645\u062E\u062C";
- t["\uFD8F"] = "\u0645\u062E\u0645";
- t["\uFD92"] = "\u0645\u062C\u062E";
- t["\uFD93"] = "\u0647\u0645\u062C";
- t["\uFD94"] = "\u0647\u0645\u0645";
- t["\uFD95"] = "\u0646\u062D\u0645";
- t["\uFD96"] = "\u0646\u062D\u0649";
- t["\uFD97"] = "\u0646\u062C\u0645";
- t["\uFD98"] = "\u0646\u062C\u0645";
- t["\uFD99"] = "\u0646\u062C\u0649";
- t["\uFD9A"] = "\u0646\u0645\u064A";
- t["\uFD9B"] = "\u0646\u0645\u0649";
- t["\uFD9C"] = "\u064A\u0645\u0645";
- t["\uFD9D"] = "\u064A\u0645\u0645";
- t["\uFD9E"] = "\u0628\u062E\u064A";
- t["\uFD9F"] = "\u062A\u062C\u064A";
- t["\uFDA0"] = "\u062A\u062C\u0649";
- t["\uFDA1"] = "\u062A\u062E\u064A";
- t["\uFDA2"] = "\u062A\u062E\u0649";
- t["\uFDA3"] = "\u062A\u0645\u064A";
- t["\uFDA4"] = "\u062A\u0645\u0649";
- t["\uFDA5"] = "\u062C\u0645\u064A";
- t["\uFDA6"] = "\u062C\u062D\u0649";
- t["\uFDA7"] = "\u062C\u0645\u0649";
- t["\uFDA8"] = "\u0633\u062E\u0649";
- t["\uFDA9"] = "\u0635\u062D\u064A";
- t["\uFDAA"] = "\u0634\u062D\u064A";
- t["\uFDAB"] = "\u0636\u062D\u064A";
- t["\uFDAC"] = "\u0644\u062C\u064A";
- t["\uFDAD"] = "\u0644\u0645\u064A";
- t["\uFDAE"] = "\u064A\u062D\u064A";
- t["\uFDAF"] = "\u064A\u062C\u064A";
- t["\uFDB0"] = "\u064A\u0645\u064A";
- t["\uFDB1"] = "\u0645\u0645\u064A";
- t["\uFDB2"] = "\u0642\u0645\u064A";
- t["\uFDB3"] = "\u0646\u062D\u064A";
- t["\uFDB4"] = "\u0642\u0645\u062D";
- t["\uFDB5"] = "\u0644\u062D\u0645";
- t["\uFDB6"] = "\u0639\u0645\u064A";
- t["\uFDB7"] = "\u0643\u0645\u064A";
- t["\uFDB8"] = "\u0646\u062C\u062D";
- t["\uFDB9"] = "\u0645\u062E\u064A";
- t["\uFDBA"] = "\u0644\u062C\u0645";
- t["\uFDBB"] = "\u0643\u0645\u0645";
- t["\uFDBC"] = "\u0644\u062C\u0645";
- t["\uFDBD"] = "\u0646\u062C\u062D";
- t["\uFDBE"] = "\u062C\u062D\u064A";
- t["\uFDBF"] = "\u062D\u062C\u064A";
- t["\uFDC0"] = "\u0645\u062C\u064A";
- t["\uFDC1"] = "\u0641\u0645\u064A";
- t["\uFDC2"] = "\u0628\u062D\u064A";
- t["\uFDC3"] = "\u0643\u0645\u0645";
- t["\uFDC4"] = "\u0639\u062C\u0645";
- t["\uFDC5"] = "\u0635\u0645\u0645";
- t["\uFDC6"] = "\u0633\u062E\u064A";
- t["\uFDC7"] = "\u0646\u062C\u064A";
- t["\uFE49"] = "\u203E";
- t["\uFE4A"] = "\u203E";
- t["\uFE4B"] = "\u203E";
- t["\uFE4C"] = "\u203E";
- t["\uFE4D"] = "\u005F";
- t["\uFE4E"] = "\u005F";
- t["\uFE4F"] = "\u005F";
- t["\uFE80"] = "\u0621";
- t["\uFE81"] = "\u0622";
- t["\uFE82"] = "\u0622";
- t["\uFE83"] = "\u0623";
- t["\uFE84"] = "\u0623";
- t["\uFE85"] = "\u0624";
- t["\uFE86"] = "\u0624";
- t["\uFE87"] = "\u0625";
- t["\uFE88"] = "\u0625";
- t["\uFE89"] = "\u0626";
- t["\uFE8A"] = "\u0626";
- t["\uFE8B"] = "\u0626";
- t["\uFE8C"] = "\u0626";
- t["\uFE8D"] = "\u0627";
- t["\uFE8E"] = "\u0627";
- t["\uFE8F"] = "\u0628";
- t["\uFE90"] = "\u0628";
- t["\uFE91"] = "\u0628";
- t["\uFE92"] = "\u0628";
- t["\uFE93"] = "\u0629";
- t["\uFE94"] = "\u0629";
- t["\uFE95"] = "\u062A";
- t["\uFE96"] = "\u062A";
- t["\uFE97"] = "\u062A";
- t["\uFE98"] = "\u062A";
- t["\uFE99"] = "\u062B";
- t["\uFE9A"] = "\u062B";
- t["\uFE9B"] = "\u062B";
- t["\uFE9C"] = "\u062B";
- t["\uFE9D"] = "\u062C";
- t["\uFE9E"] = "\u062C";
- t["\uFE9F"] = "\u062C";
- t["\uFEA0"] = "\u062C";
- t["\uFEA1"] = "\u062D";
- t["\uFEA2"] = "\u062D";
- t["\uFEA3"] = "\u062D";
- t["\uFEA4"] = "\u062D";
- t["\uFEA5"] = "\u062E";
- t["\uFEA6"] = "\u062E";
- t["\uFEA7"] = "\u062E";
- t["\uFEA8"] = "\u062E";
- t["\uFEA9"] = "\u062F";
- t["\uFEAA"] = "\u062F";
- t["\uFEAB"] = "\u0630";
- t["\uFEAC"] = "\u0630";
- t["\uFEAD"] = "\u0631";
- t["\uFEAE"] = "\u0631";
- t["\uFEAF"] = "\u0632";
- t["\uFEB0"] = "\u0632";
- t["\uFEB1"] = "\u0633";
- t["\uFEB2"] = "\u0633";
- t["\uFEB3"] = "\u0633";
- t["\uFEB4"] = "\u0633";
- t["\uFEB5"] = "\u0634";
- t["\uFEB6"] = "\u0634";
- t["\uFEB7"] = "\u0634";
- t["\uFEB8"] = "\u0634";
- t["\uFEB9"] = "\u0635";
- t["\uFEBA"] = "\u0635";
- t["\uFEBB"] = "\u0635";
- t["\uFEBC"] = "\u0635";
- t["\uFEBD"] = "\u0636";
- t["\uFEBE"] = "\u0636";
- t["\uFEBF"] = "\u0636";
- t["\uFEC0"] = "\u0636";
- t["\uFEC1"] = "\u0637";
- t["\uFEC2"] = "\u0637";
- t["\uFEC3"] = "\u0637";
- t["\uFEC4"] = "\u0637";
- t["\uFEC5"] = "\u0638";
- t["\uFEC6"] = "\u0638";
- t["\uFEC7"] = "\u0638";
- t["\uFEC8"] = "\u0638";
- t["\uFEC9"] = "\u0639";
- t["\uFECA"] = "\u0639";
- t["\uFECB"] = "\u0639";
- t["\uFECC"] = "\u0639";
- t["\uFECD"] = "\u063A";
- t["\uFECE"] = "\u063A";
- t["\uFECF"] = "\u063A";
- t["\uFED0"] = "\u063A";
- t["\uFED1"] = "\u0641";
- t["\uFED2"] = "\u0641";
- t["\uFED3"] = "\u0641";
- t["\uFED4"] = "\u0641";
- t["\uFED5"] = "\u0642";
- t["\uFED6"] = "\u0642";
- t["\uFED7"] = "\u0642";
- t["\uFED8"] = "\u0642";
- t["\uFED9"] = "\u0643";
- t["\uFEDA"] = "\u0643";
- t["\uFEDB"] = "\u0643";
- t["\uFEDC"] = "\u0643";
- t["\uFEDD"] = "\u0644";
- t["\uFEDE"] = "\u0644";
- t["\uFEDF"] = "\u0644";
- t["\uFEE0"] = "\u0644";
- t["\uFEE1"] = "\u0645";
- t["\uFEE2"] = "\u0645";
- t["\uFEE3"] = "\u0645";
- t["\uFEE4"] = "\u0645";
- t["\uFEE5"] = "\u0646";
- t["\uFEE6"] = "\u0646";
- t["\uFEE7"] = "\u0646";
- t["\uFEE8"] = "\u0646";
- t["\uFEE9"] = "\u0647";
- t["\uFEEA"] = "\u0647";
- t["\uFEEB"] = "\u0647";
- t["\uFEEC"] = "\u0647";
- t["\uFEED"] = "\u0648";
- t["\uFEEE"] = "\u0648";
- t["\uFEEF"] = "\u0649";
- t["\uFEF0"] = "\u0649";
- t["\uFEF1"] = "\u064A";
- t["\uFEF2"] = "\u064A";
- t["\uFEF3"] = "\u064A";
- t["\uFEF4"] = "\u064A";
- t["\uFEF5"] = "\u0644\u0622";
- t["\uFEF6"] = "\u0644\u0622";
- t["\uFEF7"] = "\u0644\u0623";
- t["\uFEF8"] = "\u0644\u0623";
- t["\uFEF9"] = "\u0644\u0625";
- t["\uFEFA"] = "\u0644\u0625";
- t["\uFEFB"] = "\u0644\u0627";
- t["\uFEFC"] = "\u0644\u0627";
-});
-function reverseIfRtl(chars) {
- var charsLength = chars.length;
- if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {
- return chars;
- }
- var s = "";
- for (var ii = charsLength - 1; ii >= 0; ii--) {
- s += chars[ii];
- }
- return s;
-}
-exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues;
-exports.reverseIfRtl = reverseIfRtl;
-exports.getUnicodeRangeFor = getUnicodeRangeFor;
-exports.getNormalizedUnicodes = getNormalizedUnicodes;
-exports.getUnicodeForGlyph = getUnicodeForGlyph;
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.FontRendererFactory = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _cff_parser = __w_pdfjs_require__(30);
-
-var _glyphlist = __w_pdfjs_require__(33);
-
-var _encodings = __w_pdfjs_require__(32);
-
-var _stream = __w_pdfjs_require__(12);
-
-var FontRendererFactory = function FontRendererFactoryClosure() {
- function getLong(data, offset) {
- return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
- }
-
- function getUshort(data, offset) {
- return data[offset] << 8 | data[offset + 1];
- }
-
- function getSubroutineBias(subrs) {
- const numSubrs = subrs.length;
- let bias = 32768;
-
- if (numSubrs < 1240) {
- bias = 107;
- } else if (numSubrs < 33900) {
- bias = 1131;
- }
-
- return bias;
- }
-
- function parseCmap(data, start, end) {
- var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16);
- var format = getUshort(data, start + offset);
- var ranges, p, i;
-
- if (format === 4) {
- getUshort(data, start + offset + 2);
- var segCount = getUshort(data, start + offset + 6) >> 1;
- p = start + offset + 14;
- ranges = [];
-
- for (i = 0; i < segCount; i++, p += 2) {
- ranges[i] = {
- end: getUshort(data, p)
- };
- }
-
- p += 2;
-
- for (i = 0; i < segCount; i++, p += 2) {
- ranges[i].start = getUshort(data, p);
- }
-
- for (i = 0; i < segCount; i++, p += 2) {
- ranges[i].idDelta = getUshort(data, p);
- }
-
- for (i = 0; i < segCount; i++, p += 2) {
- var idOffset = getUshort(data, p);
-
- if (idOffset === 0) {
- continue;
- }
-
- ranges[i].ids = [];
-
- for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
- ranges[i].ids[j] = getUshort(data, p + idOffset);
- idOffset += 2;
- }
- }
-
- return ranges;
- } else if (format === 12) {
- getLong(data, start + offset + 4);
- var groups = getLong(data, start + offset + 12);
- p = start + offset + 16;
- ranges = [];
-
- for (i = 0; i < groups; i++) {
- ranges.push({
- start: getLong(data, p),
- end: getLong(data, p + 4),
- idDelta: getLong(data, p + 8) - getLong(data, p)
- });
- p += 12;
- }
-
- return ranges;
- }
-
- throw new _util.FormatError(`unsupported cmap: ${format}`);
- }
-
- function parseCff(data, start, end, seacAnalysisEnabled) {
- var properties = {};
- var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled);
- var cff = parser.parse();
- return {
- glyphs: cff.charStrings.objects,
- subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects,
- gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects,
- isCFFCIDFont: cff.isCIDFont,
- fdSelect: cff.fdSelect,
- fdArray: cff.fdArray
- };
- }
-
- function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
- var itemSize, itemDecode;
-
- if (isGlyphLocationsLong) {
- itemSize = 4;
-
- itemDecode = function fontItemDecodeLong(data, offset) {
- return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
- };
- } else {
- itemSize = 2;
-
- itemDecode = function fontItemDecode(data, offset) {
- return data[offset] << 9 | data[offset + 1] << 1;
- };
- }
-
- var glyphs = [];
- var startOffset = itemDecode(loca, 0);
-
- for (var j = itemSize; j < loca.length; j += itemSize) {
- var endOffset = itemDecode(loca, j);
- glyphs.push(glyf.subarray(startOffset, endOffset));
- startOffset = endOffset;
- }
-
- return glyphs;
- }
-
- function lookupCmap(ranges, unicode) {
- var code = unicode.codePointAt(0),
- gid = 0;
- var l = 0,
- r = ranges.length - 1;
-
- while (l < r) {
- var c = l + r + 1 >> 1;
-
- if (code < ranges[c].start) {
- r = c - 1;
- } else {
- l = c;
- }
- }
-
- if (ranges[l].start <= code && code <= ranges[l].end) {
- gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;
- }
-
- return {
- charCode: code,
- glyphId: gid
- };
- }
-
- function compileGlyf(code, cmds, font) {
- function moveTo(x, y) {
- cmds.push({
- cmd: "moveTo",
- args: [x, y]
- });
- }
-
- function lineTo(x, y) {
- cmds.push({
- cmd: "lineTo",
- args: [x, y]
- });
- }
-
- function quadraticCurveTo(xa, ya, x, y) {
- cmds.push({
- cmd: "quadraticCurveTo",
- args: [xa, ya, x, y]
- });
- }
-
- var i = 0;
- var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;
- var flags;
- var x = 0,
- y = 0;
- i += 10;
-
- if (numberOfContours < 0) {
- do {
- flags = code[i] << 8 | code[i + 1];
- var glyphIndex = code[i + 2] << 8 | code[i + 3];
- i += 4;
- var arg1, arg2;
-
- if (flags & 0x01) {
- arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16;
- arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16;
- i += 4;
- } else {
- arg1 = code[i++];
- arg2 = code[i++];
- }
-
- if (flags & 0x02) {
- x = arg1;
- y = arg2;
- } else {
- x = 0;
- y = 0;
- }
-
- var scaleX = 1,
- scaleY = 1,
- scale01 = 0,
- scale10 = 0;
-
- if (flags & 0x08) {
- scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
- i += 2;
- } else if (flags & 0x40) {
- scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
- scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
- i += 4;
- } else if (flags & 0x80) {
- scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
- scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
- scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824;
- scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824;
- i += 8;
- }
-
- var subglyph = font.glyphs[glyphIndex];
-
- if (subglyph) {
- cmds.push({
- cmd: "save"
- });
- cmds.push({
- cmd: "transform",
- args: [scaleX, scale01, scale10, scaleY, x, y]
- });
- compileGlyf(subglyph, cmds, font);
- cmds.push({
- cmd: "restore"
- });
- }
- } while (flags & 0x20);
- } else {
- var endPtsOfContours = [];
- var j, jj;
-
- for (j = 0; j < numberOfContours; j++) {
- endPtsOfContours.push(code[i] << 8 | code[i + 1]);
- i += 2;
- }
-
- var instructionLength = code[i] << 8 | code[i + 1];
- i += 2 + instructionLength;
- var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
- var points = [];
-
- while (points.length < numberOfPoints) {
- flags = code[i++];
- var repeat = 1;
-
- if (flags & 0x08) {
- repeat += code[i++];
- }
-
- while (repeat-- > 0) {
- points.push({
- flags
- });
- }
- }
-
- for (j = 0; j < numberOfPoints; j++) {
- switch (points[j].flags & 0x12) {
- case 0x00:
- x += (code[i] << 24 | code[i + 1] << 16) >> 16;
- i += 2;
- break;
-
- case 0x02:
- x -= code[i++];
- break;
-
- case 0x12:
- x += code[i++];
- break;
- }
-
- points[j].x = x;
- }
-
- for (j = 0; j < numberOfPoints; j++) {
- switch (points[j].flags & 0x24) {
- case 0x00:
- y += (code[i] << 24 | code[i + 1] << 16) >> 16;
- i += 2;
- break;
-
- case 0x04:
- y -= code[i++];
- break;
-
- case 0x24:
- y += code[i++];
- break;
- }
-
- points[j].y = y;
- }
-
- var startPoint = 0;
-
- for (i = 0; i < numberOfContours; i++) {
- var endPoint = endPtsOfContours[i];
- var contour = points.slice(startPoint, endPoint + 1);
-
- if (contour[0].flags & 1) {
- contour.push(contour[0]);
- } else if (contour[contour.length - 1].flags & 1) {
- contour.unshift(contour[contour.length - 1]);
- } else {
- var p = {
- flags: 1,
- x: (contour[0].x + contour[contour.length - 1].x) / 2,
- y: (contour[0].y + contour[contour.length - 1].y) / 2
- };
- contour.unshift(p);
- contour.push(p);
- }
-
- moveTo(contour[0].x, contour[0].y);
-
- for (j = 1, jj = contour.length; j < jj; j++) {
- if (contour[j].flags & 1) {
- lineTo(contour[j].x, contour[j].y);
- } else if (contour[j + 1].flags & 1) {
- quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);
- j++;
- } else {
- quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);
- }
- }
-
- startPoint = endPoint + 1;
- }
- }
- }
-
- function compileCharString(charStringCode, cmds, font, glyphId) {
- function moveTo(x, y) {
- cmds.push({
- cmd: "moveTo",
- args: [x, y]
- });
- }
-
- function lineTo(x, y) {
- cmds.push({
- cmd: "lineTo",
- args: [x, y]
- });
- }
-
- function bezierCurveTo(x1, y1, x2, y2, x, y) {
- cmds.push({
- cmd: "bezierCurveTo",
- args: [x1, y1, x2, y2, x, y]
- });
- }
-
- var stack = [];
- var x = 0,
- y = 0;
- var stems = 0;
-
- function parse(code) {
- var i = 0;
-
- while (i < code.length) {
- var stackClean = false;
- var v = code[i++];
- var xa, xb, ya, yb, y1, y2, y3, n, subrCode;
-
- switch (v) {
- case 1:
- stems += stack.length >> 1;
- stackClean = true;
- break;
-
- case 3:
- stems += stack.length >> 1;
- stackClean = true;
- break;
-
- case 4:
- y += stack.pop();
- moveTo(x, y);
- stackClean = true;
- break;
-
- case 5:
- while (stack.length > 0) {
- x += stack.shift();
- y += stack.shift();
- lineTo(x, y);
- }
-
- break;
-
- case 6:
- while (stack.length > 0) {
- x += stack.shift();
- lineTo(x, y);
-
- if (stack.length === 0) {
- break;
- }
-
- y += stack.shift();
- lineTo(x, y);
- }
-
- break;
-
- case 7:
- while (stack.length > 0) {
- y += stack.shift();
- lineTo(x, y);
-
- if (stack.length === 0) {
- break;
- }
-
- x += stack.shift();
- lineTo(x, y);
- }
-
- break;
-
- case 8:
- while (stack.length > 0) {
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
-
- break;
-
- case 10:
- n = stack.pop();
- subrCode = null;
-
- if (font.isCFFCIDFont) {
- const fdIndex = font.fdSelect.getFDIndex(glyphId);
-
- if (fdIndex >= 0 && fdIndex < font.fdArray.length) {
- const fontDict = font.fdArray[fdIndex];
- let subrs;
-
- if (fontDict.privateDict && fontDict.privateDict.subrsIndex) {
- subrs = fontDict.privateDict.subrsIndex.objects;
- }
-
- if (subrs) {
- n += getSubroutineBias(subrs);
- subrCode = subrs[n];
- }
- } else {
- (0, _util.warn)("Invalid fd index for glyph index.");
- }
- } else {
- subrCode = font.subrs[n + font.subrsBias];
- }
-
- if (subrCode) {
- parse(subrCode);
- }
-
- break;
-
- case 11:
- return;
-
- case 12:
- v = code[i++];
-
- switch (v) {
- case 34:
- xa = x + stack.shift();
- xb = xa + stack.shift();
- y1 = y + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y, xb, y1, x, y1);
- xa = x + stack.shift();
- xb = xa + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y1, xb, y, x, y);
- break;
-
- case 35:
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- stack.pop();
- break;
-
- case 36:
- xa = x + stack.shift();
- y1 = y + stack.shift();
- xb = xa + stack.shift();
- y2 = y1 + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y1, xb, y2, x, y2);
- xa = x + stack.shift();
- xb = xa + stack.shift();
- y3 = y2 + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y2, xb, y3, x, y);
- break;
-
- case 37:
- var x0 = x,
- y0 = y;
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb;
- y = yb;
-
- if (Math.abs(x - x0) > Math.abs(y - y0)) {
- x += stack.shift();
- } else {
- y += stack.shift();
- }
-
- bezierCurveTo(xa, ya, xb, yb, x, y);
- break;
-
- default:
- throw new _util.FormatError(`unknown operator: 12 ${v}`);
- }
-
- break;
-
- case 14:
- if (stack.length >= 4) {
- var achar = stack.pop();
- var bchar = stack.pop();
- y = stack.pop();
- x = stack.pop();
- cmds.push({
- cmd: "save"
- });
- cmds.push({
- cmd: "translate",
- args: [x, y]
- });
- var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));
- compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
- cmds.push({
- cmd: "restore"
- });
- cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]]));
- compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
- }
-
- return;
-
- case 18:
- stems += stack.length >> 1;
- stackClean = true;
- break;
-
- case 19:
- stems += stack.length >> 1;
- i += stems + 7 >> 3;
- stackClean = true;
- break;
-
- case 20:
- stems += stack.length >> 1;
- i += stems + 7 >> 3;
- stackClean = true;
- break;
-
- case 21:
- y += stack.pop();
- x += stack.pop();
- moveTo(x, y);
- stackClean = true;
- break;
-
- case 22:
- x += stack.pop();
- moveTo(x, y);
- stackClean = true;
- break;
-
- case 23:
- stems += stack.length >> 1;
- stackClean = true;
- break;
-
- case 24:
- while (stack.length > 2) {
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
-
- x += stack.shift();
- y += stack.shift();
- lineTo(x, y);
- break;
-
- case 25:
- while (stack.length > 6) {
- x += stack.shift();
- y += stack.shift();
- lineTo(x, y);
- }
-
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- break;
-
- case 26:
- if (stack.length % 2) {
- x += stack.shift();
- }
-
- while (stack.length > 0) {
- xa = x;
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb;
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
-
- break;
-
- case 27:
- if (stack.length % 2) {
- y += stack.shift();
- }
-
- while (stack.length > 0) {
- xa = x + stack.shift();
- ya = y;
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb;
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
-
- break;
-
- case 28:
- stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);
- i += 2;
- break;
-
- case 29:
- n = stack.pop() + font.gsubrsBias;
- subrCode = font.gsubrs[n];
-
- if (subrCode) {
- parse(subrCode);
- }
-
- break;
-
- case 30:
- while (stack.length > 0) {
- xa = x;
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + (stack.length === 1 ? stack.shift() : 0);
- bezierCurveTo(xa, ya, xb, yb, x, y);
-
- if (stack.length === 0) {
- break;
- }
-
- xa = x + stack.shift();
- ya = y;
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- y = yb + stack.shift();
- x = xb + (stack.length === 1 ? stack.shift() : 0);
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
-
- break;
-
- case 31:
- while (stack.length > 0) {
- xa = x + stack.shift();
- ya = y;
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- y = yb + stack.shift();
- x = xb + (stack.length === 1 ? stack.shift() : 0);
- bezierCurveTo(xa, ya, xb, yb, x, y);
-
- if (stack.length === 0) {
- break;
- }
-
- xa = x;
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + (stack.length === 1 ? stack.shift() : 0);
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
-
- break;
-
- default:
- if (v < 32) {
- throw new _util.FormatError(`unknown operator: ${v}`);
- }
-
- if (v < 247) {
- stack.push(v - 139);
- } else if (v < 251) {
- stack.push((v - 247) * 256 + code[i++] + 108);
- } else if (v < 255) {
- stack.push(-(v - 251) * 256 - code[i++] - 108);
- } else {
- stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);
- i += 4;
- }
-
- break;
- }
-
- if (stackClean) {
- stack.length = 0;
- }
- }
- }
-
- parse(charStringCode);
- }
-
- const NOOP = [];
-
- class CompiledFont {
- constructor(fontMatrix) {
- if (this.constructor === CompiledFont) {
- (0, _util.unreachable)("Cannot initialize CompiledFont.");
- }
-
- this.fontMatrix = fontMatrix;
- this.compiledGlyphs = Object.create(null);
- this.compiledCharCodeToGlyphId = Object.create(null);
- }
-
- getPathJs(unicode) {
- const cmap = lookupCmap(this.cmap, unicode);
- let fn = this.compiledGlyphs[cmap.glyphId];
-
- if (!fn) {
- fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId);
- this.compiledGlyphs[cmap.glyphId] = fn;
- }
-
- if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) {
- this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId;
- }
-
- return fn;
- }
-
- compileGlyph(code, glyphId) {
- if (!code || code.length === 0 || code[0] === 14) {
- return NOOP;
- }
-
- let fontMatrix = this.fontMatrix;
-
- if (this.isCFFCIDFont) {
- const fdIndex = this.fdSelect.getFDIndex(glyphId);
-
- if (fdIndex >= 0 && fdIndex < this.fdArray.length) {
- const fontDict = this.fdArray[fdIndex];
- fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX;
- } else {
- (0, _util.warn)("Invalid fd index for glyph index.");
- }
- }
-
- const cmds = [];
- cmds.push({
- cmd: "save"
- });
- cmds.push({
- cmd: "transform",
- args: fontMatrix.slice()
- });
- cmds.push({
- cmd: "scale",
- args: ["size", "-size"]
- });
- this.compileGlyphImpl(code, cmds, glyphId);
- cmds.push({
- cmd: "restore"
- });
- return cmds;
- }
-
- compileGlyphImpl() {
- (0, _util.unreachable)("Children classes should implement this.");
- }
-
- hasBuiltPath(unicode) {
- const cmap = lookupCmap(this.cmap, unicode);
- return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined;
- }
-
- }
-
- class TrueTypeCompiled extends CompiledFont {
- constructor(glyphs, cmap, fontMatrix) {
- super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);
- this.glyphs = glyphs;
- this.cmap = cmap;
- }
-
- compileGlyphImpl(code, cmds) {
- compileGlyf(code, cmds, this);
- }
-
- }
-
- class Type2Compiled extends CompiledFont {
- constructor(cffInfo, cmap, fontMatrix, glyphNameMap) {
- super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);
- this.glyphs = cffInfo.glyphs;
- this.gsubrs = cffInfo.gsubrs || [];
- this.subrs = cffInfo.subrs || [];
- this.cmap = cmap;
- this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)();
- this.gsubrsBias = getSubroutineBias(this.gsubrs);
- this.subrsBias = getSubroutineBias(this.subrs);
- this.isCFFCIDFont = cffInfo.isCFFCIDFont;
- this.fdSelect = cffInfo.fdSelect;
- this.fdArray = cffInfo.fdArray;
- }
-
- compileGlyphImpl(code, cmds, glyphId) {
- compileCharString(code, cmds, this, glyphId);
- }
-
- }
-
- return {
- create: function FontRendererFactory_create(font, seacAnalysisEnabled) {
- var data = new Uint8Array(font.data);
- var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
- var numTables = getUshort(data, 4);
-
- for (var i = 0, p = 12; i < numTables; i++, p += 16) {
- var tag = (0, _util.bytesToString)(data.subarray(p, p + 4));
- var offset = getLong(data, p + 8);
- var length = getLong(data, p + 12);
-
- switch (tag) {
- case "cmap":
- cmap = parseCmap(data, offset, offset + length);
- break;
-
- case "glyf":
- glyf = data.subarray(offset, offset + length);
- break;
-
- case "loca":
- loca = data.subarray(offset, offset + length);
- break;
-
- case "head":
- unitsPerEm = getUshort(data, offset + 18);
- indexToLocFormat = getUshort(data, offset + 50);
- break;
-
- case "CFF ":
- cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);
- break;
- }
- }
-
- if (glyf) {
- var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
- return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
- }
-
- return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
- }
- };
-}();
-
-exports.FontRendererFactory = FontRendererFactory;
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Type1Parser = void 0;
-
-var _encodings = __w_pdfjs_require__(32);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _util = __w_pdfjs_require__(2);
-
-var HINTING_ENABLED = false;
-
-var Type1CharString = function Type1CharStringClosure() {
- var COMMAND_MAP = {
- hstem: [1],
- vstem: [3],
- vmoveto: [4],
- rlineto: [5],
- hlineto: [6],
- vlineto: [7],
- rrcurveto: [8],
- callsubr: [10],
- flex: [12, 35],
- drop: [12, 18],
- endchar: [14],
- rmoveto: [21],
- hmoveto: [22],
- vhcurveto: [30],
- hvcurveto: [31]
- };
-
- function Type1CharString() {
- this.width = 0;
- this.lsb = 0;
- this.flexing = false;
- this.output = [];
- this.stack = [];
- }
-
- Type1CharString.prototype = {
- convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) {
- var count = encoded.length;
- var error = false;
- var wx, sbx, subrNumber;
-
- for (var i = 0; i < count; i++) {
- var value = encoded[i];
-
- if (value < 32) {
- if (value === 12) {
- value = (value << 8) + encoded[++i];
- }
-
- switch (value) {
- case 1:
- if (!HINTING_ENABLED) {
- this.stack = [];
- break;
- }
-
- error = this.executeCommand(2, COMMAND_MAP.hstem);
- break;
-
- case 3:
- if (!HINTING_ENABLED) {
- this.stack = [];
- break;
- }
-
- error = this.executeCommand(2, COMMAND_MAP.vstem);
- break;
-
- case 4:
- if (this.flexing) {
- if (this.stack.length < 1) {
- error = true;
- break;
- }
-
- var dy = this.stack.pop();
- this.stack.push(0, dy);
- break;
- }
-
- error = this.executeCommand(1, COMMAND_MAP.vmoveto);
- break;
-
- case 5:
- error = this.executeCommand(2, COMMAND_MAP.rlineto);
- break;
-
- case 6:
- error = this.executeCommand(1, COMMAND_MAP.hlineto);
- break;
-
- case 7:
- error = this.executeCommand(1, COMMAND_MAP.vlineto);
- break;
-
- case 8:
- error = this.executeCommand(6, COMMAND_MAP.rrcurveto);
- break;
-
- case 9:
- this.stack = [];
- break;
-
- case 10:
- if (this.stack.length < 1) {
- error = true;
- break;
- }
-
- subrNumber = this.stack.pop();
-
- if (!subrs[subrNumber]) {
- error = true;
- break;
- }
-
- error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);
- break;
-
- case 11:
- return error;
-
- case 13:
- if (this.stack.length < 2) {
- error = true;
- break;
- }
-
- wx = this.stack.pop();
- sbx = this.stack.pop();
- this.lsb = sbx;
- this.width = wx;
- this.stack.push(wx, sbx);
- error = this.executeCommand(2, COMMAND_MAP.hmoveto);
- break;
-
- case 14:
- this.output.push(COMMAND_MAP.endchar[0]);
- break;
-
- case 21:
- if (this.flexing) {
- break;
- }
-
- error = this.executeCommand(2, COMMAND_MAP.rmoveto);
- break;
-
- case 22:
- if (this.flexing) {
- this.stack.push(0);
- break;
- }
-
- error = this.executeCommand(1, COMMAND_MAP.hmoveto);
- break;
-
- case 30:
- error = this.executeCommand(4, COMMAND_MAP.vhcurveto);
- break;
-
- case 31:
- error = this.executeCommand(4, COMMAND_MAP.hvcurveto);
- break;
-
- case (12 << 8) + 0:
- this.stack = [];
- break;
-
- case (12 << 8) + 1:
- if (!HINTING_ENABLED) {
- this.stack = [];
- break;
- }
-
- error = this.executeCommand(2, COMMAND_MAP.vstem);
- break;
-
- case (12 << 8) + 2:
- if (!HINTING_ENABLED) {
- this.stack = [];
- break;
- }
-
- error = this.executeCommand(2, COMMAND_MAP.hstem);
- break;
-
- case (12 << 8) + 6:
- if (seacAnalysisEnabled) {
- this.seac = this.stack.splice(-4, 4);
- error = this.executeCommand(0, COMMAND_MAP.endchar);
- } else {
- error = this.executeCommand(4, COMMAND_MAP.endchar);
- }
-
- break;
-
- case (12 << 8) + 7:
- if (this.stack.length < 4) {
- error = true;
- break;
- }
-
- this.stack.pop();
- wx = this.stack.pop();
- var sby = this.stack.pop();
- sbx = this.stack.pop();
- this.lsb = sbx;
- this.width = wx;
- this.stack.push(wx, sbx, sby);
- error = this.executeCommand(3, COMMAND_MAP.rmoveto);
- break;
-
- case (12 << 8) + 12:
- if (this.stack.length < 2) {
- error = true;
- break;
- }
-
- var num2 = this.stack.pop();
- var num1 = this.stack.pop();
- this.stack.push(num1 / num2);
- break;
-
- case (12 << 8) + 16:
- if (this.stack.length < 2) {
- error = true;
- break;
- }
-
- subrNumber = this.stack.pop();
- var numArgs = this.stack.pop();
-
- if (subrNumber === 0 && numArgs === 3) {
- var flexArgs = this.stack.splice(this.stack.length - 17, 17);
- this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);
- error = this.executeCommand(13, COMMAND_MAP.flex, true);
- this.flexing = false;
- this.stack.push(flexArgs[15], flexArgs[16]);
- } else if (subrNumber === 1 && numArgs === 0) {
- this.flexing = true;
- }
-
- break;
-
- case (12 << 8) + 17:
- break;
-
- case (12 << 8) + 33:
- this.stack = [];
- break;
-
- default:
- (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"');
- break;
- }
-
- if (error) {
- break;
- }
-
- continue;
- } else if (value <= 246) {
- value = value - 139;
- } else if (value <= 250) {
- value = (value - 247) * 256 + encoded[++i] + 108;
- } else if (value <= 254) {
- value = -((value - 251) * 256) - encoded[++i] - 108;
- } else {
- value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;
- }
-
- this.stack.push(value);
- }
-
- return error;
- },
-
- executeCommand(howManyArgs, command, keepStack) {
- var stackLength = this.stack.length;
-
- if (howManyArgs > stackLength) {
- return true;
- }
-
- var start = stackLength - howManyArgs;
-
- for (var i = start; i < stackLength; i++) {
- var value = this.stack[i];
-
- if (Number.isInteger(value)) {
- this.output.push(28, value >> 8 & 0xff, value & 0xff);
- } else {
- value = 65536 * value | 0;
- this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
- }
- }
-
- this.output.push.apply(this.output, command);
-
- if (keepStack) {
- this.stack.splice(start, howManyArgs);
- } else {
- this.stack.length = 0;
- }
-
- return false;
- }
-
- };
- return Type1CharString;
-}();
-
-var Type1Parser = function Type1ParserClosure() {
- var EEXEC_ENCRYPT_KEY = 55665;
- var CHAR_STRS_ENCRYPT_KEY = 4330;
-
- function isHexDigit(code) {
- return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;
- }
-
- function decrypt(data, key, discardNumber) {
- if (discardNumber >= data.length) {
- return new Uint8Array(0);
- }
-
- var r = key | 0,
- c1 = 52845,
- c2 = 22719,
- i,
- j;
-
- for (i = 0; i < discardNumber; i++) {
- r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;
- }
-
- var count = data.length - discardNumber;
- var decrypted = new Uint8Array(count);
-
- for (i = discardNumber, j = 0; j < count; i++, j++) {
- var value = data[i];
- decrypted[j] = value ^ r >> 8;
- r = (value + r) * c1 + c2 & (1 << 16) - 1;
- }
-
- return decrypted;
- }
-
- function decryptAscii(data, key, discardNumber) {
- var r = key | 0,
- c1 = 52845,
- c2 = 22719;
- var count = data.length,
- maybeLength = count >>> 1;
- var decrypted = new Uint8Array(maybeLength);
- var i, j;
-
- for (i = 0, j = 0; i < count; i++) {
- var digit1 = data[i];
-
- if (!isHexDigit(digit1)) {
- continue;
- }
-
- i++;
- var digit2;
-
- while (i < count && !isHexDigit(digit2 = data[i])) {
- i++;
- }
-
- if (i < count) {
- var value = parseInt(String.fromCharCode(digit1, digit2), 16);
- decrypted[j++] = value ^ r >> 8;
- r = (value + r) * c1 + c2 & (1 << 16) - 1;
- }
- }
-
- return decrypted.slice(discardNumber, j);
- }
-
- function isSpecial(c) {
- return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;
- }
-
- function Type1Parser(stream, encrypted, seacAnalysisEnabled) {
- if (encrypted) {
- var data = stream.getBytes();
- var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
- stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
- }
-
- this.seacAnalysisEnabled = !!seacAnalysisEnabled;
- this.stream = stream;
- this.nextChar();
- }
-
- Type1Parser.prototype = {
- readNumberArray: function Type1Parser_readNumberArray() {
- this.getToken();
- var array = [];
-
- while (true) {
- var token = this.getToken();
-
- if (token === null || token === "]" || token === "}") {
- break;
- }
-
- array.push(parseFloat(token || 0));
- }
-
- return array;
- },
- readNumber: function Type1Parser_readNumber() {
- var token = this.getToken();
- return parseFloat(token || 0);
- },
- readInt: function Type1Parser_readInt() {
- var token = this.getToken();
- return parseInt(token || 0, 10) | 0;
- },
- readBoolean: function Type1Parser_readBoolean() {
- var token = this.getToken();
- return token === "true" ? 1 : 0;
- },
- nextChar: function Type1_nextChar() {
- return this.currentChar = this.stream.getByte();
- },
- getToken: function Type1Parser_getToken() {
- var comment = false;
- var ch = this.currentChar;
-
- while (true) {
- if (ch === -1) {
- return null;
- }
-
- if (comment) {
- if (ch === 0x0a || ch === 0x0d) {
- comment = false;
- }
- } else if (ch === 0x25) {
- comment = true;
- } else if (!(0, _core_utils.isWhiteSpace)(ch)) {
- break;
- }
-
- ch = this.nextChar();
- }
-
- if (isSpecial(ch)) {
- this.nextChar();
- return String.fromCharCode(ch);
- }
-
- var token = "";
-
- do {
- token += String.fromCharCode(ch);
- ch = this.nextChar();
- } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch));
-
- return token;
- },
- readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) {
- if (lenIV === -1) {
- return bytes;
- }
-
- return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);
- },
- extractFontProgram: function Type1Parser_extractFontProgram(properties) {
- var stream = this.stream;
- var subrs = [],
- charstrings = [];
- var privateData = Object.create(null);
- privateData.lenIV = 4;
- var program = {
- subrs: [],
- charstrings: [],
- properties: {
- privateData
- }
- };
- var token, length, data, lenIV, encoded;
-
- while ((token = this.getToken()) !== null) {
- if (token !== "/") {
- continue;
- }
-
- token = this.getToken();
-
- switch (token) {
- case "CharStrings":
- this.getToken();
- this.getToken();
- this.getToken();
- this.getToken();
-
- while (true) {
- token = this.getToken();
-
- if (token === null || token === "end") {
- break;
- }
-
- if (token !== "/") {
- continue;
- }
-
- var glyph = this.getToken();
- length = this.readInt();
- this.getToken();
- data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
- lenIV = program.properties.privateData.lenIV;
- encoded = this.readCharStrings(data, lenIV);
- this.nextChar();
- token = this.getToken();
-
- if (token === "noaccess") {
- this.getToken();
- }
-
- charstrings.push({
- glyph,
- encoded
- });
- }
-
- break;
-
- case "Subrs":
- this.readInt();
- this.getToken();
-
- while (this.getToken() === "dup") {
- const index = this.readInt();
- length = this.readInt();
- this.getToken();
- data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
- lenIV = program.properties.privateData.lenIV;
- encoded = this.readCharStrings(data, lenIV);
- this.nextChar();
- token = this.getToken();
-
- if (token === "noaccess") {
- this.getToken();
- }
-
- subrs[index] = encoded;
- }
-
- break;
-
- case "BlueValues":
- case "OtherBlues":
- case "FamilyBlues":
- case "FamilyOtherBlues":
- var blueArray = this.readNumberArray();
-
- if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {
- program.properties.privateData[token] = blueArray;
- }
-
- break;
-
- case "StemSnapH":
- case "StemSnapV":
- program.properties.privateData[token] = this.readNumberArray();
- break;
-
- case "StdHW":
- case "StdVW":
- program.properties.privateData[token] = this.readNumberArray()[0];
- break;
-
- case "BlueShift":
- case "lenIV":
- case "BlueFuzz":
- case "BlueScale":
- case "LanguageGroup":
- case "ExpansionFactor":
- program.properties.privateData[token] = this.readNumber();
- break;
-
- case "ForceBold":
- program.properties.privateData[token] = this.readBoolean();
- break;
- }
- }
-
- for (var i = 0; i < charstrings.length; i++) {
- glyph = charstrings[i].glyph;
- encoded = charstrings[i].encoded;
- var charString = new Type1CharString();
- var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
- var output = charString.output;
-
- if (error) {
- output = [14];
- }
-
- const charStringObject = {
- glyphName: glyph,
- charstring: output,
- width: charString.width,
- lsb: charString.lsb,
- seac: charString.seac
- };
-
- if (glyph === ".notdef") {
- program.charstrings.unshift(charStringObject);
- } else {
- program.charstrings.push(charStringObject);
- }
-
- if (properties.builtInEncoding) {
- const index = properties.builtInEncoding.indexOf(glyph);
-
- if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) {
- properties.widths[index] = charString.width;
- }
- }
- }
-
- return program;
- },
- extractFontHeader: function Type1Parser_extractFontHeader(properties) {
- var token;
-
- while ((token = this.getToken()) !== null) {
- if (token !== "/") {
- continue;
- }
-
- token = this.getToken();
-
- switch (token) {
- case "FontMatrix":
- var matrix = this.readNumberArray();
- properties.fontMatrix = matrix;
- break;
-
- case "Encoding":
- var encodingArg = this.getToken();
- var encoding;
-
- if (!/^\d+$/.test(encodingArg)) {
- encoding = (0, _encodings.getEncoding)(encodingArg);
- } else {
- encoding = [];
- var size = parseInt(encodingArg, 10) | 0;
- this.getToken();
-
- for (var j = 0; j < size; j++) {
- token = this.getToken();
-
- while (token !== "dup" && token !== "def") {
- token = this.getToken();
-
- if (token === null) {
- return;
- }
- }
-
- if (token === "def") {
- break;
- }
-
- var index = this.readInt();
- this.getToken();
- var glyph = this.getToken();
- encoding[index] = glyph;
- this.getToken();
- }
- }
-
- properties.builtInEncoding = encoding;
- break;
-
- case "FontBBox":
- var fontBBox = this.readNumberArray();
- properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
- properties.descent = Math.min(fontBBox[1], fontBBox[3]);
- properties.ascentScaled = true;
- break;
- }
- }
- }
- };
- return Type1Parser;
-}();
-
-exports.Type1Parser = Type1Parser;
-
-/***/ }),
-/* 38 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getTilingPatternIR = getTilingPatternIR;
-exports.Pattern = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _colorspace = __w_pdfjs_require__(23);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var ShadingType = {
- FUNCTION_BASED: 1,
- AXIAL: 2,
- RADIAL: 3,
- FREE_FORM_MESH: 4,
- LATTICE_FORM_MESH: 5,
- COONS_PATCH_MESH: 6,
- TENSOR_PATCH_MESH: 7
-};
-
-var Pattern = function PatternClosure() {
- function Pattern() {
- (0, _util.unreachable)("should not call Pattern constructor");
- }
-
- Pattern.prototype = {
- getPattern: function Pattern_getPattern(ctx) {
- (0, _util.unreachable)(`Should not call Pattern.getStyle: ${ctx}`);
- }
- };
-
- Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory) {
- var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;
- var type = dict.get("ShadingType");
-
- try {
- switch (type) {
- case ShadingType.AXIAL:
- case ShadingType.RADIAL:
- return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory);
-
- case ShadingType.FREE_FORM_MESH:
- case ShadingType.LATTICE_FORM_MESH:
- case ShadingType.COONS_PATCH_MESH:
- case ShadingType.TENSOR_PATCH_MESH:
- return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory);
-
- default:
- throw new _util.FormatError("Unsupported ShadingType: " + type);
- }
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- handler.send("UnsupportedFeature", {
- featureId: _util.UNSUPPORTED_FEATURES.shadingPattern
- });
- (0, _util.warn)(ex);
- return new Shadings.Dummy();
- }
- };
-
- return Pattern;
-}();
-
-exports.Pattern = Pattern;
-var Shadings = {};
-Shadings.SMALL_NUMBER = 1e-6;
-
-Shadings.RadialAxial = function RadialAxialClosure() {
- function RadialAxial(dict, matrix, xref, res, pdfFunctionFactory) {
- this.matrix = matrix;
- this.coordsArr = dict.getArray("Coords");
- this.shadingType = dict.get("ShadingType");
- this.type = "Pattern";
- var cs = dict.get("ColorSpace", "CS");
- cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
- this.cs = cs;
- const bbox = dict.getArray("BBox");
-
- if (Array.isArray(bbox) && bbox.length === 4) {
- this.bbox = _util.Util.normalizeRect(bbox);
- } else {
- this.bbox = null;
- }
-
- var t0 = 0.0,
- t1 = 1.0;
-
- if (dict.has("Domain")) {
- var domainArr = dict.getArray("Domain");
- t0 = domainArr[0];
- t1 = domainArr[1];
- }
-
- var extendStart = false,
- extendEnd = false;
-
- if (dict.has("Extend")) {
- var extendArr = dict.getArray("Extend");
- extendStart = extendArr[0];
- extendEnd = extendArr[1];
- }
-
- if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {
- var x1 = this.coordsArr[0];
- var y1 = this.coordsArr[1];
- var r1 = this.coordsArr[2];
- var x2 = this.coordsArr[3];
- var y2 = this.coordsArr[4];
- var r2 = this.coordsArr[5];
- var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
-
- if (r1 <= r2 + distance && r2 <= r1 + distance) {
- (0, _util.warn)("Unsupported radial gradient.");
- }
- }
-
- this.extendStart = extendStart;
- this.extendEnd = extendEnd;
- var fnObj = dict.get("Function");
- var fn = pdfFunctionFactory.createFromArray(fnObj);
- const NUMBER_OF_SAMPLES = 10;
- const step = (t1 - t0) / NUMBER_OF_SAMPLES;
- var colorStops = this.colorStops = [];
-
- if (t0 >= t1 || step <= 0) {
- (0, _util.info)("Bad shading domain.");
- return;
- }
-
- var color = new Float32Array(cs.numComps),
- ratio = new Float32Array(1);
- var rgbColor;
-
- for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) {
- ratio[0] = t0 + i * step;
- fn(ratio, 0, color, 0);
- rgbColor = cs.getRgb(color, 0);
-
- var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
-
- colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);
- }
-
- var background = "transparent";
-
- if (dict.has("Background")) {
- rgbColor = cs.getRgb(dict.get("Background"), 0);
- background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
- }
-
- if (!extendStart) {
- colorStops.unshift([0, background]);
- colorStops[1][0] += Shadings.SMALL_NUMBER;
- }
-
- if (!extendEnd) {
- colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;
- colorStops.push([1, background]);
- }
-
- this.colorStops = colorStops;
- }
-
- RadialAxial.prototype = {
- getIR: function RadialAxial_getIR() {
- var coordsArr = this.coordsArr;
- var shadingType = this.shadingType;
- var type, p0, p1, r0, r1;
-
- if (shadingType === ShadingType.AXIAL) {
- p0 = [coordsArr[0], coordsArr[1]];
- p1 = [coordsArr[2], coordsArr[3]];
- r0 = null;
- r1 = null;
- type = "axial";
- } else if (shadingType === ShadingType.RADIAL) {
- p0 = [coordsArr[0], coordsArr[1]];
- p1 = [coordsArr[3], coordsArr[4]];
- r0 = coordsArr[2];
- r1 = coordsArr[5];
- type = "radial";
- } else {
- (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`);
- }
-
- var matrix = this.matrix;
-
- if (matrix) {
- p0 = _util.Util.applyTransform(p0, matrix);
- p1 = _util.Util.applyTransform(p1, matrix);
-
- if (shadingType === ShadingType.RADIAL) {
- var scale = _util.Util.singularValueDecompose2dScale(matrix);
-
- r0 *= scale[0];
- r1 *= scale[1];
- }
- }
-
- return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1];
- }
- };
- return RadialAxial;
-}();
-
-Shadings.Mesh = function MeshClosure() {
- function MeshStreamReader(stream, context) {
- this.stream = stream;
- this.context = context;
- this.buffer = 0;
- this.bufferLength = 0;
- var numComps = context.numComps;
- this.tmpCompsBuf = new Float32Array(numComps);
- var csNumComps = context.colorSpace.numComps;
- this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;
- }
-
- MeshStreamReader.prototype = {
- get hasData() {
- if (this.stream.end) {
- return this.stream.pos < this.stream.end;
- }
-
- if (this.bufferLength > 0) {
- return true;
- }
-
- var nextByte = this.stream.getByte();
-
- if (nextByte < 0) {
- return false;
- }
-
- this.buffer = nextByte;
- this.bufferLength = 8;
- return true;
- },
-
- readBits: function MeshStreamReader_readBits(n) {
- var buffer = this.buffer;
- var bufferLength = this.bufferLength;
-
- if (n === 32) {
- if (bufferLength === 0) {
- return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;
- }
-
- buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();
- var nextByte = this.stream.getByte();
- this.buffer = nextByte & (1 << bufferLength) - 1;
- return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;
- }
-
- if (n === 8 && bufferLength === 0) {
- return this.stream.getByte();
- }
-
- while (bufferLength < n) {
- buffer = buffer << 8 | this.stream.getByte();
- bufferLength += 8;
- }
-
- bufferLength -= n;
- this.bufferLength = bufferLength;
- this.buffer = buffer & (1 << bufferLength) - 1;
- return buffer >> bufferLength;
- },
- align: function MeshStreamReader_align() {
- this.buffer = 0;
- this.bufferLength = 0;
- },
- readFlag: function MeshStreamReader_readFlag() {
- return this.readBits(this.context.bitsPerFlag);
- },
- readCoordinate: function MeshStreamReader_readCoordinate() {
- var bitsPerCoordinate = this.context.bitsPerCoordinate;
- var xi = this.readBits(bitsPerCoordinate);
- var yi = this.readBits(bitsPerCoordinate);
- var decode = this.context.decode;
- var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;
- return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];
- },
- readComponents: function MeshStreamReader_readComponents() {
- var numComps = this.context.numComps;
- var bitsPerComponent = this.context.bitsPerComponent;
- var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;
- var decode = this.context.decode;
- var components = this.tmpCompsBuf;
-
- for (var i = 0, j = 4; i < numComps; i++, j += 2) {
- var ci = this.readBits(bitsPerComponent);
- components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
- }
-
- var color = this.tmpCsCompsBuf;
-
- if (this.context.colorFn) {
- this.context.colorFn(components, 0, color, 0);
- }
-
- return this.context.colorSpace.getRgb(color, 0);
- }
- };
-
- function decodeType4Shading(mesh, reader) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var operators = [];
- var ps = [];
- var verticesLeft = 0;
-
- while (reader.hasData) {
- var f = reader.readFlag();
- var coord = reader.readCoordinate();
- var color = reader.readComponents();
-
- if (verticesLeft === 0) {
- if (!(0 <= f && f <= 2)) {
- throw new _util.FormatError("Unknown type4 flag");
- }
-
- switch (f) {
- case 0:
- verticesLeft = 3;
- break;
-
- case 1:
- ps.push(ps[ps.length - 2], ps[ps.length - 1]);
- verticesLeft = 1;
- break;
-
- case 2:
- ps.push(ps[ps.length - 3], ps[ps.length - 1]);
- verticesLeft = 1;
- break;
- }
-
- operators.push(f);
- }
-
- ps.push(coords.length);
- coords.push(coord);
- colors.push(color);
- verticesLeft--;
- reader.align();
- }
-
- mesh.figures.push({
- type: "triangles",
- coords: new Int32Array(ps),
- colors: new Int32Array(ps)
- });
- }
-
- function decodeType5Shading(mesh, reader, verticesPerRow) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var ps = [];
-
- while (reader.hasData) {
- var coord = reader.readCoordinate();
- var color = reader.readComponents();
- ps.push(coords.length);
- coords.push(coord);
- colors.push(color);
- }
-
- mesh.figures.push({
- type: "lattice",
- coords: new Int32Array(ps),
- colors: new Int32Array(ps),
- verticesPerRow
- });
- }
-
- var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
- var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
- var TRIANGLE_DENSITY = 20;
-
- var getB = function getBClosure() {
- function buildB(count) {
- var lut = [];
-
- for (var i = 0; i <= count; i++) {
- var t = i / count,
- t_ = 1 - t;
- lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t]));
- }
-
- return lut;
- }
-
- var cache = [];
- return function getB(count) {
- if (!cache[count]) {
- cache[count] = buildB(count);
- }
-
- return cache[count];
- };
- }();
-
- function buildFigureFromPatch(mesh, index) {
- var figure = mesh.figures[index];
- (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure");
- var coords = mesh.coords,
- colors = mesh.colors;
- var pi = figure.coords;
- var ci = figure.colors;
- var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
- var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
- var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
- var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
- var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0]));
- splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));
- var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1]));
- splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));
- var verticesPerRow = splitXBy + 1;
- var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
- var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
- var k = 0;
- var cl = new Uint8Array(3),
- cr = new Uint8Array(3);
- var c0 = colors[ci[0]],
- c1 = colors[ci[1]],
- c2 = colors[ci[2]],
- c3 = colors[ci[3]];
- var bRow = getB(splitYBy),
- bCol = getB(splitXBy);
-
- for (var row = 0; row <= splitYBy; row++) {
- cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;
- cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;
- cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;
- cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;
- cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;
- cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;
-
- for (var col = 0; col <= splitXBy; col++, k++) {
- if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {
- continue;
- }
-
- var x = 0,
- y = 0;
- var q = 0;
-
- for (var i = 0; i <= 3; i++) {
- for (var j = 0; j <= 3; j++, q++) {
- var m = bRow[row][i] * bCol[col][j];
- x += coords[pi[q]][0] * m;
- y += coords[pi[q]][1] * m;
- }
- }
-
- figureCoords[k] = coords.length;
- coords.push([x, y]);
- figureColors[k] = colors.length;
- var newColor = new Uint8Array(3);
- newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;
- newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;
- newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;
- colors.push(newColor);
- }
- }
-
- figureCoords[0] = pi[0];
- figureColors[0] = ci[0];
- figureCoords[splitXBy] = pi[3];
- figureColors[splitXBy] = ci[1];
- figureCoords[verticesPerRow * splitYBy] = pi[12];
- figureColors[verticesPerRow * splitYBy] = ci[2];
- figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];
- figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];
- mesh.figures[index] = {
- type: "lattice",
- coords: figureCoords,
- colors: figureColors,
- verticesPerRow
- };
- }
-
- function decodeType6Shading(mesh, reader) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var ps = new Int32Array(16);
- var cs = new Int32Array(4);
-
- while (reader.hasData) {
- var f = reader.readFlag();
-
- if (!(0 <= f && f <= 3)) {
- throw new _util.FormatError("Unknown type6 flag");
- }
-
- var i, ii;
- var pi = coords.length;
-
- for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
- coords.push(reader.readCoordinate());
- }
-
- var ci = colors.length;
-
- for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
- colors.push(reader.readComponents());
- }
-
- var tmp1, tmp2, tmp3, tmp4;
-
- switch (f) {
- case 0:
- ps[12] = pi + 3;
- ps[13] = pi + 4;
- ps[14] = pi + 5;
- ps[15] = pi + 6;
- ps[8] = pi + 2;
- ps[11] = pi + 7;
- ps[4] = pi + 1;
- ps[7] = pi + 8;
- ps[0] = pi;
- ps[1] = pi + 11;
- ps[2] = pi + 10;
- ps[3] = pi + 9;
- cs[2] = ci + 1;
- cs[3] = ci + 2;
- cs[0] = ci;
- cs[1] = ci + 3;
- break;
-
- case 1:
- tmp1 = ps[12];
- tmp2 = ps[13];
- tmp3 = ps[14];
- tmp4 = ps[15];
- ps[12] = tmp4;
- ps[13] = pi + 0;
- ps[14] = pi + 1;
- ps[15] = pi + 2;
- ps[8] = tmp3;
- ps[11] = pi + 3;
- ps[4] = tmp2;
- ps[7] = pi + 4;
- ps[0] = tmp1;
- ps[1] = pi + 7;
- ps[2] = pi + 6;
- ps[3] = pi + 5;
- tmp1 = cs[2];
- tmp2 = cs[3];
- cs[2] = tmp2;
- cs[3] = ci;
- cs[0] = tmp1;
- cs[1] = ci + 1;
- break;
-
- case 2:
- tmp1 = ps[15];
- tmp2 = ps[11];
- ps[12] = ps[3];
- ps[13] = pi + 0;
- ps[14] = pi + 1;
- ps[15] = pi + 2;
- ps[8] = ps[7];
- ps[11] = pi + 3;
- ps[4] = tmp2;
- ps[7] = pi + 4;
- ps[0] = tmp1;
- ps[1] = pi + 7;
- ps[2] = pi + 6;
- ps[3] = pi + 5;
- tmp1 = cs[3];
- cs[2] = cs[1];
- cs[3] = ci;
- cs[0] = tmp1;
- cs[1] = ci + 1;
- break;
-
- case 3:
- ps[12] = ps[0];
- ps[13] = pi + 0;
- ps[14] = pi + 1;
- ps[15] = pi + 2;
- ps[8] = ps[1];
- ps[11] = pi + 3;
- ps[4] = ps[2];
- ps[7] = pi + 4;
- ps[0] = ps[3];
- ps[1] = pi + 7;
- ps[2] = pi + 6;
- ps[3] = pi + 5;
- cs[2] = cs[0];
- cs[3] = ci;
- cs[0] = cs[1];
- cs[1] = ci + 1;
- break;
- }
-
- ps[5] = coords.length;
- coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]);
- ps[6] = coords.length;
- coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]);
- ps[9] = coords.length;
- coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]);
- ps[10] = coords.length;
- coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]);
- mesh.figures.push({
- type: "patch",
- coords: new Int32Array(ps),
- colors: new Int32Array(cs)
- });
- }
- }
-
- function decodeType7Shading(mesh, reader) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var ps = new Int32Array(16);
- var cs = new Int32Array(4);
-
- while (reader.hasData) {
- var f = reader.readFlag();
-
- if (!(0 <= f && f <= 3)) {
- throw new _util.FormatError("Unknown type7 flag");
- }
-
- var i, ii;
- var pi = coords.length;
-
- for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
- coords.push(reader.readCoordinate());
- }
-
- var ci = colors.length;
-
- for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
- colors.push(reader.readComponents());
- }
-
- var tmp1, tmp2, tmp3, tmp4;
-
- switch (f) {
- case 0:
- ps[12] = pi + 3;
- ps[13] = pi + 4;
- ps[14] = pi + 5;
- ps[15] = pi + 6;
- ps[8] = pi + 2;
- ps[9] = pi + 13;
- ps[10] = pi + 14;
- ps[11] = pi + 7;
- ps[4] = pi + 1;
- ps[5] = pi + 12;
- ps[6] = pi + 15;
- ps[7] = pi + 8;
- ps[0] = pi;
- ps[1] = pi + 11;
- ps[2] = pi + 10;
- ps[3] = pi + 9;
- cs[2] = ci + 1;
- cs[3] = ci + 2;
- cs[0] = ci;
- cs[1] = ci + 3;
- break;
-
- case 1:
- tmp1 = ps[12];
- tmp2 = ps[13];
- tmp3 = ps[14];
- tmp4 = ps[15];
- ps[12] = tmp4;
- ps[13] = pi + 0;
- ps[14] = pi + 1;
- ps[15] = pi + 2;
- ps[8] = tmp3;
- ps[9] = pi + 9;
- ps[10] = pi + 10;
- ps[11] = pi + 3;
- ps[4] = tmp2;
- ps[5] = pi + 8;
- ps[6] = pi + 11;
- ps[7] = pi + 4;
- ps[0] = tmp1;
- ps[1] = pi + 7;
- ps[2] = pi + 6;
- ps[3] = pi + 5;
- tmp1 = cs[2];
- tmp2 = cs[3];
- cs[2] = tmp2;
- cs[3] = ci;
- cs[0] = tmp1;
- cs[1] = ci + 1;
- break;
-
- case 2:
- tmp1 = ps[15];
- tmp2 = ps[11];
- ps[12] = ps[3];
- ps[13] = pi + 0;
- ps[14] = pi + 1;
- ps[15] = pi + 2;
- ps[8] = ps[7];
- ps[9] = pi + 9;
- ps[10] = pi + 10;
- ps[11] = pi + 3;
- ps[4] = tmp2;
- ps[5] = pi + 8;
- ps[6] = pi + 11;
- ps[7] = pi + 4;
- ps[0] = tmp1;
- ps[1] = pi + 7;
- ps[2] = pi + 6;
- ps[3] = pi + 5;
- tmp1 = cs[3];
- cs[2] = cs[1];
- cs[3] = ci;
- cs[0] = tmp1;
- cs[1] = ci + 1;
- break;
-
- case 3:
- ps[12] = ps[0];
- ps[13] = pi + 0;
- ps[14] = pi + 1;
- ps[15] = pi + 2;
- ps[8] = ps[1];
- ps[9] = pi + 9;
- ps[10] = pi + 10;
- ps[11] = pi + 3;
- ps[4] = ps[2];
- ps[5] = pi + 8;
- ps[6] = pi + 11;
- ps[7] = pi + 4;
- ps[0] = ps[3];
- ps[1] = pi + 7;
- ps[2] = pi + 6;
- ps[3] = pi + 5;
- cs[2] = cs[0];
- cs[3] = ci;
- cs[0] = cs[1];
- cs[1] = ci + 1;
- break;
- }
-
- mesh.figures.push({
- type: "patch",
- coords: new Int32Array(ps),
- colors: new Int32Array(cs)
- });
- }
- }
-
- function updateBounds(mesh) {
- var minX = mesh.coords[0][0],
- minY = mesh.coords[0][1],
- maxX = minX,
- maxY = minY;
-
- for (var i = 1, ii = mesh.coords.length; i < ii; i++) {
- var x = mesh.coords[i][0],
- y = mesh.coords[i][1];
- minX = minX > x ? x : minX;
- minY = minY > y ? y : minY;
- maxX = maxX < x ? x : maxX;
- maxY = maxY < y ? y : maxY;
- }
-
- mesh.bounds = [minX, minY, maxX, maxY];
- }
-
- function packData(mesh) {
- var i, ii, j, jj;
- var coords = mesh.coords;
- var coordsPacked = new Float32Array(coords.length * 2);
-
- for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
- var xy = coords[i];
- coordsPacked[j++] = xy[0];
- coordsPacked[j++] = xy[1];
- }
-
- mesh.coords = coordsPacked;
- var colors = mesh.colors;
- var colorsPacked = new Uint8Array(colors.length * 3);
-
- for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
- var c = colors[i];
- colorsPacked[j++] = c[0];
- colorsPacked[j++] = c[1];
- colorsPacked[j++] = c[2];
- }
-
- mesh.colors = colorsPacked;
- var figures = mesh.figures;
-
- for (i = 0, ii = figures.length; i < ii; i++) {
- var figure = figures[i],
- ps = figure.coords,
- cs = figure.colors;
-
- for (j = 0, jj = ps.length; j < jj; j++) {
- ps[j] *= 2;
- cs[j] *= 3;
- }
- }
- }
-
- function Mesh(stream, matrix, xref, res, pdfFunctionFactory) {
- if (!(0, _primitives.isStream)(stream)) {
- throw new _util.FormatError("Mesh data is not a stream");
- }
-
- var dict = stream.dict;
- this.matrix = matrix;
- this.shadingType = dict.get("ShadingType");
- this.type = "Pattern";
- const bbox = dict.getArray("BBox");
-
- if (Array.isArray(bbox) && bbox.length === 4) {
- this.bbox = _util.Util.normalizeRect(bbox);
- } else {
- this.bbox = null;
- }
-
- var cs = dict.get("ColorSpace", "CS");
- cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
- this.cs = cs;
- this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null;
- var fnObj = dict.get("Function");
- var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;
- this.coords = [];
- this.colors = [];
- this.figures = [];
- var decodeContext = {
- bitsPerCoordinate: dict.get("BitsPerCoordinate"),
- bitsPerComponent: dict.get("BitsPerComponent"),
- bitsPerFlag: dict.get("BitsPerFlag"),
- decode: dict.getArray("Decode"),
- colorFn: fn,
- colorSpace: cs,
- numComps: fn ? 1 : cs.numComps
- };
- var reader = new MeshStreamReader(stream, decodeContext);
- var patchMesh = false;
-
- switch (this.shadingType) {
- case ShadingType.FREE_FORM_MESH:
- decodeType4Shading(this, reader);
- break;
-
- case ShadingType.LATTICE_FORM_MESH:
- var verticesPerRow = dict.get("VerticesPerRow") | 0;
-
- if (verticesPerRow < 2) {
- throw new _util.FormatError("Invalid VerticesPerRow");
- }
-
- decodeType5Shading(this, reader, verticesPerRow);
- break;
-
- case ShadingType.COONS_PATCH_MESH:
- decodeType6Shading(this, reader);
- patchMesh = true;
- break;
-
- case ShadingType.TENSOR_PATCH_MESH:
- decodeType7Shading(this, reader);
- patchMesh = true;
- break;
-
- default:
- (0, _util.unreachable)("Unsupported mesh type.");
- break;
- }
-
- if (patchMesh) {
- updateBounds(this);
-
- for (var i = 0, ii = this.figures.length; i < ii; i++) {
- buildFigureFromPatch(this, i);
- }
- }
-
- updateBounds(this);
- packData(this);
- }
-
- Mesh.prototype = {
- getIR: function Mesh_getIR() {
- return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background];
- }
- };
- return Mesh;
-}();
-
-Shadings.Dummy = function DummyClosure() {
- function Dummy() {
- this.type = "Pattern";
- }
-
- Dummy.prototype = {
- getIR: function Dummy_getIR() {
- return ["Dummy"];
- }
- };
- return Dummy;
-}();
-
-function getTilingPatternIR(operatorList, dict, args) {
- const matrix = dict.getArray("Matrix");
-
- const bbox = _util.Util.normalizeRect(dict.getArray("BBox"));
-
- const xstep = dict.get("XStep");
- const ystep = dict.get("YStep");
- const paintType = dict.get("PaintType");
- const tilingType = dict.get("TilingType");
-
- if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {
- throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`);
- }
-
- return ["TilingPattern", args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
-}
-
-/***/ }),
-/* 39 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.bidi = bidi;
-
-var _util = __w_pdfjs_require__(2);
-
-var baseTypes = ["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", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "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", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"];
-var arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "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", "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", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"];
-
-function isOdd(i) {
- return (i & 1) !== 0;
-}
-
-function isEven(i) {
- return (i & 1) === 0;
-}
-
-function findUnequal(arr, start, value) {
- for (var j = start, jj = arr.length; j < jj; ++j) {
- if (arr[j] !== value) {
- return j;
- }
- }
-
- return j;
-}
-
-function setValues(arr, start, end, value) {
- for (var j = start; j < end; ++j) {
- arr[j] = value;
- }
-}
-
-function reverseValues(arr, start, end) {
- for (var i = start, j = end - 1; i < j; ++i, --j) {
- var temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
-}
-
-function createBidiText(str, isLTR, vertical = false) {
- let dir = "ltr";
-
- if (vertical) {
- dir = "ttb";
- } else if (!isLTR) {
- dir = "rtl";
- }
-
- return {
- str,
- dir
- };
-}
-
-var chars = [];
-var types = [];
-
-function bidi(str, startLevel, vertical) {
- var isLTR = true;
- var strLength = str.length;
-
- if (strLength === 0 || vertical) {
- return createBidiText(str, isLTR, vertical);
- }
-
- chars.length = strLength;
- types.length = strLength;
- var numBidi = 0;
- var i, ii;
-
- for (i = 0; i < strLength; ++i) {
- chars[i] = str.charAt(i);
- var charCode = str.charCodeAt(i);
- var charType = "L";
-
- if (charCode <= 0x00ff) {
- charType = baseTypes[charCode];
- } else if (0x0590 <= charCode && charCode <= 0x05f4) {
- charType = "R";
- } else if (0x0600 <= charCode && charCode <= 0x06ff) {
- charType = arabicTypes[charCode & 0xff];
-
- if (!charType) {
- (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16));
- }
- } else if (0x0700 <= charCode && charCode <= 0x08ac) {
- charType = "AL";
- }
-
- if (charType === "R" || charType === "AL" || charType === "AN") {
- numBidi++;
- }
-
- types[i] = charType;
- }
-
- if (numBidi === 0) {
- isLTR = true;
- return createBidiText(str, isLTR);
- }
-
- if (startLevel === -1) {
- if (numBidi / strLength < 0.3) {
- isLTR = true;
- startLevel = 0;
- } else {
- isLTR = false;
- startLevel = 1;
- }
- }
-
- var levels = [];
-
- for (i = 0; i < strLength; ++i) {
- levels[i] = startLevel;
- }
-
- var e = isOdd(startLevel) ? "R" : "L";
- var sor = e;
- var eor = sor;
- var lastType = sor;
-
- for (i = 0; i < strLength; ++i) {
- if (types[i] === "NSM") {
- types[i] = lastType;
- } else {
- lastType = types[i];
- }
- }
-
- lastType = sor;
- var t;
-
- for (i = 0; i < strLength; ++i) {
- t = types[i];
-
- if (t === "EN") {
- types[i] = lastType === "AL" ? "AN" : "EN";
- } else if (t === "R" || t === "L" || t === "AL") {
- lastType = t;
- }
- }
-
- for (i = 0; i < strLength; ++i) {
- t = types[i];
-
- if (t === "AL") {
- types[i] = "R";
- }
- }
-
- for (i = 1; i < strLength - 1; ++i) {
- if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") {
- types[i] = "EN";
- }
-
- if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) {
- types[i] = types[i - 1];
- }
- }
-
- for (i = 0; i < strLength; ++i) {
- if (types[i] === "EN") {
- var j;
-
- for (j = i - 1; j >= 0; --j) {
- if (types[j] !== "ET") {
- break;
- }
-
- types[j] = "EN";
- }
-
- for (j = i + 1; j < strLength; ++j) {
- if (types[j] !== "ET") {
- break;
- }
-
- types[j] = "EN";
- }
- }
- }
-
- for (i = 0; i < strLength; ++i) {
- t = types[i];
-
- if (t === "WS" || t === "ES" || t === "ET" || t === "CS") {
- types[i] = "ON";
- }
- }
-
- lastType = sor;
-
- for (i = 0; i < strLength; ++i) {
- t = types[i];
-
- if (t === "EN") {
- types[i] = lastType === "L" ? "L" : "EN";
- } else if (t === "R" || t === "L") {
- lastType = t;
- }
- }
-
- for (i = 0; i < strLength; ++i) {
- if (types[i] === "ON") {
- var end = findUnequal(types, i + 1, "ON");
- var before = sor;
-
- if (i > 0) {
- before = types[i - 1];
- }
-
- var after = eor;
-
- if (end + 1 < strLength) {
- after = types[end + 1];
- }
-
- if (before !== "L") {
- before = "R";
- }
-
- if (after !== "L") {
- after = "R";
- }
-
- if (before === after) {
- setValues(types, i, end, before);
- }
-
- i = end - 1;
- }
- }
-
- for (i = 0; i < strLength; ++i) {
- if (types[i] === "ON") {
- types[i] = e;
- }
- }
-
- for (i = 0; i < strLength; ++i) {
- t = types[i];
-
- if (isEven(levels[i])) {
- if (t === "R") {
- levels[i] += 1;
- } else if (t === "AN" || t === "EN") {
- levels[i] += 2;
- }
- } else {
- if (t === "L" || t === "AN" || t === "EN") {
- levels[i] += 1;
- }
- }
- }
-
- var highestLevel = -1;
- var lowestOddLevel = 99;
- var level;
-
- for (i = 0, ii = levels.length; i < ii; ++i) {
- level = levels[i];
-
- if (highestLevel < level) {
- highestLevel = level;
- }
-
- if (lowestOddLevel > level && isOdd(level)) {
- lowestOddLevel = level;
- }
- }
-
- for (level = highestLevel; level >= lowestOddLevel; --level) {
- var start = -1;
-
- for (i = 0, ii = levels.length; i < ii; ++i) {
- if (levels[i] < level) {
- if (start >= 0) {
- reverseValues(chars, start, i);
- start = -1;
- }
- } else if (start < 0) {
- start = i;
- }
- }
-
- if (start >= 0) {
- reverseValues(chars, start, levels.length);
- }
- }
-
- for (i = 0, ii = chars.length; i < ii; ++i) {
- var ch = chars[i];
-
- if (ch === "<" || ch === ">") {
- chars[i] = "";
- }
- }
-
- return createBidiText(chars.join(""), isLTR);
-}
-
-/***/ }),
-/* 40 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getMetrics = void 0;
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.Courier = 600;
- t["Courier-Bold"] = 600;
- t["Courier-BoldOblique"] = 600;
- t["Courier-Oblique"] = 600;
- t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 278;
- t.exclam = 278;
- t.quotedbl = 355;
- t.numbersign = 556;
- t.dollar = 556;
- t.percent = 889;
- t.ampersand = 667;
- t.quoteright = 222;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 389;
- t.plus = 584;
- t.comma = 278;
- t.hyphen = 333;
- t.period = 278;
- t.slash = 278;
- t.zero = 556;
- t.one = 556;
- t.two = 556;
- t.three = 556;
- t.four = 556;
- t.five = 556;
- t.six = 556;
- t.seven = 556;
- t.eight = 556;
- t.nine = 556;
- t.colon = 278;
- t.semicolon = 278;
- t.less = 584;
- t.equal = 584;
- t.greater = 584;
- t.question = 556;
- t.at = 1015;
- t.A = 667;
- t.B = 667;
- t.C = 722;
- t.D = 722;
- t.E = 667;
- t.F = 611;
- t.G = 778;
- t.H = 722;
- t.I = 278;
- t.J = 500;
- t.K = 667;
- t.L = 556;
- t.M = 833;
- t.N = 722;
- t.O = 778;
- t.P = 667;
- t.Q = 778;
- t.R = 722;
- t.S = 667;
- t.T = 611;
- t.U = 722;
- t.V = 667;
- t.W = 944;
- t.X = 667;
- t.Y = 667;
- t.Z = 611;
- t.bracketleft = 278;
- t.backslash = 278;
- t.bracketright = 278;
- t.asciicircum = 469;
- t.underscore = 556;
- t.quoteleft = 222;
- t.a = 556;
- t.b = 556;
- t.c = 500;
- t.d = 556;
- t.e = 556;
- t.f = 278;
- t.g = 556;
- t.h = 556;
- t.i = 222;
- t.j = 222;
- t.k = 500;
- t.l = 222;
- t.m = 833;
- t.n = 556;
- t.o = 556;
- t.p = 556;
- t.q = 556;
- t.r = 333;
- t.s = 500;
- t.t = 278;
- t.u = 556;
- t.v = 500;
- t.w = 722;
- t.x = 500;
- t.y = 500;
- t.z = 500;
- t.braceleft = 334;
- t.bar = 260;
- t.braceright = 334;
- t.asciitilde = 584;
- t.exclamdown = 333;
- t.cent = 556;
- t.sterling = 556;
- t.fraction = 167;
- t.yen = 556;
- t.florin = 556;
- t.section = 556;
- t.currency = 556;
- t.quotesingle = 191;
- t.quotedblleft = 333;
- t.guillemotleft = 556;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 500;
- t.fl = 500;
- t.endash = 556;
- t.dagger = 556;
- t.daggerdbl = 556;
- t.periodcentered = 278;
- t.paragraph = 537;
- t.bullet = 350;
- t.quotesinglbase = 222;
- t.quotedblbase = 333;
- t.quotedblright = 333;
- t.guillemotright = 556;
- t.ellipsis = 1000;
- t.perthousand = 1000;
- t.questiondown = 611;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 1000;
- t.AE = 1000;
- t.ordfeminine = 370;
- t.Lslash = 556;
- t.Oslash = 778;
- t.OE = 1000;
- t.ordmasculine = 365;
- t.ae = 889;
- t.dotlessi = 278;
- t.lslash = 222;
- t.oslash = 611;
- t.oe = 944;
- t.germandbls = 611;
- t.Idieresis = 278;
- t.eacute = 556;
- t.abreve = 556;
- t.uhungarumlaut = 556;
- t.ecaron = 556;
- t.Ydieresis = 667;
- t.divide = 584;
- t.Yacute = 667;
- t.Acircumflex = 667;
- t.aacute = 556;
- t.Ucircumflex = 722;
- t.yacute = 500;
- t.scommaaccent = 500;
- t.ecircumflex = 556;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 556;
- t.Uacute = 722;
- t.uogonek = 556;
- t.Edieresis = 667;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 737;
- t.Emacron = 667;
- t.ccaron = 500;
- t.aring = 556;
- t.Ncommaaccent = 722;
- t.lacute = 222;
- t.agrave = 556;
- t.Tcommaaccent = 611;
- t.Cacute = 722;
- t.atilde = 556;
- t.Edotaccent = 667;
- t.scaron = 500;
- t.scedilla = 500;
- t.iacute = 278;
- t.lozenge = 471;
- t.Rcaron = 722;
- t.Gcommaaccent = 778;
- t.ucircumflex = 556;
- t.acircumflex = 556;
- t.Amacron = 667;
- t.rcaron = 333;
- t.ccedilla = 500;
- t.Zdotaccent = 611;
- t.Thorn = 667;
- t.Omacron = 778;
- t.Racute = 722;
- t.Sacute = 667;
- t.dcaron = 643;
- t.Umacron = 722;
- t.uring = 556;
- t.threesuperior = 333;
- t.Ograve = 778;
- t.Agrave = 667;
- t.Abreve = 667;
- t.multiply = 584;
- t.uacute = 556;
- t.Tcaron = 611;
- t.partialdiff = 476;
- t.ydieresis = 500;
- t.Nacute = 722;
- t.icircumflex = 278;
- t.Ecircumflex = 667;
- t.adieresis = 556;
- t.edieresis = 556;
- t.cacute = 500;
- t.nacute = 556;
- t.umacron = 556;
- t.Ncaron = 722;
- t.Iacute = 278;
- t.plusminus = 584;
- t.brokenbar = 260;
- t.registered = 737;
- t.Gbreve = 778;
- t.Idotaccent = 278;
- t.summation = 600;
- t.Egrave = 667;
- t.racute = 333;
- t.omacron = 556;
- t.Zacute = 611;
- t.Zcaron = 611;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 722;
- t.lcommaaccent = 222;
- t.tcaron = 317;
- t.eogonek = 556;
- t.Uogonek = 722;
- t.Aacute = 667;
- t.Adieresis = 667;
- t.egrave = 556;
- t.zacute = 500;
- t.iogonek = 222;
- t.Oacute = 778;
- t.oacute = 556;
- t.amacron = 556;
- t.sacute = 500;
- t.idieresis = 278;
- t.Ocircumflex = 778;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 556;
- t.twosuperior = 333;
- t.Odieresis = 778;
- t.mu = 556;
- t.igrave = 278;
- t.ohungarumlaut = 556;
- t.Eogonek = 667;
- t.dcroat = 556;
- t.threequarters = 834;
- t.Scedilla = 667;
- t.lcaron = 299;
- t.Kcommaaccent = 667;
- t.Lacute = 556;
- t.trademark = 1000;
- t.edotaccent = 556;
- t.Igrave = 278;
- t.Imacron = 278;
- t.Lcaron = 556;
- t.onehalf = 834;
- t.lessequal = 549;
- t.ocircumflex = 556;
- t.ntilde = 556;
- t.Uhungarumlaut = 722;
- t.Eacute = 667;
- t.emacron = 556;
- t.gbreve = 556;
- t.onequarter = 834;
- t.Scaron = 667;
- t.Scommaaccent = 667;
- t.Ohungarumlaut = 778;
- t.degree = 400;
- t.ograve = 556;
- t.Ccaron = 722;
- t.ugrave = 556;
- t.radical = 453;
- t.Dcaron = 722;
- t.rcommaaccent = 333;
- t.Ntilde = 722;
- t.otilde = 556;
- t.Rcommaaccent = 722;
- t.Lcommaaccent = 556;
- t.Atilde = 667;
- t.Aogonek = 667;
- t.Aring = 667;
- t.Otilde = 778;
- t.zdotaccent = 500;
- t.Ecaron = 667;
- t.Iogonek = 278;
- t.kcommaaccent = 500;
- t.minus = 584;
- t.Icircumflex = 278;
- t.ncaron = 556;
- t.tcommaaccent = 278;
- t.logicalnot = 584;
- t.odieresis = 556;
- t.udieresis = 556;
- t.notequal = 549;
- t.gcommaaccent = 556;
- t.eth = 556;
- t.zcaron = 500;
- t.ncommaaccent = 556;
- t.onesuperior = 333;
- t.imacron = 278;
- t.Euro = 556;
- });
- t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 278;
- t.exclam = 333;
- t.quotedbl = 474;
- t.numbersign = 556;
- t.dollar = 556;
- t.percent = 889;
- t.ampersand = 722;
- t.quoteright = 278;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 389;
- t.plus = 584;
- t.comma = 278;
- t.hyphen = 333;
- t.period = 278;
- t.slash = 278;
- t.zero = 556;
- t.one = 556;
- t.two = 556;
- t.three = 556;
- t.four = 556;
- t.five = 556;
- t.six = 556;
- t.seven = 556;
- t.eight = 556;
- t.nine = 556;
- t.colon = 333;
- t.semicolon = 333;
- t.less = 584;
- t.equal = 584;
- t.greater = 584;
- t.question = 611;
- t.at = 975;
- t.A = 722;
- t.B = 722;
- t.C = 722;
- t.D = 722;
- t.E = 667;
- t.F = 611;
- t.G = 778;
- t.H = 722;
- t.I = 278;
- t.J = 556;
- t.K = 722;
- t.L = 611;
- t.M = 833;
- t.N = 722;
- t.O = 778;
- t.P = 667;
- t.Q = 778;
- t.R = 722;
- t.S = 667;
- t.T = 611;
- t.U = 722;
- t.V = 667;
- t.W = 944;
- t.X = 667;
- t.Y = 667;
- t.Z = 611;
- t.bracketleft = 333;
- t.backslash = 278;
- t.bracketright = 333;
- t.asciicircum = 584;
- t.underscore = 556;
- t.quoteleft = 278;
- t.a = 556;
- t.b = 611;
- t.c = 556;
- t.d = 611;
- t.e = 556;
- t.f = 333;
- t.g = 611;
- t.h = 611;
- t.i = 278;
- t.j = 278;
- t.k = 556;
- t.l = 278;
- t.m = 889;
- t.n = 611;
- t.o = 611;
- t.p = 611;
- t.q = 611;
- t.r = 389;
- t.s = 556;
- t.t = 333;
- t.u = 611;
- t.v = 556;
- t.w = 778;
- t.x = 556;
- t.y = 556;
- t.z = 500;
- t.braceleft = 389;
- t.bar = 280;
- t.braceright = 389;
- t.asciitilde = 584;
- t.exclamdown = 333;
- t.cent = 556;
- t.sterling = 556;
- t.fraction = 167;
- t.yen = 556;
- t.florin = 556;
- t.section = 556;
- t.currency = 556;
- t.quotesingle = 238;
- t.quotedblleft = 500;
- t.guillemotleft = 556;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 611;
- t.fl = 611;
- t.endash = 556;
- t.dagger = 556;
- t.daggerdbl = 556;
- t.periodcentered = 278;
- t.paragraph = 556;
- t.bullet = 350;
- t.quotesinglbase = 278;
- t.quotedblbase = 500;
- t.quotedblright = 500;
- t.guillemotright = 556;
- t.ellipsis = 1000;
- t.perthousand = 1000;
- t.questiondown = 611;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 1000;
- t.AE = 1000;
- t.ordfeminine = 370;
- t.Lslash = 611;
- t.Oslash = 778;
- t.OE = 1000;
- t.ordmasculine = 365;
- t.ae = 889;
- t.dotlessi = 278;
- t.lslash = 278;
- t.oslash = 611;
- t.oe = 944;
- t.germandbls = 611;
- t.Idieresis = 278;
- t.eacute = 556;
- t.abreve = 556;
- t.uhungarumlaut = 611;
- t.ecaron = 556;
- t.Ydieresis = 667;
- t.divide = 584;
- t.Yacute = 667;
- t.Acircumflex = 722;
- t.aacute = 556;
- t.Ucircumflex = 722;
- t.yacute = 556;
- t.scommaaccent = 556;
- t.ecircumflex = 556;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 556;
- t.Uacute = 722;
- t.uogonek = 611;
- t.Edieresis = 667;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 737;
- t.Emacron = 667;
- t.ccaron = 556;
- t.aring = 556;
- t.Ncommaaccent = 722;
- t.lacute = 278;
- t.agrave = 556;
- t.Tcommaaccent = 611;
- t.Cacute = 722;
- t.atilde = 556;
- t.Edotaccent = 667;
- t.scaron = 556;
- t.scedilla = 556;
- t.iacute = 278;
- t.lozenge = 494;
- t.Rcaron = 722;
- t.Gcommaaccent = 778;
- t.ucircumflex = 611;
- t.acircumflex = 556;
- t.Amacron = 722;
- t.rcaron = 389;
- t.ccedilla = 556;
- t.Zdotaccent = 611;
- t.Thorn = 667;
- t.Omacron = 778;
- t.Racute = 722;
- t.Sacute = 667;
- t.dcaron = 743;
- t.Umacron = 722;
- t.uring = 611;
- t.threesuperior = 333;
- t.Ograve = 778;
- t.Agrave = 722;
- t.Abreve = 722;
- t.multiply = 584;
- t.uacute = 611;
- t.Tcaron = 611;
- t.partialdiff = 494;
- t.ydieresis = 556;
- t.Nacute = 722;
- t.icircumflex = 278;
- t.Ecircumflex = 667;
- t.adieresis = 556;
- t.edieresis = 556;
- t.cacute = 556;
- t.nacute = 611;
- t.umacron = 611;
- t.Ncaron = 722;
- t.Iacute = 278;
- t.plusminus = 584;
- t.brokenbar = 280;
- t.registered = 737;
- t.Gbreve = 778;
- t.Idotaccent = 278;
- t.summation = 600;
- t.Egrave = 667;
- t.racute = 389;
- t.omacron = 611;
- t.Zacute = 611;
- t.Zcaron = 611;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 722;
- t.lcommaaccent = 278;
- t.tcaron = 389;
- t.eogonek = 556;
- t.Uogonek = 722;
- t.Aacute = 722;
- t.Adieresis = 722;
- t.egrave = 556;
- t.zacute = 500;
- t.iogonek = 278;
- t.Oacute = 778;
- t.oacute = 611;
- t.amacron = 556;
- t.sacute = 556;
- t.idieresis = 278;
- t.Ocircumflex = 778;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 611;
- t.twosuperior = 333;
- t.Odieresis = 778;
- t.mu = 611;
- t.igrave = 278;
- t.ohungarumlaut = 611;
- t.Eogonek = 667;
- t.dcroat = 611;
- t.threequarters = 834;
- t.Scedilla = 667;
- t.lcaron = 400;
- t.Kcommaaccent = 722;
- t.Lacute = 611;
- t.trademark = 1000;
- t.edotaccent = 556;
- t.Igrave = 278;
- t.Imacron = 278;
- t.Lcaron = 611;
- t.onehalf = 834;
- t.lessequal = 549;
- t.ocircumflex = 611;
- t.ntilde = 611;
- t.Uhungarumlaut = 722;
- t.Eacute = 667;
- t.emacron = 556;
- t.gbreve = 611;
- t.onequarter = 834;
- t.Scaron = 667;
- t.Scommaaccent = 667;
- t.Ohungarumlaut = 778;
- t.degree = 400;
- t.ograve = 611;
- t.Ccaron = 722;
- t.ugrave = 611;
- t.radical = 549;
- t.Dcaron = 722;
- t.rcommaaccent = 389;
- t.Ntilde = 722;
- t.otilde = 611;
- t.Rcommaaccent = 722;
- t.Lcommaaccent = 611;
- t.Atilde = 722;
- t.Aogonek = 722;
- t.Aring = 722;
- t.Otilde = 778;
- t.zdotaccent = 500;
- t.Ecaron = 667;
- t.Iogonek = 278;
- t.kcommaaccent = 556;
- t.minus = 584;
- t.Icircumflex = 278;
- t.ncaron = 611;
- t.tcommaaccent = 333;
- t.logicalnot = 584;
- t.odieresis = 611;
- t.udieresis = 611;
- t.notequal = 549;
- t.gcommaaccent = 611;
- t.eth = 611;
- t.zcaron = 500;
- t.ncommaaccent = 611;
- t.onesuperior = 333;
- t.imacron = 278;
- t.Euro = 556;
- });
- t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 278;
- t.exclam = 333;
- t.quotedbl = 474;
- t.numbersign = 556;
- t.dollar = 556;
- t.percent = 889;
- t.ampersand = 722;
- t.quoteright = 278;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 389;
- t.plus = 584;
- t.comma = 278;
- t.hyphen = 333;
- t.period = 278;
- t.slash = 278;
- t.zero = 556;
- t.one = 556;
- t.two = 556;
- t.three = 556;
- t.four = 556;
- t.five = 556;
- t.six = 556;
- t.seven = 556;
- t.eight = 556;
- t.nine = 556;
- t.colon = 333;
- t.semicolon = 333;
- t.less = 584;
- t.equal = 584;
- t.greater = 584;
- t.question = 611;
- t.at = 975;
- t.A = 722;
- t.B = 722;
- t.C = 722;
- t.D = 722;
- t.E = 667;
- t.F = 611;
- t.G = 778;
- t.H = 722;
- t.I = 278;
- t.J = 556;
- t.K = 722;
- t.L = 611;
- t.M = 833;
- t.N = 722;
- t.O = 778;
- t.P = 667;
- t.Q = 778;
- t.R = 722;
- t.S = 667;
- t.T = 611;
- t.U = 722;
- t.V = 667;
- t.W = 944;
- t.X = 667;
- t.Y = 667;
- t.Z = 611;
- t.bracketleft = 333;
- t.backslash = 278;
- t.bracketright = 333;
- t.asciicircum = 584;
- t.underscore = 556;
- t.quoteleft = 278;
- t.a = 556;
- t.b = 611;
- t.c = 556;
- t.d = 611;
- t.e = 556;
- t.f = 333;
- t.g = 611;
- t.h = 611;
- t.i = 278;
- t.j = 278;
- t.k = 556;
- t.l = 278;
- t.m = 889;
- t.n = 611;
- t.o = 611;
- t.p = 611;
- t.q = 611;
- t.r = 389;
- t.s = 556;
- t.t = 333;
- t.u = 611;
- t.v = 556;
- t.w = 778;
- t.x = 556;
- t.y = 556;
- t.z = 500;
- t.braceleft = 389;
- t.bar = 280;
- t.braceright = 389;
- t.asciitilde = 584;
- t.exclamdown = 333;
- t.cent = 556;
- t.sterling = 556;
- t.fraction = 167;
- t.yen = 556;
- t.florin = 556;
- t.section = 556;
- t.currency = 556;
- t.quotesingle = 238;
- t.quotedblleft = 500;
- t.guillemotleft = 556;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 611;
- t.fl = 611;
- t.endash = 556;
- t.dagger = 556;
- t.daggerdbl = 556;
- t.periodcentered = 278;
- t.paragraph = 556;
- t.bullet = 350;
- t.quotesinglbase = 278;
- t.quotedblbase = 500;
- t.quotedblright = 500;
- t.guillemotright = 556;
- t.ellipsis = 1000;
- t.perthousand = 1000;
- t.questiondown = 611;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 1000;
- t.AE = 1000;
- t.ordfeminine = 370;
- t.Lslash = 611;
- t.Oslash = 778;
- t.OE = 1000;
- t.ordmasculine = 365;
- t.ae = 889;
- t.dotlessi = 278;
- t.lslash = 278;
- t.oslash = 611;
- t.oe = 944;
- t.germandbls = 611;
- t.Idieresis = 278;
- t.eacute = 556;
- t.abreve = 556;
- t.uhungarumlaut = 611;
- t.ecaron = 556;
- t.Ydieresis = 667;
- t.divide = 584;
- t.Yacute = 667;
- t.Acircumflex = 722;
- t.aacute = 556;
- t.Ucircumflex = 722;
- t.yacute = 556;
- t.scommaaccent = 556;
- t.ecircumflex = 556;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 556;
- t.Uacute = 722;
- t.uogonek = 611;
- t.Edieresis = 667;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 737;
- t.Emacron = 667;
- t.ccaron = 556;
- t.aring = 556;
- t.Ncommaaccent = 722;
- t.lacute = 278;
- t.agrave = 556;
- t.Tcommaaccent = 611;
- t.Cacute = 722;
- t.atilde = 556;
- t.Edotaccent = 667;
- t.scaron = 556;
- t.scedilla = 556;
- t.iacute = 278;
- t.lozenge = 494;
- t.Rcaron = 722;
- t.Gcommaaccent = 778;
- t.ucircumflex = 611;
- t.acircumflex = 556;
- t.Amacron = 722;
- t.rcaron = 389;
- t.ccedilla = 556;
- t.Zdotaccent = 611;
- t.Thorn = 667;
- t.Omacron = 778;
- t.Racute = 722;
- t.Sacute = 667;
- t.dcaron = 743;
- t.Umacron = 722;
- t.uring = 611;
- t.threesuperior = 333;
- t.Ograve = 778;
- t.Agrave = 722;
- t.Abreve = 722;
- t.multiply = 584;
- t.uacute = 611;
- t.Tcaron = 611;
- t.partialdiff = 494;
- t.ydieresis = 556;
- t.Nacute = 722;
- t.icircumflex = 278;
- t.Ecircumflex = 667;
- t.adieresis = 556;
- t.edieresis = 556;
- t.cacute = 556;
- t.nacute = 611;
- t.umacron = 611;
- t.Ncaron = 722;
- t.Iacute = 278;
- t.plusminus = 584;
- t.brokenbar = 280;
- t.registered = 737;
- t.Gbreve = 778;
- t.Idotaccent = 278;
- t.summation = 600;
- t.Egrave = 667;
- t.racute = 389;
- t.omacron = 611;
- t.Zacute = 611;
- t.Zcaron = 611;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 722;
- t.lcommaaccent = 278;
- t.tcaron = 389;
- t.eogonek = 556;
- t.Uogonek = 722;
- t.Aacute = 722;
- t.Adieresis = 722;
- t.egrave = 556;
- t.zacute = 500;
- t.iogonek = 278;
- t.Oacute = 778;
- t.oacute = 611;
- t.amacron = 556;
- t.sacute = 556;
- t.idieresis = 278;
- t.Ocircumflex = 778;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 611;
- t.twosuperior = 333;
- t.Odieresis = 778;
- t.mu = 611;
- t.igrave = 278;
- t.ohungarumlaut = 611;
- t.Eogonek = 667;
- t.dcroat = 611;
- t.threequarters = 834;
- t.Scedilla = 667;
- t.lcaron = 400;
- t.Kcommaaccent = 722;
- t.Lacute = 611;
- t.trademark = 1000;
- t.edotaccent = 556;
- t.Igrave = 278;
- t.Imacron = 278;
- t.Lcaron = 611;
- t.onehalf = 834;
- t.lessequal = 549;
- t.ocircumflex = 611;
- t.ntilde = 611;
- t.Uhungarumlaut = 722;
- t.Eacute = 667;
- t.emacron = 556;
- t.gbreve = 611;
- t.onequarter = 834;
- t.Scaron = 667;
- t.Scommaaccent = 667;
- t.Ohungarumlaut = 778;
- t.degree = 400;
- t.ograve = 611;
- t.Ccaron = 722;
- t.ugrave = 611;
- t.radical = 549;
- t.Dcaron = 722;
- t.rcommaaccent = 389;
- t.Ntilde = 722;
- t.otilde = 611;
- t.Rcommaaccent = 722;
- t.Lcommaaccent = 611;
- t.Atilde = 722;
- t.Aogonek = 722;
- t.Aring = 722;
- t.Otilde = 778;
- t.zdotaccent = 500;
- t.Ecaron = 667;
- t.Iogonek = 278;
- t.kcommaaccent = 556;
- t.minus = 584;
- t.Icircumflex = 278;
- t.ncaron = 611;
- t.tcommaaccent = 333;
- t.logicalnot = 584;
- t.odieresis = 611;
- t.udieresis = 611;
- t.notequal = 549;
- t.gcommaaccent = 611;
- t.eth = 611;
- t.zcaron = 500;
- t.ncommaaccent = 611;
- t.onesuperior = 333;
- t.imacron = 278;
- t.Euro = 556;
- });
- t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 278;
- t.exclam = 278;
- t.quotedbl = 355;
- t.numbersign = 556;
- t.dollar = 556;
- t.percent = 889;
- t.ampersand = 667;
- t.quoteright = 222;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 389;
- t.plus = 584;
- t.comma = 278;
- t.hyphen = 333;
- t.period = 278;
- t.slash = 278;
- t.zero = 556;
- t.one = 556;
- t.two = 556;
- t.three = 556;
- t.four = 556;
- t.five = 556;
- t.six = 556;
- t.seven = 556;
- t.eight = 556;
- t.nine = 556;
- t.colon = 278;
- t.semicolon = 278;
- t.less = 584;
- t.equal = 584;
- t.greater = 584;
- t.question = 556;
- t.at = 1015;
- t.A = 667;
- t.B = 667;
- t.C = 722;
- t.D = 722;
- t.E = 667;
- t.F = 611;
- t.G = 778;
- t.H = 722;
- t.I = 278;
- t.J = 500;
- t.K = 667;
- t.L = 556;
- t.M = 833;
- t.N = 722;
- t.O = 778;
- t.P = 667;
- t.Q = 778;
- t.R = 722;
- t.S = 667;
- t.T = 611;
- t.U = 722;
- t.V = 667;
- t.W = 944;
- t.X = 667;
- t.Y = 667;
- t.Z = 611;
- t.bracketleft = 278;
- t.backslash = 278;
- t.bracketright = 278;
- t.asciicircum = 469;
- t.underscore = 556;
- t.quoteleft = 222;
- t.a = 556;
- t.b = 556;
- t.c = 500;
- t.d = 556;
- t.e = 556;
- t.f = 278;
- t.g = 556;
- t.h = 556;
- t.i = 222;
- t.j = 222;
- t.k = 500;
- t.l = 222;
- t.m = 833;
- t.n = 556;
- t.o = 556;
- t.p = 556;
- t.q = 556;
- t.r = 333;
- t.s = 500;
- t.t = 278;
- t.u = 556;
- t.v = 500;
- t.w = 722;
- t.x = 500;
- t.y = 500;
- t.z = 500;
- t.braceleft = 334;
- t.bar = 260;
- t.braceright = 334;
- t.asciitilde = 584;
- t.exclamdown = 333;
- t.cent = 556;
- t.sterling = 556;
- t.fraction = 167;
- t.yen = 556;
- t.florin = 556;
- t.section = 556;
- t.currency = 556;
- t.quotesingle = 191;
- t.quotedblleft = 333;
- t.guillemotleft = 556;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 500;
- t.fl = 500;
- t.endash = 556;
- t.dagger = 556;
- t.daggerdbl = 556;
- t.periodcentered = 278;
- t.paragraph = 537;
- t.bullet = 350;
- t.quotesinglbase = 222;
- t.quotedblbase = 333;
- t.quotedblright = 333;
- t.guillemotright = 556;
- t.ellipsis = 1000;
- t.perthousand = 1000;
- t.questiondown = 611;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 1000;
- t.AE = 1000;
- t.ordfeminine = 370;
- t.Lslash = 556;
- t.Oslash = 778;
- t.OE = 1000;
- t.ordmasculine = 365;
- t.ae = 889;
- t.dotlessi = 278;
- t.lslash = 222;
- t.oslash = 611;
- t.oe = 944;
- t.germandbls = 611;
- t.Idieresis = 278;
- t.eacute = 556;
- t.abreve = 556;
- t.uhungarumlaut = 556;
- t.ecaron = 556;
- t.Ydieresis = 667;
- t.divide = 584;
- t.Yacute = 667;
- t.Acircumflex = 667;
- t.aacute = 556;
- t.Ucircumflex = 722;
- t.yacute = 500;
- t.scommaaccent = 500;
- t.ecircumflex = 556;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 556;
- t.Uacute = 722;
- t.uogonek = 556;
- t.Edieresis = 667;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 737;
- t.Emacron = 667;
- t.ccaron = 500;
- t.aring = 556;
- t.Ncommaaccent = 722;
- t.lacute = 222;
- t.agrave = 556;
- t.Tcommaaccent = 611;
- t.Cacute = 722;
- t.atilde = 556;
- t.Edotaccent = 667;
- t.scaron = 500;
- t.scedilla = 500;
- t.iacute = 278;
- t.lozenge = 471;
- t.Rcaron = 722;
- t.Gcommaaccent = 778;
- t.ucircumflex = 556;
- t.acircumflex = 556;
- t.Amacron = 667;
- t.rcaron = 333;
- t.ccedilla = 500;
- t.Zdotaccent = 611;
- t.Thorn = 667;
- t.Omacron = 778;
- t.Racute = 722;
- t.Sacute = 667;
- t.dcaron = 643;
- t.Umacron = 722;
- t.uring = 556;
- t.threesuperior = 333;
- t.Ograve = 778;
- t.Agrave = 667;
- t.Abreve = 667;
- t.multiply = 584;
- t.uacute = 556;
- t.Tcaron = 611;
- t.partialdiff = 476;
- t.ydieresis = 500;
- t.Nacute = 722;
- t.icircumflex = 278;
- t.Ecircumflex = 667;
- t.adieresis = 556;
- t.edieresis = 556;
- t.cacute = 500;
- t.nacute = 556;
- t.umacron = 556;
- t.Ncaron = 722;
- t.Iacute = 278;
- t.plusminus = 584;
- t.brokenbar = 260;
- t.registered = 737;
- t.Gbreve = 778;
- t.Idotaccent = 278;
- t.summation = 600;
- t.Egrave = 667;
- t.racute = 333;
- t.omacron = 556;
- t.Zacute = 611;
- t.Zcaron = 611;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 722;
- t.lcommaaccent = 222;
- t.tcaron = 317;
- t.eogonek = 556;
- t.Uogonek = 722;
- t.Aacute = 667;
- t.Adieresis = 667;
- t.egrave = 556;
- t.zacute = 500;
- t.iogonek = 222;
- t.Oacute = 778;
- t.oacute = 556;
- t.amacron = 556;
- t.sacute = 500;
- t.idieresis = 278;
- t.Ocircumflex = 778;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 556;
- t.twosuperior = 333;
- t.Odieresis = 778;
- t.mu = 556;
- t.igrave = 278;
- t.ohungarumlaut = 556;
- t.Eogonek = 667;
- t.dcroat = 556;
- t.threequarters = 834;
- t.Scedilla = 667;
- t.lcaron = 299;
- t.Kcommaaccent = 667;
- t.Lacute = 556;
- t.trademark = 1000;
- t.edotaccent = 556;
- t.Igrave = 278;
- t.Imacron = 278;
- t.Lcaron = 556;
- t.onehalf = 834;
- t.lessequal = 549;
- t.ocircumflex = 556;
- t.ntilde = 556;
- t.Uhungarumlaut = 722;
- t.Eacute = 667;
- t.emacron = 556;
- t.gbreve = 556;
- t.onequarter = 834;
- t.Scaron = 667;
- t.Scommaaccent = 667;
- t.Ohungarumlaut = 778;
- t.degree = 400;
- t.ograve = 556;
- t.Ccaron = 722;
- t.ugrave = 556;
- t.radical = 453;
- t.Dcaron = 722;
- t.rcommaaccent = 333;
- t.Ntilde = 722;
- t.otilde = 556;
- t.Rcommaaccent = 722;
- t.Lcommaaccent = 556;
- t.Atilde = 667;
- t.Aogonek = 667;
- t.Aring = 667;
- t.Otilde = 778;
- t.zdotaccent = 500;
- t.Ecaron = 667;
- t.Iogonek = 278;
- t.kcommaaccent = 500;
- t.minus = 584;
- t.Icircumflex = 278;
- t.ncaron = 556;
- t.tcommaaccent = 278;
- t.logicalnot = 584;
- t.odieresis = 556;
- t.udieresis = 556;
- t.notequal = 549;
- t.gcommaaccent = 556;
- t.eth = 556;
- t.zcaron = 500;
- t.ncommaaccent = 556;
- t.onesuperior = 333;
- t.imacron = 278;
- t.Euro = 556;
- });
- t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 250;
- t.exclam = 333;
- t.universal = 713;
- t.numbersign = 500;
- t.existential = 549;
- t.percent = 833;
- t.ampersand = 778;
- t.suchthat = 439;
- t.parenleft = 333;
- t.parenright = 333;
- t.asteriskmath = 500;
- t.plus = 549;
- t.comma = 250;
- t.minus = 549;
- t.period = 250;
- t.slash = 278;
- t.zero = 500;
- t.one = 500;
- t.two = 500;
- t.three = 500;
- t.four = 500;
- t.five = 500;
- t.six = 500;
- t.seven = 500;
- t.eight = 500;
- t.nine = 500;
- t.colon = 278;
- t.semicolon = 278;
- t.less = 549;
- t.equal = 549;
- t.greater = 549;
- t.question = 444;
- t.congruent = 549;
- t.Alpha = 722;
- t.Beta = 667;
- t.Chi = 722;
- t.Delta = 612;
- t.Epsilon = 611;
- t.Phi = 763;
- t.Gamma = 603;
- t.Eta = 722;
- t.Iota = 333;
- t.theta1 = 631;
- t.Kappa = 722;
- t.Lambda = 686;
- t.Mu = 889;
- t.Nu = 722;
- t.Omicron = 722;
- t.Pi = 768;
- t.Theta = 741;
- t.Rho = 556;
- t.Sigma = 592;
- t.Tau = 611;
- t.Upsilon = 690;
- t.sigma1 = 439;
- t.Omega = 768;
- t.Xi = 645;
- t.Psi = 795;
- t.Zeta = 611;
- t.bracketleft = 333;
- t.therefore = 863;
- t.bracketright = 333;
- t.perpendicular = 658;
- t.underscore = 500;
- t.radicalex = 500;
- t.alpha = 631;
- t.beta = 549;
- t.chi = 549;
- t.delta = 494;
- t.epsilon = 439;
- t.phi = 521;
- t.gamma = 411;
- t.eta = 603;
- t.iota = 329;
- t.phi1 = 603;
- t.kappa = 549;
- t.lambda = 549;
- t.mu = 576;
- t.nu = 521;
- t.omicron = 549;
- t.pi = 549;
- t.theta = 521;
- t.rho = 549;
- t.sigma = 603;
- t.tau = 439;
- t.upsilon = 576;
- t.omega1 = 713;
- t.omega = 686;
- t.xi = 493;
- t.psi = 686;
- t.zeta = 494;
- t.braceleft = 480;
- t.bar = 200;
- t.braceright = 480;
- t.similar = 549;
- t.Euro = 750;
- t.Upsilon1 = 620;
- t.minute = 247;
- t.lessequal = 549;
- t.fraction = 167;
- t.infinity = 713;
- t.florin = 500;
- t.club = 753;
- t.diamond = 753;
- t.heart = 753;
- t.spade = 753;
- t.arrowboth = 1042;
- t.arrowleft = 987;
- t.arrowup = 603;
- t.arrowright = 987;
- t.arrowdown = 603;
- t.degree = 400;
- t.plusminus = 549;
- t.second = 411;
- t.greaterequal = 549;
- t.multiply = 549;
- t.proportional = 713;
- t.partialdiff = 494;
- t.bullet = 460;
- t.divide = 549;
- t.notequal = 549;
- t.equivalence = 549;
- t.approxequal = 549;
- t.ellipsis = 1000;
- t.arrowvertex = 603;
- t.arrowhorizex = 1000;
- t.carriagereturn = 658;
- t.aleph = 823;
- t.Ifraktur = 686;
- t.Rfraktur = 795;
- t.weierstrass = 987;
- t.circlemultiply = 768;
- t.circleplus = 768;
- t.emptyset = 823;
- t.intersection = 768;
- t.union = 768;
- t.propersuperset = 713;
- t.reflexsuperset = 713;
- t.notsubset = 713;
- t.propersubset = 713;
- t.reflexsubset = 713;
- t.element = 713;
- t.notelement = 713;
- t.angle = 768;
- t.gradient = 713;
- t.registerserif = 790;
- t.copyrightserif = 790;
- t.trademarkserif = 890;
- t.product = 823;
- t.radical = 549;
- t.dotmath = 250;
- t.logicalnot = 713;
- t.logicaland = 603;
- t.logicalor = 603;
- t.arrowdblboth = 1042;
- t.arrowdblleft = 987;
- t.arrowdblup = 603;
- t.arrowdblright = 987;
- t.arrowdbldown = 603;
- t.lozenge = 494;
- t.angleleft = 329;
- t.registersans = 790;
- t.copyrightsans = 790;
- t.trademarksans = 786;
- t.summation = 713;
- t.parenlefttp = 384;
- t.parenleftex = 384;
- t.parenleftbt = 384;
- t.bracketlefttp = 384;
- t.bracketleftex = 384;
- t.bracketleftbt = 384;
- t.bracelefttp = 494;
- t.braceleftmid = 494;
- t.braceleftbt = 494;
- t.braceex = 494;
- t.angleright = 329;
- t.integral = 274;
- t.integraltp = 686;
- t.integralex = 686;
- t.integralbt = 686;
- t.parenrighttp = 384;
- t.parenrightex = 384;
- t.parenrightbt = 384;
- t.bracketrighttp = 384;
- t.bracketrightex = 384;
- t.bracketrightbt = 384;
- t.bracerighttp = 494;
- t.bracerightmid = 494;
- t.bracerightbt = 494;
- t.apple = 790;
- });
- t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 250;
- t.exclam = 333;
- t.quotedbl = 408;
- t.numbersign = 500;
- t.dollar = 500;
- t.percent = 833;
- t.ampersand = 778;
- t.quoteright = 333;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 500;
- t.plus = 564;
- t.comma = 250;
- t.hyphen = 333;
- t.period = 250;
- t.slash = 278;
- t.zero = 500;
- t.one = 500;
- t.two = 500;
- t.three = 500;
- t.four = 500;
- t.five = 500;
- t.six = 500;
- t.seven = 500;
- t.eight = 500;
- t.nine = 500;
- t.colon = 278;
- t.semicolon = 278;
- t.less = 564;
- t.equal = 564;
- t.greater = 564;
- t.question = 444;
- t.at = 921;
- t.A = 722;
- t.B = 667;
- t.C = 667;
- t.D = 722;
- t.E = 611;
- t.F = 556;
- t.G = 722;
- t.H = 722;
- t.I = 333;
- t.J = 389;
- t.K = 722;
- t.L = 611;
- t.M = 889;
- t.N = 722;
- t.O = 722;
- t.P = 556;
- t.Q = 722;
- t.R = 667;
- t.S = 556;
- t.T = 611;
- t.U = 722;
- t.V = 722;
- t.W = 944;
- t.X = 722;
- t.Y = 722;
- t.Z = 611;
- t.bracketleft = 333;
- t.backslash = 278;
- t.bracketright = 333;
- t.asciicircum = 469;
- t.underscore = 500;
- t.quoteleft = 333;
- t.a = 444;
- t.b = 500;
- t.c = 444;
- t.d = 500;
- t.e = 444;
- t.f = 333;
- t.g = 500;
- t.h = 500;
- t.i = 278;
- t.j = 278;
- t.k = 500;
- t.l = 278;
- t.m = 778;
- t.n = 500;
- t.o = 500;
- t.p = 500;
- t.q = 500;
- t.r = 333;
- t.s = 389;
- t.t = 278;
- t.u = 500;
- t.v = 500;
- t.w = 722;
- t.x = 500;
- t.y = 500;
- t.z = 444;
- t.braceleft = 480;
- t.bar = 200;
- t.braceright = 480;
- t.asciitilde = 541;
- t.exclamdown = 333;
- t.cent = 500;
- t.sterling = 500;
- t.fraction = 167;
- t.yen = 500;
- t.florin = 500;
- t.section = 500;
- t.currency = 500;
- t.quotesingle = 180;
- t.quotedblleft = 444;
- t.guillemotleft = 500;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 556;
- t.fl = 556;
- t.endash = 500;
- t.dagger = 500;
- t.daggerdbl = 500;
- t.periodcentered = 250;
- t.paragraph = 453;
- t.bullet = 350;
- t.quotesinglbase = 333;
- t.quotedblbase = 444;
- t.quotedblright = 444;
- t.guillemotright = 500;
- t.ellipsis = 1000;
- t.perthousand = 1000;
- t.questiondown = 444;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 1000;
- t.AE = 889;
- t.ordfeminine = 276;
- t.Lslash = 611;
- t.Oslash = 722;
- t.OE = 889;
- t.ordmasculine = 310;
- t.ae = 667;
- t.dotlessi = 278;
- t.lslash = 278;
- t.oslash = 500;
- t.oe = 722;
- t.germandbls = 500;
- t.Idieresis = 333;
- t.eacute = 444;
- t.abreve = 444;
- t.uhungarumlaut = 500;
- t.ecaron = 444;
- t.Ydieresis = 722;
- t.divide = 564;
- t.Yacute = 722;
- t.Acircumflex = 722;
- t.aacute = 444;
- t.Ucircumflex = 722;
- t.yacute = 500;
- t.scommaaccent = 389;
- t.ecircumflex = 444;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 444;
- t.Uacute = 722;
- t.uogonek = 500;
- t.Edieresis = 611;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 760;
- t.Emacron = 611;
- t.ccaron = 444;
- t.aring = 444;
- t.Ncommaaccent = 722;
- t.lacute = 278;
- t.agrave = 444;
- t.Tcommaaccent = 611;
- t.Cacute = 667;
- t.atilde = 444;
- t.Edotaccent = 611;
- t.scaron = 389;
- t.scedilla = 389;
- t.iacute = 278;
- t.lozenge = 471;
- t.Rcaron = 667;
- t.Gcommaaccent = 722;
- t.ucircumflex = 500;
- t.acircumflex = 444;
- t.Amacron = 722;
- t.rcaron = 333;
- t.ccedilla = 444;
- t.Zdotaccent = 611;
- t.Thorn = 556;
- t.Omacron = 722;
- t.Racute = 667;
- t.Sacute = 556;
- t.dcaron = 588;
- t.Umacron = 722;
- t.uring = 500;
- t.threesuperior = 300;
- t.Ograve = 722;
- t.Agrave = 722;
- t.Abreve = 722;
- t.multiply = 564;
- t.uacute = 500;
- t.Tcaron = 611;
- t.partialdiff = 476;
- t.ydieresis = 500;
- t.Nacute = 722;
- t.icircumflex = 278;
- t.Ecircumflex = 611;
- t.adieresis = 444;
- t.edieresis = 444;
- t.cacute = 444;
- t.nacute = 500;
- t.umacron = 500;
- t.Ncaron = 722;
- t.Iacute = 333;
- t.plusminus = 564;
- t.brokenbar = 200;
- t.registered = 760;
- t.Gbreve = 722;
- t.Idotaccent = 333;
- t.summation = 600;
- t.Egrave = 611;
- t.racute = 333;
- t.omacron = 500;
- t.Zacute = 611;
- t.Zcaron = 611;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 667;
- t.lcommaaccent = 278;
- t.tcaron = 326;
- t.eogonek = 444;
- t.Uogonek = 722;
- t.Aacute = 722;
- t.Adieresis = 722;
- t.egrave = 444;
- t.zacute = 444;
- t.iogonek = 278;
- t.Oacute = 722;
- t.oacute = 500;
- t.amacron = 444;
- t.sacute = 389;
- t.idieresis = 278;
- t.Ocircumflex = 722;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 500;
- t.twosuperior = 300;
- t.Odieresis = 722;
- t.mu = 500;
- t.igrave = 278;
- t.ohungarumlaut = 500;
- t.Eogonek = 611;
- t.dcroat = 500;
- t.threequarters = 750;
- t.Scedilla = 556;
- t.lcaron = 344;
- t.Kcommaaccent = 722;
- t.Lacute = 611;
- t.trademark = 980;
- t.edotaccent = 444;
- t.Igrave = 333;
- t.Imacron = 333;
- t.Lcaron = 611;
- t.onehalf = 750;
- t.lessequal = 549;
- t.ocircumflex = 500;
- t.ntilde = 500;
- t.Uhungarumlaut = 722;
- t.Eacute = 611;
- t.emacron = 444;
- t.gbreve = 500;
- t.onequarter = 750;
- t.Scaron = 556;
- t.Scommaaccent = 556;
- t.Ohungarumlaut = 722;
- t.degree = 400;
- t.ograve = 500;
- t.Ccaron = 667;
- t.ugrave = 500;
- t.radical = 453;
- t.Dcaron = 722;
- t.rcommaaccent = 333;
- t.Ntilde = 722;
- t.otilde = 500;
- t.Rcommaaccent = 667;
- t.Lcommaaccent = 611;
- t.Atilde = 722;
- t.Aogonek = 722;
- t.Aring = 722;
- t.Otilde = 722;
- t.zdotaccent = 444;
- t.Ecaron = 611;
- t.Iogonek = 333;
- t.kcommaaccent = 500;
- t.minus = 564;
- t.Icircumflex = 333;
- t.ncaron = 500;
- t.tcommaaccent = 278;
- t.logicalnot = 564;
- t.odieresis = 500;
- t.udieresis = 500;
- t.notequal = 549;
- t.gcommaaccent = 500;
- t.eth = 500;
- t.zcaron = 444;
- t.ncommaaccent = 500;
- t.onesuperior = 300;
- t.imacron = 278;
- t.Euro = 500;
- });
- t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 250;
- t.exclam = 333;
- t.quotedbl = 555;
- t.numbersign = 500;
- t.dollar = 500;
- t.percent = 1000;
- t.ampersand = 833;
- t.quoteright = 333;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 500;
- t.plus = 570;
- t.comma = 250;
- t.hyphen = 333;
- t.period = 250;
- t.slash = 278;
- t.zero = 500;
- t.one = 500;
- t.two = 500;
- t.three = 500;
- t.four = 500;
- t.five = 500;
- t.six = 500;
- t.seven = 500;
- t.eight = 500;
- t.nine = 500;
- t.colon = 333;
- t.semicolon = 333;
- t.less = 570;
- t.equal = 570;
- t.greater = 570;
- t.question = 500;
- t.at = 930;
- t.A = 722;
- t.B = 667;
- t.C = 722;
- t.D = 722;
- t.E = 667;
- t.F = 611;
- t.G = 778;
- t.H = 778;
- t.I = 389;
- t.J = 500;
- t.K = 778;
- t.L = 667;
- t.M = 944;
- t.N = 722;
- t.O = 778;
- t.P = 611;
- t.Q = 778;
- t.R = 722;
- t.S = 556;
- t.T = 667;
- t.U = 722;
- t.V = 722;
- t.W = 1000;
- t.X = 722;
- t.Y = 722;
- t.Z = 667;
- t.bracketleft = 333;
- t.backslash = 278;
- t.bracketright = 333;
- t.asciicircum = 581;
- t.underscore = 500;
- t.quoteleft = 333;
- t.a = 500;
- t.b = 556;
- t.c = 444;
- t.d = 556;
- t.e = 444;
- t.f = 333;
- t.g = 500;
- t.h = 556;
- t.i = 278;
- t.j = 333;
- t.k = 556;
- t.l = 278;
- t.m = 833;
- t.n = 556;
- t.o = 500;
- t.p = 556;
- t.q = 556;
- t.r = 444;
- t.s = 389;
- t.t = 333;
- t.u = 556;
- t.v = 500;
- t.w = 722;
- t.x = 500;
- t.y = 500;
- t.z = 444;
- t.braceleft = 394;
- t.bar = 220;
- t.braceright = 394;
- t.asciitilde = 520;
- t.exclamdown = 333;
- t.cent = 500;
- t.sterling = 500;
- t.fraction = 167;
- t.yen = 500;
- t.florin = 500;
- t.section = 500;
- t.currency = 500;
- t.quotesingle = 278;
- t.quotedblleft = 500;
- t.guillemotleft = 500;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 556;
- t.fl = 556;
- t.endash = 500;
- t.dagger = 500;
- t.daggerdbl = 500;
- t.periodcentered = 250;
- t.paragraph = 540;
- t.bullet = 350;
- t.quotesinglbase = 333;
- t.quotedblbase = 500;
- t.quotedblright = 500;
- t.guillemotright = 500;
- t.ellipsis = 1000;
- t.perthousand = 1000;
- t.questiondown = 500;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 1000;
- t.AE = 1000;
- t.ordfeminine = 300;
- t.Lslash = 667;
- t.Oslash = 778;
- t.OE = 1000;
- t.ordmasculine = 330;
- t.ae = 722;
- t.dotlessi = 278;
- t.lslash = 278;
- t.oslash = 500;
- t.oe = 722;
- t.germandbls = 556;
- t.Idieresis = 389;
- t.eacute = 444;
- t.abreve = 500;
- t.uhungarumlaut = 556;
- t.ecaron = 444;
- t.Ydieresis = 722;
- t.divide = 570;
- t.Yacute = 722;
- t.Acircumflex = 722;
- t.aacute = 500;
- t.Ucircumflex = 722;
- t.yacute = 500;
- t.scommaaccent = 389;
- t.ecircumflex = 444;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 500;
- t.Uacute = 722;
- t.uogonek = 556;
- t.Edieresis = 667;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 747;
- t.Emacron = 667;
- t.ccaron = 444;
- t.aring = 500;
- t.Ncommaaccent = 722;
- t.lacute = 278;
- t.agrave = 500;
- t.Tcommaaccent = 667;
- t.Cacute = 722;
- t.atilde = 500;
- t.Edotaccent = 667;
- t.scaron = 389;
- t.scedilla = 389;
- t.iacute = 278;
- t.lozenge = 494;
- t.Rcaron = 722;
- t.Gcommaaccent = 778;
- t.ucircumflex = 556;
- t.acircumflex = 500;
- t.Amacron = 722;
- t.rcaron = 444;
- t.ccedilla = 444;
- t.Zdotaccent = 667;
- t.Thorn = 611;
- t.Omacron = 778;
- t.Racute = 722;
- t.Sacute = 556;
- t.dcaron = 672;
- t.Umacron = 722;
- t.uring = 556;
- t.threesuperior = 300;
- t.Ograve = 778;
- t.Agrave = 722;
- t.Abreve = 722;
- t.multiply = 570;
- t.uacute = 556;
- t.Tcaron = 667;
- t.partialdiff = 494;
- t.ydieresis = 500;
- t.Nacute = 722;
- t.icircumflex = 278;
- t.Ecircumflex = 667;
- t.adieresis = 500;
- t.edieresis = 444;
- t.cacute = 444;
- t.nacute = 556;
- t.umacron = 556;
- t.Ncaron = 722;
- t.Iacute = 389;
- t.plusminus = 570;
- t.brokenbar = 220;
- t.registered = 747;
- t.Gbreve = 778;
- t.Idotaccent = 389;
- t.summation = 600;
- t.Egrave = 667;
- t.racute = 444;
- t.omacron = 500;
- t.Zacute = 667;
- t.Zcaron = 667;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 722;
- t.lcommaaccent = 278;
- t.tcaron = 416;
- t.eogonek = 444;
- t.Uogonek = 722;
- t.Aacute = 722;
- t.Adieresis = 722;
- t.egrave = 444;
- t.zacute = 444;
- t.iogonek = 278;
- t.Oacute = 778;
- t.oacute = 500;
- t.amacron = 500;
- t.sacute = 389;
- t.idieresis = 278;
- t.Ocircumflex = 778;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 556;
- t.twosuperior = 300;
- t.Odieresis = 778;
- t.mu = 556;
- t.igrave = 278;
- t.ohungarumlaut = 500;
- t.Eogonek = 667;
- t.dcroat = 556;
- t.threequarters = 750;
- t.Scedilla = 556;
- t.lcaron = 394;
- t.Kcommaaccent = 778;
- t.Lacute = 667;
- t.trademark = 1000;
- t.edotaccent = 444;
- t.Igrave = 389;
- t.Imacron = 389;
- t.Lcaron = 667;
- t.onehalf = 750;
- t.lessequal = 549;
- t.ocircumflex = 500;
- t.ntilde = 556;
- t.Uhungarumlaut = 722;
- t.Eacute = 667;
- t.emacron = 444;
- t.gbreve = 500;
- t.onequarter = 750;
- t.Scaron = 556;
- t.Scommaaccent = 556;
- t.Ohungarumlaut = 778;
- t.degree = 400;
- t.ograve = 500;
- t.Ccaron = 722;
- t.ugrave = 556;
- t.radical = 549;
- t.Dcaron = 722;
- t.rcommaaccent = 444;
- t.Ntilde = 722;
- t.otilde = 500;
- t.Rcommaaccent = 722;
- t.Lcommaaccent = 667;
- t.Atilde = 722;
- t.Aogonek = 722;
- t.Aring = 722;
- t.Otilde = 778;
- t.zdotaccent = 444;
- t.Ecaron = 667;
- t.Iogonek = 389;
- t.kcommaaccent = 556;
- t.minus = 570;
- t.Icircumflex = 389;
- t.ncaron = 556;
- t.tcommaaccent = 333;
- t.logicalnot = 570;
- t.odieresis = 500;
- t.udieresis = 556;
- t.notequal = 549;
- t.gcommaaccent = 500;
- t.eth = 500;
- t.zcaron = 444;
- t.ncommaaccent = 556;
- t.onesuperior = 300;
- t.imacron = 278;
- t.Euro = 500;
- });
- t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 250;
- t.exclam = 389;
- t.quotedbl = 555;
- t.numbersign = 500;
- t.dollar = 500;
- t.percent = 833;
- t.ampersand = 778;
- t.quoteright = 333;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 500;
- t.plus = 570;
- t.comma = 250;
- t.hyphen = 333;
- t.period = 250;
- t.slash = 278;
- t.zero = 500;
- t.one = 500;
- t.two = 500;
- t.three = 500;
- t.four = 500;
- t.five = 500;
- t.six = 500;
- t.seven = 500;
- t.eight = 500;
- t.nine = 500;
- t.colon = 333;
- t.semicolon = 333;
- t.less = 570;
- t.equal = 570;
- t.greater = 570;
- t.question = 500;
- t.at = 832;
- t.A = 667;
- t.B = 667;
- t.C = 667;
- t.D = 722;
- t.E = 667;
- t.F = 667;
- t.G = 722;
- t.H = 778;
- t.I = 389;
- t.J = 500;
- t.K = 667;
- t.L = 611;
- t.M = 889;
- t.N = 722;
- t.O = 722;
- t.P = 611;
- t.Q = 722;
- t.R = 667;
- t.S = 556;
- t.T = 611;
- t.U = 722;
- t.V = 667;
- t.W = 889;
- t.X = 667;
- t.Y = 611;
- t.Z = 611;
- t.bracketleft = 333;
- t.backslash = 278;
- t.bracketright = 333;
- t.asciicircum = 570;
- t.underscore = 500;
- t.quoteleft = 333;
- t.a = 500;
- t.b = 500;
- t.c = 444;
- t.d = 500;
- t.e = 444;
- t.f = 333;
- t.g = 500;
- t.h = 556;
- t.i = 278;
- t.j = 278;
- t.k = 500;
- t.l = 278;
- t.m = 778;
- t.n = 556;
- t.o = 500;
- t.p = 500;
- t.q = 500;
- t.r = 389;
- t.s = 389;
- t.t = 278;
- t.u = 556;
- t.v = 444;
- t.w = 667;
- t.x = 500;
- t.y = 444;
- t.z = 389;
- t.braceleft = 348;
- t.bar = 220;
- t.braceright = 348;
- t.asciitilde = 570;
- t.exclamdown = 389;
- t.cent = 500;
- t.sterling = 500;
- t.fraction = 167;
- t.yen = 500;
- t.florin = 500;
- t.section = 500;
- t.currency = 500;
- t.quotesingle = 278;
- t.quotedblleft = 500;
- t.guillemotleft = 500;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 556;
- t.fl = 556;
- t.endash = 500;
- t.dagger = 500;
- t.daggerdbl = 500;
- t.periodcentered = 250;
- t.paragraph = 500;
- t.bullet = 350;
- t.quotesinglbase = 333;
- t.quotedblbase = 500;
- t.quotedblright = 500;
- t.guillemotright = 500;
- t.ellipsis = 1000;
- t.perthousand = 1000;
- t.questiondown = 500;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 1000;
- t.AE = 944;
- t.ordfeminine = 266;
- t.Lslash = 611;
- t.Oslash = 722;
- t.OE = 944;
- t.ordmasculine = 300;
- t.ae = 722;
- t.dotlessi = 278;
- t.lslash = 278;
- t.oslash = 500;
- t.oe = 722;
- t.germandbls = 500;
- t.Idieresis = 389;
- t.eacute = 444;
- t.abreve = 500;
- t.uhungarumlaut = 556;
- t.ecaron = 444;
- t.Ydieresis = 611;
- t.divide = 570;
- t.Yacute = 611;
- t.Acircumflex = 667;
- t.aacute = 500;
- t.Ucircumflex = 722;
- t.yacute = 444;
- t.scommaaccent = 389;
- t.ecircumflex = 444;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 500;
- t.Uacute = 722;
- t.uogonek = 556;
- t.Edieresis = 667;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 747;
- t.Emacron = 667;
- t.ccaron = 444;
- t.aring = 500;
- t.Ncommaaccent = 722;
- t.lacute = 278;
- t.agrave = 500;
- t.Tcommaaccent = 611;
- t.Cacute = 667;
- t.atilde = 500;
- t.Edotaccent = 667;
- t.scaron = 389;
- t.scedilla = 389;
- t.iacute = 278;
- t.lozenge = 494;
- t.Rcaron = 667;
- t.Gcommaaccent = 722;
- t.ucircumflex = 556;
- t.acircumflex = 500;
- t.Amacron = 667;
- t.rcaron = 389;
- t.ccedilla = 444;
- t.Zdotaccent = 611;
- t.Thorn = 611;
- t.Omacron = 722;
- t.Racute = 667;
- t.Sacute = 556;
- t.dcaron = 608;
- t.Umacron = 722;
- t.uring = 556;
- t.threesuperior = 300;
- t.Ograve = 722;
- t.Agrave = 667;
- t.Abreve = 667;
- t.multiply = 570;
- t.uacute = 556;
- t.Tcaron = 611;
- t.partialdiff = 494;
- t.ydieresis = 444;
- t.Nacute = 722;
- t.icircumflex = 278;
- t.Ecircumflex = 667;
- t.adieresis = 500;
- t.edieresis = 444;
- t.cacute = 444;
- t.nacute = 556;
- t.umacron = 556;
- t.Ncaron = 722;
- t.Iacute = 389;
- t.plusminus = 570;
- t.brokenbar = 220;
- t.registered = 747;
- t.Gbreve = 722;
- t.Idotaccent = 389;
- t.summation = 600;
- t.Egrave = 667;
- t.racute = 389;
- t.omacron = 500;
- t.Zacute = 611;
- t.Zcaron = 611;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 667;
- t.lcommaaccent = 278;
- t.tcaron = 366;
- t.eogonek = 444;
- t.Uogonek = 722;
- t.Aacute = 667;
- t.Adieresis = 667;
- t.egrave = 444;
- t.zacute = 389;
- t.iogonek = 278;
- t.Oacute = 722;
- t.oacute = 500;
- t.amacron = 500;
- t.sacute = 389;
- t.idieresis = 278;
- t.Ocircumflex = 722;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 500;
- t.twosuperior = 300;
- t.Odieresis = 722;
- t.mu = 576;
- t.igrave = 278;
- t.ohungarumlaut = 500;
- t.Eogonek = 667;
- t.dcroat = 500;
- t.threequarters = 750;
- t.Scedilla = 556;
- t.lcaron = 382;
- t.Kcommaaccent = 667;
- t.Lacute = 611;
- t.trademark = 1000;
- t.edotaccent = 444;
- t.Igrave = 389;
- t.Imacron = 389;
- t.Lcaron = 611;
- t.onehalf = 750;
- t.lessequal = 549;
- t.ocircumflex = 500;
- t.ntilde = 556;
- t.Uhungarumlaut = 722;
- t.Eacute = 667;
- t.emacron = 444;
- t.gbreve = 500;
- t.onequarter = 750;
- t.Scaron = 556;
- t.Scommaaccent = 556;
- t.Ohungarumlaut = 722;
- t.degree = 400;
- t.ograve = 500;
- t.Ccaron = 667;
- t.ugrave = 556;
- t.radical = 549;
- t.Dcaron = 722;
- t.rcommaaccent = 389;
- t.Ntilde = 722;
- t.otilde = 500;
- t.Rcommaaccent = 667;
- t.Lcommaaccent = 611;
- t.Atilde = 667;
- t.Aogonek = 667;
- t.Aring = 667;
- t.Otilde = 722;
- t.zdotaccent = 389;
- t.Ecaron = 667;
- t.Iogonek = 389;
- t.kcommaaccent = 500;
- t.minus = 606;
- t.Icircumflex = 389;
- t.ncaron = 556;
- t.tcommaaccent = 278;
- t.logicalnot = 606;
- t.odieresis = 500;
- t.udieresis = 556;
- t.notequal = 549;
- t.gcommaaccent = 500;
- t.eth = 500;
- t.zcaron = 389;
- t.ncommaaccent = 556;
- t.onesuperior = 300;
- t.imacron = 278;
- t.Euro = 500;
- });
- t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 250;
- t.exclam = 333;
- t.quotedbl = 420;
- t.numbersign = 500;
- t.dollar = 500;
- t.percent = 833;
- t.ampersand = 778;
- t.quoteright = 333;
- t.parenleft = 333;
- t.parenright = 333;
- t.asterisk = 500;
- t.plus = 675;
- t.comma = 250;
- t.hyphen = 333;
- t.period = 250;
- t.slash = 278;
- t.zero = 500;
- t.one = 500;
- t.two = 500;
- t.three = 500;
- t.four = 500;
- t.five = 500;
- t.six = 500;
- t.seven = 500;
- t.eight = 500;
- t.nine = 500;
- t.colon = 333;
- t.semicolon = 333;
- t.less = 675;
- t.equal = 675;
- t.greater = 675;
- t.question = 500;
- t.at = 920;
- t.A = 611;
- t.B = 611;
- t.C = 667;
- t.D = 722;
- t.E = 611;
- t.F = 611;
- t.G = 722;
- t.H = 722;
- t.I = 333;
- t.J = 444;
- t.K = 667;
- t.L = 556;
- t.M = 833;
- t.N = 667;
- t.O = 722;
- t.P = 611;
- t.Q = 722;
- t.R = 611;
- t.S = 500;
- t.T = 556;
- t.U = 722;
- t.V = 611;
- t.W = 833;
- t.X = 611;
- t.Y = 556;
- t.Z = 556;
- t.bracketleft = 389;
- t.backslash = 278;
- t.bracketright = 389;
- t.asciicircum = 422;
- t.underscore = 500;
- t.quoteleft = 333;
- t.a = 500;
- t.b = 500;
- t.c = 444;
- t.d = 500;
- t.e = 444;
- t.f = 278;
- t.g = 500;
- t.h = 500;
- t.i = 278;
- t.j = 278;
- t.k = 444;
- t.l = 278;
- t.m = 722;
- t.n = 500;
- t.o = 500;
- t.p = 500;
- t.q = 500;
- t.r = 389;
- t.s = 389;
- t.t = 278;
- t.u = 500;
- t.v = 444;
- t.w = 667;
- t.x = 444;
- t.y = 444;
- t.z = 389;
- t.braceleft = 400;
- t.bar = 275;
- t.braceright = 400;
- t.asciitilde = 541;
- t.exclamdown = 389;
- t.cent = 500;
- t.sterling = 500;
- t.fraction = 167;
- t.yen = 500;
- t.florin = 500;
- t.section = 500;
- t.currency = 500;
- t.quotesingle = 214;
- t.quotedblleft = 556;
- t.guillemotleft = 500;
- t.guilsinglleft = 333;
- t.guilsinglright = 333;
- t.fi = 500;
- t.fl = 500;
- t.endash = 500;
- t.dagger = 500;
- t.daggerdbl = 500;
- t.periodcentered = 250;
- t.paragraph = 523;
- t.bullet = 350;
- t.quotesinglbase = 333;
- t.quotedblbase = 556;
- t.quotedblright = 556;
- t.guillemotright = 500;
- t.ellipsis = 889;
- t.perthousand = 1000;
- t.questiondown = 500;
- t.grave = 333;
- t.acute = 333;
- t.circumflex = 333;
- t.tilde = 333;
- t.macron = 333;
- t.breve = 333;
- t.dotaccent = 333;
- t.dieresis = 333;
- t.ring = 333;
- t.cedilla = 333;
- t.hungarumlaut = 333;
- t.ogonek = 333;
- t.caron = 333;
- t.emdash = 889;
- t.AE = 889;
- t.ordfeminine = 276;
- t.Lslash = 556;
- t.Oslash = 722;
- t.OE = 944;
- t.ordmasculine = 310;
- t.ae = 667;
- t.dotlessi = 278;
- t.lslash = 278;
- t.oslash = 500;
- t.oe = 667;
- t.germandbls = 500;
- t.Idieresis = 333;
- t.eacute = 444;
- t.abreve = 500;
- t.uhungarumlaut = 500;
- t.ecaron = 444;
- t.Ydieresis = 556;
- t.divide = 675;
- t.Yacute = 556;
- t.Acircumflex = 611;
- t.aacute = 500;
- t.Ucircumflex = 722;
- t.yacute = 444;
- t.scommaaccent = 389;
- t.ecircumflex = 444;
- t.Uring = 722;
- t.Udieresis = 722;
- t.aogonek = 500;
- t.Uacute = 722;
- t.uogonek = 500;
- t.Edieresis = 611;
- t.Dcroat = 722;
- t.commaaccent = 250;
- t.copyright = 760;
- t.Emacron = 611;
- t.ccaron = 444;
- t.aring = 500;
- t.Ncommaaccent = 667;
- t.lacute = 278;
- t.agrave = 500;
- t.Tcommaaccent = 556;
- t.Cacute = 667;
- t.atilde = 500;
- t.Edotaccent = 611;
- t.scaron = 389;
- t.scedilla = 389;
- t.iacute = 278;
- t.lozenge = 471;
- t.Rcaron = 611;
- t.Gcommaaccent = 722;
- t.ucircumflex = 500;
- t.acircumflex = 500;
- t.Amacron = 611;
- t.rcaron = 389;
- t.ccedilla = 444;
- t.Zdotaccent = 556;
- t.Thorn = 611;
- t.Omacron = 722;
- t.Racute = 611;
- t.Sacute = 500;
- t.dcaron = 544;
- t.Umacron = 722;
- t.uring = 500;
- t.threesuperior = 300;
- t.Ograve = 722;
- t.Agrave = 611;
- t.Abreve = 611;
- t.multiply = 675;
- t.uacute = 500;
- t.Tcaron = 556;
- t.partialdiff = 476;
- t.ydieresis = 444;
- t.Nacute = 667;
- t.icircumflex = 278;
- t.Ecircumflex = 611;
- t.adieresis = 500;
- t.edieresis = 444;
- t.cacute = 444;
- t.nacute = 500;
- t.umacron = 500;
- t.Ncaron = 667;
- t.Iacute = 333;
- t.plusminus = 675;
- t.brokenbar = 275;
- t.registered = 760;
- t.Gbreve = 722;
- t.Idotaccent = 333;
- t.summation = 600;
- t.Egrave = 611;
- t.racute = 389;
- t.omacron = 500;
- t.Zacute = 556;
- t.Zcaron = 556;
- t.greaterequal = 549;
- t.Eth = 722;
- t.Ccedilla = 667;
- t.lcommaaccent = 278;
- t.tcaron = 300;
- t.eogonek = 444;
- t.Uogonek = 722;
- t.Aacute = 611;
- t.Adieresis = 611;
- t.egrave = 444;
- t.zacute = 389;
- t.iogonek = 278;
- t.Oacute = 722;
- t.oacute = 500;
- t.amacron = 500;
- t.sacute = 389;
- t.idieresis = 278;
- t.Ocircumflex = 722;
- t.Ugrave = 722;
- t.Delta = 612;
- t.thorn = 500;
- t.twosuperior = 300;
- t.Odieresis = 722;
- t.mu = 500;
- t.igrave = 278;
- t.ohungarumlaut = 500;
- t.Eogonek = 611;
- t.dcroat = 500;
- t.threequarters = 750;
- t.Scedilla = 500;
- t.lcaron = 300;
- t.Kcommaaccent = 667;
- t.Lacute = 556;
- t.trademark = 980;
- t.edotaccent = 444;
- t.Igrave = 333;
- t.Imacron = 333;
- t.Lcaron = 611;
- t.onehalf = 750;
- t.lessequal = 549;
- t.ocircumflex = 500;
- t.ntilde = 500;
- t.Uhungarumlaut = 722;
- t.Eacute = 611;
- t.emacron = 444;
- t.gbreve = 500;
- t.onequarter = 750;
- t.Scaron = 500;
- t.Scommaaccent = 500;
- t.Ohungarumlaut = 722;
- t.degree = 400;
- t.ograve = 500;
- t.Ccaron = 667;
- t.ugrave = 500;
- t.radical = 453;
- t.Dcaron = 722;
- t.rcommaaccent = 389;
- t.Ntilde = 667;
- t.otilde = 500;
- t.Rcommaaccent = 611;
- t.Lcommaaccent = 556;
- t.Atilde = 611;
- t.Aogonek = 611;
- t.Aring = 611;
- t.Otilde = 722;
- t.zdotaccent = 389;
- t.Ecaron = 611;
- t.Iogonek = 333;
- t.kcommaaccent = 444;
- t.minus = 675;
- t.Icircumflex = 333;
- t.ncaron = 500;
- t.tcommaaccent = 278;
- t.logicalnot = 675;
- t.odieresis = 500;
- t.udieresis = 500;
- t.notequal = 549;
- t.gcommaaccent = 500;
- t.eth = 500;
- t.zcaron = 389;
- t.ncommaaccent = 500;
- t.onesuperior = 300;
- t.imacron = 278;
- t.Euro = 500;
- });
- t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) {
- t.space = 278;
- t.a1 = 974;
- t.a2 = 961;
- t.a202 = 974;
- t.a3 = 980;
- t.a4 = 719;
- t.a5 = 789;
- t.a119 = 790;
- t.a118 = 791;
- t.a117 = 690;
- t.a11 = 960;
- t.a12 = 939;
- t.a13 = 549;
- t.a14 = 855;
- t.a15 = 911;
- t.a16 = 933;
- t.a105 = 911;
- t.a17 = 945;
- t.a18 = 974;
- t.a19 = 755;
- t.a20 = 846;
- t.a21 = 762;
- t.a22 = 761;
- t.a23 = 571;
- t.a24 = 677;
- t.a25 = 763;
- t.a26 = 760;
- t.a27 = 759;
- t.a28 = 754;
- t.a6 = 494;
- t.a7 = 552;
- t.a8 = 537;
- t.a9 = 577;
- t.a10 = 692;
- t.a29 = 786;
- t.a30 = 788;
- t.a31 = 788;
- t.a32 = 790;
- t.a33 = 793;
- t.a34 = 794;
- t.a35 = 816;
- t.a36 = 823;
- t.a37 = 789;
- t.a38 = 841;
- t.a39 = 823;
- t.a40 = 833;
- t.a41 = 816;
- t.a42 = 831;
- t.a43 = 923;
- t.a44 = 744;
- t.a45 = 723;
- t.a46 = 749;
- t.a47 = 790;
- t.a48 = 792;
- t.a49 = 695;
- t.a50 = 776;
- t.a51 = 768;
- t.a52 = 792;
- t.a53 = 759;
- t.a54 = 707;
- t.a55 = 708;
- t.a56 = 682;
- t.a57 = 701;
- t.a58 = 826;
- t.a59 = 815;
- t.a60 = 789;
- t.a61 = 789;
- t.a62 = 707;
- t.a63 = 687;
- t.a64 = 696;
- t.a65 = 689;
- t.a66 = 786;
- t.a67 = 787;
- t.a68 = 713;
- t.a69 = 791;
- t.a70 = 785;
- t.a71 = 791;
- t.a72 = 873;
- t.a73 = 761;
- t.a74 = 762;
- t.a203 = 762;
- t.a75 = 759;
- t.a204 = 759;
- t.a76 = 892;
- t.a77 = 892;
- t.a78 = 788;
- t.a79 = 784;
- t.a81 = 438;
- t.a82 = 138;
- t.a83 = 277;
- t.a84 = 415;
- t.a97 = 392;
- t.a98 = 392;
- t.a99 = 668;
- t.a100 = 668;
- t.a89 = 390;
- t.a90 = 390;
- t.a93 = 317;
- t.a94 = 317;
- t.a91 = 276;
- t.a92 = 276;
- t.a205 = 509;
- t.a85 = 509;
- t.a206 = 410;
- t.a86 = 410;
- t.a87 = 234;
- t.a88 = 234;
- t.a95 = 334;
- t.a96 = 334;
- t.a101 = 732;
- t.a102 = 544;
- t.a103 = 544;
- t.a104 = 910;
- t.a106 = 667;
- t.a107 = 760;
- t.a108 = 760;
- t.a112 = 776;
- t.a111 = 595;
- t.a110 = 694;
- t.a109 = 626;
- t.a120 = 788;
- t.a121 = 788;
- t.a122 = 788;
- t.a123 = 788;
- t.a124 = 788;
- t.a125 = 788;
- t.a126 = 788;
- t.a127 = 788;
- t.a128 = 788;
- t.a129 = 788;
- t.a130 = 788;
- t.a131 = 788;
- t.a132 = 788;
- t.a133 = 788;
- t.a134 = 788;
- t.a135 = 788;
- t.a136 = 788;
- t.a137 = 788;
- t.a138 = 788;
- t.a139 = 788;
- t.a140 = 788;
- t.a141 = 788;
- t.a142 = 788;
- t.a143 = 788;
- t.a144 = 788;
- t.a145 = 788;
- t.a146 = 788;
- t.a147 = 788;
- t.a148 = 788;
- t.a149 = 788;
- t.a150 = 788;
- t.a151 = 788;
- t.a152 = 788;
- t.a153 = 788;
- t.a154 = 788;
- t.a155 = 788;
- t.a156 = 788;
- t.a157 = 788;
- t.a158 = 788;
- t.a159 = 788;
- t.a160 = 894;
- t.a161 = 838;
- t.a163 = 1016;
- t.a164 = 458;
- t.a196 = 748;
- t.a165 = 924;
- t.a192 = 748;
- t.a166 = 918;
- t.a167 = 927;
- t.a168 = 928;
- t.a169 = 928;
- t.a170 = 834;
- t.a171 = 873;
- t.a172 = 828;
- t.a173 = 924;
- t.a162 = 924;
- t.a174 = 917;
- t.a175 = 930;
- t.a176 = 931;
- t.a177 = 463;
- t.a178 = 883;
- t.a179 = 836;
- t.a193 = 836;
- t.a180 = 867;
- t.a199 = 867;
- t.a181 = 696;
- t.a200 = 696;
- t.a182 = 874;
- t.a201 = 874;
- t.a183 = 760;
- t.a184 = 946;
- t.a197 = 771;
- t.a185 = 865;
- t.a194 = 771;
- t.a198 = 888;
- t.a186 = 967;
- t.a195 = 888;
- t.a187 = 831;
- t.a188 = 873;
- t.a189 = 927;
- t.a190 = 970;
- t.a191 = 918;
- });
-});
-exports.getMetrics = getMetrics;
-
-/***/ }),
-/* 41 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.isPDFFunction = isPDFFunction;
-exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _ps_parser = __w_pdfjs_require__(42);
-
-class PDFFunctionFactory {
- constructor({
- xref,
- isEvalSupported = true
- }) {
- this.xref = xref;
- this.isEvalSupported = isEvalSupported !== false;
- }
-
- create(fn) {
- return PDFFunction.parse({
- xref: this.xref,
- isEvalSupported: this.isEvalSupported,
- fn
- });
- }
-
- createFromArray(fnObj) {
- return PDFFunction.parseArray({
- xref: this.xref,
- isEvalSupported: this.isEvalSupported,
- fnObj
- });
- }
-
-}
-
-exports.PDFFunctionFactory = PDFFunctionFactory;
-
-function toNumberArray(arr) {
- if (!Array.isArray(arr)) {
- return null;
- }
-
- const length = arr.length;
-
- for (let i = 0; i < length; i++) {
- if (typeof arr[i] !== "number") {
- const result = new Array(length);
-
- for (let j = 0; j < length; j++) {
- result[j] = +arr[j];
- }
-
- return result;
- }
- }
-
- return arr;
-}
-
-var PDFFunction = function PDFFunctionClosure() {
- const CONSTRUCT_SAMPLED = 0;
- const CONSTRUCT_INTERPOLATED = 2;
- const CONSTRUCT_STICHED = 3;
- const CONSTRUCT_POSTSCRIPT = 4;
- return {
- getSampleArray(size, outputSize, bps, stream) {
- var i, ii;
- var length = 1;
-
- for (i = 0, ii = size.length; i < ii; i++) {
- length *= size[i];
- }
-
- length *= outputSize;
- var array = new Array(length);
- var codeSize = 0;
- var codeBuf = 0;
- var sampleMul = 1.0 / (2.0 ** bps - 1);
- var strBytes = stream.getBytes((length * bps + 7) / 8);
- var strIdx = 0;
-
- for (i = 0; i < length; i++) {
- while (codeSize < bps) {
- codeBuf <<= 8;
- codeBuf |= strBytes[strIdx++];
- codeSize += 8;
- }
-
- codeSize -= bps;
- array[i] = (codeBuf >> codeSize) * sampleMul;
- codeBuf &= (1 << codeSize) - 1;
- }
-
- return array;
- },
-
- getIR({
- xref,
- isEvalSupported,
- fn
- }) {
- var dict = fn.dict;
-
- if (!dict) {
- dict = fn;
- }
-
- var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript];
- var typeNum = dict.get("FunctionType");
- var typeFn = types[typeNum];
-
- if (!typeFn) {
- throw new _util.FormatError("Unknown type of function");
- }
-
- return typeFn.call(this, {
- xref,
- isEvalSupported,
- fn,
- dict
- });
- },
-
- fromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var type = IR[0];
-
- switch (type) {
- case CONSTRUCT_SAMPLED:
- return this.constructSampledFromIR({
- xref,
- isEvalSupported,
- IR
- });
-
- case CONSTRUCT_INTERPOLATED:
- return this.constructInterpolatedFromIR({
- xref,
- isEvalSupported,
- IR
- });
-
- case CONSTRUCT_STICHED:
- return this.constructStichedFromIR({
- xref,
- isEvalSupported,
- IR
- });
-
- default:
- return this.constructPostScriptFromIR({
- xref,
- isEvalSupported,
- IR
- });
- }
- },
-
- parse({
- xref,
- isEvalSupported,
- fn
- }) {
- const IR = this.getIR({
- xref,
- isEvalSupported,
- fn
- });
- return this.fromIR({
- xref,
- isEvalSupported,
- IR
- });
- },
-
- parseArray({
- xref,
- isEvalSupported,
- fnObj
- }) {
- if (!Array.isArray(fnObj)) {
- return this.parse({
- xref,
- isEvalSupported,
- fn: fnObj
- });
- }
-
- var fnArray = [];
-
- for (var j = 0, jj = fnObj.length; j < jj; j++) {
- fnArray.push(this.parse({
- xref,
- isEvalSupported,
- fn: xref.fetchIfRef(fnObj[j])
- }));
- }
-
- return function (src, srcOffset, dest, destOffset) {
- for (var i = 0, ii = fnArray.length; i < ii; i++) {
- fnArray[i](src, srcOffset, dest, destOffset + i);
- }
- };
- },
-
- constructSampled({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- function toMultiArray(arr) {
- var inputLength = arr.length;
- var out = [];
- var index = 0;
-
- for (var i = 0; i < inputLength; i += 2) {
- out[index] = [arr[i], arr[i + 1]];
- ++index;
- }
-
- return out;
- }
-
- var domain = toNumberArray(dict.getArray("Domain"));
- var range = toNumberArray(dict.getArray("Range"));
-
- if (!domain || !range) {
- throw new _util.FormatError("No domain or range");
- }
-
- var inputSize = domain.length / 2;
- var outputSize = range.length / 2;
- domain = toMultiArray(domain);
- range = toMultiArray(range);
- var size = toNumberArray(dict.getArray("Size"));
- var bps = dict.get("BitsPerSample");
- var order = dict.get("Order") || 1;
-
- if (order !== 1) {
- (0, _util.info)("No support for cubic spline interpolation: " + order);
- }
-
- var encode = toNumberArray(dict.getArray("Encode"));
-
- if (!encode) {
- encode = [];
-
- for (var i = 0; i < inputSize; ++i) {
- encode.push([0, size[i] - 1]);
- }
- } else {
- encode = toMultiArray(encode);
- }
-
- var decode = toNumberArray(dict.getArray("Decode"));
-
- if (!decode) {
- decode = range;
- } else {
- decode = toMultiArray(decode);
- }
-
- var samples = this.getSampleArray(size, outputSize, bps, fn);
- return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, 2 ** bps - 1, range];
- },
-
- constructSampledFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- function interpolate(x, xmin, xmax, ymin, ymax) {
- return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));
- }
-
- return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) {
- var m = IR[1];
- var domain = IR[2];
- var encode = IR[3];
- var decode = IR[4];
- var samples = IR[5];
- var size = IR[6];
- var n = IR[7];
- var range = IR[9];
- var cubeVertices = 1 << m;
- var cubeN = new Float64Array(cubeVertices);
- var cubeVertex = new Uint32Array(cubeVertices);
- var i, j;
-
- for (j = 0; j < cubeVertices; j++) {
- cubeN[j] = 1;
- }
-
- var k = n,
- pos = 1;
-
- for (i = 0; i < m; ++i) {
- var domain_2i = domain[i][0];
- var domain_2i_1 = domain[i][1];
- var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);
- var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);
- var size_i = size[i];
- e = Math.min(Math.max(e, 0), size_i - 1);
- var e0 = e < size_i - 1 ? Math.floor(e) : e - 1;
- var n0 = e0 + 1 - e;
- var n1 = e - e0;
- var offset0 = e0 * k;
- var offset1 = offset0 + k;
-
- for (j = 0; j < cubeVertices; j++) {
- if (j & pos) {
- cubeN[j] *= n1;
- cubeVertex[j] += offset1;
- } else {
- cubeN[j] *= n0;
- cubeVertex[j] += offset0;
- }
- }
-
- k *= size_i;
- pos <<= 1;
- }
-
- for (j = 0; j < n; ++j) {
- var rj = 0;
-
- for (i = 0; i < cubeVertices; i++) {
- rj += samples[cubeVertex[i] + j] * cubeN[i];
- }
-
- rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
- dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
- }
- };
- },
-
- constructInterpolated({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- var c0 = toNumberArray(dict.getArray("C0")) || [0];
- var c1 = toNumberArray(dict.getArray("C1")) || [1];
- var n = dict.get("N");
- var length = c0.length;
- var diff = [];
-
- for (var i = 0; i < length; ++i) {
- diff.push(c1[i] - c0[i]);
- }
-
- return [CONSTRUCT_INTERPOLATED, c0, diff, n];
- },
-
- constructInterpolatedFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var c0 = IR[1];
- var diff = IR[2];
- var n = IR[3];
- var length = diff.length;
- return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) {
- var x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;
-
- for (var j = 0; j < length; ++j) {
- dest[destOffset + j] = c0[j] + x * diff[j];
- }
- };
- },
-
- constructStiched({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- var domain = toNumberArray(dict.getArray("Domain"));
-
- if (!domain) {
- throw new _util.FormatError("No domain");
- }
-
- var inputSize = domain.length / 2;
-
- if (inputSize !== 1) {
- throw new _util.FormatError("Bad domain for stiched function");
- }
-
- var fnRefs = dict.get("Functions");
- var fns = [];
-
- for (var i = 0, ii = fnRefs.length; i < ii; ++i) {
- fns.push(this.parse({
- xref,
- isEvalSupported,
- fn: xref.fetchIfRef(fnRefs[i])
- }));
- }
-
- var bounds = toNumberArray(dict.getArray("Bounds"));
- var encode = toNumberArray(dict.getArray("Encode"));
- return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
- },
-
- constructStichedFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var domain = IR[1];
- var bounds = IR[2];
- var encode = IR[3];
- var fns = IR[4];
- var tmpBuf = new Float32Array(1);
- return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) {
- var clip = function constructStichedFromIRClip(v, min, max) {
- if (v > max) {
- v = max;
- } else if (v < min) {
- v = min;
- }
-
- return v;
- };
-
- var v = clip(src[srcOffset], domain[0], domain[1]);
-
- for (var i = 0, ii = bounds.length; i < ii; ++i) {
- if (v < bounds[i]) {
- break;
- }
- }
-
- var dmin = domain[0];
-
- if (i > 0) {
- dmin = bounds[i - 1];
- }
-
- var dmax = domain[1];
-
- if (i < bounds.length) {
- dmax = bounds[i];
- }
-
- var rmin = encode[2 * i];
- var rmax = encode[2 * i + 1];
- tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
- fns[i](tmpBuf, 0, dest, destOffset);
- };
- },
-
- constructPostScript({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- var domain = toNumberArray(dict.getArray("Domain"));
- var range = toNumberArray(dict.getArray("Range"));
-
- if (!domain) {
- throw new _util.FormatError("No domain.");
- }
-
- if (!range) {
- throw new _util.FormatError("No range.");
- }
-
- var lexer = new _ps_parser.PostScriptLexer(fn);
- var parser = new _ps_parser.PostScriptParser(lexer);
- var code = parser.parse();
- return [CONSTRUCT_POSTSCRIPT, domain, range, code];
- },
-
- constructPostScriptFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var domain = IR[1];
- var range = IR[2];
- var code = IR[3];
-
- if (isEvalSupported && _util.IsEvalSupportedCached.value) {
- const compiled = new PostScriptCompiler().compile(code, domain, range);
-
- if (compiled) {
- return new Function("src", "srcOffset", "dest", "destOffset", compiled);
- }
- }
-
- (0, _util.info)("Unable to compile PS function");
- var numOutputs = range.length >> 1;
- var numInputs = domain.length >> 1;
- var evaluator = new PostScriptEvaluator(code);
- var cache = Object.create(null);
- var MAX_CACHE_SIZE = 2048 * 4;
- var cache_available = MAX_CACHE_SIZE;
- var tmpBuf = new Float32Array(numInputs);
- return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) {
- var i, value;
- var key = "";
- var input = tmpBuf;
-
- for (i = 0; i < numInputs; i++) {
- value = src[srcOffset + i];
- input[i] = value;
- key += value + "_";
- }
-
- var cachedValue = cache[key];
-
- if (cachedValue !== undefined) {
- dest.set(cachedValue, destOffset);
- return;
- }
-
- var output = new Float32Array(numOutputs);
- var stack = evaluator.execute(input);
- var stackIndex = stack.length - numOutputs;
-
- for (i = 0; i < numOutputs; i++) {
- value = stack[stackIndex + i];
- var bound = range[i * 2];
-
- if (value < bound) {
- value = bound;
- } else {
- bound = range[i * 2 + 1];
-
- if (value > bound) {
- value = bound;
- }
- }
-
- output[i] = value;
- }
-
- if (cache_available > 0) {
- cache_available--;
- cache[key] = output;
- }
-
- dest.set(output, destOffset);
- };
- }
-
- };
-}();
-
-function isPDFFunction(v) {
- var fnDict;
-
- if (typeof v !== "object") {
- return false;
- } else if ((0, _primitives.isDict)(v)) {
- fnDict = v;
- } else if ((0, _primitives.isStream)(v)) {
- fnDict = v.dict;
- } else {
- return false;
- }
-
- return fnDict.has("FunctionType");
-}
-
-var PostScriptStack = function PostScriptStackClosure() {
- var MAX_STACK_SIZE = 100;
-
- function PostScriptStack(initialStack) {
- this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0);
- }
-
- PostScriptStack.prototype = {
- push: function PostScriptStack_push(value) {
- if (this.stack.length >= MAX_STACK_SIZE) {
- throw new Error("PostScript function stack overflow.");
- }
-
- this.stack.push(value);
- },
- pop: function PostScriptStack_pop() {
- if (this.stack.length <= 0) {
- throw new Error("PostScript function stack underflow.");
- }
-
- return this.stack.pop();
- },
- copy: function PostScriptStack_copy(n) {
- if (this.stack.length + n >= MAX_STACK_SIZE) {
- throw new Error("PostScript function stack overflow.");
- }
-
- var stack = this.stack;
-
- for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
- stack.push(stack[i]);
- }
- },
- index: function PostScriptStack_index(n) {
- this.push(this.stack[this.stack.length - n - 1]);
- },
- roll: function PostScriptStack_roll(n, p) {
- var stack = this.stack;
- var l = stack.length - n;
- var r = stack.length - 1,
- c = l + (p - Math.floor(p / n) * n),
- i,
- j,
- t;
-
- for (i = l, j = r; i < j; i++, j--) {
- t = stack[i];
- stack[i] = stack[j];
- stack[j] = t;
- }
-
- for (i = l, j = c - 1; i < j; i++, j--) {
- t = stack[i];
- stack[i] = stack[j];
- stack[j] = t;
- }
-
- for (i = c, j = r; i < j; i++, j--) {
- t = stack[i];
- stack[i] = stack[j];
- stack[j] = t;
- }
- }
- };
- return PostScriptStack;
-}();
-
-var PostScriptEvaluator = function PostScriptEvaluatorClosure() {
- function PostScriptEvaluator(operators) {
- this.operators = operators;
- }
-
- PostScriptEvaluator.prototype = {
- execute: function PostScriptEvaluator_execute(initialStack) {
- var stack = new PostScriptStack(initialStack);
- var counter = 0;
- var operators = this.operators;
- var length = operators.length;
- var operator, a, b;
-
- while (counter < length) {
- operator = operators[counter++];
-
- if (typeof operator === "number") {
- stack.push(operator);
- continue;
- }
-
- switch (operator) {
- case "jz":
- b = stack.pop();
- a = stack.pop();
-
- if (!a) {
- counter = b;
- }
-
- break;
-
- case "j":
- a = stack.pop();
- counter = a;
- break;
-
- case "abs":
- a = stack.pop();
- stack.push(Math.abs(a));
- break;
-
- case "add":
- b = stack.pop();
- a = stack.pop();
- stack.push(a + b);
- break;
-
- case "and":
- b = stack.pop();
- a = stack.pop();
-
- if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
- stack.push(a && b);
- } else {
- stack.push(a & b);
- }
-
- break;
-
- case "atan":
- a = stack.pop();
- stack.push(Math.atan(a));
- break;
-
- case "bitshift":
- b = stack.pop();
- a = stack.pop();
-
- if (a > 0) {
- stack.push(a << b);
- } else {
- stack.push(a >> b);
- }
-
- break;
-
- case "ceiling":
- a = stack.pop();
- stack.push(Math.ceil(a));
- break;
-
- case "copy":
- a = stack.pop();
- stack.copy(a);
- break;
-
- case "cos":
- a = stack.pop();
- stack.push(Math.cos(a));
- break;
-
- case "cvi":
- a = stack.pop() | 0;
- stack.push(a);
- break;
-
- case "cvr":
- break;
-
- case "div":
- b = stack.pop();
- a = stack.pop();
- stack.push(a / b);
- break;
-
- case "dup":
- stack.copy(1);
- break;
-
- case "eq":
- b = stack.pop();
- a = stack.pop();
- stack.push(a === b);
- break;
-
- case "exch":
- stack.roll(2, 1);
- break;
-
- case "exp":
- b = stack.pop();
- a = stack.pop();
- stack.push(a ** b);
- break;
-
- case "false":
- stack.push(false);
- break;
-
- case "floor":
- a = stack.pop();
- stack.push(Math.floor(a));
- break;
-
- case "ge":
- b = stack.pop();
- a = stack.pop();
- stack.push(a >= b);
- break;
-
- case "gt":
- b = stack.pop();
- a = stack.pop();
- stack.push(a > b);
- break;
-
- case "idiv":
- b = stack.pop();
- a = stack.pop();
- stack.push(a / b | 0);
- break;
-
- case "index":
- a = stack.pop();
- stack.index(a);
- break;
-
- case "le":
- b = stack.pop();
- a = stack.pop();
- stack.push(a <= b);
- break;
-
- case "ln":
- a = stack.pop();
- stack.push(Math.log(a));
- break;
-
- case "log":
- a = stack.pop();
- stack.push(Math.log(a) / Math.LN10);
- break;
-
- case "lt":
- b = stack.pop();
- a = stack.pop();
- stack.push(a < b);
- break;
-
- case "mod":
- b = stack.pop();
- a = stack.pop();
- stack.push(a % b);
- break;
-
- case "mul":
- b = stack.pop();
- a = stack.pop();
- stack.push(a * b);
- break;
-
- case "ne":
- b = stack.pop();
- a = stack.pop();
- stack.push(a !== b);
- break;
-
- case "neg":
- a = stack.pop();
- stack.push(-a);
- break;
-
- case "not":
- a = stack.pop();
-
- if ((0, _util.isBool)(a)) {
- stack.push(!a);
- } else {
- stack.push(~a);
- }
-
- break;
-
- case "or":
- b = stack.pop();
- a = stack.pop();
-
- if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
- stack.push(a || b);
- } else {
- stack.push(a | b);
- }
-
- break;
-
- case "pop":
- stack.pop();
- break;
-
- case "roll":
- b = stack.pop();
- a = stack.pop();
- stack.roll(a, b);
- break;
-
- case "round":
- a = stack.pop();
- stack.push(Math.round(a));
- break;
-
- case "sin":
- a = stack.pop();
- stack.push(Math.sin(a));
- break;
-
- case "sqrt":
- a = stack.pop();
- stack.push(Math.sqrt(a));
- break;
-
- case "sub":
- b = stack.pop();
- a = stack.pop();
- stack.push(a - b);
- break;
-
- case "true":
- stack.push(true);
- break;
-
- case "truncate":
- a = stack.pop();
- a = a < 0 ? Math.ceil(a) : Math.floor(a);
- stack.push(a);
- break;
-
- case "xor":
- b = stack.pop();
- a = stack.pop();
-
- if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
- stack.push(a !== b);
- } else {
- stack.push(a ^ b);
- }
-
- break;
-
- default:
- throw new _util.FormatError(`Unknown operator ${operator}`);
- }
- }
-
- return stack.stack;
- }
- };
- return PostScriptEvaluator;
-}();
-
-exports.PostScriptEvaluator = PostScriptEvaluator;
-
-var PostScriptCompiler = function PostScriptCompilerClosure() {
- function AstNode(type) {
- this.type = type;
- }
-
- AstNode.prototype.visit = function (visitor) {
- (0, _util.unreachable)("abstract method");
- };
-
- function AstArgument(index, min, max) {
- AstNode.call(this, "args");
- this.index = index;
- this.min = min;
- this.max = max;
- }
-
- AstArgument.prototype = Object.create(AstNode.prototype);
-
- AstArgument.prototype.visit = function (visitor) {
- visitor.visitArgument(this);
- };
-
- function AstLiteral(number) {
- AstNode.call(this, "literal");
- this.number = number;
- this.min = number;
- this.max = number;
- }
-
- AstLiteral.prototype = Object.create(AstNode.prototype);
-
- AstLiteral.prototype.visit = function (visitor) {
- visitor.visitLiteral(this);
- };
-
- function AstBinaryOperation(op, arg1, arg2, min, max) {
- AstNode.call(this, "binary");
- this.op = op;
- this.arg1 = arg1;
- this.arg2 = arg2;
- this.min = min;
- this.max = max;
- }
-
- AstBinaryOperation.prototype = Object.create(AstNode.prototype);
-
- AstBinaryOperation.prototype.visit = function (visitor) {
- visitor.visitBinaryOperation(this);
- };
-
- function AstMin(arg, max) {
- AstNode.call(this, "max");
- this.arg = arg;
- this.min = arg.min;
- this.max = max;
- }
-
- AstMin.prototype = Object.create(AstNode.prototype);
-
- AstMin.prototype.visit = function (visitor) {
- visitor.visitMin(this);
- };
-
- function AstVariable(index, min, max) {
- AstNode.call(this, "var");
- this.index = index;
- this.min = min;
- this.max = max;
- }
-
- AstVariable.prototype = Object.create(AstNode.prototype);
-
- AstVariable.prototype.visit = function (visitor) {
- visitor.visitVariable(this);
- };
-
- function AstVariableDefinition(variable, arg) {
- AstNode.call(this, "definition");
- this.variable = variable;
- this.arg = arg;
- }
-
- AstVariableDefinition.prototype = Object.create(AstNode.prototype);
-
- AstVariableDefinition.prototype.visit = function (visitor) {
- visitor.visitVariableDefinition(this);
- };
-
- function ExpressionBuilderVisitor() {
- this.parts = [];
- }
-
- ExpressionBuilderVisitor.prototype = {
- visitArgument(arg) {
- this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))");
- },
-
- visitVariable(variable) {
- this.parts.push("v", variable.index);
- },
-
- visitLiteral(literal) {
- this.parts.push(literal.number);
- },
-
- visitBinaryOperation(operation) {
- this.parts.push("(");
- operation.arg1.visit(this);
- this.parts.push(" ", operation.op, " ");
- operation.arg2.visit(this);
- this.parts.push(")");
- },
-
- visitVariableDefinition(definition) {
- this.parts.push("var ");
- definition.variable.visit(this);
- this.parts.push(" = ");
- definition.arg.visit(this);
- this.parts.push(";");
- },
-
- visitMin(max) {
- this.parts.push("Math.min(");
- max.arg.visit(this);
- this.parts.push(", ", max.max, ")");
- },
-
- toString() {
- return this.parts.join("");
- }
-
- };
-
- function buildAddOperation(num1, num2) {
- if (num2.type === "literal" && num2.number === 0) {
- return num1;
- }
-
- if (num1.type === "literal" && num1.number === 0) {
- return num2;
- }
-
- if (num2.type === "literal" && num1.type === "literal") {
- return new AstLiteral(num1.number + num2.number);
- }
-
- return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max);
- }
-
- function buildMulOperation(num1, num2) {
- if (num2.type === "literal") {
- if (num2.number === 0) {
- return new AstLiteral(0);
- } else if (num2.number === 1) {
- return num1;
- } else if (num1.type === "literal") {
- return new AstLiteral(num1.number * num2.number);
- }
- }
-
- if (num1.type === "literal") {
- if (num1.number === 0) {
- return new AstLiteral(0);
- } else if (num1.number === 1) {
- return num2;
- }
- }
-
- var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
- var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
- return new AstBinaryOperation("*", num1, num2, min, max);
- }
-
- function buildSubOperation(num1, num2) {
- if (num2.type === "literal") {
- if (num2.number === 0) {
- return num1;
- } else if (num1.type === "literal") {
- return new AstLiteral(num1.number - num2.number);
- }
- }
-
- if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) {
- return num2.arg2;
- }
-
- return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min);
- }
-
- function buildMinOperation(num1, max) {
- if (num1.min >= max) {
- return new AstLiteral(max);
- } else if (num1.max <= max) {
- return num1;
- }
-
- return new AstMin(num1, max);
- }
-
- function PostScriptCompiler() {}
-
- PostScriptCompiler.prototype = {
- compile: function PostScriptCompiler_compile(code, domain, range) {
- var stack = [];
- var instructions = [];
- var inputSize = domain.length >> 1,
- outputSize = range.length >> 1;
- var lastRegister = 0;
- var n, j;
- var num1, num2, ast1, ast2, tmpVar, item;
-
- for (let i = 0; i < inputSize; i++) {
- stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));
- }
-
- for (let i = 0, ii = code.length; i < ii; i++) {
- item = code[i];
-
- if (typeof item === "number") {
- stack.push(new AstLiteral(item));
- continue;
- }
-
- switch (item) {
- case "add":
- if (stack.length < 2) {
- return null;
- }
-
- num2 = stack.pop();
- num1 = stack.pop();
- stack.push(buildAddOperation(num1, num2));
- break;
-
- case "cvr":
- if (stack.length < 1) {
- return null;
- }
-
- break;
-
- case "mul":
- if (stack.length < 2) {
- return null;
- }
-
- num2 = stack.pop();
- num1 = stack.pop();
- stack.push(buildMulOperation(num1, num2));
- break;
-
- case "sub":
- if (stack.length < 2) {
- return null;
- }
-
- num2 = stack.pop();
- num1 = stack.pop();
- stack.push(buildSubOperation(num1, num2));
- break;
-
- case "exch":
- if (stack.length < 2) {
- return null;
- }
-
- ast1 = stack.pop();
- ast2 = stack.pop();
- stack.push(ast1, ast2);
- break;
-
- case "pop":
- if (stack.length < 1) {
- return null;
- }
-
- stack.pop();
- break;
-
- case "index":
- if (stack.length < 1) {
- return null;
- }
-
- num1 = stack.pop();
-
- if (num1.type !== "literal") {
- return null;
- }
-
- n = num1.number;
-
- if (n < 0 || !Number.isInteger(n) || stack.length < n) {
- return null;
- }
-
- ast1 = stack[stack.length - n - 1];
-
- if (ast1.type === "literal" || ast1.type === "var") {
- stack.push(ast1);
- break;
- }
-
- tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
- stack[stack.length - n - 1] = tmpVar;
- stack.push(tmpVar);
- instructions.push(new AstVariableDefinition(tmpVar, ast1));
- break;
-
- case "dup":
- if (stack.length < 1) {
- return null;
- }
-
- if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) {
- num1 = stack.pop();
- stack.push(buildMinOperation(num1, code[i + 1]));
- i += 6;
- break;
- }
-
- ast1 = stack[stack.length - 1];
-
- if (ast1.type === "literal" || ast1.type === "var") {
- stack.push(ast1);
- break;
- }
-
- tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
- stack[stack.length - 1] = tmpVar;
- stack.push(tmpVar);
- instructions.push(new AstVariableDefinition(tmpVar, ast1));
- break;
-
- case "roll":
- if (stack.length < 2) {
- return null;
- }
-
- num2 = stack.pop();
- num1 = stack.pop();
-
- if (num2.type !== "literal" || num1.type !== "literal") {
- return null;
- }
-
- j = num2.number;
- n = num1.number;
-
- if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) {
- return null;
- }
-
- j = (j % n + n) % n;
-
- if (j === 0) {
- break;
- }
-
- Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j));
- break;
-
- default:
- return null;
- }
- }
-
- if (stack.length !== outputSize) {
- return null;
- }
-
- var result = [];
- instructions.forEach(function (instruction) {
- var statementBuilder = new ExpressionBuilderVisitor();
- instruction.visit(statementBuilder);
- result.push(statementBuilder.toString());
- });
- stack.forEach(function (expr, i) {
- var statementBuilder = new ExpressionBuilderVisitor();
- expr.visit(statementBuilder);
- var min = range[i * 2],
- max = range[i * 2 + 1];
- var out = [statementBuilder.toString()];
-
- if (min > expr.min) {
- out.unshift("Math.max(", min, ", ");
- out.push(")");
- }
-
- if (max < expr.max) {
- out.unshift("Math.min(", max, ", ");
- out.push(")");
- }
-
- out.unshift("dest[destOffset + ", i, "] = ");
- out.push(";");
- result.push(out.join(""));
- });
- return result.join("\n");
- }
- };
- return PostScriptCompiler;
-}();
-
-exports.PostScriptCompiler = PostScriptCompiler;
-
-/***/ }),
-/* 42 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PostScriptParser = exports.PostScriptLexer = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-class PostScriptParser {
- constructor(lexer) {
- this.lexer = lexer;
- this.operators = [];
- this.token = null;
- this.prev = null;
- }
-
- nextToken() {
- this.prev = this.token;
- this.token = this.lexer.getToken();
- }
-
- accept(type) {
- if (this.token.type === type) {
- this.nextToken();
- return true;
- }
-
- return false;
- }
-
- expect(type) {
- if (this.accept(type)) {
- return true;
- }
-
- throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`);
- }
-
- parse() {
- this.nextToken();
- this.expect(PostScriptTokenTypes.LBRACE);
- this.parseBlock();
- this.expect(PostScriptTokenTypes.RBRACE);
- return this.operators;
- }
-
- parseBlock() {
- while (true) {
- if (this.accept(PostScriptTokenTypes.NUMBER)) {
- this.operators.push(this.prev.value);
- } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
- this.operators.push(this.prev.value);
- } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
- this.parseCondition();
- } else {
- return;
- }
- }
- }
-
- parseCondition() {
- const conditionLocation = this.operators.length;
- this.operators.push(null, null);
- this.parseBlock();
- this.expect(PostScriptTokenTypes.RBRACE);
-
- if (this.accept(PostScriptTokenTypes.IF)) {
- this.operators[conditionLocation] = this.operators.length;
- this.operators[conditionLocation + 1] = "jz";
- } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
- const jumpLocation = this.operators.length;
- this.operators.push(null, null);
- const endOfTrue = this.operators.length;
- this.parseBlock();
- this.expect(PostScriptTokenTypes.RBRACE);
- this.expect(PostScriptTokenTypes.IFELSE);
- this.operators[jumpLocation] = this.operators.length;
- this.operators[jumpLocation + 1] = "j";
- this.operators[conditionLocation] = endOfTrue;
- this.operators[conditionLocation + 1] = "jz";
- } else {
- throw new _util.FormatError("PS Function: error parsing conditional.");
- }
- }
-
-}
-
-exports.PostScriptParser = PostScriptParser;
-const PostScriptTokenTypes = {
- LBRACE: 0,
- RBRACE: 1,
- NUMBER: 2,
- OPERATOR: 3,
- IF: 4,
- IFELSE: 5
-};
-
-const PostScriptToken = function PostScriptTokenClosure() {
- const opCache = Object.create(null);
-
- class PostScriptToken {
- constructor(type, value) {
- this.type = type;
- this.value = value;
- }
-
- static getOperator(op) {
- const opValue = opCache[op];
-
- if (opValue) {
- return opValue;
- }
-
- return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
- }
-
- static get LBRACE() {
- return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{"));
- }
-
- static get RBRACE() {
- return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}"));
- }
-
- static get IF() {
- return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF"));
- }
-
- static get IFELSE() {
- return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE"));
- }
-
- }
-
- return PostScriptToken;
-}();
-
-class PostScriptLexer {
- constructor(stream) {
- this.stream = stream;
- this.nextChar();
- this.strBuf = [];
- }
-
- nextChar() {
- return this.currentChar = this.stream.getByte();
- }
-
- getToken() {
- let comment = false;
- let ch = this.currentChar;
-
- while (true) {
- if (ch < 0) {
- return _primitives.EOF;
- }
-
- if (comment) {
- if (ch === 0x0a || ch === 0x0d) {
- comment = false;
- }
- } else if (ch === 0x25) {
- comment = true;
- } else if (!(0, _core_utils.isWhiteSpace)(ch)) {
- break;
- }
-
- ch = this.nextChar();
- }
-
- switch (ch | 0) {
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34:
- case 0x35:
- case 0x36:
- case 0x37:
- case 0x38:
- case 0x39:
- case 0x2b:
- case 0x2d:
- case 0x2e:
- return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());
-
- case 0x7b:
- this.nextChar();
- return PostScriptToken.LBRACE;
-
- case 0x7d:
- this.nextChar();
- return PostScriptToken.RBRACE;
- }
-
- const strBuf = this.strBuf;
- strBuf.length = 0;
- strBuf[0] = String.fromCharCode(ch);
-
- while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) {
- strBuf.push(String.fromCharCode(ch));
- }
-
- const str = strBuf.join("");
-
- switch (str.toLowerCase()) {
- case "if":
- return PostScriptToken.IF;
-
- case "ifelse":
- return PostScriptToken.IFELSE;
-
- default:
- return PostScriptToken.getOperator(str);
- }
- }
-
- getNumber() {
- let ch = this.currentChar;
- const strBuf = this.strBuf;
- strBuf.length = 0;
- strBuf[0] = String.fromCharCode(ch);
-
- while ((ch = this.nextChar()) >= 0) {
- if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) {
- strBuf.push(String.fromCharCode(ch));
- } else {
- break;
- }
- }
-
- const value = parseFloat(strBuf.join(""));
-
- if (isNaN(value)) {
- throw new _util.FormatError(`Invalid floating point number: ${value}`);
- }
-
- return value;
- }
-
-}
-
-exports.PostScriptLexer = PostScriptLexer;
-
-/***/ }),
-/* 43 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.MurmurHash3_64 = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-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 ((0, _util.isString)(input)) {
- 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.isArrayBuffer)(input)) {
- data = input;
- 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;
- const hex1 = (h1 >>> 0).toString(16),
- hex2 = (h2 >>> 0).toString(16);
- return hex1.padStart(8, "0") + hex2.padStart(8, "0");
- }
-
-}
-
-exports.MurmurHash3_64 = MurmurHash3_64;
-
-/***/ }),
-/* 44 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFImage = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _colorspace = __w_pdfjs_require__(23);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _jpeg_stream = __w_pdfjs_require__(18);
-
-var _jpx = __w_pdfjs_require__(21);
-
-var PDFImage = function PDFImageClosure() {
- function decodeAndClamp(value, addend, coefficient, max) {
- value = addend + value * coefficient;
-
- if (value < 0) {
- value = 0;
- } else if (value > max) {
- value = max;
- }
-
- return value;
- }
-
- function resizeImageMask(src, bpc, w1, h1, w2, h2) {
- var length = w2 * h2;
- let dest;
-
- if (bpc <= 8) {
- dest = new Uint8Array(length);
- } else if (bpc <= 16) {
- dest = new Uint16Array(length);
- } else {
- dest = new Uint32Array(length);
- }
-
- var xRatio = w1 / w2;
- var yRatio = h1 / h2;
- var i,
- j,
- py,
- newIndex = 0,
- oldIndex;
- var xScaled = new Uint16Array(w2);
- var w1Scanline = w1;
-
- for (i = 0; i < w2; i++) {
- xScaled[i] = Math.floor(i * xRatio);
- }
-
- for (i = 0; i < h2; i++) {
- py = Math.floor(i * yRatio) * w1Scanline;
-
- for (j = 0; j < w2; j++) {
- oldIndex = py + xScaled[j];
- dest[newIndex++] = src[oldIndex];
- }
- }
-
- return dest;
- }
-
- function PDFImage({
- xref,
- res,
- image,
- isInline = false,
- smask = null,
- mask = null,
- isMask = false,
- pdfFunctionFactory
- }) {
- this.image = image;
- var dict = image.dict;
- const filter = dict.get("Filter");
-
- if ((0, _primitives.isName)(filter)) {
- switch (filter.name) {
- case "JPXDecode":
- var jpxImage = new _jpx.JpxImage();
- jpxImage.parseImageProperties(image.stream);
- image.stream.reset();
- image.width = jpxImage.width;
- image.height = jpxImage.height;
- image.bitsPerComponent = jpxImage.bitsPerComponent;
- image.numComps = jpxImage.componentsCount;
- break;
-
- case "JBIG2Decode":
- image.bitsPerComponent = 1;
- image.numComps = 1;
- break;
- }
- }
-
- let width = dict.get("Width", "W");
- let height = dict.get("Height", "H");
-
- if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {
- (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary.");
- width = image.width;
- height = image.height;
- }
-
- if (width < 1 || height < 1) {
- throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`);
- }
-
- this.width = width;
- this.height = height;
- this.interpolate = dict.get("Interpolate", "I") || false;
- this.imageMask = dict.get("ImageMask", "IM") || false;
- this.matte = dict.get("Matte") || false;
- var bitsPerComponent = image.bitsPerComponent;
-
- if (!bitsPerComponent) {
- bitsPerComponent = dict.get("BitsPerComponent", "BPC");
-
- if (!bitsPerComponent) {
- if (this.imageMask) {
- bitsPerComponent = 1;
- } else {
- throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`);
- }
- }
- }
-
- this.bpc = bitsPerComponent;
-
- if (!this.imageMask) {
- var colorSpace = dict.get("ColorSpace", "CS");
-
- if (!colorSpace) {
- (0, _util.info)("JPX images (which do not require color spaces)");
-
- switch (image.numComps) {
- case 1:
- colorSpace = _primitives.Name.get("DeviceGray");
- break;
-
- case 3:
- colorSpace = _primitives.Name.get("DeviceRGB");
- break;
-
- case 4:
- colorSpace = _primitives.Name.get("DeviceCMYK");
- break;
-
- default:
- throw new Error(`JPX images with ${image.numComps} ` + "color components not supported.");
- }
- }
-
- const resources = isInline ? res : null;
- this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory);
- this.numComps = this.colorSpace.numComps;
- }
-
- this.decode = dict.getArray("Decode", "D");
- this.needsDecode = false;
-
- if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
- this.needsDecode = true;
- var max = (1 << bitsPerComponent) - 1;
- this.decodeCoefficients = [];
- this.decodeAddends = [];
- const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed";
-
- for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
- var dmin = this.decode[i];
- var dmax = this.decode[i + 1];
- this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;
- this.decodeAddends[j] = isIndexed ? dmin : max * dmin;
- }
- }
-
- if (smask) {
- this.smask = new PDFImage({
- xref,
- res,
- image: smask,
- isInline,
- pdfFunctionFactory
- });
- } else if (mask) {
- if ((0, _primitives.isStream)(mask)) {
- var maskDict = mask.dict,
- imageMask = maskDict.get("ImageMask", "IM");
-
- if (!imageMask) {
- (0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
- } else {
- this.mask = new PDFImage({
- xref,
- res,
- image: mask,
- isInline,
- isMask: true,
- pdfFunctionFactory
- });
- }
- } else {
- this.mask = mask;
- }
- }
- }
-
- PDFImage.buildImage = function ({
- xref,
- res,
- image,
- isInline = false,
- pdfFunctionFactory
- }) {
- const imageData = image;
- let smaskData = null;
- let maskData = null;
- const smask = image.dict.get("SMask");
- const mask = image.dict.get("Mask");
-
- if (smask) {
- smaskData = smask;
- } else if (mask) {
- if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) {
- maskData = mask;
- } else {
- (0, _util.warn)("Unsupported mask format.");
- }
- }
-
- return Promise.resolve(new PDFImage({
- xref,
- res,
- image: imageData,
- isInline,
- smask: smaskData,
- mask: maskData,
- pdfFunctionFactory
- }));
- };
-
- PDFImage.createMask = function ({
- imgArray,
- width,
- height,
- imageIsFromDecodeStream,
- inverseDecode
- }) {
- var computedLength = (width + 7 >> 3) * height;
- var actualLength = imgArray.byteLength;
- var haveFullData = computedLength === actualLength;
- var data, i;
-
- if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
- data = imgArray;
- } else if (!inverseDecode) {
- data = new Uint8ClampedArray(actualLength);
- data.set(imgArray);
- } else {
- data = new Uint8ClampedArray(computedLength);
- data.set(imgArray);
-
- for (i = actualLength; i < computedLength; i++) {
- data[i] = 0xff;
- }
- }
-
- if (inverseDecode) {
- for (i = 0; i < actualLength; i++) {
- data[i] ^= 0xff;
- }
- }
-
- return {
- data,
- width,
- height
- };
- };
-
- PDFImage.prototype = {
- get drawWidth() {
- return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0);
- },
-
- get drawHeight() {
- return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0);
- },
-
- decodeBuffer(buffer) {
- var bpc = this.bpc;
- var numComps = this.numComps;
- var decodeAddends = this.decodeAddends;
- var decodeCoefficients = this.decodeCoefficients;
- var max = (1 << bpc) - 1;
- var i, ii;
-
- if (bpc === 1) {
- for (i = 0, ii = buffer.length; i < ii; i++) {
- buffer[i] = +!buffer[i];
- }
-
- return;
- }
-
- var index = 0;
-
- for (i = 0, ii = this.width * this.height; i < ii; i++) {
- for (var j = 0; j < numComps; j++) {
- buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);
- index++;
- }
- }
- },
-
- getComponents(buffer) {
- var bpc = this.bpc;
-
- if (bpc === 8) {
- return buffer;
- }
-
- var width = this.width;
- var height = this.height;
- var numComps = this.numComps;
- var length = width * height * numComps;
- var bufferPos = 0;
- let output;
-
- if (bpc <= 8) {
- output = new Uint8Array(length);
- } else if (bpc <= 16) {
- output = new Uint16Array(length);
- } else {
- output = new Uint32Array(length);
- }
-
- var rowComps = width * numComps;
- var max = (1 << bpc) - 1;
- var i = 0,
- ii,
- buf;
-
- if (bpc === 1) {
- var mask, loop1End, loop2End;
-
- for (var j = 0; j < height; j++) {
- loop1End = i + (rowComps & ~7);
- loop2End = i + rowComps;
-
- while (i < loop1End) {
- buf = buffer[bufferPos++];
- output[i] = buf >> 7 & 1;
- output[i + 1] = buf >> 6 & 1;
- output[i + 2] = buf >> 5 & 1;
- output[i + 3] = buf >> 4 & 1;
- output[i + 4] = buf >> 3 & 1;
- output[i + 5] = buf >> 2 & 1;
- output[i + 6] = buf >> 1 & 1;
- output[i + 7] = buf & 1;
- i += 8;
- }
-
- if (i < loop2End) {
- buf = buffer[bufferPos++];
- mask = 128;
-
- while (i < loop2End) {
- output[i++] = +!!(buf & mask);
- mask >>= 1;
- }
- }
- }
- } else {
- var bits = 0;
- buf = 0;
-
- for (i = 0, ii = length; i < ii; ++i) {
- if (i % rowComps === 0) {
- buf = 0;
- bits = 0;
- }
-
- while (bits < bpc) {
- buf = buf << 8 | buffer[bufferPos++];
- bits += 8;
- }
-
- var remainingBits = bits - bpc;
- let value = buf >> remainingBits;
-
- if (value < 0) {
- value = 0;
- } else if (value > max) {
- value = max;
- }
-
- output[i] = value;
- buf = buf & (1 << remainingBits) - 1;
- bits = remainingBits;
- }
- }
-
- return output;
- },
-
- fillOpacity(rgbaBuf, width, height, actualHeight, image) {
- var smask = this.smask;
- var mask = this.mask;
- var alphaBuf, sw, sh, i, ii, j;
-
- if (smask) {
- sw = smask.width;
- sh = smask.height;
- alphaBuf = new Uint8ClampedArray(sw * sh);
- smask.fillGrayBuffer(alphaBuf);
-
- if (sw !== width || sh !== height) {
- alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);
- }
- } else if (mask) {
- if (mask instanceof PDFImage) {
- sw = mask.width;
- sh = mask.height;
- alphaBuf = new Uint8ClampedArray(sw * sh);
- mask.numComps = 1;
- mask.fillGrayBuffer(alphaBuf);
-
- for (i = 0, ii = sw * sh; i < ii; ++i) {
- alphaBuf[i] = 255 - alphaBuf[i];
- }
-
- if (sw !== width || sh !== height) {
- alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);
- }
- } else if (Array.isArray(mask)) {
- alphaBuf = new Uint8ClampedArray(width * height);
- var numComps = this.numComps;
-
- for (i = 0, ii = width * height; i < ii; ++i) {
- var opacity = 0;
- var imageOffset = i * numComps;
-
- for (j = 0; j < numComps; ++j) {
- var color = image[imageOffset + j];
- var maskOffset = j * 2;
-
- if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
- opacity = 255;
- break;
- }
- }
-
- alphaBuf[i] = opacity;
- }
- } else {
- throw new _util.FormatError("Unknown mask format.");
- }
- }
-
- if (alphaBuf) {
- for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
- rgbaBuf[j] = alphaBuf[i];
- }
- } else {
- for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
- rgbaBuf[j] = 255;
- }
- }
- },
-
- undoPreblend(buffer, width, height) {
- var matte = this.smask && this.smask.matte;
-
- if (!matte) {
- return;
- }
-
- var matteRgb = this.colorSpace.getRgb(matte, 0);
- var matteR = matteRgb[0];
- var matteG = matteRgb[1];
- var matteB = matteRgb[2];
- var length = width * height * 4;
-
- for (var i = 0; i < length; i += 4) {
- var alpha = buffer[i + 3];
-
- if (alpha === 0) {
- buffer[i] = 255;
- buffer[i + 1] = 255;
- buffer[i + 2] = 255;
- continue;
- }
-
- var k = 255 / alpha;
- buffer[i] = (buffer[i] - matteR) * k + matteR;
- buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;
- buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
- }
- },
-
- createImageData(forceRGBA = false) {
- var drawWidth = this.drawWidth;
- var drawHeight = this.drawHeight;
- var imgData = {
- width: drawWidth,
- height: drawHeight,
- kind: 0,
- data: null
- };
- var numComps = this.numComps;
- var originalWidth = this.width;
- var originalHeight = this.height;
- var bpc = this.bpc;
- var rowBytes = originalWidth * numComps * bpc + 7 >> 3;
- var imgArray;
-
- if (!forceRGBA) {
- var kind;
-
- if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
- kind = _util.ImageKind.GRAYSCALE_1BPP;
- } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) {
- kind = _util.ImageKind.RGB_24BPP;
- }
-
- if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {
- imgData.kind = kind;
- imgArray = this.getImageBytes(originalHeight * rowBytes);
-
- if (this.image instanceof _stream.DecodeStream) {
- imgData.data = imgArray;
- } else {
- var newArray = new Uint8ClampedArray(imgArray.length);
- newArray.set(imgArray);
- imgData.data = newArray;
- }
-
- if (this.needsDecode) {
- (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale.");
- var buffer = imgData.data;
-
- for (var i = 0, ii = buffer.length; i < ii; i++) {
- buffer[i] ^= 0xff;
- }
- }
-
- return imgData;
- }
-
- if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {
- let imageLength = originalHeight * rowBytes;
-
- switch (this.colorSpace.name) {
- case "DeviceGray":
- imageLength *= 3;
-
- case "DeviceRGB":
- case "DeviceCMYK":
- imgData.kind = _util.ImageKind.RGB_24BPP;
- imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true);
- return imgData;
- }
- }
- }
-
- imgArray = this.getImageBytes(originalHeight * rowBytes);
- var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
- var comps = this.getComponents(imgArray);
- var alpha01, maybeUndoPreblend;
-
- if (!forceRGBA && !this.smask && !this.mask) {
- imgData.kind = _util.ImageKind.RGB_24BPP;
- imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
- alpha01 = 0;
- maybeUndoPreblend = false;
- } else {
- imgData.kind = _util.ImageKind.RGBA_32BPP;
- imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4);
- alpha01 = 1;
- maybeUndoPreblend = true;
- this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps);
- }
-
- if (this.needsDecode) {
- this.decodeBuffer(comps);
- }
-
- this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);
-
- if (maybeUndoPreblend) {
- this.undoPreblend(imgData.data, drawWidth, actualHeight);
- }
-
- return imgData;
- },
-
- fillGrayBuffer(buffer) {
- var numComps = this.numComps;
-
- if (numComps !== 1) {
- throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);
- }
-
- var width = this.width;
- var height = this.height;
- var bpc = this.bpc;
- var rowBytes = width * numComps * bpc + 7 >> 3;
- var imgArray = this.getImageBytes(height * rowBytes);
- var comps = this.getComponents(imgArray);
- var i, length;
-
- if (bpc === 1) {
- length = width * height;
-
- if (this.needsDecode) {
- for (i = 0; i < length; ++i) {
- buffer[i] = comps[i] - 1 & 255;
- }
- } else {
- for (i = 0; i < length; ++i) {
- buffer[i] = -comps[i] & 255;
- }
- }
-
- return;
- }
-
- if (this.needsDecode) {
- this.decodeBuffer(comps);
- }
-
- length = width * height;
- var scale = 255 / ((1 << bpc) - 1);
-
- for (i = 0; i < length; ++i) {
- buffer[i] = scale * comps[i];
- }
- },
-
- getImageBytes(length, drawWidth, drawHeight, forceRGB = false) {
- this.image.reset();
- this.image.drawWidth = drawWidth || this.width;
- this.image.drawHeight = drawHeight || this.height;
- this.image.forceRGB = !!forceRGB;
- return this.image.getBytes(length, true);
- }
-
- };
- return PDFImage;
-}();
-
-exports.PDFImage = PDFImage;
-
-/***/ }),
-/* 45 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.MessageHandler = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-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 (typeof reason !== "object" || reason === null) {
- return reason;
- }
-
- switch (reason.name) {
- case "AbortException":
- return new _util.AbortException(reason.message);
-
- case "MissingPDFException":
- return new _util.MissingPDFException(reason.message);
-
- case "UnexpectedResponseException":
- return new _util.UnexpectedResponseException(reason.message, reason.status);
-
- case "UnknownErrorException":
- return new _util.UnknownErrorException(reason.message, reason.details);
-
- default:
- return new _util.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.postMessageTransfers = true;
- 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._postMessage({
- sourceName: this.sourceName,
- targetName: this.targetName,
- action: actionName,
- data
- }, transfers);
- }
-
- sendWithPromise(actionName, data, transfers) {
- const callbackId = this.callbackId++;
- const capability = (0, _util.createPromiseCapability)();
- this.callbackCapabilities[callbackId] = capability;
-
- try {
- this._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++;
- const sourceName = this.sourceName;
- const targetName = this.targetName;
- const comObj = this.comObj;
- return new ReadableStream({
- start: controller => {
- const startCapability = (0, _util.createPromiseCapability)();
- this.streamControllers[streamId] = {
- controller,
- startCall: startCapability,
- pullCall: null,
- cancelCall: null,
- isClosed: false
- };
-
- this._postMessage({
- sourceName,
- targetName,
- action: actionName,
- streamId,
- data,
- desiredSize: controller.desiredSize
- }, transfers);
-
- return startCapability.promise;
- },
- pull: controller => {
- const pullCapability = (0, _util.createPromiseCapability)();
- this.streamControllers[streamId].pullCall = pullCapability;
- comObj.postMessage({
- sourceName,
- targetName,
- stream: StreamKind.PULL,
- streamId,
- desiredSize: controller.desiredSize
- });
- return pullCapability.promise;
- },
- cancel: reason => {
- (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
- const cancelCapability = (0, _util.createPromiseCapability)();
- 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 self = this;
- const action = this.actionHandler[data.action];
- const streamId = data.streamId;
- const sourceName = this.sourceName;
- const targetName = data.sourceName;
- const comObj = this.comObj;
- 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 = (0, _util.createPromiseCapability)();
- this.ready = this.sinkCapability.promise;
- }
-
- self._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.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: (0, _util.createPromiseCapability)(),
- 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;
- const sourceName = this.sourceName;
- const targetName = data.sourceName;
- const comObj = this.comObj;
-
- switch (data.stream) {
- case StreamKind.START_COMPLETE:
- if (data.success) {
- this.streamControllers[streamId].startCall.resolve();
- } else {
- this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));
- }
-
- break;
-
- case StreamKind.PULL_COMPLETE:
- if (data.success) {
- this.streamControllers[streamId].pullCall.resolve();
- } else {
- this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));
- }
-
- break;
-
- case StreamKind.PULL:
- if (!this.streamSinks[streamId]) {
- comObj.postMessage({
- sourceName,
- targetName,
- stream: StreamKind.PULL_COMPLETE,
- streamId,
- success: true
- });
- break;
- }
-
- if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {
- this.streamSinks[streamId].sinkCapability.resolve();
- }
-
- this.streamSinks[streamId].desiredSize = data.desiredSize;
- const {
- onPull
- } = this.streamSinks[data.streamId];
- new Promise(function (resolve) {
- resolve(onPull && 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.assert)(this.streamControllers[streamId], "enqueue should have stream controller");
-
- if (this.streamControllers[streamId].isClosed) {
- break;
- }
-
- this.streamControllers[streamId].controller.enqueue(data.chunk);
- break;
-
- case StreamKind.CLOSE:
- (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller");
-
- if (this.streamControllers[streamId].isClosed) {
- break;
- }
-
- this.streamControllers[streamId].isClosed = true;
- this.streamControllers[streamId].controller.close();
-
- this._deleteStreamController(streamId);
-
- break;
-
- case StreamKind.ERROR:
- (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller");
- this.streamControllers[streamId].controller.error(wrapReason(data.reason));
-
- this._deleteStreamController(streamId);
-
- break;
-
- case StreamKind.CANCEL_COMPLETE:
- if (data.success) {
- this.streamControllers[streamId].cancelCall.resolve();
- } else {
- this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));
- }
-
- this._deleteStreamController(streamId);
-
- break;
-
- case StreamKind.CANCEL:
- if (!this.streamSinks[streamId]) {
- break;
- }
-
- const {
- onCancel
- } = this.streamSinks[data.streamId];
- new Promise(function (resolve) {
- resolve(onCancel && 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)
- });
- });
- this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));
- this.streamSinks[streamId].isCancelled = true;
- delete this.streamSinks[streamId];
- break;
-
- default:
- throw new Error("Unexpected stream case");
- }
- }
-
- async _deleteStreamController(streamId) {
- await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {
- return capability && capability.promise;
- }));
- delete this.streamControllers[streamId];
- }
-
- _postMessage(message, transfers) {
- if (transfers && this.postMessageTransfers) {
- this.comObj.postMessage(message, transfers);
- } else {
- this.comObj.postMessage(message);
- }
- }
-
- destroy() {
- this.comObj.removeEventListener("message", this._onComObjOnMessage);
- }
-
-}
-
-exports.MessageHandler = MessageHandler;
-
-/***/ }),
-/* 46 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFWorkerStream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-class PDFWorkerStream {
- constructor(msgHandler) {
- this._msgHandler = msgHandler;
- this._contentLength = null;
- this._fullRequestReader = null;
- this._rangeRequestReaders = [];
- }
-
- getFullReader() {
- (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once.");
- this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);
- return this._fullRequestReader;
- }
-
- getRangeReader(begin, end) {
- const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);
-
- this._rangeRequestReaders.push(reader);
-
- return reader;
- }
-
- cancelAllRequests(reason) {
- if (this._fullRequestReader) {
- this._fullRequestReader.cancel(reason);
- }
-
- const readers = this._rangeRequestReaders.slice(0);
-
- readers.forEach(function (reader) {
- reader.cancel(reason);
- });
- }
-
-}
-
-exports.PDFWorkerStream = PDFWorkerStream;
-
-class PDFWorkerStreamReader {
- constructor(msgHandler) {
- this._msgHandler = msgHandler;
- this.onProgress = null;
- this._contentLength = null;
- this._isRangeSupported = false;
- this._isStreamingSupported = false;
-
- const readableStream = this._msgHandler.sendWithStream("GetReader");
-
- this._reader = readableStream.getReader();
- this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => {
- this._isStreamingSupported = data.isStreamingSupported;
- this._isRangeSupported = data.isRangeSupported;
- this._contentLength = data.contentLength;
- });
- }
-
- get headersReady() {
- return this._headersReady;
- }
-
- get contentLength() {
- return this._contentLength;
- }
-
- get isStreamingSupported() {
- return this._isStreamingSupported;
- }
-
- get isRangeSupported() {
- return this._isRangeSupported;
- }
-
- async read() {
- const {
- value,
- done
- } = await this._reader.read();
-
- if (done) {
- return {
- value: undefined,
- done: true
- };
- }
-
- return {
- value: value.buffer,
- done: false
- };
- }
-
- cancel(reason) {
- this._reader.cancel(reason);
- }
-
-}
-
-class PDFWorkerStreamRangeReader {
- constructor(begin, end, msgHandler) {
- this._msgHandler = msgHandler;
- this.onProgress = null;
-
- const readableStream = this._msgHandler.sendWithStream("GetRangeReader", {
- begin,
- end
- });
-
- this._reader = readableStream.getReader();
- }
-
- get isStreamingSupported() {
- return false;
- }
-
- async read() {
- const {
- value,
- done
- } = await this._reader.read();
-
- if (done) {
- return {
- value: undefined,
- done: true
- };
- }
-
- return {
- value: value.buffer,
- done: false
- };
- }
-
- cancel(reason) {
- this._reader.cancel(reason);
- }
-
-}
-
-/***/ })
-/******/ ]);
-});
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2020 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
+ */
+
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define("pdfjs-dist/build/pdf.worker", [], factory);
+ else if(typeof exports === 'object')
+ exports["pdfjs-dist/build/pdf.worker"] = factory();
+ else
+ root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __w_pdfjs_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __w_pdfjs_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __w_pdfjs_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __w_pdfjs_require__.d = function(exports, name, getter) {
+/******/ if(!__w_pdfjs_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __w_pdfjs_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __w_pdfjs_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __w_pdfjs_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __w_pdfjs_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __w_pdfjs_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __w_pdfjs_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __w_pdfjs_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "WorkerMessageHandler", {
+ enumerable: true,
+ get: function () {
+ return _worker.WorkerMessageHandler;
+ }
+});
+
+var _worker = __w_pdfjs_require__(1);
+
+const pdfjsVersion = '2.5.207';
+const pdfjsBuild = '0974d6052';
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.WorkerMessageHandler = exports.WorkerTask = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _pdf_manager = __w_pdfjs_require__(6);
+
+var _is_node = __w_pdfjs_require__(4);
+
+var _message_handler = __w_pdfjs_require__(45);
+
+var _worker_stream = __w_pdfjs_require__(46);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var WorkerTask = function WorkerTaskClosure() {
+ function WorkerTask(name) {
+ this.name = name;
+ this.terminated = false;
+ this._capability = (0, _util.createPromiseCapability)();
+ }
+
+ WorkerTask.prototype = {
+ get finished() {
+ return this._capability.promise;
+ },
+
+ finish() {
+ this._capability.resolve();
+ },
+
+ terminate() {
+ this.terminated = true;
+ },
+
+ ensureNotTerminated() {
+ if (this.terminated) {
+ throw new Error("Worker task was terminated");
+ }
+ }
+
+ };
+ return WorkerTask;
+}();
+
+exports.WorkerTask = WorkerTask;
+var WorkerMessageHandler = {
+ setup(handler, port) {
+ var testMessageProcessed = false;
+ handler.on("test", function wphSetupTest(data) {
+ if (testMessageProcessed) {
+ return;
+ }
+
+ testMessageProcessed = true;
+
+ if (!(data instanceof Uint8Array)) {
+ handler.send("test", null);
+ return;
+ }
+
+ const supportTransfers = data[0] === 255;
+ handler.postMessageTransfers = supportTransfers;
+ handler.send("test", {
+ supportTransfers
+ });
+ });
+ handler.on("configure", function wphConfigure(data) {
+ (0, _util.setVerbosityLevel)(data.verbosity);
+ });
+ handler.on("GetDocRequest", function wphSetupDoc(data) {
+ return WorkerMessageHandler.createDocumentHandler(data, port);
+ });
+ },
+
+ createDocumentHandler(docParams, port) {
+ var pdfManager;
+ var terminated = false;
+ var cancelXHRs = null;
+ var WorkerTasks = [];
+ const verbosity = (0, _util.getVerbosityLevel)();
+ const apiVersion = docParams.apiVersion;
+ const workerVersion = '2.5.207';
+
+ if (apiVersion !== workerVersion) {
+ throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
+ }
+
+ const enumerableProperties = [];
+
+ for (const property in []) {
+ enumerableProperties.push(property);
+ }
+
+ if (enumerableProperties.length) {
+ throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
+ }
+
+ if (typeof ReadableStream === "undefined" || typeof Promise.allSettled === "undefined") {
+ throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. " + "`ReadableStream` and/or `Promise.allSettled`); " + "please use an ES5-compatible build instead.");
+ }
+
+ var docId = docParams.docId;
+ var docBaseUrl = docParams.docBaseUrl;
+ var workerHandlerName = docParams.docId + "_worker";
+ var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);
+ handler.postMessageTransfers = docParams.postMessageTransfers;
+
+ function ensureNotTerminated() {
+ if (terminated) {
+ throw new Error("Worker was terminated");
+ }
+ }
+
+ function startWorkerTask(task) {
+ WorkerTasks.push(task);
+ }
+
+ function finishWorkerTask(task) {
+ task.finish();
+ var i = WorkerTasks.indexOf(task);
+ WorkerTasks.splice(i, 1);
+ }
+
+ async function loadDocument(recoveryMode) {
+ await pdfManager.ensureDoc("checkHeader");
+ await pdfManager.ensureDoc("parseStartXRef");
+ await pdfManager.ensureDoc("parse", [recoveryMode]);
+
+ if (!recoveryMode) {
+ await pdfManager.ensureDoc("checkFirstPage");
+ }
+
+ const [numPages, fingerprint] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprint")]);
+ return {
+ numPages,
+ fingerprint
+ };
+ }
+
+ function getPdfManager(data, evaluatorOptions) {
+ var pdfManagerCapability = (0, _util.createPromiseCapability)();
+ let newPdfManager;
+ var source = data.source;
+
+ if (source.data) {
+ try {
+ newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);
+ pdfManagerCapability.resolve(newPdfManager);
+ } catch (ex) {
+ pdfManagerCapability.reject(ex);
+ }
+
+ return pdfManagerCapability.promise;
+ }
+
+ var pdfStream,
+ cachedChunks = [];
+
+ try {
+ pdfStream = new _worker_stream.PDFWorkerStream(handler);
+ } catch (ex) {
+ pdfManagerCapability.reject(ex);
+ return pdfManagerCapability.promise;
+ }
+
+ var fullRequest = pdfStream.getFullReader();
+ fullRequest.headersReady.then(function () {
+ if (!fullRequest.isRangeSupported) {
+ return;
+ }
+
+ var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;
+ newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {
+ msgHandler: handler,
+ password: source.password,
+ length: fullRequest.contentLength,
+ disableAutoFetch,
+ rangeChunkSize: source.rangeChunkSize
+ }, evaluatorOptions, docBaseUrl);
+
+ for (let i = 0; i < cachedChunks.length; i++) {
+ newPdfManager.sendProgressiveData(cachedChunks[i]);
+ }
+
+ cachedChunks = [];
+ pdfManagerCapability.resolve(newPdfManager);
+ cancelXHRs = null;
+ }).catch(function (reason) {
+ pdfManagerCapability.reject(reason);
+ cancelXHRs = null;
+ });
+ var loaded = 0;
+
+ var flushChunks = function () {
+ var pdfFile = (0, _util.arraysToBytes)(cachedChunks);
+
+ if (source.length && pdfFile.length !== source.length) {
+ (0, _util.warn)("reported HTTP length is different from actual");
+ }
+
+ try {
+ newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);
+ pdfManagerCapability.resolve(newPdfManager);
+ } catch (ex) {
+ pdfManagerCapability.reject(ex);
+ }
+
+ cachedChunks = [];
+ };
+
+ var readPromise = new Promise(function (resolve, reject) {
+ var readChunk = function ({
+ value,
+ done
+ }) {
+ try {
+ ensureNotTerminated();
+
+ if (done) {
+ if (!newPdfManager) {
+ flushChunks();
+ }
+
+ cancelXHRs = null;
+ return;
+ }
+
+ loaded += (0, _util.arrayByteLength)(value);
+
+ if (!fullRequest.isStreamingSupported) {
+ handler.send("DocProgress", {
+ loaded,
+ total: Math.max(loaded, fullRequest.contentLength || 0)
+ });
+ }
+
+ if (newPdfManager) {
+ newPdfManager.sendProgressiveData(value);
+ } else {
+ cachedChunks.push(value);
+ }
+
+ fullRequest.read().then(readChunk, reject);
+ } catch (e) {
+ reject(e);
+ }
+ };
+
+ fullRequest.read().then(readChunk, reject);
+ });
+ readPromise.catch(function (e) {
+ pdfManagerCapability.reject(e);
+ cancelXHRs = null;
+ });
+
+ cancelXHRs = function (reason) {
+ pdfStream.cancelAllRequests(reason);
+ };
+
+ return pdfManagerCapability.promise;
+ }
+
+ function setupDoc(data) {
+ function onSuccess(doc) {
+ ensureNotTerminated();
+ handler.send("GetDoc", {
+ pdfInfo: doc
+ });
+ }
+
+ function onFailure(ex) {
+ ensureNotTerminated();
+
+ if (ex instanceof _util.PasswordException) {
+ var task = new WorkerTask(`PasswordException: response ${ex.code}`);
+ startWorkerTask(task);
+ handler.sendWithPromise("PasswordRequest", ex).then(function ({
+ password
+ }) {
+ finishWorkerTask(task);
+ pdfManager.updatePassword(password);
+ pdfManagerReady();
+ }).catch(function () {
+ finishWorkerTask(task);
+ handler.send("DocException", ex);
+ });
+ } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) {
+ handler.send("DocException", ex);
+ } else {
+ handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString()));
+ }
+ }
+
+ function pdfManagerReady() {
+ ensureNotTerminated();
+ loadDocument(false).then(onSuccess, function loadFailure(ex) {
+ ensureNotTerminated();
+
+ if (!(ex instanceof _core_utils.XRefParseException)) {
+ onFailure(ex);
+ return;
+ }
+
+ pdfManager.requestLoadedStream();
+ pdfManager.onLoadedStream().then(function () {
+ ensureNotTerminated();
+ loadDocument(true).then(onSuccess, onFailure);
+ });
+ }, onFailure);
+ }
+
+ ensureNotTerminated();
+ var evaluatorOptions = {
+ maxImageSize: data.maxImageSize,
+ disableFontFace: data.disableFontFace,
+ ignoreErrors: data.ignoreErrors,
+ isEvalSupported: data.isEvalSupported,
+ fontExtraProperties: data.fontExtraProperties
+ };
+ getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {
+ if (terminated) {
+ newPdfManager.terminate(new _util.AbortException("Worker was terminated."));
+ throw new Error("Worker was terminated");
+ }
+
+ pdfManager = newPdfManager;
+ pdfManager.onLoadedStream().then(function (stream) {
+ handler.send("DataLoaded", {
+ length: stream.bytes.byteLength
+ });
+ });
+ }).then(pdfManagerReady, onFailure);
+ }
+
+ handler.on("GetPage", function wphSetupGetPage(data) {
+ return pdfManager.getPage(data.pageIndex).then(function (page) {
+ return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) {
+ return {
+ rotate,
+ ref,
+ userUnit,
+ view
+ };
+ });
+ });
+ });
+ handler.on("GetPageIndex", function wphSetupGetPageIndex(data) {
+ var ref = _primitives.Ref.get(data.ref.num, data.ref.gen);
+
+ var catalog = pdfManager.pdfDocument.catalog;
+ return catalog.getPageIndex(ref);
+ });
+ handler.on("GetDestinations", function wphSetupGetDestinations(data) {
+ return pdfManager.ensureCatalog("destinations");
+ });
+ handler.on("GetDestination", function wphSetupGetDestination(data) {
+ return pdfManager.ensureCatalog("getDestination", [data.id]);
+ });
+ handler.on("GetPageLabels", function wphSetupGetPageLabels(data) {
+ return pdfManager.ensureCatalog("pageLabels");
+ });
+ handler.on("GetPageLayout", function wphSetupGetPageLayout(data) {
+ return pdfManager.ensureCatalog("pageLayout");
+ });
+ handler.on("GetPageMode", function wphSetupGetPageMode(data) {
+ return pdfManager.ensureCatalog("pageMode");
+ });
+ handler.on("GetViewerPreferences", function (data) {
+ return pdfManager.ensureCatalog("viewerPreferences");
+ });
+ handler.on("GetOpenAction", function (data) {
+ return pdfManager.ensureCatalog("openAction");
+ });
+ handler.on("GetAttachments", function wphSetupGetAttachments(data) {
+ return pdfManager.ensureCatalog("attachments");
+ });
+ handler.on("GetJavaScript", function wphSetupGetJavaScript(data) {
+ return pdfManager.ensureCatalog("javaScript");
+ });
+ handler.on("GetOutline", function wphSetupGetOutline(data) {
+ return pdfManager.ensureCatalog("documentOutline");
+ });
+ handler.on("GetPermissions", function (data) {
+ return pdfManager.ensureCatalog("permissions");
+ });
+ handler.on("GetMetadata", function wphSetupGetMetadata(data) {
+ return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]);
+ });
+ handler.on("GetData", function wphSetupGetData(data) {
+ pdfManager.requestLoadedStream();
+ return pdfManager.onLoadedStream().then(function (stream) {
+ return stream.bytes;
+ });
+ });
+ handler.on("GetStats", function wphSetupGetStats(data) {
+ return pdfManager.pdfDocument.xref.stats;
+ });
+ handler.on("GetAnnotations", function ({
+ pageIndex,
+ intent
+ }) {
+ return pdfManager.getPage(pageIndex).then(function (page) {
+ return page.getAnnotationsData(intent);
+ });
+ });
+ handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) {
+ var pageIndex = data.pageIndex;
+ pdfManager.getPage(pageIndex).then(function (page) {
+ var task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);
+ startWorkerTask(task);
+ const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
+ page.getOperatorList({
+ handler,
+ sink,
+ task,
+ intent: data.intent,
+ renderInteractiveForms: data.renderInteractiveForms
+ }).then(function (operatorListInfo) {
+ finishWorkerTask(task);
+
+ if (start) {
+ (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`);
+ }
+
+ sink.close();
+ }, function (reason) {
+ finishWorkerTask(task);
+
+ if (task.terminated) {
+ return;
+ }
+
+ handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList
+ });
+ sink.error(reason);
+ });
+ });
+ }, this);
+ handler.on("GetTextContent", function wphExtractText(data, sink) {
+ var pageIndex = data.pageIndex;
+
+ sink.onPull = function (desiredSize) {};
+
+ sink.onCancel = function (reason) {};
+
+ pdfManager.getPage(pageIndex).then(function (page) {
+ var task = new WorkerTask("GetTextContent: page " + pageIndex);
+ startWorkerTask(task);
+ const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
+ page.extractTextContent({
+ handler,
+ task,
+ sink,
+ normalizeWhitespace: data.normalizeWhitespace,
+ combineTextItems: data.combineTextItems
+ }).then(function () {
+ finishWorkerTask(task);
+
+ if (start) {
+ (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`);
+ }
+
+ sink.close();
+ }, function (reason) {
+ finishWorkerTask(task);
+
+ if (task.terminated) {
+ return;
+ }
+
+ sink.error(reason);
+ });
+ });
+ });
+ handler.on("FontFallback", function (data) {
+ return pdfManager.fontFallback(data.id, handler);
+ });
+ handler.on("Cleanup", function wphCleanup(data) {
+ return pdfManager.cleanup(true);
+ });
+ handler.on("Terminate", function wphTerminate(data) {
+ terminated = true;
+ const waitOn = [];
+
+ if (pdfManager) {
+ pdfManager.terminate(new _util.AbortException("Worker was terminated."));
+ const cleanupPromise = pdfManager.cleanup();
+ waitOn.push(cleanupPromise);
+ pdfManager = null;
+ } else {
+ (0, _primitives.clearPrimitiveCaches)();
+ }
+
+ if (cancelXHRs) {
+ cancelXHRs(new _util.AbortException("Worker was terminated."));
+ }
+
+ WorkerTasks.forEach(function (task) {
+ waitOn.push(task.finished);
+ task.terminate();
+ });
+ return Promise.all(waitOn).then(function () {
+ handler.destroy();
+ handler = null;
+ });
+ });
+ handler.on("Ready", function wphReady(data) {
+ setupDoc(docParams);
+ docParams = null;
+ });
+ return workerHandlerName;
+ },
+
+ initializeFromPort(port) {
+ var handler = new _message_handler.MessageHandler("worker", "main", port);
+ WorkerMessageHandler.setup(handler, port);
+ handler.send("ready", null);
+ }
+
+};
+exports.WorkerMessageHandler = WorkerMessageHandler;
+
+function isMessagePort(maybePort) {
+ return typeof maybePort.postMessage === "function" && "onmessage" in maybePort;
+}
+
+if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) {
+ WorkerMessageHandler.initializeFromPort(self);
+}
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.arrayByteLength = arrayByteLength;
+exports.arraysToBytes = arraysToBytes;
+exports.assert = assert;
+exports.bytesToString = bytesToString;
+exports.createPromiseCapability = createPromiseCapability;
+exports.getVerbosityLevel = getVerbosityLevel;
+exports.info = info;
+exports.isArrayBuffer = isArrayBuffer;
+exports.isArrayEqual = isArrayEqual;
+exports.isBool = isBool;
+exports.isEmptyObj = isEmptyObj;
+exports.isNum = isNum;
+exports.isString = isString;
+exports.isSameOrigin = isSameOrigin;
+exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
+exports.removeNullCharacters = removeNullCharacters;
+exports.setVerbosityLevel = setVerbosityLevel;
+exports.shadow = shadow;
+exports.string32 = string32;
+exports.stringToBytes = stringToBytes;
+exports.stringToPDFString = stringToPDFString;
+exports.stringToUTF8String = stringToUTF8String;
+exports.utf8StringToString = utf8StringToString;
+exports.warn = warn;
+exports.unreachable = unreachable;
+exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
+
+__w_pdfjs_require__(3);
+
+const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
+const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
+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
+};
+exports.PermissionFlag = PermissionFlag;
+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
+};
+exports.TextRenderingMode = TextRenderingMode;
+const ImageKind = {
+ GRAYSCALE_1BPP: 1,
+ RGB_24BPP: 2,
+ RGBA_32BPP: 3
+};
+exports.ImageKind = ImageKind;
+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
+};
+exports.AnnotationType = AnnotationType;
+const AnnotationStateModelType = {
+ MARKED: "Marked",
+ REVIEW: "Review"
+};
+exports.AnnotationStateModelType = AnnotationStateModelType;
+const AnnotationMarkedState = {
+ MARKED: "Marked",
+ UNMARKED: "Unmarked"
+};
+exports.AnnotationMarkedState = AnnotationMarkedState;
+const AnnotationReviewState = {
+ ACCEPTED: "Accepted",
+ REJECTED: "Rejected",
+ CANCELLED: "Cancelled",
+ COMPLETED: "Completed",
+ NONE: "None"
+};
+exports.AnnotationReviewState = AnnotationReviewState;
+const AnnotationReplyType = {
+ GROUP: "Group",
+ REPLY: "R"
+};
+exports.AnnotationReplyType = AnnotationReplyType;
+const AnnotationFlag = {
+ INVISIBLE: 0x01,
+ HIDDEN: 0x02,
+ PRINT: 0x04,
+ NOZOOM: 0x08,
+ NOROTATE: 0x10,
+ NOVIEW: 0x20,
+ READONLY: 0x40,
+ LOCKED: 0x80,
+ TOGGLENOVIEW: 0x100,
+ LOCKEDCONTENTS: 0x200
+};
+exports.AnnotationFlag = AnnotationFlag;
+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
+};
+exports.AnnotationFieldFlag = AnnotationFieldFlag;
+const AnnotationBorderStyleType = {
+ SOLID: 1,
+ DASHED: 2,
+ BEVELED: 3,
+ INSET: 4,
+ UNDERLINE: 5
+};
+exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
+const StreamType = {
+ UNKNOWN: "UNKNOWN",
+ FLATE: "FLATE",
+ LZW: "LZW",
+ DCT: "DCT",
+ JPX: "JPX",
+ JBIG: "JBIG",
+ A85: "A85",
+ AHX: "AHX",
+ CCF: "CCF",
+ RLX: "RLX"
+};
+exports.StreamType = StreamType;
+const FontType = {
+ UNKNOWN: "UNKNOWN",
+ TYPE1: "TYPE1",
+ TYPE1C: "TYPE1C",
+ CIDFONTTYPE0: "CIDFONTTYPE0",
+ CIDFONTTYPE0C: "CIDFONTTYPE0C",
+ TRUETYPE: "TRUETYPE",
+ CIDFONTTYPE2: "CIDFONTTYPE2",
+ TYPE3: "TYPE3",
+ OPENTYPE: "OPENTYPE",
+ TYPE0: "TYPE0",
+ MMTYPE1: "MMTYPE1"
+};
+exports.FontType = FontType;
+const VerbosityLevel = {
+ ERRORS: 0,
+ WARNINGS: 1,
+ INFOS: 5
+};
+exports.VerbosityLevel = VerbosityLevel;
+const CMapCompressionType = {
+ NONE: 0,
+ BINARY: 1,
+ STREAM: 2
+};
+exports.CMapCompressionType = CMapCompressionType;
+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,
+ beginAnnotations: 78,
+ endAnnotations: 79,
+ beginAnnotation: 80,
+ endAnnotation: 81,
+ paintJpegXObject: 82,
+ paintImageMaskXObject: 83,
+ paintImageMaskXObjectGroup: 84,
+ paintImageXObject: 85,
+ paintInlineImageXObject: 86,
+ paintInlineImageXObjectGroup: 87,
+ paintImageXObjectRepeat: 88,
+ paintImageMaskXObjectRepeat: 89,
+ paintSolidColorImageMask: 90,
+ constructPath: 91
+};
+exports.OPS = OPS;
+const UNSUPPORTED_FEATURES = {
+ unknown: "unknown",
+ forms: "forms",
+ javaScript: "javaScript",
+ smask: "smask",
+ shadingPattern: "shadingPattern",
+ font: "font",
+ errorTilingPattern: "errorTilingPattern",
+ errorExtGState: "errorExtGState",
+ errorXObject: "errorXObject",
+ errorFontLoadType3: "errorFontLoadType3",
+ errorFontState: "errorFontState",
+ errorFontMissing: "errorFontMissing",
+ errorFontTranslate: "errorFontTranslate",
+ errorColorSpace: "errorColorSpace",
+ errorOperatorList: "errorOperatorList",
+ errorFontToUnicode: "errorFontToUnicode",
+ errorFontLoadNative: "errorFontLoadNative",
+ errorFontGetPath: "errorFontGetPath"
+};
+exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
+const PasswordResponses = {
+ NEED_PASSWORD: 1,
+ INCORRECT_PASSWORD: 2
+};
+exports.PasswordResponses = PasswordResponses;
+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 isSameOrigin(baseUrl, otherUrl) {
+ let base;
+
+ try {
+ base = new URL(baseUrl);
+
+ if (!base.origin || base.origin === "null") {
+ return false;
+ }
+ } catch (e) {
+ return false;
+ }
+
+ const other = new URL(otherUrl, base);
+ return base.origin === other.origin;
+}
+
+function _isValidProtocol(url) {
+ if (!url) {
+ return false;
+ }
+
+ switch (url.protocol) {
+ case "http:":
+ case "https:":
+ case "ftp:":
+ case "mailto:":
+ case "tel:":
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+function createValidAbsoluteUrl(url, baseUrl) {
+ if (!url) {
+ return null;
+ }
+
+ try {
+ const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
+
+ if (_isValidProtocol(absoluteUrl)) {
+ return absoluteUrl;
+ }
+ } catch (ex) {}
+
+ return null;
+}
+
+function shadow(obj, prop, value) {
+ Object.defineProperty(obj, prop, {
+ value,
+ enumerable: true,
+ configurable: true,
+ writable: false
+ });
+ return value;
+}
+
+const BaseException = function BaseExceptionClosure() {
+ function BaseException(message) {
+ if (this.constructor === BaseException) {
+ unreachable("Cannot initialize BaseException.");
+ }
+
+ this.message = message;
+ this.name = this.constructor.name;
+ }
+
+ BaseException.prototype = new Error();
+ BaseException.constructor = BaseException;
+ return BaseException;
+}();
+
+exports.BaseException = BaseException;
+
+class PasswordException extends BaseException {
+ constructor(msg, code) {
+ super(msg);
+ this.code = code;
+ }
+
+}
+
+exports.PasswordException = PasswordException;
+
+class UnknownErrorException extends BaseException {
+ constructor(msg, details) {
+ super(msg);
+ this.details = details;
+ }
+
+}
+
+exports.UnknownErrorException = UnknownErrorException;
+
+class InvalidPDFException extends BaseException {}
+
+exports.InvalidPDFException = InvalidPDFException;
+
+class MissingPDFException extends BaseException {}
+
+exports.MissingPDFException = MissingPDFException;
+
+class UnexpectedResponseException extends BaseException {
+ constructor(msg, status) {
+ super(msg);
+ this.status = status;
+ }
+
+}
+
+exports.UnexpectedResponseException = UnexpectedResponseException;
+
+class FormatError extends BaseException {}
+
+exports.FormatError = FormatError;
+
+class AbortException extends BaseException {}
+
+exports.AbortException = AbortException;
+const NullCharactersRegExp = /\x00/g;
+
+function removeNullCharacters(str) {
+ if (typeof str !== "string") {
+ warn("The argument for removeNullCharacters must be a string.");
+ return str;
+ }
+
+ return str.replace(NullCharactersRegExp, "");
+}
+
+function bytesToString(bytes) {
+ assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "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) {
+ assert(typeof str === "string", "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 arrayByteLength(arr) {
+ if (arr.length !== undefined) {
+ return arr.length;
+ }
+
+ assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
+ return arr.byteLength;
+}
+
+function arraysToBytes(arr) {
+ const length = arr.length;
+
+ if (length === 1 && arr[0] instanceof Uint8Array) {
+ return arr[0];
+ }
+
+ let resultLength = 0;
+
+ for (let i = 0; i < length; i++) {
+ resultLength += arrayByteLength(arr[i]);
+ }
+
+ let pos = 0;
+ const data = new Uint8Array(resultLength);
+
+ for (let i = 0; i < length; i++) {
+ let item = arr[i];
+
+ if (!(item instanceof Uint8Array)) {
+ if (typeof item === "string") {
+ item = stringToBytes(item);
+ } else {
+ item = new Uint8Array(item);
+ }
+ }
+
+ const itemLength = item.byteLength;
+ data.set(item, pos);
+ pos += itemLength;
+ }
+
+ return data;
+}
+
+function string32(value) {
+ return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
+}
+
+function isLittleEndian() {
+ const buffer8 = new Uint8Array(4);
+ buffer8[0] = 1;
+ const view32 = new Uint32Array(buffer8.buffer, 0, 1);
+ return view32[0] === 1;
+}
+
+const IsLittleEndianCached = {
+ get value() {
+ return shadow(this, "value", isLittleEndian());
+ }
+
+};
+exports.IsLittleEndianCached = IsLittleEndianCached;
+
+function isEvalSupported() {
+ try {
+ new Function("");
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+const IsEvalSupportedCached = {
+ get value() {
+ return shadow(this, "value", isEvalSupported());
+ }
+
+};
+exports.IsEvalSupportedCached = IsEvalSupportedCached;
+const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];
+
+class Util {
+ static makeCssRgb(r, g, b) {
+ rgbBuf[1] = r;
+ rgbBuf[3] = g;
+ rgbBuf[5] = b;
+ return rgbBuf.join("");
+ }
+
+ 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 = Util.applyTransform(r, m);
+ const p2 = Util.applyTransform(r.slice(2, 4), m);
+ const p3 = Util.applyTransform([r[0], r[3]], m);
+ const p4 = Util.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 apply3dTransform(m, v) {
+ return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
+ }
+
+ 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) * (a + d) - 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) {
+ function compare(a, b) {
+ return a - b;
+ }
+
+ const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
+ const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
+ const result = [];
+ rect1 = Util.normalizeRect(rect1);
+ rect2 = Util.normalizeRect(rect2);
+
+ if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
+ result[0] = orderedX[1];
+ result[2] = orderedX[2];
+ } else {
+ return null;
+ }
+
+ if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
+ result[1] = orderedY[1];
+ result[3] = orderedY[2];
+ } else {
+ return null;
+ }
+
+ return result;
+ }
+
+}
+
+exports.Util = Util;
+const PDFStringTranslateTable = [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) {
+ const length = str.length,
+ strBuf = [];
+
+ if (str[0] === "\xFE" && str[1] === "\xFF") {
+ for (let i = 2; i < length; i += 2) {
+ strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));
+ }
+ } else if (str[0] === "\xFF" && str[1] === "\xFE") {
+ for (let i = 2; i < length; i += 2) {
+ strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i)));
+ }
+ } else {
+ for (let i = 0; i < length; ++i) {
+ const code = PDFStringTranslateTable[str.charCodeAt(i)];
+ 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 isEmptyObj(obj) {
+ for (const key in obj) {
+ return false;
+ }
+
+ return true;
+}
+
+function isBool(v) {
+ return typeof v === "boolean";
+}
+
+function isNum(v) {
+ return typeof v === "number";
+}
+
+function isString(v) {
+ return typeof v === "string";
+}
+
+function isArrayBuffer(v) {
+ return typeof v === "object" && v !== null && v.byteLength !== undefined;
+}
+
+function isArrayEqual(arr1, arr2) {
+ if (arr1.length !== arr2.length) {
+ return false;
+ }
+
+ return arr1.every(function (element, index) {
+ return element === arr2[index];
+ });
+}
+
+function createPromiseCapability() {
+ const capability = Object.create(null);
+ let isSettled = false;
+ Object.defineProperty(capability, "settled", {
+ get() {
+ return isSettled;
+ }
+
+ });
+ capability.promise = new Promise(function (resolve, reject) {
+ capability.resolve = function (data) {
+ isSettled = true;
+ resolve(data);
+ };
+
+ capability.reject = function (reason) {
+ isSettled = true;
+ reject(reason);
+ };
+ });
+ return capability;
+}
+
+const createObjectURL = function createObjectURLClosure() {
+ const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ return function createObjectURL(data, contentType, forceDataSchema = false) {
+ if (!forceDataSchema && URL.createObjectURL) {
+ const blob = new Blob([data], {
+ type: contentType
+ });
+ return URL.createObjectURL(blob);
+ }
+
+ let buffer = `data:${contentType};base64,`;
+
+ for (let i = 0, ii = data.length; i < ii; i += 3) {
+ const b1 = data[i] & 0xff;
+ const b2 = data[i + 1] & 0xff;
+ const b3 = data[i + 2] & 0xff;
+ const d1 = b1 >> 2,
+ d2 = (b1 & 3) << 4 | b2 >> 4;
+ const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
+ const d4 = i + 2 < ii ? b3 & 0x3f : 64;
+ buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+ }
+
+ return buffer;
+ };
+}();
+
+exports.createObjectURL = createObjectURL;
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+var _is_node = __w_pdfjs_require__(4);
+
+;
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isNodeJS = void 0;
+const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !process.versions.electron;
+exports.isNodeJS = isNodeJS;
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.clearPrimitiveCaches = clearPrimitiveCaches;
+exports.isEOF = isEOF;
+exports.isCmd = isCmd;
+exports.isDict = isDict;
+exports.isName = isName;
+exports.isRef = isRef;
+exports.isRefsEqual = isRefsEqual;
+exports.isStream = isStream;
+exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var EOF = {};
+exports.EOF = EOF;
+
+var Name = function NameClosure() {
+ let nameCache = Object.create(null);
+
+ function Name(name) {
+ this.name = name;
+ }
+
+ Name.prototype = {};
+
+ Name.get = function Name_get(name) {
+ var nameValue = nameCache[name];
+ return nameValue ? nameValue : nameCache[name] = new Name(name);
+ };
+
+ Name._clearCache = function () {
+ nameCache = Object.create(null);
+ };
+
+ return Name;
+}();
+
+exports.Name = Name;
+
+var Cmd = function CmdClosure() {
+ let cmdCache = Object.create(null);
+
+ function Cmd(cmd) {
+ this.cmd = cmd;
+ }
+
+ Cmd.prototype = {};
+
+ Cmd.get = function Cmd_get(cmd) {
+ var cmdValue = cmdCache[cmd];
+ return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);
+ };
+
+ Cmd._clearCache = function () {
+ cmdCache = Object.create(null);
+ };
+
+ return Cmd;
+}();
+
+exports.Cmd = Cmd;
+
+var Dict = function DictClosure() {
+ var nonSerializable = function nonSerializableClosure() {
+ return nonSerializable;
+ };
+
+ function Dict(xref) {
+ this._map = Object.create(null);
+ this.xref = xref;
+ this.objId = null;
+ this.suppressEncryption = false;
+ this.__nonSerializable__ = nonSerializable;
+ }
+
+ Dict.prototype = {
+ assignXref: function Dict_assignXref(newXref) {
+ this.xref = newXref;
+ },
+
+ get(key1, key2, key3) {
+ let value = this._map[key1];
+
+ if (value === undefined && key2 !== undefined) {
+ value = this._map[key2];
+
+ if (value === undefined && key3 !== undefined) {
+ value = this._map[key3];
+ }
+ }
+
+ if (value instanceof Ref && this.xref) {
+ return this.xref.fetch(value, this.suppressEncryption);
+ }
+
+ return value;
+ },
+
+ async getAsync(key1, key2, key3) {
+ let value = this._map[key1];
+
+ if (value === undefined && key2 !== undefined) {
+ value = this._map[key2];
+
+ if (value === undefined && key3 !== undefined) {
+ value = this._map[key3];
+ }
+ }
+
+ if (value instanceof Ref && this.xref) {
+ return this.xref.fetchAsync(value, this.suppressEncryption);
+ }
+
+ return value;
+ },
+
+ getArray(key1, key2, key3) {
+ let value = this.get(key1, key2, key3);
+
+ if (!Array.isArray(value) || !this.xref) {
+ return value;
+ }
+
+ value = value.slice();
+
+ for (let i = 0, ii = value.length; i < ii; i++) {
+ if (!(value[i] instanceof Ref)) {
+ continue;
+ }
+
+ value[i] = this.xref.fetch(value[i], this.suppressEncryption);
+ }
+
+ return value;
+ },
+
+ getRaw: function Dict_getRaw(key) {
+ return this._map[key];
+ },
+ getKeys: function Dict_getKeys() {
+ return Object.keys(this._map);
+ },
+ set: function Dict_set(key, value) {
+ this._map[key] = value;
+ },
+ has: function Dict_has(key) {
+ return this._map[key] !== undefined;
+ },
+ forEach: function Dict_forEach(callback) {
+ for (var key in this._map) {
+ callback(key, this.get(key));
+ }
+ }
+ };
+ Dict.empty = new Dict(null);
+
+ Dict.merge = function (xref, dictArray) {
+ const mergedDict = new Dict(xref);
+
+ for (let i = 0, ii = dictArray.length; i < ii; i++) {
+ const dict = dictArray[i];
+
+ if (!isDict(dict)) {
+ continue;
+ }
+
+ for (const keyName in dict._map) {
+ if (mergedDict._map[keyName] !== undefined) {
+ continue;
+ }
+
+ mergedDict._map[keyName] = dict._map[keyName];
+ }
+ }
+
+ return mergedDict;
+ };
+
+ return Dict;
+}();
+
+exports.Dict = Dict;
+
+var Ref = function RefClosure() {
+ let refCache = Object.create(null);
+
+ function Ref(num, gen) {
+ this.num = num;
+ this.gen = gen;
+ }
+
+ Ref.prototype = {
+ toString: function Ref_toString() {
+ if (this.gen === 0) {
+ return `${this.num}R`;
+ }
+
+ return `${this.num}R${this.gen}`;
+ }
+ };
+
+ Ref.get = function (num, gen) {
+ const key = gen === 0 ? `${num}R` : `${num}R${gen}`;
+ const refValue = refCache[key];
+ return refValue ? refValue : refCache[key] = new Ref(num, gen);
+ };
+
+ Ref._clearCache = function () {
+ refCache = Object.create(null);
+ };
+
+ return Ref;
+}();
+
+exports.Ref = Ref;
+
+var RefSet = function RefSetClosure() {
+ function RefSet() {
+ this.dict = Object.create(null);
+ }
+
+ RefSet.prototype = {
+ has: function RefSet_has(ref) {
+ return ref.toString() in this.dict;
+ },
+ put: function RefSet_put(ref) {
+ this.dict[ref.toString()] = true;
+ },
+ remove: function RefSet_remove(ref) {
+ delete this.dict[ref.toString()];
+ }
+ };
+ return RefSet;
+}();
+
+exports.RefSet = RefSet;
+
+var RefSetCache = function RefSetCacheClosure() {
+ function RefSetCache() {
+ this.dict = Object.create(null);
+ }
+
+ RefSetCache.prototype = {
+ get size() {
+ return Object.keys(this.dict).length;
+ },
+
+ get: function RefSetCache_get(ref) {
+ return this.dict[ref.toString()];
+ },
+ has: function RefSetCache_has(ref) {
+ return ref.toString() in this.dict;
+ },
+ put: function RefSetCache_put(ref, obj) {
+ this.dict[ref.toString()] = obj;
+ },
+ putAlias: function RefSetCache_putAlias(ref, aliasRef) {
+ this.dict[ref.toString()] = this.get(aliasRef);
+ },
+ forEach: function RefSetCache_forEach(callback) {
+ for (const i in this.dict) {
+ callback(this.dict[i]);
+ }
+ },
+ clear: function RefSetCache_clear() {
+ this.dict = Object.create(null);
+ }
+ };
+ return RefSetCache;
+}();
+
+exports.RefSetCache = RefSetCache;
+
+function isEOF(v) {
+ return v === EOF;
+}
+
+function isName(v, name) {
+ return v instanceof Name && (name === undefined || v.name === name);
+}
+
+function isCmd(v, cmd) {
+ return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
+}
+
+function isDict(v, type) {
+ return v instanceof Dict && (type === undefined || isName(v.get("Type"), type));
+}
+
+function isRef(v) {
+ return v instanceof Ref;
+}
+
+function isRefsEqual(v1, v2) {
+ return v1.num === v2.num && v1.gen === v2.gen;
+}
+
+function isStream(v) {
+ return typeof v === "object" && v !== null && v.getBytes !== undefined;
+}
+
+function clearPrimitiveCaches() {
+ Cmd._clearCache();
+
+ Name._clearCache();
+
+ Ref._clearCache();
+}
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.NetworkPdfManager = exports.LocalPdfManager = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _chunked_stream = __w_pdfjs_require__(7);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _document = __w_pdfjs_require__(9);
+
+var _stream = __w_pdfjs_require__(12);
+
+class BasePdfManager {
+ constructor() {
+ if (this.constructor === BasePdfManager) {
+ (0, _util.unreachable)("Cannot initialize BasePdfManager.");
+ }
+ }
+
+ get docId() {
+ return this._docId;
+ }
+
+ get password() {
+ return this._password;
+ }
+
+ get docBaseUrl() {
+ let docBaseUrl = null;
+
+ if (this._docBaseUrl) {
+ const absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);
+
+ if (absoluteUrl) {
+ docBaseUrl = absoluteUrl.href;
+ } else {
+ (0, _util.warn)(`Invalid absolute docBaseUrl: "${this._docBaseUrl}".`);
+ }
+ }
+
+ return (0, _util.shadow)(this, "docBaseUrl", docBaseUrl);
+ }
+
+ onLoadedStream() {
+ (0, _util.unreachable)("Abstract method `onLoadedStream` called");
+ }
+
+ ensureDoc(prop, args) {
+ return this.ensure(this.pdfDocument, prop, args);
+ }
+
+ ensureXRef(prop, args) {
+ return this.ensure(this.pdfDocument.xref, prop, args);
+ }
+
+ ensureCatalog(prop, args) {
+ return this.ensure(this.pdfDocument.catalog, prop, args);
+ }
+
+ getPage(pageIndex) {
+ return this.pdfDocument.getPage(pageIndex);
+ }
+
+ fontFallback(id, handler) {
+ return this.pdfDocument.fontFallback(id, handler);
+ }
+
+ cleanup(manuallyTriggered = false) {
+ return this.pdfDocument.cleanup(manuallyTriggered);
+ }
+
+ async ensure(obj, prop, args) {
+ (0, _util.unreachable)("Abstract method `ensure` called");
+ }
+
+ requestRange(begin, end) {
+ (0, _util.unreachable)("Abstract method `requestRange` called");
+ }
+
+ requestLoadedStream() {
+ (0, _util.unreachable)("Abstract method `requestLoadedStream` called");
+ }
+
+ sendProgressiveData(chunk) {
+ (0, _util.unreachable)("Abstract method `sendProgressiveData` called");
+ }
+
+ updatePassword(password) {
+ this._password = password;
+ }
+
+ terminate(reason) {
+ (0, _util.unreachable)("Abstract method `terminate` called");
+ }
+
+}
+
+class LocalPdfManager extends BasePdfManager {
+ constructor(docId, data, password, evaluatorOptions, docBaseUrl) {
+ super();
+ this._docId = docId;
+ this._password = password;
+ this._docBaseUrl = docBaseUrl;
+ this.evaluatorOptions = evaluatorOptions;
+ const stream = new _stream.Stream(data);
+ this.pdfDocument = new _document.PDFDocument(this, stream);
+ this._loadedStreamPromise = Promise.resolve(stream);
+ }
+
+ async ensure(obj, prop, args) {
+ const value = obj[prop];
+
+ if (typeof value === "function") {
+ return value.apply(obj, args);
+ }
+
+ return value;
+ }
+
+ requestRange(begin, end) {
+ return Promise.resolve();
+ }
+
+ requestLoadedStream() {}
+
+ onLoadedStream() {
+ return this._loadedStreamPromise;
+ }
+
+ terminate(reason) {}
+
+}
+
+exports.LocalPdfManager = LocalPdfManager;
+
+class NetworkPdfManager extends BasePdfManager {
+ constructor(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {
+ super();
+ this._docId = docId;
+ this._password = args.password;
+ this._docBaseUrl = docBaseUrl;
+ this.msgHandler = args.msgHandler;
+ this.evaluatorOptions = evaluatorOptions;
+ this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {
+ msgHandler: args.msgHandler,
+ length: args.length,
+ disableAutoFetch: args.disableAutoFetch,
+ rangeChunkSize: args.rangeChunkSize
+ });
+ this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream());
+ }
+
+ async ensure(obj, prop, args) {
+ try {
+ const value = obj[prop];
+
+ if (typeof value === "function") {
+ return value.apply(obj, args);
+ }
+
+ return value;
+ } catch (ex) {
+ if (!(ex instanceof _core_utils.MissingDataException)) {
+ throw ex;
+ }
+
+ await this.requestRange(ex.begin, ex.end);
+ return this.ensure(obj, prop, args);
+ }
+ }
+
+ requestRange(begin, end) {
+ return this.streamManager.requestRange(begin, end);
+ }
+
+ requestLoadedStream() {
+ this.streamManager.requestAllChunks();
+ }
+
+ sendProgressiveData(chunk) {
+ this.streamManager.onReceiveData({
+ chunk
+ });
+ }
+
+ onLoadedStream() {
+ return this.streamManager.onLoadedStream();
+ }
+
+ terminate(reason) {
+ this.streamManager.abort(reason);
+ }
+
+}
+
+exports.NetworkPdfManager = NetworkPdfManager;
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ChunkedStreamManager = exports.ChunkedStream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+class ChunkedStream {
+ constructor(length, chunkSize, manager) {
+ this.bytes = new Uint8Array(length);
+ this.start = 0;
+ this.pos = 0;
+ this.end = length;
+ this.chunkSize = chunkSize;
+ this.loadedChunks = [];
+ this.numChunksLoaded = 0;
+ this.numChunks = Math.ceil(length / chunkSize);
+ this.manager = manager;
+ this.progressiveDataLength = 0;
+ this.lastSuccessfulEnsureByteChunk = -1;
+ }
+
+ getMissingChunks() {
+ const chunks = [];
+
+ for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) {
+ if (!this.loadedChunks[chunk]) {
+ chunks.push(chunk);
+ }
+ }
+
+ return chunks;
+ }
+
+ getBaseStreams() {
+ return [this];
+ }
+
+ allChunksLoaded() {
+ return this.numChunksLoaded === this.numChunks;
+ }
+
+ onReceiveData(begin, chunk) {
+ const chunkSize = this.chunkSize;
+
+ if (begin % chunkSize !== 0) {
+ throw new Error(`Bad begin offset: ${begin}`);
+ }
+
+ const end = begin + chunk.byteLength;
+
+ if (end % chunkSize !== 0 && end !== this.bytes.length) {
+ throw new Error(`Bad end offset: ${end}`);
+ }
+
+ this.bytes.set(new Uint8Array(chunk), begin);
+ const beginChunk = Math.floor(begin / chunkSize);
+ const endChunk = Math.floor((end - 1) / chunkSize) + 1;
+
+ for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+ if (!this.loadedChunks[curChunk]) {
+ this.loadedChunks[curChunk] = true;
+ ++this.numChunksLoaded;
+ }
+ }
+ }
+
+ onReceiveProgressiveData(data) {
+ let position = this.progressiveDataLength;
+ const beginChunk = Math.floor(position / this.chunkSize);
+ this.bytes.set(new Uint8Array(data), position);
+ position += data.byteLength;
+ this.progressiveDataLength = position;
+ const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);
+
+ for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+ if (!this.loadedChunks[curChunk]) {
+ this.loadedChunks[curChunk] = true;
+ ++this.numChunksLoaded;
+ }
+ }
+ }
+
+ ensureByte(pos) {
+ if (pos < this.progressiveDataLength) {
+ return;
+ }
+
+ const chunk = Math.floor(pos / this.chunkSize);
+
+ if (chunk === this.lastSuccessfulEnsureByteChunk) {
+ return;
+ }
+
+ if (!this.loadedChunks[chunk]) {
+ throw new _core_utils.MissingDataException(pos, pos + 1);
+ }
+
+ this.lastSuccessfulEnsureByteChunk = chunk;
+ }
+
+ ensureRange(begin, end) {
+ if (begin >= end) {
+ return;
+ }
+
+ if (end <= this.progressiveDataLength) {
+ return;
+ }
+
+ const chunkSize = this.chunkSize;
+ const beginChunk = Math.floor(begin / chunkSize);
+ const endChunk = Math.floor((end - 1) / chunkSize) + 1;
+
+ for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
+ if (!this.loadedChunks[chunk]) {
+ throw new _core_utils.MissingDataException(begin, end);
+ }
+ }
+ }
+
+ nextEmptyChunk(beginChunk) {
+ const numChunks = this.numChunks;
+
+ for (let i = 0; i < numChunks; ++i) {
+ const chunk = (beginChunk + i) % numChunks;
+
+ if (!this.loadedChunks[chunk]) {
+ return chunk;
+ }
+ }
+
+ return null;
+ }
+
+ hasChunk(chunk) {
+ return !!this.loadedChunks[chunk];
+ }
+
+ get length() {
+ return this.end - this.start;
+ }
+
+ get isEmpty() {
+ return this.length === 0;
+ }
+
+ getByte() {
+ const pos = this.pos;
+
+ if (pos >= this.end) {
+ return -1;
+ }
+
+ if (pos >= this.progressiveDataLength) {
+ this.ensureByte(pos);
+ }
+
+ return this.bytes[this.pos++];
+ }
+
+ getUint16() {
+ const b0 = this.getByte();
+ const b1 = this.getByte();
+
+ if (b0 === -1 || b1 === -1) {
+ return -1;
+ }
+
+ return (b0 << 8) + b1;
+ }
+
+ getInt32() {
+ const b0 = this.getByte();
+ const b1 = this.getByte();
+ const b2 = this.getByte();
+ const b3 = this.getByte();
+ return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+ }
+
+ getBytes(length, forceClamped = false) {
+ const bytes = this.bytes;
+ const pos = this.pos;
+ const strEnd = this.end;
+
+ if (!length) {
+ if (strEnd > this.progressiveDataLength) {
+ this.ensureRange(pos, strEnd);
+ }
+
+ const subarray = bytes.subarray(pos, strEnd);
+ return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
+ }
+
+ let end = pos + length;
+
+ if (end > strEnd) {
+ end = strEnd;
+ }
+
+ if (end > this.progressiveDataLength) {
+ this.ensureRange(pos, end);
+ }
+
+ this.pos = end;
+ const subarray = bytes.subarray(pos, end);
+ return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
+ }
+
+ peekByte() {
+ const peekedByte = this.getByte();
+
+ if (peekedByte !== -1) {
+ this.pos--;
+ }
+
+ return peekedByte;
+ }
+
+ peekBytes(length, forceClamped = false) {
+ const bytes = this.getBytes(length, forceClamped);
+ this.pos -= bytes.length;
+ return bytes;
+ }
+
+ getByteRange(begin, end) {
+ if (begin < 0) {
+ begin = 0;
+ }
+
+ if (end > this.end) {
+ end = this.end;
+ }
+
+ if (end > this.progressiveDataLength) {
+ this.ensureRange(begin, end);
+ }
+
+ return this.bytes.subarray(begin, end);
+ }
+
+ skip(n) {
+ if (!n) {
+ n = 1;
+ }
+
+ this.pos += n;
+ }
+
+ reset() {
+ this.pos = this.start;
+ }
+
+ moveStart() {
+ this.start = this.pos;
+ }
+
+ makeSubStream(start, length, dict) {
+ if (length) {
+ if (start + length > this.progressiveDataLength) {
+ this.ensureRange(start, start + length);
+ }
+ } else {
+ if (start >= this.progressiveDataLength) {
+ this.ensureByte(start);
+ }
+ }
+
+ function ChunkedStreamSubstream() {}
+
+ ChunkedStreamSubstream.prototype = Object.create(this);
+
+ ChunkedStreamSubstream.prototype.getMissingChunks = function () {
+ const chunkSize = this.chunkSize;
+ const beginChunk = Math.floor(this.start / chunkSize);
+ const endChunk = Math.floor((this.end - 1) / chunkSize) + 1;
+ const missingChunks = [];
+
+ for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
+ if (!this.loadedChunks[chunk]) {
+ missingChunks.push(chunk);
+ }
+ }
+
+ return missingChunks;
+ };
+
+ ChunkedStreamSubstream.prototype.allChunksLoaded = function () {
+ if (this.numChunksLoaded === this.numChunks) {
+ return true;
+ }
+
+ return this.getMissingChunks().length === 0;
+ };
+
+ const subStream = new ChunkedStreamSubstream();
+ subStream.pos = subStream.start = start;
+ subStream.end = start + length || this.end;
+ subStream.dict = dict;
+ return subStream;
+ }
+
+}
+
+exports.ChunkedStream = ChunkedStream;
+
+class ChunkedStreamManager {
+ constructor(pdfNetworkStream, args) {
+ this.length = args.length;
+ this.chunkSize = args.rangeChunkSize;
+ this.stream = new ChunkedStream(this.length, this.chunkSize, this);
+ this.pdfNetworkStream = pdfNetworkStream;
+ this.disableAutoFetch = args.disableAutoFetch;
+ this.msgHandler = args.msgHandler;
+ this.currRequestId = 0;
+ this.chunksNeededByRequest = Object.create(null);
+ this.requestsByChunk = Object.create(null);
+ this.promisesByRequest = Object.create(null);
+ this.progressiveDataLength = 0;
+ this.aborted = false;
+ this._loadedStreamCapability = (0, _util.createPromiseCapability)();
+ }
+
+ onLoadedStream() {
+ return this._loadedStreamCapability.promise;
+ }
+
+ sendRequest(begin, end) {
+ const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end);
+
+ if (!rangeReader.isStreamingSupported) {
+ rangeReader.onProgress = this.onProgress.bind(this);
+ }
+
+ let chunks = [],
+ loaded = 0;
+ const promise = new Promise((resolve, reject) => {
+ const readChunk = chunk => {
+ try {
+ if (!chunk.done) {
+ const data = chunk.value;
+ chunks.push(data);
+ loaded += (0, _util.arrayByteLength)(data);
+
+ if (rangeReader.isStreamingSupported) {
+ this.onProgress({
+ loaded
+ });
+ }
+
+ rangeReader.read().then(readChunk, reject);
+ return;
+ }
+
+ const chunkData = (0, _util.arraysToBytes)(chunks);
+ chunks = null;
+ resolve(chunkData);
+ } catch (e) {
+ reject(e);
+ }
+ };
+
+ rangeReader.read().then(readChunk, reject);
+ });
+ promise.then(data => {
+ if (this.aborted) {
+ return;
+ }
+
+ this.onReceiveData({
+ chunk: data,
+ begin
+ });
+ });
+ }
+
+ requestAllChunks() {
+ const missingChunks = this.stream.getMissingChunks();
+
+ this._requestChunks(missingChunks);
+
+ return this._loadedStreamCapability.promise;
+ }
+
+ _requestChunks(chunks) {
+ const requestId = this.currRequestId++;
+ const chunksNeeded = Object.create(null);
+ this.chunksNeededByRequest[requestId] = chunksNeeded;
+
+ for (const chunk of chunks) {
+ if (!this.stream.hasChunk(chunk)) {
+ chunksNeeded[chunk] = true;
+ }
+ }
+
+ if ((0, _util.isEmptyObj)(chunksNeeded)) {
+ return Promise.resolve();
+ }
+
+ const capability = (0, _util.createPromiseCapability)();
+ this.promisesByRequest[requestId] = capability;
+ const chunksToRequest = [];
+
+ for (let chunk in chunksNeeded) {
+ chunk = chunk | 0;
+
+ if (!(chunk in this.requestsByChunk)) {
+ this.requestsByChunk[chunk] = [];
+ chunksToRequest.push(chunk);
+ }
+
+ this.requestsByChunk[chunk].push(requestId);
+ }
+
+ if (!chunksToRequest.length) {
+ return capability.promise;
+ }
+
+ const groupedChunksToRequest = this.groupChunks(chunksToRequest);
+
+ for (const groupedChunk of groupedChunksToRequest) {
+ const begin = groupedChunk.beginChunk * this.chunkSize;
+ const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
+ this.sendRequest(begin, end);
+ }
+
+ return capability.promise;
+ }
+
+ getStream() {
+ return this.stream;
+ }
+
+ requestRange(begin, end) {
+ end = Math.min(end, this.length);
+ const beginChunk = this.getBeginChunk(begin);
+ const endChunk = this.getEndChunk(end);
+ const chunks = [];
+
+ for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
+ chunks.push(chunk);
+ }
+
+ return this._requestChunks(chunks);
+ }
+
+ requestRanges(ranges = []) {
+ const chunksToRequest = [];
+
+ for (const range of ranges) {
+ const beginChunk = this.getBeginChunk(range.begin);
+ const endChunk = this.getEndChunk(range.end);
+
+ for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
+ if (!chunksToRequest.includes(chunk)) {
+ chunksToRequest.push(chunk);
+ }
+ }
+ }
+
+ chunksToRequest.sort(function (a, b) {
+ return a - b;
+ });
+ return this._requestChunks(chunksToRequest);
+ }
+
+ groupChunks(chunks) {
+ const groupedChunks = [];
+ let beginChunk = -1;
+ let prevChunk = -1;
+
+ for (let i = 0, ii = chunks.length; i < ii; ++i) {
+ const chunk = chunks[i];
+
+ if (beginChunk < 0) {
+ beginChunk = chunk;
+ }
+
+ if (prevChunk >= 0 && prevChunk + 1 !== chunk) {
+ groupedChunks.push({
+ beginChunk,
+ endChunk: prevChunk + 1
+ });
+ beginChunk = chunk;
+ }
+
+ if (i + 1 === chunks.length) {
+ groupedChunks.push({
+ beginChunk,
+ endChunk: chunk + 1
+ });
+ }
+
+ prevChunk = chunk;
+ }
+
+ return groupedChunks;
+ }
+
+ onProgress(args) {
+ this.msgHandler.send("DocProgress", {
+ loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded,
+ total: this.length
+ });
+ }
+
+ onReceiveData(args) {
+ const chunk = args.chunk;
+ const isProgressive = args.begin === undefined;
+ const begin = isProgressive ? this.progressiveDataLength : args.begin;
+ const end = begin + chunk.byteLength;
+ const beginChunk = Math.floor(begin / this.chunkSize);
+ const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize);
+
+ if (isProgressive) {
+ this.stream.onReceiveProgressiveData(chunk);
+ this.progressiveDataLength = end;
+ } else {
+ this.stream.onReceiveData(begin, chunk);
+ }
+
+ if (this.stream.allChunksLoaded()) {
+ this._loadedStreamCapability.resolve(this.stream);
+ }
+
+ const loadedRequests = [];
+
+ for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+ const requestIds = this.requestsByChunk[curChunk] || [];
+ delete this.requestsByChunk[curChunk];
+
+ for (const requestId of requestIds) {
+ const chunksNeeded = this.chunksNeededByRequest[requestId];
+
+ if (curChunk in chunksNeeded) {
+ delete chunksNeeded[curChunk];
+ }
+
+ if (!(0, _util.isEmptyObj)(chunksNeeded)) {
+ continue;
+ }
+
+ loadedRequests.push(requestId);
+ }
+ }
+
+ if (!this.disableAutoFetch && (0, _util.isEmptyObj)(this.requestsByChunk)) {
+ let nextEmptyChunk;
+
+ if (this.stream.numChunksLoaded === 1) {
+ const lastChunk = this.stream.numChunks - 1;
+
+ if (!this.stream.hasChunk(lastChunk)) {
+ nextEmptyChunk = lastChunk;
+ }
+ } else {
+ nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
+ }
+
+ if (Number.isInteger(nextEmptyChunk)) {
+ this._requestChunks([nextEmptyChunk]);
+ }
+ }
+
+ for (const requestId of loadedRequests) {
+ const capability = this.promisesByRequest[requestId];
+ delete this.promisesByRequest[requestId];
+ capability.resolve();
+ }
+
+ this.msgHandler.send("DocProgress", {
+ loaded: this.stream.numChunksLoaded * this.chunkSize,
+ total: this.length
+ });
+ }
+
+ onError(err) {
+ this._loadedStreamCapability.reject(err);
+ }
+
+ getBeginChunk(begin) {
+ return Math.floor(begin / this.chunkSize);
+ }
+
+ getEndChunk(end) {
+ return Math.floor((end - 1) / this.chunkSize) + 1;
+ }
+
+ abort(reason) {
+ this.aborted = true;
+
+ if (this.pdfNetworkStream) {
+ this.pdfNetworkStream.cancelAllRequests(reason);
+ }
+
+ for (const requestId in this.promisesByRequest) {
+ this.promisesByRequest[requestId].reject(reason);
+ }
+ }
+
+}
+
+exports.ChunkedStreamManager = ChunkedStreamManager;
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getLookupTableFactory = getLookupTableFactory;
+exports.getInheritableProperty = getInheritableProperty;
+exports.toRomanNumerals = toRomanNumerals;
+exports.log2 = log2;
+exports.readInt8 = readInt8;
+exports.readUint16 = readUint16;
+exports.readUint32 = readUint32;
+exports.isWhiteSpace = isWhiteSpace;
+exports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+function getLookupTableFactory(initializer) {
+ let lookup;
+ return function () {
+ if (initializer) {
+ lookup = Object.create(null);
+ initializer(lookup);
+ initializer = null;
+ }
+
+ return lookup;
+ };
+}
+
+class MissingDataException extends _util.BaseException {
+ constructor(begin, end) {
+ super(`Missing data [${begin}, ${end})`);
+ this.begin = begin;
+ this.end = end;
+ }
+
+}
+
+exports.MissingDataException = MissingDataException;
+
+class XRefEntryException extends _util.BaseException {}
+
+exports.XRefEntryException = XRefEntryException;
+
+class XRefParseException extends _util.BaseException {}
+
+exports.XRefParseException = XRefParseException;
+
+function getInheritableProperty({
+ dict,
+ key,
+ getArray = false,
+ stopWhenFound = true
+}) {
+ const LOOP_LIMIT = 100;
+ let loopCount = 0;
+ let values;
+
+ while (dict) {
+ const value = getArray ? dict.getArray(key) : dict.get(key);
+
+ if (value !== undefined) {
+ if (stopWhenFound) {
+ return value;
+ }
+
+ if (!values) {
+ values = [];
+ }
+
+ values.push(value);
+ }
+
+ if (++loopCount > LOOP_LIMIT) {
+ (0, _util.warn)(`getInheritableProperty: maximum loop count exceeded for "${key}"`);
+ break;
+ }
+
+ dict = dict.get("Parent");
+ }
+
+ return values;
+}
+
+const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];
+
+function toRomanNumerals(number, lowerCase = false) {
+ (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer.");
+ const romanBuf = [];
+ let pos;
+
+ while (number >= 1000) {
+ number -= 1000;
+ romanBuf.push("M");
+ }
+
+ pos = number / 100 | 0;
+ number %= 100;
+ romanBuf.push(ROMAN_NUMBER_MAP[pos]);
+ pos = number / 10 | 0;
+ number %= 10;
+ romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);
+ romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);
+ const romanStr = romanBuf.join("");
+ return lowerCase ? romanStr.toLowerCase() : romanStr;
+}
+
+function log2(x) {
+ if (x <= 0) {
+ return 0;
+ }
+
+ return Math.ceil(Math.log2(x));
+}
+
+function readInt8(data, offset) {
+ return data[offset] << 24 >> 24;
+}
+
+function readUint16(data, offset) {
+ return data[offset] << 8 | data[offset + 1];
+}
+
+function readUint32(data, offset) {
+ return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
+}
+
+function isWhiteSpace(ch) {
+ return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;
+}
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFDocument = exports.Page = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _obj = __w_pdfjs_require__(10);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _annotation = __w_pdfjs_require__(25);
+
+var _crypto = __w_pdfjs_require__(22);
+
+var _parser = __w_pdfjs_require__(11);
+
+var _operator_list = __w_pdfjs_require__(26);
+
+var _evaluator = __w_pdfjs_require__(27);
+
+var _function = __w_pdfjs_require__(41);
+
+const DEFAULT_USER_UNIT = 1.0;
+const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
+
+function isAnnotationRenderable(annotation, intent) {
+ return intent === "display" && annotation.viewable || intent === "print" && annotation.printable;
+}
+
+class Page {
+ constructor({
+ pdfManager,
+ xref,
+ pageIndex,
+ pageDict,
+ ref,
+ fontCache,
+ builtInCMapCache,
+ globalImageCache,
+ pdfFunctionFactory
+ }) {
+ this.pdfManager = pdfManager;
+ this.pageIndex = pageIndex;
+ this.pageDict = pageDict;
+ this.xref = xref;
+ this.ref = ref;
+ this.fontCache = fontCache;
+ this.builtInCMapCache = builtInCMapCache;
+ this.globalImageCache = globalImageCache;
+ this.pdfFunctionFactory = pdfFunctionFactory;
+ this.evaluatorOptions = pdfManager.evaluatorOptions;
+ this.resourcesPromise = null;
+ const idCounters = {
+ obj: 0
+ };
+ this.idFactory = {
+ createObjId() {
+ return `p${pageIndex}_${++idCounters.obj}`;
+ },
+
+ getDocId() {
+ return `g_${pdfManager.docId}`;
+ }
+
+ };
+ }
+
+ _getInheritableProperty(key, getArray = false) {
+ const value = (0, _core_utils.getInheritableProperty)({
+ dict: this.pageDict,
+ key,
+ getArray,
+ stopWhenFound: false
+ });
+
+ if (!Array.isArray(value)) {
+ return value;
+ }
+
+ if (value.length === 1 || !(0, _primitives.isDict)(value[0])) {
+ return value[0];
+ }
+
+ return _primitives.Dict.merge(this.xref, value);
+ }
+
+ get content() {
+ return this.pageDict.get("Contents");
+ }
+
+ get resources() {
+ return (0, _util.shadow)(this, "resources", this._getInheritableProperty("Resources") || _primitives.Dict.empty);
+ }
+
+ _getBoundingBox(name) {
+ const box = this._getInheritableProperty(name, true);
+
+ if (Array.isArray(box) && box.length === 4) {
+ if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
+ return box;
+ }
+
+ (0, _util.warn)(`Empty /${name} entry.`);
+ }
+
+ return null;
+ }
+
+ get mediaBox() {
+ return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX);
+ }
+
+ get cropBox() {
+ return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox);
+ }
+
+ get userUnit() {
+ let obj = this.pageDict.get("UserUnit");
+
+ if (!(0, _util.isNum)(obj) || obj <= 0) {
+ obj = DEFAULT_USER_UNIT;
+ }
+
+ return (0, _util.shadow)(this, "userUnit", obj);
+ }
+
+ get view() {
+ const {
+ cropBox,
+ mediaBox
+ } = this;
+ let view;
+
+ if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) {
+ view = mediaBox;
+ } else {
+ const box = _util.Util.intersect(cropBox, mediaBox);
+
+ if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {
+ view = box;
+ } else {
+ (0, _util.warn)("Empty /CropBox and /MediaBox intersection.");
+ }
+ }
+
+ return (0, _util.shadow)(this, "view", view || mediaBox);
+ }
+
+ get rotate() {
+ let rotate = this._getInheritableProperty("Rotate") || 0;
+
+ if (rotate % 90 !== 0) {
+ rotate = 0;
+ } else if (rotate >= 360) {
+ rotate = rotate % 360;
+ } else if (rotate < 0) {
+ rotate = (rotate % 360 + 360) % 360;
+ }
+
+ return (0, _util.shadow)(this, "rotate", rotate);
+ }
+
+ getContentStream() {
+ const content = this.content;
+ let stream;
+
+ if (Array.isArray(content)) {
+ const xref = this.xref;
+ const streams = [];
+
+ for (const subStream of content) {
+ streams.push(xref.fetchIfRef(subStream));
+ }
+
+ stream = new _stream.StreamsSequenceStream(streams);
+ } else if ((0, _primitives.isStream)(content)) {
+ stream = content;
+ } else {
+ stream = new _stream.NullStream();
+ }
+
+ return stream;
+ }
+
+ loadResources(keys) {
+ if (!this.resourcesPromise) {
+ this.resourcesPromise = this.pdfManager.ensure(this, "resources");
+ }
+
+ return this.resourcesPromise.then(() => {
+ const objectLoader = new _obj.ObjectLoader(this.resources, keys, this.xref);
+ return objectLoader.load();
+ });
+ }
+
+ getOperatorList({
+ handler,
+ sink,
+ task,
+ intent,
+ renderInteractiveForms
+ }) {
+ const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream");
+ const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]);
+ const partialEvaluator = new _evaluator.PartialEvaluator({
+ xref: this.xref,
+ handler,
+ pageIndex: this.pageIndex,
+ idFactory: this.idFactory,
+ fontCache: this.fontCache,
+ builtInCMapCache: this.builtInCMapCache,
+ globalImageCache: this.globalImageCache,
+ options: this.evaluatorOptions,
+ pdfFunctionFactory: this.pdfFunctionFactory
+ });
+ const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
+ const pageListPromise = dataPromises.then(([contentStream]) => {
+ const opList = new _operator_list.OperatorList(intent, sink, this.pageIndex);
+ handler.send("StartRenderPage", {
+ transparency: partialEvaluator.hasBlendModes(this.resources),
+ pageIndex: this.pageIndex,
+ intent
+ });
+ return partialEvaluator.getOperatorList({
+ stream: contentStream,
+ task,
+ resources: this.resources,
+ operatorList: opList
+ }).then(function () {
+ return opList;
+ });
+ });
+ return Promise.all([pageListPromise, this._parsedAnnotations]).then(function ([pageOpList, annotations]) {
+ if (annotations.length === 0) {
+ pageOpList.flush(true);
+ return {
+ length: pageOpList.totalLength
+ };
+ }
+
+ const opListPromises = [];
+
+ for (const annotation of annotations) {
+ if (isAnnotationRenderable(annotation, intent)) {
+ opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms).catch(function (reason) {
+ (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`);
+ return null;
+ }));
+ }
+ }
+
+ return Promise.all(opListPromises).then(function (opLists) {
+ pageOpList.addOp(_util.OPS.beginAnnotations, []);
+
+ for (const opList of opLists) {
+ pageOpList.addOpList(opList);
+ }
+
+ pageOpList.addOp(_util.OPS.endAnnotations, []);
+ pageOpList.flush(true);
+ return {
+ length: pageOpList.totalLength
+ };
+ });
+ });
+ }
+
+ extractTextContent({
+ handler,
+ task,
+ normalizeWhitespace,
+ sink,
+ combineTextItems
+ }) {
+ const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream");
+ const resourcesPromise = this.loadResources(["ExtGState", "XObject", "Font"]);
+ const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
+ return dataPromises.then(([contentStream]) => {
+ const partialEvaluator = new _evaluator.PartialEvaluator({
+ xref: this.xref,
+ handler,
+ pageIndex: this.pageIndex,
+ idFactory: this.idFactory,
+ fontCache: this.fontCache,
+ builtInCMapCache: this.builtInCMapCache,
+ globalImageCache: this.globalImageCache,
+ options: this.evaluatorOptions,
+ pdfFunctionFactory: this.pdfFunctionFactory
+ });
+ return partialEvaluator.getTextContent({
+ stream: contentStream,
+ task,
+ resources: this.resources,
+ normalizeWhitespace,
+ combineTextItems,
+ sink
+ });
+ });
+ }
+
+ getAnnotationsData(intent) {
+ return this._parsedAnnotations.then(function (annotations) {
+ const annotationsData = [];
+
+ for (let i = 0, ii = annotations.length; i < ii; i++) {
+ if (!intent || isAnnotationRenderable(annotations[i], intent)) {
+ annotationsData.push(annotations[i].data);
+ }
+ }
+
+ return annotationsData;
+ });
+ }
+
+ get annotations() {
+ return (0, _util.shadow)(this, "annotations", this._getInheritableProperty("Annots") || []);
+ }
+
+ get _parsedAnnotations() {
+ const parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(() => {
+ const annotationPromises = [];
+
+ for (const annotationRef of this.annotations) {
+ annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory).catch(function (reason) {
+ (0, _util.warn)(`_parsedAnnotations: "${reason}".`);
+ return null;
+ }));
+ }
+
+ return Promise.all(annotationPromises).then(function (annotations) {
+ return annotations.filter(annotation => !!annotation);
+ });
+ });
+ return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations);
+ }
+
+}
+
+exports.Page = Page;
+const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]);
+const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]);
+const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]);
+const FINGERPRINT_FIRST_BYTES = 1024;
+const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+const PDF_HEADER_VERSION_REGEXP = /^[1-9]\.[0-9]$/;
+
+function find(stream, signature, limit = 1024, backwards = false) {
+ const signatureLength = signature.length;
+ const scanBytes = stream.peekBytes(limit);
+ const scanLength = scanBytes.length - signatureLength;
+
+ if (scanLength <= 0) {
+ return false;
+ }
+
+ if (backwards) {
+ const signatureEnd = signatureLength - 1;
+ let pos = scanBytes.length - 1;
+
+ while (pos >= signatureEnd) {
+ let j = 0;
+
+ while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) {
+ j++;
+ }
+
+ if (j >= signatureLength) {
+ stream.pos += pos - signatureEnd;
+ return true;
+ }
+
+ pos--;
+ }
+ } else {
+ let pos = 0;
+
+ while (pos <= scanLength) {
+ let j = 0;
+
+ while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
+ j++;
+ }
+
+ if (j >= signatureLength) {
+ stream.pos += pos;
+ return true;
+ }
+
+ pos++;
+ }
+ }
+
+ return false;
+}
+
+class PDFDocument {
+ constructor(pdfManager, arg) {
+ let stream;
+
+ if ((0, _primitives.isStream)(arg)) {
+ stream = arg;
+ } else if ((0, _util.isArrayBuffer)(arg)) {
+ stream = new _stream.Stream(arg);
+ } else {
+ throw new Error("PDFDocument: Unknown argument type");
+ }
+
+ if (stream.length <= 0) {
+ throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");
+ }
+
+ this.pdfManager = pdfManager;
+ this.stream = stream;
+ this.xref = new _obj.XRef(stream, pdfManager);
+ this.pdfFunctionFactory = new _function.PDFFunctionFactory({
+ xref: this.xref,
+ isEvalSupported: pdfManager.evaluatorOptions.isEvalSupported
+ });
+ this._pagePromises = [];
+ }
+
+ parse(recoveryMode) {
+ this.setup(recoveryMode);
+ const version = this.catalog.catDict.get("Version");
+
+ if ((0, _primitives.isName)(version)) {
+ this.pdfFormatVersion = version.name;
+ }
+
+ try {
+ this.acroForm = this.catalog.catDict.get("AcroForm");
+
+ if (this.acroForm) {
+ this.xfa = this.acroForm.get("XFA");
+ const fields = this.acroForm.get("Fields");
+
+ if ((!Array.isArray(fields) || fields.length === 0) && !this.xfa) {
+ this.acroForm = null;
+ }
+ }
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.info)("Cannot fetch AcroForm entry; assuming no AcroForms are present");
+ this.acroForm = null;
+ }
+
+ try {
+ const collection = this.catalog.catDict.get("Collection");
+
+ if ((0, _primitives.isDict)(collection) && collection.getKeys().length > 0) {
+ this.collection = collection;
+ }
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.info)("Cannot fetch Collection dictionary.");
+ }
+ }
+
+ get linearization() {
+ let linearization = null;
+
+ try {
+ linearization = _parser.Linearization.create(this.stream);
+ } catch (err) {
+ if (err instanceof _core_utils.MissingDataException) {
+ throw err;
+ }
+
+ (0, _util.info)(err);
+ }
+
+ return (0, _util.shadow)(this, "linearization", linearization);
+ }
+
+ get startXRef() {
+ const stream = this.stream;
+ let startXRef = 0;
+
+ if (this.linearization) {
+ stream.reset();
+
+ if (find(stream, ENDOBJ_SIGNATURE)) {
+ startXRef = stream.pos + 6 - stream.start;
+ }
+ } else {
+ const step = 1024;
+ const startXRefLength = STARTXREF_SIGNATURE.length;
+ let found = false,
+ pos = stream.end;
+
+ while (!found && pos > 0) {
+ pos -= step - startXRefLength;
+
+ if (pos < 0) {
+ pos = 0;
+ }
+
+ stream.pos = pos;
+ found = find(stream, STARTXREF_SIGNATURE, step, true);
+ }
+
+ if (found) {
+ stream.skip(9);
+ let ch;
+
+ do {
+ ch = stream.getByte();
+ } while ((0, _core_utils.isWhiteSpace)(ch));
+
+ let str = "";
+
+ while (ch >= 0x20 && ch <= 0x39) {
+ str += String.fromCharCode(ch);
+ ch = stream.getByte();
+ }
+
+ startXRef = parseInt(str, 10);
+
+ if (isNaN(startXRef)) {
+ startXRef = 0;
+ }
+ }
+ }
+
+ return (0, _util.shadow)(this, "startXRef", startXRef);
+ }
+
+ checkHeader() {
+ const stream = this.stream;
+ stream.reset();
+
+ if (!find(stream, PDF_HEADER_SIGNATURE)) {
+ return;
+ }
+
+ stream.moveStart();
+ const MAX_PDF_VERSION_LENGTH = 12;
+ let version = "",
+ ch;
+
+ while ((ch = stream.getByte()) > 0x20) {
+ if (version.length >= MAX_PDF_VERSION_LENGTH) {
+ break;
+ }
+
+ version += String.fromCharCode(ch);
+ }
+
+ if (!this.pdfFormatVersion) {
+ this.pdfFormatVersion = version.substring(5);
+ }
+ }
+
+ parseStartXRef() {
+ this.xref.setStartXRef(this.startXRef);
+ }
+
+ setup(recoveryMode) {
+ this.xref.parse(recoveryMode);
+ this.catalog = new _obj.Catalog(this.pdfManager, this.xref);
+ }
+
+ get numPages() {
+ const linearization = this.linearization;
+ const num = linearization ? linearization.numPages : this.catalog.numPages;
+ return (0, _util.shadow)(this, "numPages", num);
+ }
+
+ get documentInfo() {
+ const DocumentInfoValidators = {
+ Title: _util.isString,
+ Author: _util.isString,
+ Subject: _util.isString,
+ Keywords: _util.isString,
+ Creator: _util.isString,
+ Producer: _util.isString,
+ CreationDate: _util.isString,
+ ModDate: _util.isString,
+ Trapped: _primitives.isName
+ };
+ let version = this.pdfFormatVersion;
+
+ if (typeof version !== "string" || !PDF_HEADER_VERSION_REGEXP.test(version)) {
+ (0, _util.warn)(`Invalid PDF header version number: ${version}`);
+ version = null;
+ }
+
+ const docInfo = {
+ PDFFormatVersion: version,
+ IsLinearized: !!this.linearization,
+ IsAcroFormPresent: !!this.acroForm,
+ IsXFAPresent: !!this.xfa,
+ IsCollectionPresent: !!this.collection
+ };
+ let infoDict;
+
+ try {
+ infoDict = this.xref.trailer.get("Info");
+ } catch (err) {
+ if (err instanceof _core_utils.MissingDataException) {
+ throw err;
+ }
+
+ (0, _util.info)("The document information dictionary is invalid.");
+ }
+
+ if ((0, _primitives.isDict)(infoDict)) {
+ for (const key of infoDict.getKeys()) {
+ const value = infoDict.get(key);
+
+ if (DocumentInfoValidators[key]) {
+ if (DocumentInfoValidators[key](value)) {
+ docInfo[key] = typeof value !== "string" ? value : (0, _util.stringToPDFString)(value);
+ } else {
+ (0, _util.info)(`Bad value in document info for "${key}".`);
+ }
+ } else if (typeof key === "string") {
+ let customValue;
+
+ if ((0, _util.isString)(value)) {
+ customValue = (0, _util.stringToPDFString)(value);
+ } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) {
+ customValue = value;
+ } else {
+ (0, _util.info)(`Unsupported value in document info for (custom) "${key}".`);
+ continue;
+ }
+
+ if (!docInfo.Custom) {
+ docInfo.Custom = Object.create(null);
+ }
+
+ docInfo.Custom[key] = customValue;
+ }
+ }
+ }
+
+ return (0, _util.shadow)(this, "documentInfo", docInfo);
+ }
+
+ get fingerprint() {
+ let hash;
+ const idArray = this.xref.trailer.get("ID");
+
+ if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) {
+ hash = (0, _util.stringToBytes)(idArray[0]);
+ } else {
+ hash = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);
+ }
+
+ const fingerprintBuf = [];
+
+ for (let i = 0, ii = hash.length; i < ii; i++) {
+ const hex = hash[i].toString(16);
+ fingerprintBuf.push(hex.padStart(2, "0"));
+ }
+
+ return (0, _util.shadow)(this, "fingerprint", fingerprintBuf.join(""));
+ }
+
+ _getLinearizationPage(pageIndex) {
+ const {
+ catalog,
+ linearization
+ } = this;
+
+ const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0);
+
+ return this.xref.fetchAsync(ref).then(obj => {
+ if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Type") && obj.has("Contents")) {
+ if (ref && !catalog.pageKidsCountCache.has(ref)) {
+ catalog.pageKidsCountCache.put(ref, 1);
+ }
+
+ return [obj, ref];
+ }
+
+ throw new _util.FormatError("The Linearization dictionary doesn't point " + "to a valid Page dictionary.");
+ }).catch(reason => {
+ (0, _util.info)(reason);
+ return catalog.getPageDict(pageIndex);
+ });
+ }
+
+ getPage(pageIndex) {
+ if (this._pagePromises[pageIndex] !== undefined) {
+ return this._pagePromises[pageIndex];
+ }
+
+ const {
+ catalog,
+ linearization
+ } = this;
+ const promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex);
+ return this._pagePromises[pageIndex] = promise.then(([pageDict, ref]) => {
+ return new Page({
+ pdfManager: this.pdfManager,
+ xref: this.xref,
+ pageIndex,
+ pageDict,
+ ref,
+ fontCache: catalog.fontCache,
+ builtInCMapCache: catalog.builtInCMapCache,
+ globalImageCache: catalog.globalImageCache,
+ pdfFunctionFactory: this.pdfFunctionFactory
+ });
+ });
+ }
+
+ checkFirstPage() {
+ return this.getPage(0).catch(async reason => {
+ if (reason instanceof _core_utils.XRefEntryException) {
+ this._pagePromises.length = 0;
+ await this.cleanup();
+ throw new _core_utils.XRefParseException();
+ }
+ });
+ }
+
+ fontFallback(id, handler) {
+ return this.catalog.fontFallback(id, handler);
+ }
+
+ async cleanup(manuallyTriggered = false) {
+ return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)();
+ }
+
+}
+
+exports.PDFDocument = PDFDocument;
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _parser = __w_pdfjs_require__(11);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _crypto = __w_pdfjs_require__(22);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _image_utils = __w_pdfjs_require__(24);
+
+function fetchDestination(dest) {
+ return (0, _primitives.isDict)(dest) ? dest.get("D") : dest;
+}
+
+class Catalog {
+ constructor(pdfManager, xref) {
+ this.pdfManager = pdfManager;
+ this.xref = xref;
+ this.catDict = xref.getCatalogObj();
+
+ if (!(0, _primitives.isDict)(this.catDict)) {
+ throw new _util.FormatError("Catalog object is not a dictionary.");
+ }
+
+ this.fontCache = new _primitives.RefSetCache();
+ this.builtInCMapCache = new Map();
+ this.globalImageCache = new _image_utils.GlobalImageCache();
+ this.pageKidsCountCache = new _primitives.RefSetCache();
+ }
+
+ get metadata() {
+ const streamRef = this.catDict.getRaw("Metadata");
+
+ if (!(0, _primitives.isRef)(streamRef)) {
+ return (0, _util.shadow)(this, "metadata", null);
+ }
+
+ const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);
+ const stream = this.xref.fetch(streamRef, suppressEncryption);
+ let metadata;
+
+ if (stream && (0, _primitives.isDict)(stream.dict)) {
+ const type = stream.dict.get("Type");
+ const subtype = stream.dict.get("Subtype");
+
+ if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) {
+ try {
+ metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));
+ } catch (e) {
+ if (e instanceof _core_utils.MissingDataException) {
+ throw e;
+ }
+
+ (0, _util.info)("Skipping invalid metadata.");
+ }
+ }
+ }
+
+ return (0, _util.shadow)(this, "metadata", metadata);
+ }
+
+ get toplevelPagesDict() {
+ const pagesObj = this.catDict.get("Pages");
+
+ if (!(0, _primitives.isDict)(pagesObj)) {
+ throw new _util.FormatError("Invalid top-level pages dictionary.");
+ }
+
+ return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj);
+ }
+
+ get documentOutline() {
+ let obj = null;
+
+ try {
+ obj = this._readDocumentOutline();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable to read document outline.");
+ }
+
+ return (0, _util.shadow)(this, "documentOutline", obj);
+ }
+
+ _readDocumentOutline() {
+ let obj = this.catDict.get("Outlines");
+
+ if (!(0, _primitives.isDict)(obj)) {
+ return null;
+ }
+
+ obj = obj.getRaw("First");
+
+ if (!(0, _primitives.isRef)(obj)) {
+ return null;
+ }
+
+ const root = {
+ items: []
+ };
+ const queue = [{
+ obj,
+ parent: root
+ }];
+ const processed = new _primitives.RefSet();
+ processed.put(obj);
+ const xref = this.xref,
+ blackColor = new Uint8ClampedArray(3);
+
+ while (queue.length > 0) {
+ const i = queue.shift();
+ const outlineDict = xref.fetchIfRef(i.obj);
+
+ if (outlineDict === null) {
+ continue;
+ }
+
+ if (!outlineDict.has("Title")) {
+ throw new _util.FormatError("Invalid outline item encountered.");
+ }
+
+ const data = {
+ url: null,
+ dest: null
+ };
+ Catalog.parseDestDictionary({
+ destDict: outlineDict,
+ resultObj: data,
+ docBaseUrl: this.pdfManager.docBaseUrl
+ });
+ const title = outlineDict.get("Title");
+ const flags = outlineDict.get("F") || 0;
+ const color = outlineDict.getArray("C");
+ const count = outlineDict.get("Count");
+ let rgbColor = blackColor;
+
+ if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {
+ rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);
+ }
+
+ const outlineItem = {
+ dest: data.dest,
+ url: data.url,
+ unsafeUrl: data.unsafeUrl,
+ newWindow: data.newWindow,
+ title: (0, _util.stringToPDFString)(title),
+ color: rgbColor,
+ count: Number.isInteger(count) ? count : undefined,
+ bold: !!(flags & 2),
+ italic: !!(flags & 1),
+ items: []
+ };
+ i.parent.items.push(outlineItem);
+ obj = outlineDict.getRaw("First");
+
+ if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
+ queue.push({
+ obj,
+ parent: outlineItem
+ });
+ processed.put(obj);
+ }
+
+ obj = outlineDict.getRaw("Next");
+
+ if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
+ queue.push({
+ obj,
+ parent: i.parent
+ });
+ processed.put(obj);
+ }
+ }
+
+ return root.items.length > 0 ? root.items : null;
+ }
+
+ get permissions() {
+ let permissions = null;
+
+ try {
+ permissions = this._readPermissions();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable to read permissions.");
+ }
+
+ return (0, _util.shadow)(this, "permissions", permissions);
+ }
+
+ _readPermissions() {
+ const encrypt = this.xref.trailer.get("Encrypt");
+
+ if (!(0, _primitives.isDict)(encrypt)) {
+ return null;
+ }
+
+ let flags = encrypt.get("P");
+
+ if (!(0, _util.isNum)(flags)) {
+ return null;
+ }
+
+ flags += 2 ** 32;
+ const permissions = [];
+
+ for (const key in _util.PermissionFlag) {
+ const value = _util.PermissionFlag[key];
+
+ if (flags & value) {
+ permissions.push(value);
+ }
+ }
+
+ return permissions;
+ }
+
+ get numPages() {
+ const obj = this.toplevelPagesDict.get("Count");
+
+ if (!Number.isInteger(obj)) {
+ throw new _util.FormatError("Page count in top-level pages dictionary is not an integer.");
+ }
+
+ return (0, _util.shadow)(this, "numPages", obj);
+ }
+
+ get destinations() {
+ const obj = this._readDests(),
+ dests = Object.create(null);
+
+ if (obj instanceof NameTree) {
+ const names = obj.getAll();
+
+ for (const name in names) {
+ dests[name] = fetchDestination(names[name]);
+ }
+ } else if (obj instanceof _primitives.Dict) {
+ obj.forEach(function (key, value) {
+ if (value) {
+ dests[key] = fetchDestination(value);
+ }
+ });
+ }
+
+ return (0, _util.shadow)(this, "destinations", dests);
+ }
+
+ getDestination(destinationId) {
+ const obj = this._readDests();
+
+ if (obj instanceof NameTree || obj instanceof _primitives.Dict) {
+ return fetchDestination(obj.get(destinationId) || null);
+ }
+
+ return null;
+ }
+
+ _readDests() {
+ const obj = this.catDict.get("Names");
+
+ if (obj && obj.has("Dests")) {
+ return new NameTree(obj.getRaw("Dests"), this.xref);
+ } else if (this.catDict.has("Dests")) {
+ return this.catDict.get("Dests");
+ }
+
+ return undefined;
+ }
+
+ get pageLabels() {
+ let obj = null;
+
+ try {
+ obj = this._readPageLabels();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable to read page labels.");
+ }
+
+ return (0, _util.shadow)(this, "pageLabels", obj);
+ }
+
+ _readPageLabels() {
+ const obj = this.catDict.getRaw("PageLabels");
+
+ if (!obj) {
+ return null;
+ }
+
+ const pageLabels = new Array(this.numPages);
+ let style = null,
+ prefix = "";
+ const numberTree = new NumberTree(obj, this.xref);
+ const nums = numberTree.getAll();
+ let currentLabel = "",
+ currentIndex = 1;
+
+ for (let i = 0, ii = this.numPages; i < ii; i++) {
+ if (i in nums) {
+ const labelDict = nums[i];
+
+ if (!(0, _primitives.isDict)(labelDict)) {
+ throw new _util.FormatError("PageLabel is not a dictionary.");
+ }
+
+ if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) {
+ throw new _util.FormatError("Invalid type in PageLabel dictionary.");
+ }
+
+ if (labelDict.has("S")) {
+ const s = labelDict.get("S");
+
+ if (!(0, _primitives.isName)(s)) {
+ throw new _util.FormatError("Invalid style in PageLabel dictionary.");
+ }
+
+ style = s.name;
+ } else {
+ style = null;
+ }
+
+ if (labelDict.has("P")) {
+ const p = labelDict.get("P");
+
+ if (!(0, _util.isString)(p)) {
+ throw new _util.FormatError("Invalid prefix in PageLabel dictionary.");
+ }
+
+ prefix = (0, _util.stringToPDFString)(p);
+ } else {
+ prefix = "";
+ }
+
+ if (labelDict.has("St")) {
+ const st = labelDict.get("St");
+
+ if (!(Number.isInteger(st) && st >= 1)) {
+ throw new _util.FormatError("Invalid start in PageLabel dictionary.");
+ }
+
+ currentIndex = st;
+ } else {
+ currentIndex = 1;
+ }
+ }
+
+ switch (style) {
+ case "D":
+ currentLabel = currentIndex;
+ break;
+
+ case "R":
+ case "r":
+ currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r");
+ break;
+
+ case "A":
+ case "a":
+ const LIMIT = 26;
+ const A_UPPER_CASE = 0x41,
+ A_LOWER_CASE = 0x61;
+ const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE;
+ const letterIndex = currentIndex - 1;
+ const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);
+ const charBuf = [];
+
+ for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {
+ charBuf.push(character);
+ }
+
+ currentLabel = charBuf.join("");
+ break;
+
+ default:
+ if (style) {
+ throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`);
+ }
+
+ currentLabel = "";
+ }
+
+ pageLabels[i] = prefix + currentLabel;
+ currentIndex++;
+ }
+
+ return pageLabels;
+ }
+
+ get pageLayout() {
+ const obj = this.catDict.get("PageLayout");
+ let pageLayout = "";
+
+ if ((0, _primitives.isName)(obj)) {
+ switch (obj.name) {
+ case "SinglePage":
+ case "OneColumn":
+ case "TwoColumnLeft":
+ case "TwoColumnRight":
+ case "TwoPageLeft":
+ case "TwoPageRight":
+ pageLayout = obj.name;
+ }
+ }
+
+ return (0, _util.shadow)(this, "pageLayout", pageLayout);
+ }
+
+ get pageMode() {
+ const obj = this.catDict.get("PageMode");
+ let pageMode = "UseNone";
+
+ if ((0, _primitives.isName)(obj)) {
+ switch (obj.name) {
+ case "UseNone":
+ case "UseOutlines":
+ case "UseThumbs":
+ case "FullScreen":
+ case "UseOC":
+ case "UseAttachments":
+ pageMode = obj.name;
+ }
+ }
+
+ return (0, _util.shadow)(this, "pageMode", pageMode);
+ }
+
+ get viewerPreferences() {
+ const ViewerPreferencesValidators = {
+ HideToolbar: _util.isBool,
+ HideMenubar: _util.isBool,
+ HideWindowUI: _util.isBool,
+ FitWindow: _util.isBool,
+ CenterWindow: _util.isBool,
+ DisplayDocTitle: _util.isBool,
+ NonFullScreenPageMode: _primitives.isName,
+ Direction: _primitives.isName,
+ ViewArea: _primitives.isName,
+ ViewClip: _primitives.isName,
+ PrintArea: _primitives.isName,
+ PrintClip: _primitives.isName,
+ PrintScaling: _primitives.isName,
+ Duplex: _primitives.isName,
+ PickTrayByPDFSize: _util.isBool,
+ PrintPageRange: Array.isArray,
+ NumCopies: Number.isInteger
+ };
+ const obj = this.catDict.get("ViewerPreferences");
+ let prefs = null;
+
+ if ((0, _primitives.isDict)(obj)) {
+ for (const key in ViewerPreferencesValidators) {
+ if (!obj.has(key)) {
+ continue;
+ }
+
+ const value = obj.get(key);
+
+ if (!ViewerPreferencesValidators[key](value)) {
+ (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
+ continue;
+ }
+
+ let prefValue;
+
+ switch (key) {
+ case "NonFullScreenPageMode":
+ switch (value.name) {
+ case "UseNone":
+ case "UseOutlines":
+ case "UseThumbs":
+ case "UseOC":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "UseNone";
+ }
+
+ break;
+
+ case "Direction":
+ switch (value.name) {
+ case "L2R":
+ case "R2L":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "L2R";
+ }
+
+ break;
+
+ case "ViewArea":
+ case "ViewClip":
+ case "PrintArea":
+ case "PrintClip":
+ switch (value.name) {
+ case "MediaBox":
+ case "CropBox":
+ case "BleedBox":
+ case "TrimBox":
+ case "ArtBox":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "CropBox";
+ }
+
+ break;
+
+ case "PrintScaling":
+ switch (value.name) {
+ case "None":
+ case "AppDefault":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "AppDefault";
+ }
+
+ break;
+
+ case "Duplex":
+ switch (value.name) {
+ case "Simplex":
+ case "DuplexFlipShortEdge":
+ case "DuplexFlipLongEdge":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "None";
+ }
+
+ break;
+
+ case "PrintPageRange":
+ const length = value.length;
+
+ if (length % 2 !== 0) {
+ break;
+ }
+
+ const isValid = value.every((page, i, arr) => {
+ return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages;
+ });
+
+ if (isValid) {
+ prefValue = value;
+ }
+
+ break;
+
+ case "NumCopies":
+ if (value > 0) {
+ prefValue = value;
+ }
+
+ break;
+
+ default:
+ if (typeof value !== "boolean") {
+ throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`);
+ }
+
+ prefValue = value;
+ }
+
+ if (prefValue !== undefined) {
+ if (!prefs) {
+ prefs = Object.create(null);
+ }
+
+ prefs[key] = prefValue;
+ } else {
+ (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
+ }
+ }
+ }
+
+ return (0, _util.shadow)(this, "viewerPreferences", prefs);
+ }
+
+ get openAction() {
+ const obj = this.catDict.get("OpenAction");
+ let openAction = null;
+
+ if ((0, _primitives.isDict)(obj)) {
+ const destDict = new _primitives.Dict(this.xref);
+ destDict.set("A", obj);
+ const resultObj = {
+ url: null,
+ dest: null,
+ action: null
+ };
+ Catalog.parseDestDictionary({
+ destDict,
+ resultObj
+ });
+
+ if (Array.isArray(resultObj.dest)) {
+ if (!openAction) {
+ openAction = Object.create(null);
+ }
+
+ openAction.dest = resultObj.dest;
+ } else if (resultObj.action) {
+ if (!openAction) {
+ openAction = Object.create(null);
+ }
+
+ openAction.action = resultObj.action;
+ }
+ } else if (Array.isArray(obj)) {
+ if (!openAction) {
+ openAction = Object.create(null);
+ }
+
+ openAction.dest = obj;
+ }
+
+ return (0, _util.shadow)(this, "openAction", openAction);
+ }
+
+ get attachments() {
+ const obj = this.catDict.get("Names");
+ let attachments = null;
+
+ if (obj && obj.has("EmbeddedFiles")) {
+ const nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
+ const names = nameTree.getAll();
+
+ for (const name in names) {
+ const fs = new FileSpec(names[name], this.xref);
+
+ if (!attachments) {
+ attachments = Object.create(null);
+ }
+
+ attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;
+ }
+ }
+
+ return (0, _util.shadow)(this, "attachments", attachments);
+ }
+
+ get javaScript() {
+ const obj = this.catDict.get("Names");
+ let javaScript = null;
+
+ function appendIfJavaScriptDict(jsDict) {
+ const type = jsDict.get("S");
+
+ if (!(0, _primitives.isName)(type, "JavaScript")) {
+ return;
+ }
+
+ let js = jsDict.get("JS");
+
+ if ((0, _primitives.isStream)(js)) {
+ js = (0, _util.bytesToString)(js.getBytes());
+ } else if (!(0, _util.isString)(js)) {
+ return;
+ }
+
+ if (!javaScript) {
+ javaScript = [];
+ }
+
+ javaScript.push((0, _util.stringToPDFString)(js));
+ }
+
+ if (obj && obj.has("JavaScript")) {
+ const nameTree = new NameTree(obj.getRaw("JavaScript"), this.xref);
+ const names = nameTree.getAll();
+
+ for (const name in names) {
+ const jsDict = names[name];
+
+ if ((0, _primitives.isDict)(jsDict)) {
+ appendIfJavaScriptDict(jsDict);
+ }
+ }
+ }
+
+ const openAction = this.catDict.get("OpenAction");
+
+ if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get("S"), "JavaScript")) {
+ appendIfJavaScriptDict(openAction);
+ }
+
+ return (0, _util.shadow)(this, "javaScript", javaScript);
+ }
+
+ fontFallback(id, handler) {
+ const promises = [];
+ this.fontCache.forEach(function (promise) {
+ promises.push(promise);
+ });
+ return Promise.all(promises).then(translatedFonts => {
+ for (const translatedFont of translatedFonts) {
+ if (translatedFont.loadedName === id) {
+ translatedFont.fallback(handler);
+ return;
+ }
+ }
+ });
+ }
+
+ cleanup(manuallyTriggered = false) {
+ (0, _primitives.clearPrimitiveCaches)();
+ this.globalImageCache.clear(manuallyTriggered);
+ this.pageKidsCountCache.clear();
+ const promises = [];
+ this.fontCache.forEach(function (promise) {
+ promises.push(promise);
+ });
+ return Promise.all(promises).then(translatedFonts => {
+ for (const {
+ dict
+ } of translatedFonts) {
+ delete dict.translated;
+ }
+
+ this.fontCache.clear();
+ this.builtInCMapCache.clear();
+ });
+ }
+
+ getPageDict(pageIndex) {
+ const capability = (0, _util.createPromiseCapability)();
+ const nodesToVisit = [this.catDict.getRaw("Pages")];
+ const visitedNodes = new _primitives.RefSet();
+ const xref = this.xref,
+ pageKidsCountCache = this.pageKidsCountCache;
+ let count,
+ currentPageIndex = 0;
+
+ function next() {
+ while (nodesToVisit.length) {
+ const currentNode = nodesToVisit.pop();
+
+ if ((0, _primitives.isRef)(currentNode)) {
+ count = pageKidsCountCache.get(currentNode);
+
+ if (count > 0 && currentPageIndex + count < pageIndex) {
+ currentPageIndex += count;
+ continue;
+ }
+
+ if (visitedNodes.has(currentNode)) {
+ capability.reject(new _util.FormatError("Pages tree contains circular reference."));
+ return;
+ }
+
+ visitedNodes.put(currentNode);
+ xref.fetchAsync(currentNode).then(function (obj) {
+ if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) {
+ if (pageIndex === currentPageIndex) {
+ if (currentNode && !pageKidsCountCache.has(currentNode)) {
+ pageKidsCountCache.put(currentNode, 1);
+ }
+
+ capability.resolve([obj, currentNode]);
+ } else {
+ currentPageIndex++;
+ next();
+ }
+
+ return;
+ }
+
+ nodesToVisit.push(obj);
+ next();
+ }, capability.reject);
+ return;
+ }
+
+ if (!(0, _primitives.isDict)(currentNode)) {
+ capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object."));
+ return;
+ }
+
+ count = currentNode.get("Count");
+
+ if (Number.isInteger(count) && count >= 0) {
+ const objId = currentNode.objId;
+
+ if (objId && !pageKidsCountCache.has(objId)) {
+ pageKidsCountCache.put(objId, count);
+ }
+
+ if (currentPageIndex + count <= pageIndex) {
+ currentPageIndex += count;
+ continue;
+ }
+ }
+
+ const kids = currentNode.get("Kids");
+
+ if (!Array.isArray(kids)) {
+ if ((0, _primitives.isName)(currentNode.get("Type"), "Page") || !currentNode.has("Type") && currentNode.has("Contents")) {
+ if (currentPageIndex === pageIndex) {
+ capability.resolve([currentNode, null]);
+ return;
+ }
+
+ currentPageIndex++;
+ continue;
+ }
+
+ capability.reject(new _util.FormatError("Page dictionary kids object is not an array."));
+ return;
+ }
+
+ for (let last = kids.length - 1; last >= 0; last--) {
+ nodesToVisit.push(kids[last]);
+ }
+ }
+
+ capability.reject(new Error(`Page index ${pageIndex} not found.`));
+ }
+
+ next();
+ return capability.promise;
+ }
+
+ getPageIndex(pageRef) {
+ const xref = this.xref;
+
+ function pagesBeforeRef(kidRef) {
+ let total = 0,
+ parentRef;
+ return xref.fetchAsync(kidRef).then(function (node) {
+ if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) {
+ throw new _util.FormatError("The reference does not point to a /Page dictionary.");
+ }
+
+ if (!node) {
+ return null;
+ }
+
+ if (!(0, _primitives.isDict)(node)) {
+ throw new _util.FormatError("Node must be a dictionary.");
+ }
+
+ parentRef = node.getRaw("Parent");
+ return node.getAsync("Parent");
+ }).then(function (parent) {
+ if (!parent) {
+ return null;
+ }
+
+ if (!(0, _primitives.isDict)(parent)) {
+ throw new _util.FormatError("Parent must be a dictionary.");
+ }
+
+ return parent.getAsync("Kids");
+ }).then(function (kids) {
+ if (!kids) {
+ return null;
+ }
+
+ const kidPromises = [];
+ let found = false;
+
+ for (let i = 0, ii = kids.length; i < ii; i++) {
+ const kid = kids[i];
+
+ if (!(0, _primitives.isRef)(kid)) {
+ throw new _util.FormatError("Kid must be a reference.");
+ }
+
+ if ((0, _primitives.isRefsEqual)(kid, kidRef)) {
+ found = true;
+ break;
+ }
+
+ kidPromises.push(xref.fetchAsync(kid).then(function (obj) {
+ if (!(0, _primitives.isDict)(obj)) {
+ throw new _util.FormatError("Kid node must be a dictionary.");
+ }
+
+ if (obj.has("Count")) {
+ total += obj.get("Count");
+ } else {
+ total++;
+ }
+ }));
+ }
+
+ if (!found) {
+ throw new _util.FormatError("Kid reference not found in parent's kids.");
+ }
+
+ return Promise.all(kidPromises).then(function () {
+ return [total, parentRef];
+ });
+ });
+ }
+
+ let total = 0;
+
+ function next(ref) {
+ return pagesBeforeRef(ref).then(function (args) {
+ if (!args) {
+ return total;
+ }
+
+ const [count, parentRef] = args;
+ total += count;
+ return next(parentRef);
+ });
+ }
+
+ return next(pageRef);
+ }
+
+ static parseDestDictionary(params) {
+ function addDefaultProtocolToUrl(url) {
+ return url.startsWith("www.") ? `http://${url}` : url;
+ }
+
+ function tryConvertUrlEncoding(url) {
+ try {
+ return (0, _util.stringToUTF8String)(url);
+ } catch (e) {
+ return url;
+ }
+ }
+
+ const destDict = params.destDict;
+
+ if (!(0, _primitives.isDict)(destDict)) {
+ (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary.");
+ return;
+ }
+
+ const resultObj = params.resultObj;
+
+ if (typeof resultObj !== "object") {
+ (0, _util.warn)("parseDestDictionary: `resultObj` must be an object.");
+ return;
+ }
+
+ const docBaseUrl = params.docBaseUrl || null;
+ let action = destDict.get("A"),
+ url,
+ dest;
+
+ if (!(0, _primitives.isDict)(action) && destDict.has("Dest")) {
+ action = destDict.get("Dest");
+ }
+
+ if ((0, _primitives.isDict)(action)) {
+ const actionType = action.get("S");
+
+ if (!(0, _primitives.isName)(actionType)) {
+ (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary.");
+ return;
+ }
+
+ const actionName = actionType.name;
+
+ switch (actionName) {
+ case "URI":
+ url = action.get("URI");
+
+ if ((0, _primitives.isName)(url)) {
+ url = "/" + url.name;
+ } else if ((0, _util.isString)(url)) {
+ url = addDefaultProtocolToUrl(url);
+ }
+
+ break;
+
+ case "GoTo":
+ dest = action.get("D");
+ break;
+
+ case "Launch":
+ case "GoToR":
+ const urlDict = action.get("F");
+
+ if ((0, _primitives.isDict)(urlDict)) {
+ url = urlDict.get("F") || null;
+ } else if ((0, _util.isString)(urlDict)) {
+ url = urlDict;
+ }
+
+ let remoteDest = action.get("D");
+
+ if (remoteDest) {
+ if ((0, _primitives.isName)(remoteDest)) {
+ remoteDest = remoteDest.name;
+ }
+
+ if ((0, _util.isString)(url)) {
+ const baseUrl = url.split("#")[0];
+
+ if ((0, _util.isString)(remoteDest)) {
+ url = baseUrl + "#" + remoteDest;
+ } else if (Array.isArray(remoteDest)) {
+ url = baseUrl + "#" + JSON.stringify(remoteDest);
+ }
+ }
+ }
+
+ const newWindow = action.get("NewWindow");
+
+ if ((0, _util.isBool)(newWindow)) {
+ resultObj.newWindow = newWindow;
+ }
+
+ break;
+
+ case "Named":
+ const namedAction = action.get("N");
+
+ if ((0, _primitives.isName)(namedAction)) {
+ resultObj.action = namedAction.name;
+ }
+
+ break;
+
+ case "JavaScript":
+ const jsAction = action.get("JS");
+ let js;
+
+ if ((0, _primitives.isStream)(jsAction)) {
+ js = (0, _util.bytesToString)(jsAction.getBytes());
+ } else if ((0, _util.isString)(jsAction)) {
+ js = jsAction;
+ }
+
+ if (js) {
+ const URL_OPEN_METHODS = ["app.launchURL", "window.open"];
+ const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i");
+ const jsUrl = regex.exec((0, _util.stringToPDFString)(js));
+
+ if (jsUrl && jsUrl[2]) {
+ url = jsUrl[2];
+
+ if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") {
+ resultObj.newWindow = true;
+ }
+
+ break;
+ }
+ }
+
+ default:
+ (0, _util.warn)(`parseDestDictionary: unsupported action type "${actionName}".`);
+ break;
+ }
+ } else if (destDict.has("Dest")) {
+ dest = destDict.get("Dest");
+ }
+
+ if ((0, _util.isString)(url)) {
+ url = tryConvertUrlEncoding(url);
+ const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);
+
+ if (absoluteUrl) {
+ resultObj.url = absoluteUrl.href;
+ }
+
+ resultObj.unsafeUrl = url;
+ }
+
+ if (dest) {
+ if ((0, _primitives.isName)(dest)) {
+ dest = dest.name;
+ }
+
+ if ((0, _util.isString)(dest) || Array.isArray(dest)) {
+ resultObj.dest = dest;
+ }
+ }
+ }
+
+}
+
+exports.Catalog = Catalog;
+
+var XRef = function XRefClosure() {
+ function XRef(stream, pdfManager) {
+ this.stream = stream;
+ this.pdfManager = pdfManager;
+ this.entries = [];
+ this.xrefstms = Object.create(null);
+ this._cacheMap = new Map();
+ this.stats = {
+ streamTypes: Object.create(null),
+ fontTypes: Object.create(null)
+ };
+ }
+
+ XRef.prototype = {
+ setStartXRef: function XRef_setStartXRef(startXRef) {
+ this.startXRefQueue = [startXRef];
+ },
+ parse: function XRef_parse(recoveryMode) {
+ var trailerDict;
+
+ if (!recoveryMode) {
+ trailerDict = this.readXRef();
+ } else {
+ (0, _util.warn)("Indexing all PDF objects");
+ trailerDict = this.indexObjects();
+ }
+
+ trailerDict.assignXref(this);
+ this.trailer = trailerDict;
+ let encrypt;
+
+ try {
+ encrypt = trailerDict.get("Encrypt");
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`);
+ }
+
+ if ((0, _primitives.isDict)(encrypt)) {
+ var ids = trailerDict.get("ID");
+ var fileId = ids && ids.length ? ids[0] : "";
+ encrypt.suppressEncryption = true;
+ this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);
+ }
+
+ let root;
+
+ try {
+ root = trailerDict.get("Root");
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`);
+ }
+
+ if ((0, _primitives.isDict)(root) && root.has("Pages")) {
+ this.root = root;
+ } else {
+ if (!recoveryMode) {
+ throw new _core_utils.XRefParseException();
+ }
+
+ throw new _util.FormatError("Invalid root reference");
+ }
+ },
+ processXRefTable: function XRef_processXRefTable(parser) {
+ if (!("tableState" in this)) {
+ this.tableState = {
+ entryNum: 0,
+ streamPos: parser.lexer.stream.pos,
+ parserBuf1: parser.buf1,
+ parserBuf2: parser.buf2
+ };
+ }
+
+ var obj = this.readXRefTable(parser);
+
+ if (!(0, _primitives.isCmd)(obj, "trailer")) {
+ throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary");
+ }
+
+ var dict = parser.getObj();
+
+ if (!(0, _primitives.isDict)(dict) && dict.dict) {
+ dict = dict.dict;
+ }
+
+ if (!(0, _primitives.isDict)(dict)) {
+ throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary");
+ }
+
+ delete this.tableState;
+ return dict;
+ },
+ readXRefTable: function XRef_readXRefTable(parser) {
+ var stream = parser.lexer.stream;
+ var tableState = this.tableState;
+ stream.pos = tableState.streamPos;
+ parser.buf1 = tableState.parserBuf1;
+ parser.buf2 = tableState.parserBuf2;
+ var obj;
+
+ while (true) {
+ if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) {
+ if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) {
+ break;
+ }
+
+ tableState.firstEntryNum = obj;
+ tableState.entryCount = parser.getObj();
+ }
+
+ var first = tableState.firstEntryNum;
+ var count = tableState.entryCount;
+
+ if (!Number.isInteger(first) || !Number.isInteger(count)) {
+ throw new _util.FormatError("Invalid XRef table: wrong types in subsection header");
+ }
+
+ for (var i = tableState.entryNum; i < count; i++) {
+ tableState.streamPos = stream.pos;
+ tableState.entryNum = i;
+ tableState.parserBuf1 = parser.buf1;
+ tableState.parserBuf2 = parser.buf2;
+ var entry = {};
+ entry.offset = parser.getObj();
+ entry.gen = parser.getObj();
+ var type = parser.getObj();
+
+ if (type instanceof _primitives.Cmd) {
+ switch (type.cmd) {
+ case "f":
+ entry.free = true;
+ break;
+
+ case "n":
+ entry.uncompressed = true;
+ break;
+ }
+ }
+
+ if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {
+ throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`);
+ }
+
+ if (i === 0 && entry.free && first === 1) {
+ first = 0;
+ }
+
+ if (!this.entries[i + first]) {
+ this.entries[i + first] = entry;
+ }
+ }
+
+ tableState.entryNum = 0;
+ tableState.streamPos = stream.pos;
+ tableState.parserBuf1 = parser.buf1;
+ tableState.parserBuf2 = parser.buf2;
+ delete tableState.firstEntryNum;
+ delete tableState.entryCount;
+ }
+
+ if (this.entries[0] && !this.entries[0].free) {
+ throw new _util.FormatError("Invalid XRef table: unexpected first object");
+ }
+
+ return obj;
+ },
+ processXRefStream: function XRef_processXRefStream(stream) {
+ if (!("streamState" in this)) {
+ var streamParameters = stream.dict;
+ var byteWidths = streamParameters.get("W");
+ var range = streamParameters.get("Index");
+
+ if (!range) {
+ range = [0, streamParameters.get("Size")];
+ }
+
+ this.streamState = {
+ entryRanges: range,
+ byteWidths,
+ entryNum: 0,
+ streamPos: stream.pos
+ };
+ }
+
+ this.readXRefStream(stream);
+ delete this.streamState;
+ return stream.dict;
+ },
+ readXRefStream: function XRef_readXRefStream(stream) {
+ var i, j;
+ var streamState = this.streamState;
+ stream.pos = streamState.streamPos;
+ var byteWidths = streamState.byteWidths;
+ var typeFieldWidth = byteWidths[0];
+ var offsetFieldWidth = byteWidths[1];
+ var generationFieldWidth = byteWidths[2];
+ var entryRanges = streamState.entryRanges;
+
+ while (entryRanges.length > 0) {
+ var first = entryRanges[0];
+ var n = entryRanges[1];
+
+ if (!Number.isInteger(first) || !Number.isInteger(n)) {
+ throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`);
+ }
+
+ if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {
+ throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`);
+ }
+
+ for (i = streamState.entryNum; i < n; ++i) {
+ streamState.entryNum = i;
+ streamState.streamPos = stream.pos;
+ var type = 0,
+ offset = 0,
+ generation = 0;
+
+ for (j = 0; j < typeFieldWidth; ++j) {
+ type = type << 8 | stream.getByte();
+ }
+
+ if (typeFieldWidth === 0) {
+ type = 1;
+ }
+
+ for (j = 0; j < offsetFieldWidth; ++j) {
+ offset = offset << 8 | stream.getByte();
+ }
+
+ for (j = 0; j < generationFieldWidth; ++j) {
+ generation = generation << 8 | stream.getByte();
+ }
+
+ var entry = {};
+ entry.offset = offset;
+ entry.gen = generation;
+
+ switch (type) {
+ case 0:
+ entry.free = true;
+ break;
+
+ case 1:
+ entry.uncompressed = true;
+ break;
+
+ case 2:
+ break;
+
+ default:
+ throw new _util.FormatError(`Invalid XRef entry type: ${type}`);
+ }
+
+ if (!this.entries[first + i]) {
+ this.entries[first + i] = entry;
+ }
+ }
+
+ streamState.entryNum = 0;
+ streamState.streamPos = stream.pos;
+ entryRanges.splice(0, 2);
+ }
+ },
+ indexObjects: function XRef_indexObjects() {
+ var TAB = 0x9,
+ LF = 0xa,
+ CR = 0xd,
+ SPACE = 0x20;
+ var PERCENT = 0x25,
+ LT = 0x3c;
+
+ function readToken(data, offset) {
+ var token = "",
+ ch = data[offset];
+
+ while (ch !== LF && ch !== CR && ch !== LT) {
+ if (++offset >= data.length) {
+ break;
+ }
+
+ token += String.fromCharCode(ch);
+ ch = data[offset];
+ }
+
+ return token;
+ }
+
+ function skipUntil(data, offset, what) {
+ var length = what.length,
+ dataLength = data.length;
+ var skipped = 0;
+
+ while (offset < dataLength) {
+ var i = 0;
+
+ while (i < length && data[offset + i] === what[i]) {
+ ++i;
+ }
+
+ if (i >= length) {
+ break;
+ }
+
+ offset++;
+ skipped++;
+ }
+
+ return skipped;
+ }
+
+ var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/;
+ const endobjRegExp = /\bendobj[\b\s]$/;
+ const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/;
+ const CHECK_CONTENT_LENGTH = 25;
+ var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
+ var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);
+ const objBytes = new Uint8Array([111, 98, 106]);
+ var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
+ this.entries.length = 0;
+ var stream = this.stream;
+ stream.pos = 0;
+ var buffer = stream.getBytes();
+ var position = stream.start,
+ length = buffer.length;
+ var trailers = [],
+ xrefStms = [];
+
+ while (position < length) {
+ var ch = buffer[position];
+
+ if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {
+ ++position;
+ continue;
+ }
+
+ if (ch === PERCENT) {
+ do {
+ ++position;
+
+ if (position >= length) {
+ break;
+ }
+
+ ch = buffer[position];
+ } while (ch !== LF && ch !== CR);
+
+ continue;
+ }
+
+ var token = readToken(buffer, position);
+ var m;
+
+ if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) {
+ position += skipUntil(buffer, position, trailerBytes);
+ trailers.push(position);
+ position += skipUntil(buffer, position, startxrefBytes);
+ } else if (m = objRegExp.exec(token)) {
+ const num = m[1] | 0,
+ gen = m[2] | 0;
+
+ if (!this.entries[num] || this.entries[num].gen === gen) {
+ this.entries[num] = {
+ offset: position - stream.start,
+ gen,
+ uncompressed: true
+ };
+ }
+
+ let contentLength,
+ startPos = position + token.length;
+
+ while (startPos < buffer.length) {
+ const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4;
+ contentLength = endPos - position;
+ const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos);
+ const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos));
+
+ if (endobjRegExp.test(tokenStr)) {
+ break;
+ } else {
+ const objToken = nestedObjRegExp.exec(tokenStr);
+
+ if (objToken && objToken[1]) {
+ (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.');
+ contentLength -= objToken[1].length;
+ break;
+ }
+ }
+
+ startPos = endPos;
+ }
+
+ const content = buffer.subarray(position, position + contentLength);
+ var xrefTagOffset = skipUntil(content, 0, xrefBytes);
+
+ if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {
+ xrefStms.push(position - stream.start);
+ this.xrefstms[position - stream.start] = 1;
+ }
+
+ position += contentLength;
+ } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) {
+ trailers.push(position);
+ position += skipUntil(buffer, position, startxrefBytes);
+ } else {
+ position += token.length + 1;
+ }
+ }
+
+ var i, ii;
+
+ for (i = 0, ii = xrefStms.length; i < ii; ++i) {
+ this.startXRefQueue.push(xrefStms[i]);
+ this.readXRef(true);
+ }
+
+ let trailerDict;
+
+ for (i = 0, ii = trailers.length; i < ii; ++i) {
+ stream.pos = trailers[i];
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true,
+ recoveryMode: true
+ });
+ var obj = parser.getObj();
+
+ if (!(0, _primitives.isCmd)(obj, "trailer")) {
+ continue;
+ }
+
+ const dict = parser.getObj();
+
+ if (!(0, _primitives.isDict)(dict)) {
+ continue;
+ }
+
+ let rootDict;
+
+ try {
+ rootDict = dict.get("Root");
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ continue;
+ }
+
+ if (!(0, _primitives.isDict)(rootDict) || !rootDict.has("Pages")) {
+ continue;
+ }
+
+ if (dict.has("ID")) {
+ return dict;
+ }
+
+ trailerDict = dict;
+ }
+
+ if (trailerDict) {
+ return trailerDict;
+ }
+
+ throw new _util.InvalidPDFException("Invalid PDF structure.");
+ },
+ readXRef: function XRef_readXRef(recoveryMode) {
+ var stream = this.stream;
+ const startXRefParsedCache = Object.create(null);
+
+ try {
+ while (this.startXRefQueue.length) {
+ var startXRef = this.startXRefQueue[0];
+
+ if (startXRefParsedCache[startXRef]) {
+ (0, _util.warn)("readXRef - skipping XRef table since it was already parsed.");
+ this.startXRefQueue.shift();
+ continue;
+ }
+
+ startXRefParsedCache[startXRef] = true;
+ stream.pos = startXRef + stream.start;
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true
+ });
+ var obj = parser.getObj();
+ var dict;
+
+ if ((0, _primitives.isCmd)(obj, "xref")) {
+ dict = this.processXRefTable(parser);
+
+ if (!this.topDict) {
+ this.topDict = dict;
+ }
+
+ obj = dict.get("XRefStm");
+
+ if (Number.isInteger(obj)) {
+ var pos = obj;
+
+ if (!(pos in this.xrefstms)) {
+ this.xrefstms[pos] = 1;
+ this.startXRefQueue.push(pos);
+ }
+ }
+ } else if (Number.isInteger(obj)) {
+ if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !(0, _primitives.isStream)(obj = parser.getObj())) {
+ throw new _util.FormatError("Invalid XRef stream");
+ }
+
+ dict = this.processXRefStream(obj);
+
+ if (!this.topDict) {
+ this.topDict = dict;
+ }
+
+ if (!dict) {
+ throw new _util.FormatError("Failed to read XRef stream");
+ }
+ } else {
+ throw new _util.FormatError("Invalid XRef stream header");
+ }
+
+ obj = dict.get("Prev");
+
+ if (Number.isInteger(obj)) {
+ this.startXRefQueue.push(obj);
+ } else if ((0, _primitives.isRef)(obj)) {
+ this.startXRefQueue.push(obj.num);
+ }
+
+ this.startXRefQueue.shift();
+ }
+
+ return this.topDict;
+ } catch (e) {
+ if (e instanceof _core_utils.MissingDataException) {
+ throw e;
+ }
+
+ (0, _util.info)("(while reading XRef): " + e);
+ }
+
+ if (recoveryMode) {
+ return undefined;
+ }
+
+ throw new _core_utils.XRefParseException();
+ },
+ getEntry: function XRef_getEntry(i) {
+ var xrefEntry = this.entries[i];
+
+ if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
+ return xrefEntry;
+ }
+
+ return null;
+ },
+ fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) {
+ if (obj instanceof _primitives.Ref) {
+ return this.fetch(obj, suppressEncryption);
+ }
+
+ return obj;
+ },
+ fetch: function XRef_fetch(ref, suppressEncryption) {
+ if (!(ref instanceof _primitives.Ref)) {
+ throw new Error("ref object is not a reference");
+ }
+
+ const num = ref.num;
+
+ const cacheEntry = this._cacheMap.get(num);
+
+ if (cacheEntry !== undefined) {
+ if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {
+ cacheEntry.objId = ref.toString();
+ }
+
+ return cacheEntry;
+ }
+
+ let xrefEntry = this.getEntry(num);
+
+ if (xrefEntry === null) {
+ this._cacheMap.set(num, xrefEntry);
+
+ return xrefEntry;
+ }
+
+ if (xrefEntry.uncompressed) {
+ xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);
+ } else {
+ xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption);
+ }
+
+ if ((0, _primitives.isDict)(xrefEntry)) {
+ xrefEntry.objId = ref.toString();
+ } else if ((0, _primitives.isStream)(xrefEntry)) {
+ xrefEntry.dict.objId = ref.toString();
+ }
+
+ return xrefEntry;
+ },
+
+ fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {
+ var gen = ref.gen;
+ var num = ref.num;
+
+ if (xrefEntry.gen !== gen) {
+ throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`);
+ }
+
+ var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true
+ });
+ var obj1 = parser.getObj();
+ var obj2 = parser.getObj();
+ var obj3 = parser.getObj();
+
+ if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) {
+ throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
+ }
+
+ if (obj3.cmd !== "obj") {
+ if (obj3.cmd.startsWith("obj")) {
+ num = parseInt(obj3.cmd.substring(3), 10);
+
+ if (!Number.isNaN(num)) {
+ return num;
+ }
+ }
+
+ throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
+ }
+
+ if (this.encrypt && !suppressEncryption) {
+ xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));
+ } else {
+ xrefEntry = parser.getObj();
+ }
+
+ if (!(0, _primitives.isStream)(xrefEntry)) {
+ this._cacheMap.set(num, xrefEntry);
+ }
+
+ return xrefEntry;
+ },
+
+ fetchCompressed(ref, xrefEntry, suppressEncryption = false) {
+ const tableOffset = xrefEntry.offset;
+ const stream = this.fetch(_primitives.Ref.get(tableOffset, 0));
+
+ if (!(0, _primitives.isStream)(stream)) {
+ throw new _util.FormatError("bad ObjStm stream");
+ }
+
+ const first = stream.dict.get("First");
+ const n = stream.dict.get("N");
+
+ if (!Number.isInteger(first) || !Number.isInteger(n)) {
+ throw new _util.FormatError("invalid first and n parameters for ObjStm stream");
+ }
+
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true
+ });
+ const nums = new Array(n);
+
+ for (let i = 0; i < n; ++i) {
+ const num = parser.getObj();
+
+ if (!Number.isInteger(num)) {
+ throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`);
+ }
+
+ const offset = parser.getObj();
+
+ if (!Number.isInteger(offset)) {
+ throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`);
+ }
+
+ nums[i] = num;
+ }
+
+ const entries = new Array(n);
+
+ for (let i = 0; i < n; ++i) {
+ const obj = parser.getObj();
+ entries[i] = obj;
+
+ if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === "endobj") {
+ parser.shift();
+ }
+
+ if ((0, _primitives.isStream)(obj)) {
+ continue;
+ }
+
+ const num = nums[i],
+ entry = this.entries[num];
+
+ if (entry && entry.offset === tableOffset && entry.gen === i) {
+ this._cacheMap.set(num, obj);
+ }
+ }
+
+ xrefEntry = entries[xrefEntry.gen];
+
+ if (xrefEntry === undefined) {
+ throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);
+ }
+
+ return xrefEntry;
+ },
+
+ async fetchIfRefAsync(obj, suppressEncryption) {
+ if (obj instanceof _primitives.Ref) {
+ return this.fetchAsync(obj, suppressEncryption);
+ }
+
+ return obj;
+ },
+
+ async fetchAsync(ref, suppressEncryption) {
+ try {
+ return this.fetch(ref, suppressEncryption);
+ } catch (ex) {
+ if (!(ex instanceof _core_utils.MissingDataException)) {
+ throw ex;
+ }
+
+ await this.pdfManager.requestRange(ex.begin, ex.end);
+ return this.fetchAsync(ref, suppressEncryption);
+ }
+ },
+
+ getCatalogObj: function XRef_getCatalogObj() {
+ return this.root;
+ }
+ };
+ return XRef;
+}();
+
+exports.XRef = XRef;
+
+class NameOrNumberTree {
+ constructor(root, xref, type) {
+ if (this.constructor === NameOrNumberTree) {
+ (0, _util.unreachable)("Cannot initialize NameOrNumberTree.");
+ }
+
+ this.root = root;
+ this.xref = xref;
+ this._type = type;
+ }
+
+ getAll() {
+ const dict = Object.create(null);
+
+ if (!this.root) {
+ return dict;
+ }
+
+ const xref = this.xref;
+ const processed = new _primitives.RefSet();
+ processed.put(this.root);
+ const queue = [this.root];
+
+ while (queue.length > 0) {
+ const obj = xref.fetchIfRef(queue.shift());
+
+ if (!(0, _primitives.isDict)(obj)) {
+ continue;
+ }
+
+ if (obj.has("Kids")) {
+ const kids = obj.get("Kids");
+
+ for (let i = 0, ii = kids.length; i < ii; i++) {
+ const kid = kids[i];
+
+ if (processed.has(kid)) {
+ throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`);
+ }
+
+ queue.push(kid);
+ processed.put(kid);
+ }
+
+ continue;
+ }
+
+ const entries = obj.get(this._type);
+
+ if (Array.isArray(entries)) {
+ for (let i = 0, ii = entries.length; i < ii; i += 2) {
+ dict[xref.fetchIfRef(entries[i])] = xref.fetchIfRef(entries[i + 1]);
+ }
+ }
+ }
+
+ return dict;
+ }
+
+ get(key) {
+ if (!this.root) {
+ return null;
+ }
+
+ const xref = this.xref;
+ let kidsOrEntries = xref.fetchIfRef(this.root);
+ let loopCount = 0;
+ const MAX_LEVELS = 10;
+
+ while (kidsOrEntries.has("Kids")) {
+ if (++loopCount > MAX_LEVELS) {
+ (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`);
+ return null;
+ }
+
+ const kids = kidsOrEntries.get("Kids");
+
+ if (!Array.isArray(kids)) {
+ return null;
+ }
+
+ let l = 0,
+ r = kids.length - 1;
+
+ while (l <= r) {
+ const m = l + r >> 1;
+ const kid = xref.fetchIfRef(kids[m]);
+ const limits = kid.get("Limits");
+
+ if (key < xref.fetchIfRef(limits[0])) {
+ r = m - 1;
+ } else if (key > xref.fetchIfRef(limits[1])) {
+ l = m + 1;
+ } else {
+ kidsOrEntries = xref.fetchIfRef(kids[m]);
+ break;
+ }
+ }
+
+ if (l > r) {
+ return null;
+ }
+ }
+
+ const entries = kidsOrEntries.get(this._type);
+
+ if (Array.isArray(entries)) {
+ let l = 0,
+ r = entries.length - 2;
+
+ while (l <= r) {
+ const tmp = l + r >> 1,
+ m = tmp + (tmp & 1);
+ const currentKey = xref.fetchIfRef(entries[m]);
+
+ if (key < currentKey) {
+ r = m - 2;
+ } else if (key > currentKey) {
+ l = m + 2;
+ } else {
+ return xref.fetchIfRef(entries[m + 1]);
+ }
+ }
+
+ (0, _util.info)(`Falling back to an exhaustive search, for key "${key}", ` + `in "${this._type}" tree.`);
+
+ for (let m = 0, mm = entries.length; m < mm; m += 2) {
+ const currentKey = xref.fetchIfRef(entries[m]);
+
+ if (currentKey === key) {
+ (0, _util.warn)(`The "${key}" key was found at an incorrect, ` + `i.e. out-of-order, position in "${this._type}" tree.`);
+ return xref.fetchIfRef(entries[m + 1]);
+ }
+ }
+ }
+
+ return null;
+ }
+
+}
+
+class NameTree extends NameOrNumberTree {
+ constructor(root, xref) {
+ super(root, xref, "Names");
+ }
+
+}
+
+class NumberTree extends NameOrNumberTree {
+ constructor(root, xref) {
+ super(root, xref, "Nums");
+ }
+
+}
+
+var FileSpec = function FileSpecClosure() {
+ function FileSpec(root, xref) {
+ if (!root || !(0, _primitives.isDict)(root)) {
+ return;
+ }
+
+ this.xref = xref;
+ this.root = root;
+
+ if (root.has("FS")) {
+ this.fs = root.get("FS");
+ }
+
+ this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : "";
+
+ if (root.has("RF")) {
+ (0, _util.warn)("Related file specifications are not supported");
+ }
+
+ this.contentAvailable = true;
+
+ if (!root.has("EF")) {
+ this.contentAvailable = false;
+ (0, _util.warn)("Non-embedded file specifications are not supported");
+ }
+ }
+
+ function pickPlatformItem(dict) {
+ if (dict.has("UF")) {
+ return dict.get("UF");
+ } else if (dict.has("F")) {
+ return dict.get("F");
+ } else if (dict.has("Unix")) {
+ return dict.get("Unix");
+ } else if (dict.has("Mac")) {
+ return dict.get("Mac");
+ } else if (dict.has("DOS")) {
+ return dict.get("DOS");
+ }
+
+ return null;
+ }
+
+ FileSpec.prototype = {
+ get filename() {
+ if (!this._filename && this.root) {
+ var filename = pickPlatformItem(this.root) || "unnamed";
+ this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/");
+ }
+
+ return this._filename;
+ },
+
+ get content() {
+ if (!this.contentAvailable) {
+ return null;
+ }
+
+ if (!this.contentRef && this.root) {
+ this.contentRef = pickPlatformItem(this.root.get("EF"));
+ }
+
+ var content = null;
+
+ if (this.contentRef) {
+ var xref = this.xref;
+ var fileObj = xref.fetchIfRef(this.contentRef);
+
+ if (fileObj && (0, _primitives.isStream)(fileObj)) {
+ content = fileObj.getBytes();
+ } else {
+ (0, _util.warn)("Embedded file specification points to non-existing/invalid " + "content");
+ }
+ } else {
+ (0, _util.warn)("Embedded file specification does not have a content");
+ }
+
+ return content;
+ },
+
+ get serializable() {
+ return {
+ filename: this.filename,
+ content: this.content
+ };
+ }
+
+ };
+ return FileSpec;
+}();
+
+exports.FileSpec = FileSpec;
+
+const ObjectLoader = function () {
+ function mayHaveChildren(value) {
+ return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value);
+ }
+
+ function addChildren(node, nodesToVisit) {
+ if (node instanceof _primitives.Dict || (0, _primitives.isStream)(node)) {
+ const dict = node instanceof _primitives.Dict ? node : node.dict;
+ const dictKeys = dict.getKeys();
+
+ for (let i = 0, ii = dictKeys.length; i < ii; i++) {
+ const rawValue = dict.getRaw(dictKeys[i]);
+
+ if (mayHaveChildren(rawValue)) {
+ nodesToVisit.push(rawValue);
+ }
+ }
+ } else if (Array.isArray(node)) {
+ for (let i = 0, ii = node.length; i < ii; i++) {
+ const value = node[i];
+
+ if (mayHaveChildren(value)) {
+ nodesToVisit.push(value);
+ }
+ }
+ }
+ }
+
+ function ObjectLoader(dict, keys, xref) {
+ this.dict = dict;
+ this.keys = keys;
+ this.xref = xref;
+ this.refSet = null;
+ }
+
+ ObjectLoader.prototype = {
+ async load() {
+ if (!this.xref.stream.allChunksLoaded || this.xref.stream.allChunksLoaded()) {
+ return undefined;
+ }
+
+ const {
+ keys,
+ dict
+ } = this;
+ this.refSet = new _primitives.RefSet();
+ const nodesToVisit = [];
+
+ for (let i = 0, ii = keys.length; i < ii; i++) {
+ const rawValue = dict.getRaw(keys[i]);
+
+ if (rawValue !== undefined) {
+ nodesToVisit.push(rawValue);
+ }
+ }
+
+ return this._walk(nodesToVisit);
+ },
+
+ async _walk(nodesToVisit) {
+ const nodesToRevisit = [];
+ const pendingRequests = [];
+
+ while (nodesToVisit.length) {
+ let currentNode = nodesToVisit.pop();
+
+ if (currentNode instanceof _primitives.Ref) {
+ if (this.refSet.has(currentNode)) {
+ continue;
+ }
+
+ try {
+ this.refSet.put(currentNode);
+ currentNode = this.xref.fetch(currentNode);
+ } catch (ex) {
+ if (!(ex instanceof _core_utils.MissingDataException)) {
+ throw ex;
+ }
+
+ nodesToRevisit.push(currentNode);
+ pendingRequests.push({
+ begin: ex.begin,
+ end: ex.end
+ });
+ }
+ }
+
+ if (currentNode && currentNode.getBaseStreams) {
+ const baseStreams = currentNode.getBaseStreams();
+ let foundMissingData = false;
+
+ for (let i = 0, ii = baseStreams.length; i < ii; i++) {
+ const stream = baseStreams[i];
+
+ if (stream.allChunksLoaded && !stream.allChunksLoaded()) {
+ foundMissingData = true;
+ pendingRequests.push({
+ begin: stream.start,
+ end: stream.end
+ });
+ }
+ }
+
+ if (foundMissingData) {
+ nodesToRevisit.push(currentNode);
+ }
+ }
+
+ addChildren(currentNode, nodesToVisit);
+ }
+
+ if (pendingRequests.length) {
+ await this.xref.stream.manager.requestRanges(pendingRequests);
+
+ for (let i = 0, ii = nodesToRevisit.length; i < ii; i++) {
+ const node = nodesToRevisit[i];
+
+ if (node instanceof _primitives.Ref) {
+ this.refSet.remove(node);
+ }
+ }
+
+ return this._walk(nodesToRevisit);
+ }
+
+ this.refSet = null;
+ return undefined;
+ }
+
+ };
+ return ObjectLoader;
+}();
+
+exports.ObjectLoader = ObjectLoader;
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Parser = exports.Linearization = exports.Lexer = void 0;
+
+var _stream = __w_pdfjs_require__(12);
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _ccitt_stream = __w_pdfjs_require__(13);
+
+var _jbig2_stream = __w_pdfjs_require__(15);
+
+var _jpeg_stream = __w_pdfjs_require__(18);
+
+var _jpx_stream = __w_pdfjs_require__(20);
+
+const MAX_LENGTH_TO_CACHE = 1000;
+const MAX_ADLER32_LENGTH = 5552;
+
+function computeAdler32(bytes) {
+ const bytesLength = bytes.length;
+ let a = 1,
+ b = 0;
+
+ for (let i = 0; i < bytesLength; ++i) {
+ a += bytes[i] & 0xff;
+ b += a;
+ }
+
+ return b % 65521 << 16 | a % 65521;
+}
+
+class Parser {
+ constructor({
+ lexer,
+ xref,
+ allowStreams = false,
+ recoveryMode = false
+ }) {
+ this.lexer = lexer;
+ this.xref = xref;
+ this.allowStreams = allowStreams;
+ this.recoveryMode = recoveryMode;
+ this.imageCache = Object.create(null);
+ this.refill();
+ }
+
+ refill() {
+ this.buf1 = this.lexer.getObj();
+ this.buf2 = this.lexer.getObj();
+ }
+
+ shift() {
+ if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") {
+ this.buf1 = this.buf2;
+ this.buf2 = null;
+ } else {
+ this.buf1 = this.buf2;
+ this.buf2 = this.lexer.getObj();
+ }
+ }
+
+ tryShift() {
+ try {
+ this.shift();
+ return true;
+ } catch (e) {
+ if (e instanceof _core_utils.MissingDataException) {
+ throw e;
+ }
+
+ return false;
+ }
+ }
+
+ getObj(cipherTransform = null) {
+ const buf1 = this.buf1;
+ this.shift();
+
+ if (buf1 instanceof _primitives.Cmd) {
+ switch (buf1.cmd) {
+ case "BI":
+ return this.makeInlineImage(cipherTransform);
+
+ case "[":
+ const array = [];
+
+ while (!(0, _primitives.isCmd)(this.buf1, "]") && !(0, _primitives.isEOF)(this.buf1)) {
+ array.push(this.getObj(cipherTransform));
+ }
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ if (!this.recoveryMode) {
+ throw new _util.FormatError("End of file inside array");
+ }
+
+ return array;
+ }
+
+ this.shift();
+ return array;
+
+ case "<<":
+ const dict = new _primitives.Dict(this.xref);
+
+ while (!(0, _primitives.isCmd)(this.buf1, ">>") && !(0, _primitives.isEOF)(this.buf1)) {
+ if (!(0, _primitives.isName)(this.buf1)) {
+ (0, _util.info)("Malformed dictionary: key must be a name object");
+ this.shift();
+ continue;
+ }
+
+ const key = this.buf1.name;
+ this.shift();
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ break;
+ }
+
+ dict.set(key, this.getObj(cipherTransform));
+ }
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ if (!this.recoveryMode) {
+ throw new _util.FormatError("End of file inside dictionary");
+ }
+
+ return dict;
+ }
+
+ if ((0, _primitives.isCmd)(this.buf2, "stream")) {
+ return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;
+ }
+
+ this.shift();
+ return dict;
+
+ default:
+ return buf1;
+ }
+ }
+
+ if (Number.isInteger(buf1)) {
+ if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) {
+ const ref = _primitives.Ref.get(buf1, this.buf1);
+
+ this.shift();
+ this.shift();
+ return ref;
+ }
+
+ return buf1;
+ }
+
+ if (typeof buf1 === "string") {
+ if (cipherTransform) {
+ return cipherTransform.decryptString(buf1);
+ }
+
+ return buf1;
+ }
+
+ return buf1;
+ }
+
+ findDefaultInlineStreamEnd(stream) {
+ const E = 0x45,
+ I = 0x49,
+ SPACE = 0x20,
+ LF = 0xa,
+ CR = 0xd;
+ const n = 10,
+ NUL = 0x0;
+ const startPos = stream.pos;
+ let state = 0,
+ ch,
+ maybeEIPos;
+
+ while ((ch = stream.getByte()) !== -1) {
+ if (state === 0) {
+ state = ch === E ? 1 : 0;
+ } else if (state === 1) {
+ state = ch === I ? 2 : 0;
+ } else {
+ (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state.");
+
+ if (ch === SPACE || ch === LF || ch === CR) {
+ maybeEIPos = stream.pos;
+ const followingBytes = stream.peekBytes(n);
+
+ for (let i = 0, ii = followingBytes.length; i < ii; i++) {
+ ch = followingBytes[i];
+
+ if (ch === NUL && followingBytes[i + 1] !== NUL) {
+ continue;
+ }
+
+ if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {
+ state = 0;
+ break;
+ }
+ }
+
+ if (state === 2) {
+ break;
+ }
+ } else {
+ state = 0;
+ }
+ }
+ }
+
+ if (ch === -1) {
+ (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker");
+
+ if (maybeEIPos) {
+ (0, _util.warn)('... trying to recover by using the last "EI" occurrence.');
+ stream.skip(-(stream.pos - maybeEIPos));
+ }
+ }
+
+ let endOffset = 4;
+ stream.skip(-endOffset);
+ ch = stream.peekByte();
+ stream.skip(endOffset);
+
+ if (!(0, _core_utils.isWhiteSpace)(ch)) {
+ endOffset--;
+ }
+
+ return stream.pos - endOffset - startPos;
+ }
+
+ findDCTDecodeInlineStreamEnd(stream) {
+ const startPos = stream.pos;
+ let foundEOI = false,
+ b,
+ markerLength;
+
+ while ((b = stream.getByte()) !== -1) {
+ if (b !== 0xff) {
+ continue;
+ }
+
+ switch (stream.getByte()) {
+ case 0x00:
+ break;
+
+ case 0xff:
+ stream.skip(-1);
+ break;
+
+ case 0xd9:
+ foundEOI = true;
+ break;
+
+ case 0xc0:
+ case 0xc1:
+ case 0xc2:
+ case 0xc3:
+ case 0xc5:
+ case 0xc6:
+ case 0xc7:
+ case 0xc9:
+ case 0xca:
+ case 0xcb:
+ case 0xcd:
+ case 0xce:
+ case 0xcf:
+ case 0xc4:
+ case 0xcc:
+ case 0xda:
+ case 0xdb:
+ case 0xdc:
+ case 0xdd:
+ case 0xde:
+ case 0xdf:
+ case 0xe0:
+ case 0xe1:
+ case 0xe2:
+ case 0xe3:
+ case 0xe4:
+ case 0xe5:
+ case 0xe6:
+ case 0xe7:
+ case 0xe8:
+ case 0xe9:
+ case 0xea:
+ case 0xeb:
+ case 0xec:
+ case 0xed:
+ case 0xee:
+ case 0xef:
+ case 0xfe:
+ markerLength = stream.getUint16();
+
+ if (markerLength > 2) {
+ stream.skip(markerLength - 2);
+ } else {
+ stream.skip(-2);
+ }
+
+ break;
+ }
+
+ if (foundEOI) {
+ break;
+ }
+ }
+
+ const length = stream.pos - startPos;
+
+ if (b === -1) {
+ (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead.");
+ stream.skip(-length);
+ return this.findDefaultInlineStreamEnd(stream);
+ }
+
+ this.inlineStreamSkipEI(stream);
+ return length;
+ }
+
+ findASCII85DecodeInlineStreamEnd(stream) {
+ const TILDE = 0x7e,
+ GT = 0x3e;
+ const startPos = stream.pos;
+ let ch;
+
+ while ((ch = stream.getByte()) !== -1) {
+ if (ch === TILDE) {
+ const tildePos = stream.pos;
+ ch = stream.peekByte();
+
+ while ((0, _core_utils.isWhiteSpace)(ch)) {
+ stream.skip();
+ ch = stream.peekByte();
+ }
+
+ if (ch === GT) {
+ stream.skip();
+ break;
+ }
+
+ if (stream.pos > tildePos) {
+ const maybeEI = stream.peekBytes(2);
+
+ if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {
+ break;
+ }
+ }
+ }
+ }
+
+ const length = stream.pos - startPos;
+
+ if (ch === -1) {
+ (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead.");
+ stream.skip(-length);
+ return this.findDefaultInlineStreamEnd(stream);
+ }
+
+ this.inlineStreamSkipEI(stream);
+ return length;
+ }
+
+ findASCIIHexDecodeInlineStreamEnd(stream) {
+ const GT = 0x3e;
+ const startPos = stream.pos;
+ let ch;
+
+ while ((ch = stream.getByte()) !== -1) {
+ if (ch === GT) {
+ break;
+ }
+ }
+
+ const length = stream.pos - startPos;
+
+ if (ch === -1) {
+ (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead.");
+ stream.skip(-length);
+ return this.findDefaultInlineStreamEnd(stream);
+ }
+
+ this.inlineStreamSkipEI(stream);
+ return length;
+ }
+
+ inlineStreamSkipEI(stream) {
+ const E = 0x45,
+ I = 0x49;
+ let state = 0,
+ ch;
+
+ while ((ch = stream.getByte()) !== -1) {
+ if (state === 0) {
+ state = ch === E ? 1 : 0;
+ } else if (state === 1) {
+ state = ch === I ? 2 : 0;
+ } else if (state === 2) {
+ break;
+ }
+ }
+ }
+
+ makeInlineImage(cipherTransform) {
+ const lexer = this.lexer;
+ const stream = lexer.stream;
+ const dict = new _primitives.Dict(this.xref);
+ let dictLength;
+
+ while (!(0, _primitives.isCmd)(this.buf1, "ID") && !(0, _primitives.isEOF)(this.buf1)) {
+ if (!(0, _primitives.isName)(this.buf1)) {
+ throw new _util.FormatError("Dictionary key must be a name object");
+ }
+
+ const key = this.buf1.name;
+ this.shift();
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ break;
+ }
+
+ dict.set(key, this.getObj(cipherTransform));
+ }
+
+ if (lexer.beginInlineImagePos !== -1) {
+ dictLength = stream.pos - lexer.beginInlineImagePos;
+ }
+
+ const filter = dict.get("Filter", "F");
+ let filterName;
+
+ if ((0, _primitives.isName)(filter)) {
+ filterName = filter.name;
+ } else if (Array.isArray(filter)) {
+ const filterZero = this.xref.fetchIfRef(filter[0]);
+
+ if ((0, _primitives.isName)(filterZero)) {
+ filterName = filterZero.name;
+ }
+ }
+
+ const startPos = stream.pos;
+ let length;
+
+ if (filterName === "DCTDecode" || filterName === "DCT") {
+ length = this.findDCTDecodeInlineStreamEnd(stream);
+ } else if (filterName === "ASCII85Decode" || filterName === "A85") {
+ length = this.findASCII85DecodeInlineStreamEnd(stream);
+ } else if (filterName === "ASCIIHexDecode" || filterName === "AHx") {
+ length = this.findASCIIHexDecodeInlineStreamEnd(stream);
+ } else {
+ length = this.findDefaultInlineStreamEnd(stream);
+ }
+
+ let imageStream = stream.makeSubStream(startPos, length, dict);
+ let cacheKey;
+
+ if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) {
+ const imageBytes = imageStream.getBytes();
+ imageStream.reset();
+ const initialStreamPos = stream.pos;
+ stream.pos = lexer.beginInlineImagePos;
+ const dictBytes = stream.getBytes(dictLength);
+ stream.pos = initialStreamPos;
+ cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes);
+ const cacheEntry = this.imageCache[cacheKey];
+
+ if (cacheEntry !== undefined) {
+ this.buf2 = _primitives.Cmd.get("EI");
+ this.shift();
+ cacheEntry.reset();
+ return cacheEntry;
+ }
+ }
+
+ if (cipherTransform) {
+ imageStream = cipherTransform.createStream(imageStream, length);
+ }
+
+ imageStream = this.filter(imageStream, dict, length);
+ imageStream.dict = dict;
+
+ if (cacheKey !== undefined) {
+ imageStream.cacheKey = `inline_${length}_${cacheKey}`;
+ this.imageCache[cacheKey] = imageStream;
+ }
+
+ this.buf2 = _primitives.Cmd.get("EI");
+ this.shift();
+ return imageStream;
+ }
+
+ _findStreamLength(startPos, signature) {
+ const {
+ stream
+ } = this.lexer;
+ stream.pos = startPos;
+ const SCAN_BLOCK_LENGTH = 2048;
+ const signatureLength = signature.length;
+
+ while (stream.pos < stream.end) {
+ const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
+ const scanLength = scanBytes.length - signatureLength;
+
+ if (scanLength <= 0) {
+ break;
+ }
+
+ let pos = 0;
+
+ while (pos < scanLength) {
+ let j = 0;
+
+ while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
+ j++;
+ }
+
+ if (j >= signatureLength) {
+ stream.pos += pos;
+ return stream.pos - startPos;
+ }
+
+ pos++;
+ }
+
+ stream.pos += scanLength;
+ }
+
+ return -1;
+ }
+
+ makeStream(dict, cipherTransform) {
+ const lexer = this.lexer;
+ let stream = lexer.stream;
+ lexer.skipToNextLine();
+ const startPos = stream.pos - 1;
+ let length = dict.get("Length");
+
+ if (!Number.isInteger(length)) {
+ (0, _util.info)(`Bad length "${length}" in stream`);
+ length = 0;
+ }
+
+ stream.pos = startPos + length;
+ lexer.nextChar();
+
+ if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) {
+ this.shift();
+ } else {
+ const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]);
+
+ let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);
+
+ if (actualLength < 0) {
+ const MAX_TRUNCATION = 1;
+
+ for (let i = 1; i <= MAX_TRUNCATION; i++) {
+ const end = ENDSTREAM_SIGNATURE.length - i;
+ const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);
+
+ const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);
+
+ if (maybeLength >= 0) {
+ const lastByte = stream.peekBytes(end + 1)[end];
+
+ if (!(0, _core_utils.isWhiteSpace)(lastByte)) {
+ break;
+ }
+
+ (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command.");
+ actualLength = maybeLength;
+ break;
+ }
+ }
+
+ if (actualLength < 0) {
+ throw new _util.FormatError("Missing endstream command.");
+ }
+ }
+
+ length = actualLength;
+ lexer.nextChar();
+ this.shift();
+ this.shift();
+ }
+
+ this.shift();
+ stream = stream.makeSubStream(startPos, length, dict);
+
+ if (cipherTransform) {
+ stream = cipherTransform.createStream(stream, length);
+ }
+
+ stream = this.filter(stream, dict, length);
+ stream.dict = dict;
+ return stream;
+ }
+
+ filter(stream, dict, length) {
+ let filter = dict.get("Filter", "F");
+ let params = dict.get("DecodeParms", "DP");
+
+ if ((0, _primitives.isName)(filter)) {
+ if (Array.isArray(params)) {
+ (0, _util.warn)("/DecodeParms should not contain an Array, " + "when /Filter contains a Name.");
+ }
+
+ return this.makeFilter(stream, filter.name, length, params);
+ }
+
+ let maybeLength = length;
+
+ if (Array.isArray(filter)) {
+ const filterArray = filter;
+ const paramsArray = params;
+
+ for (let i = 0, ii = filterArray.length; i < ii; ++i) {
+ filter = this.xref.fetchIfRef(filterArray[i]);
+
+ if (!(0, _primitives.isName)(filter)) {
+ throw new _util.FormatError(`Bad filter name "${filter}"`);
+ }
+
+ params = null;
+
+ if (Array.isArray(paramsArray) && i in paramsArray) {
+ params = this.xref.fetchIfRef(paramsArray[i]);
+ }
+
+ stream = this.makeFilter(stream, filter.name, maybeLength, params);
+ maybeLength = null;
+ }
+ }
+
+ return stream;
+ }
+
+ makeFilter(stream, name, maybeLength, params) {
+ if (maybeLength === 0) {
+ (0, _util.warn)(`Empty "${name}" stream.`);
+ return new _stream.NullStream();
+ }
+
+ try {
+ const xrefStreamStats = this.xref.stats.streamTypes;
+
+ if (name === "FlateDecode" || name === "Fl") {
+ xrefStreamStats[_util.StreamType.FLATE] = true;
+
+ if (params) {
+ return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params);
+ }
+
+ return new _stream.FlateStream(stream, maybeLength);
+ }
+
+ if (name === "LZWDecode" || name === "LZW") {
+ xrefStreamStats[_util.StreamType.LZW] = true;
+ let earlyChange = 1;
+
+ if (params) {
+ if (params.has("EarlyChange")) {
+ earlyChange = params.get("EarlyChange");
+ }
+
+ return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);
+ }
+
+ return new _stream.LZWStream(stream, maybeLength, earlyChange);
+ }
+
+ if (name === "DCTDecode" || name === "DCT") {
+ xrefStreamStats[_util.StreamType.DCT] = true;
+ return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params);
+ }
+
+ if (name === "JPXDecode" || name === "JPX") {
+ xrefStreamStats[_util.StreamType.JPX] = true;
+ return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params);
+ }
+
+ if (name === "ASCII85Decode" || name === "A85") {
+ xrefStreamStats[_util.StreamType.A85] = true;
+ return new _stream.Ascii85Stream(stream, maybeLength);
+ }
+
+ if (name === "ASCIIHexDecode" || name === "AHx") {
+ xrefStreamStats[_util.StreamType.AHX] = true;
+ return new _stream.AsciiHexStream(stream, maybeLength);
+ }
+
+ if (name === "CCITTFaxDecode" || name === "CCF") {
+ xrefStreamStats[_util.StreamType.CCF] = true;
+ return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);
+ }
+
+ if (name === "RunLengthDecode" || name === "RL") {
+ xrefStreamStats[_util.StreamType.RLX] = true;
+ return new _stream.RunLengthStream(stream, maybeLength);
+ }
+
+ if (name === "JBIG2Decode") {
+ xrefStreamStats[_util.StreamType.JBIG] = true;
+ return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params);
+ }
+
+ (0, _util.warn)(`Filter "${name}" is not supported.`);
+ return stream;
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`Invalid stream: "${ex}"`);
+ return new _stream.NullStream();
+ }
+ }
+
+}
+
+exports.Parser = Parser;
+const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+
+function toHexDigit(ch) {
+ if (ch >= 0x30 && ch <= 0x39) {
+ return ch & 0x0f;
+ }
+
+ if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
+ return (ch & 0x0f) + 9;
+ }
+
+ return -1;
+}
+
+class Lexer {
+ constructor(stream, knownCommands = null) {
+ this.stream = stream;
+ this.nextChar();
+ this.strBuf = [];
+ this.knownCommands = knownCommands;
+ this._hexStringNumWarn = 0;
+ this.beginInlineImagePos = -1;
+ }
+
+ nextChar() {
+ return this.currentChar = this.stream.getByte();
+ }
+
+ peekChar() {
+ return this.stream.peekByte();
+ }
+
+ getNumber() {
+ let ch = this.currentChar;
+ let eNotation = false;
+ let divideBy = 0;
+ let sign = 0;
+
+ if (ch === 0x2d) {
+ sign = -1;
+ ch = this.nextChar();
+
+ if (ch === 0x2d) {
+ ch = this.nextChar();
+ }
+ } else if (ch === 0x2b) {
+ sign = 1;
+ ch = this.nextChar();
+ }
+
+ if (ch === 0x0a || ch === 0x0d) {
+ do {
+ ch = this.nextChar();
+ } while (ch === 0x0a || ch === 0x0d);
+ }
+
+ if (ch === 0x2e) {
+ divideBy = 10;
+ ch = this.nextChar();
+ }
+
+ if (ch < 0x30 || ch > 0x39) {
+ if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) {
+ (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero.");
+ return 0;
+ }
+
+ throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`);
+ }
+
+ sign = sign || 1;
+ let baseValue = ch - 0x30;
+ let powerValue = 0;
+ let powerValueSign = 1;
+
+ while ((ch = this.nextChar()) >= 0) {
+ if (ch >= 0x30 && ch <= 0x39) {
+ const currentDigit = ch - 0x30;
+
+ if (eNotation) {
+ powerValue = powerValue * 10 + currentDigit;
+ } else {
+ if (divideBy !== 0) {
+ divideBy *= 10;
+ }
+
+ baseValue = baseValue * 10 + currentDigit;
+ }
+ } else if (ch === 0x2e) {
+ if (divideBy === 0) {
+ divideBy = 1;
+ } else {
+ break;
+ }
+ } else if (ch === 0x2d) {
+ (0, _util.warn)("Badly formatted number: minus sign in the middle");
+ } else if (ch === 0x45 || ch === 0x65) {
+ ch = this.peekChar();
+
+ if (ch === 0x2b || ch === 0x2d) {
+ powerValueSign = ch === 0x2d ? -1 : 1;
+ this.nextChar();
+ } else if (ch < 0x30 || ch > 0x39) {
+ break;
+ }
+
+ eNotation = true;
+ } else {
+ break;
+ }
+ }
+
+ if (divideBy !== 0) {
+ baseValue /= divideBy;
+ }
+
+ if (eNotation) {
+ baseValue *= 10 ** (powerValueSign * powerValue);
+ }
+
+ return sign * baseValue;
+ }
+
+ getString() {
+ let numParen = 1;
+ let done = false;
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
+ let ch = this.nextChar();
+
+ while (true) {
+ let charBuffered = false;
+
+ switch (ch | 0) {
+ case -1:
+ (0, _util.warn)("Unterminated string");
+ done = true;
+ break;
+
+ case 0x28:
+ ++numParen;
+ strBuf.push("(");
+ break;
+
+ case 0x29:
+ if (--numParen === 0) {
+ this.nextChar();
+ done = true;
+ } else {
+ strBuf.push(")");
+ }
+
+ break;
+
+ case 0x5c:
+ ch = this.nextChar();
+
+ switch (ch) {
+ case -1:
+ (0, _util.warn)("Unterminated string");
+ done = true;
+ break;
+
+ case 0x6e:
+ strBuf.push("\n");
+ break;
+
+ case 0x72:
+ strBuf.push("\r");
+ break;
+
+ case 0x74:
+ strBuf.push("\t");
+ break;
+
+ case 0x62:
+ strBuf.push("\b");
+ break;
+
+ case 0x66:
+ strBuf.push("\f");
+ break;
+
+ case 0x5c:
+ case 0x28:
+ case 0x29:
+ strBuf.push(String.fromCharCode(ch));
+ break;
+
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ let x = ch & 0x0f;
+ ch = this.nextChar();
+ charBuffered = true;
+
+ if (ch >= 0x30 && ch <= 0x37) {
+ x = (x << 3) + (ch & 0x0f);
+ ch = this.nextChar();
+
+ if (ch >= 0x30 && ch <= 0x37) {
+ charBuffered = false;
+ x = (x << 3) + (ch & 0x0f);
+ }
+ }
+
+ strBuf.push(String.fromCharCode(x));
+ break;
+
+ case 0x0d:
+ if (this.peekChar() === 0x0a) {
+ this.nextChar();
+ }
+
+ break;
+
+ case 0x0a:
+ break;
+
+ default:
+ strBuf.push(String.fromCharCode(ch));
+ break;
+ }
+
+ break;
+
+ default:
+ strBuf.push(String.fromCharCode(ch));
+ break;
+ }
+
+ if (done) {
+ break;
+ }
+
+ if (!charBuffered) {
+ ch = this.nextChar();
+ }
+ }
+
+ return strBuf.join("");
+ }
+
+ getName() {
+ let ch, previousCh;
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
+
+ while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+ if (ch === 0x23) {
+ ch = this.nextChar();
+
+ if (specialChars[ch]) {
+ (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number.");
+ strBuf.push("#");
+ break;
+ }
+
+ const x = toHexDigit(ch);
+
+ if (x !== -1) {
+ previousCh = ch;
+ ch = this.nextChar();
+ const x2 = toHexDigit(ch);
+
+ if (x2 === -1) {
+ (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number.");
+ strBuf.push("#", String.fromCharCode(previousCh));
+
+ if (specialChars[ch]) {
+ break;
+ }
+
+ strBuf.push(String.fromCharCode(ch));
+ continue;
+ }
+
+ strBuf.push(String.fromCharCode(x << 4 | x2));
+ } else {
+ strBuf.push("#", String.fromCharCode(ch));
+ }
+ } else {
+ strBuf.push(String.fromCharCode(ch));
+ }
+ }
+
+ if (strBuf.length > 127) {
+ (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`);
+ }
+
+ return _primitives.Name.get(strBuf.join(""));
+ }
+
+ _hexStringWarn(ch) {
+ const MAX_HEX_STRING_NUM_WARN = 5;
+
+ if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {
+ (0, _util.warn)("getHexString - ignoring additional invalid characters.");
+ return;
+ }
+
+ if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {
+ return;
+ }
+
+ (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`);
+ }
+
+ getHexString() {
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
+ let ch = this.currentChar;
+ let isFirstHex = true;
+ let firstDigit, secondDigit;
+ this._hexStringNumWarn = 0;
+
+ while (true) {
+ if (ch < 0) {
+ (0, _util.warn)("Unterminated hex string");
+ break;
+ } else if (ch === 0x3e) {
+ this.nextChar();
+ break;
+ } else if (specialChars[ch] === 1) {
+ ch = this.nextChar();
+ continue;
+ } else {
+ if (isFirstHex) {
+ firstDigit = toHexDigit(ch);
+
+ if (firstDigit === -1) {
+ this._hexStringWarn(ch);
+
+ ch = this.nextChar();
+ continue;
+ }
+ } else {
+ secondDigit = toHexDigit(ch);
+
+ if (secondDigit === -1) {
+ this._hexStringWarn(ch);
+
+ ch = this.nextChar();
+ continue;
+ }
+
+ strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));
+ }
+
+ isFirstHex = !isFirstHex;
+ ch = this.nextChar();
+ }
+ }
+
+ return strBuf.join("");
+ }
+
+ getObj() {
+ let comment = false;
+ let ch = this.currentChar;
+
+ while (true) {
+ if (ch < 0) {
+ return _primitives.EOF;
+ }
+
+ if (comment) {
+ if (ch === 0x0a || ch === 0x0d) {
+ comment = false;
+ }
+ } else if (ch === 0x25) {
+ comment = true;
+ } else if (specialChars[ch] !== 1) {
+ break;
+ }
+
+ ch = this.nextChar();
+ }
+
+ switch (ch | 0) {
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case 0x2b:
+ case 0x2d:
+ case 0x2e:
+ return this.getNumber();
+
+ case 0x28:
+ return this.getString();
+
+ case 0x2f:
+ return this.getName();
+
+ case 0x5b:
+ this.nextChar();
+ return _primitives.Cmd.get("[");
+
+ case 0x5d:
+ this.nextChar();
+ return _primitives.Cmd.get("]");
+
+ case 0x3c:
+ ch = this.nextChar();
+
+ if (ch === 0x3c) {
+ this.nextChar();
+ return _primitives.Cmd.get("<<");
+ }
+
+ return this.getHexString();
+
+ case 0x3e:
+ ch = this.nextChar();
+
+ if (ch === 0x3e) {
+ this.nextChar();
+ return _primitives.Cmd.get(">>");
+ }
+
+ return _primitives.Cmd.get(">");
+
+ case 0x7b:
+ this.nextChar();
+ return _primitives.Cmd.get("{");
+
+ case 0x7d:
+ this.nextChar();
+ return _primitives.Cmd.get("}");
+
+ case 0x29:
+ this.nextChar();
+ throw new _util.FormatError(`Illegal character: ${ch}`);
+ }
+
+ let str = String.fromCharCode(ch);
+ const knownCommands = this.knownCommands;
+ let knownCommandFound = knownCommands && knownCommands[str] !== undefined;
+
+ while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+ const possibleCommand = str + String.fromCharCode(ch);
+
+ if (knownCommandFound && knownCommands[possibleCommand] === undefined) {
+ break;
+ }
+
+ if (str.length === 128) {
+ throw new _util.FormatError(`Command token too long: ${str.length}`);
+ }
+
+ str = possibleCommand;
+ knownCommandFound = knownCommands && knownCommands[str] !== undefined;
+ }
+
+ if (str === "true") {
+ return true;
+ }
+
+ if (str === "false") {
+ return false;
+ }
+
+ if (str === "null") {
+ return null;
+ }
+
+ if (str === "BI") {
+ this.beginInlineImagePos = this.stream.pos;
+ }
+
+ return _primitives.Cmd.get(str);
+ }
+
+ skipToNextLine() {
+ let ch = this.currentChar;
+
+ while (ch >= 0) {
+ if (ch === 0x0d) {
+ ch = this.nextChar();
+
+ if (ch === 0x0a) {
+ this.nextChar();
+ }
+
+ break;
+ } else if (ch === 0x0a) {
+ this.nextChar();
+ break;
+ }
+
+ ch = this.nextChar();
+ }
+ }
+
+}
+
+exports.Lexer = Lexer;
+
+class Linearization {
+ static create(stream) {
+ function getInt(linDict, name, allowZeroValue = false) {
+ const obj = linDict.get(name);
+
+ if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {
+ return obj;
+ }
+
+ throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid.");
+ }
+
+ function getHints(linDict) {
+ const hints = linDict.get("H");
+ let hintsLength;
+
+ if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {
+ for (let index = 0; index < hintsLength; index++) {
+ const hint = hints[index];
+
+ if (!(Number.isInteger(hint) && hint > 0)) {
+ throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`);
+ }
+ }
+
+ return hints;
+ }
+
+ throw new Error("Hint array in the linearization dictionary is invalid.");
+ }
+
+ const parser = new Parser({
+ lexer: new Lexer(stream),
+ xref: null
+ });
+ const obj1 = parser.getObj();
+ const obj2 = parser.getObj();
+ const obj3 = parser.getObj();
+ const linDict = parser.getObj();
+ let obj, length;
+
+ if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) {
+ return null;
+ } else if ((length = getInt(linDict, "L")) !== stream.length) {
+ throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length.");
+ }
+
+ return {
+ length,
+ hints: getHints(linDict),
+ objectNumberFirst: getInt(linDict, "O"),
+ endFirst: getInt(linDict, "E"),
+ numPages: getInt(linDict, "N"),
+ mainXRefEntriesOffset: getInt(linDict, "T"),
+ pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0
+ };
+ }
+
+}
+
+exports.Linearization = Linearization;
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var Stream = function StreamClosure() {
+ function Stream(arrayBuffer, start, length, dict) {
+ this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);
+ this.start = start || 0;
+ this.pos = this.start;
+ this.end = start + length || this.bytes.length;
+ this.dict = dict;
+ }
+
+ Stream.prototype = {
+ get length() {
+ return this.end - this.start;
+ },
+
+ get isEmpty() {
+ return this.length === 0;
+ },
+
+ getByte: function Stream_getByte() {
+ if (this.pos >= this.end) {
+ return -1;
+ }
+
+ return this.bytes[this.pos++];
+ },
+ getUint16: function Stream_getUint16() {
+ var b0 = this.getByte();
+ var b1 = this.getByte();
+
+ if (b0 === -1 || b1 === -1) {
+ return -1;
+ }
+
+ return (b0 << 8) + b1;
+ },
+ getInt32: function Stream_getInt32() {
+ var b0 = this.getByte();
+ var b1 = this.getByte();
+ var b2 = this.getByte();
+ var b3 = this.getByte();
+ return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+ },
+
+ getBytes(length, forceClamped = false) {
+ var bytes = this.bytes;
+ var pos = this.pos;
+ var strEnd = this.end;
+
+ if (!length) {
+ const subarray = bytes.subarray(pos, strEnd);
+ return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
+ }
+
+ var end = pos + length;
+
+ if (end > strEnd) {
+ end = strEnd;
+ }
+
+ this.pos = end;
+ const subarray = bytes.subarray(pos, end);
+ return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
+ },
+
+ peekByte: function Stream_peekByte() {
+ var peekedByte = this.getByte();
+
+ if (peekedByte !== -1) {
+ this.pos--;
+ }
+
+ return peekedByte;
+ },
+
+ peekBytes(length, forceClamped = false) {
+ var bytes = this.getBytes(length, forceClamped);
+ this.pos -= bytes.length;
+ return bytes;
+ },
+
+ getByteRange(begin, end) {
+ if (begin < 0) {
+ begin = 0;
+ }
+
+ if (end > this.end) {
+ end = this.end;
+ }
+
+ return this.bytes.subarray(begin, end);
+ },
+
+ skip: function Stream_skip(n) {
+ if (!n) {
+ n = 1;
+ }
+
+ this.pos += n;
+ },
+ reset: function Stream_reset() {
+ this.pos = this.start;
+ },
+ moveStart: function Stream_moveStart() {
+ this.start = this.pos;
+ },
+ makeSubStream: function Stream_makeSubStream(start, length, dict) {
+ return new Stream(this.bytes.buffer, start, length, dict);
+ }
+ };
+ return Stream;
+}();
+
+exports.Stream = Stream;
+
+var StringStream = function StringStreamClosure() {
+ function StringStream(str) {
+ const bytes = (0, _util.stringToBytes)(str);
+ Stream.call(this, bytes);
+ }
+
+ StringStream.prototype = Stream.prototype;
+ return StringStream;
+}();
+
+exports.StringStream = StringStream;
+
+var DecodeStream = function DecodeStreamClosure() {
+ var emptyBuffer = new Uint8Array(0);
+
+ function DecodeStream(maybeMinBufferLength) {
+ this._rawMinBufferLength = maybeMinBufferLength || 0;
+ this.pos = 0;
+ this.bufferLength = 0;
+ this.eof = false;
+ this.buffer = emptyBuffer;
+ this.minBufferLength = 512;
+
+ if (maybeMinBufferLength) {
+ while (this.minBufferLength < maybeMinBufferLength) {
+ this.minBufferLength *= 2;
+ }
+ }
+ }
+
+ DecodeStream.prototype = {
+ get isEmpty() {
+ while (!this.eof && this.bufferLength === 0) {
+ this.readBlock();
+ }
+
+ return this.bufferLength === 0;
+ },
+
+ ensureBuffer: function DecodeStream_ensureBuffer(requested) {
+ var buffer = this.buffer;
+
+ if (requested <= buffer.byteLength) {
+ return buffer;
+ }
+
+ var size = this.minBufferLength;
+
+ while (size < requested) {
+ size *= 2;
+ }
+
+ var buffer2 = new Uint8Array(size);
+ buffer2.set(buffer);
+ return this.buffer = buffer2;
+ },
+ getByte: function DecodeStream_getByte() {
+ var pos = this.pos;
+
+ while (this.bufferLength <= pos) {
+ if (this.eof) {
+ return -1;
+ }
+
+ this.readBlock();
+ }
+
+ return this.buffer[this.pos++];
+ },
+ getUint16: function DecodeStream_getUint16() {
+ var b0 = this.getByte();
+ var b1 = this.getByte();
+
+ if (b0 === -1 || b1 === -1) {
+ return -1;
+ }
+
+ return (b0 << 8) + b1;
+ },
+ getInt32: function DecodeStream_getInt32() {
+ var b0 = this.getByte();
+ var b1 = this.getByte();
+ var b2 = this.getByte();
+ var b3 = this.getByte();
+ return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+ },
+
+ getBytes(length, forceClamped = false) {
+ var end,
+ pos = this.pos;
+
+ if (length) {
+ this.ensureBuffer(pos + length);
+ end = pos + length;
+
+ while (!this.eof && this.bufferLength < end) {
+ this.readBlock();
+ }
+
+ var bufEnd = this.bufferLength;
+
+ if (end > bufEnd) {
+ end = bufEnd;
+ }
+ } else {
+ while (!this.eof) {
+ this.readBlock();
+ }
+
+ end = this.bufferLength;
+ }
+
+ this.pos = end;
+ const subarray = this.buffer.subarray(pos, end);
+ return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray;
+ },
+
+ peekByte: function DecodeStream_peekByte() {
+ var peekedByte = this.getByte();
+
+ if (peekedByte !== -1) {
+ this.pos--;
+ }
+
+ return peekedByte;
+ },
+
+ peekBytes(length, forceClamped = false) {
+ var bytes = this.getBytes(length, forceClamped);
+ this.pos -= bytes.length;
+ return bytes;
+ },
+
+ makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {
+ var end = start + length;
+
+ while (this.bufferLength <= end && !this.eof) {
+ this.readBlock();
+ }
+
+ return new Stream(this.buffer, start, length, dict);
+ },
+
+ getByteRange(begin, end) {
+ (0, _util.unreachable)("Should not call DecodeStream.getByteRange");
+ },
+
+ skip: function DecodeStream_skip(n) {
+ if (!n) {
+ n = 1;
+ }
+
+ this.pos += n;
+ },
+ reset: function DecodeStream_reset() {
+ this.pos = 0;
+ },
+ getBaseStreams: function DecodeStream_getBaseStreams() {
+ if (this.str && this.str.getBaseStreams) {
+ return this.str.getBaseStreams();
+ }
+
+ return [];
+ }
+ };
+ return DecodeStream;
+}();
+
+exports.DecodeStream = DecodeStream;
+
+var StreamsSequenceStream = function StreamsSequenceStreamClosure() {
+ function StreamsSequenceStream(streams) {
+ this.streams = streams;
+ let maybeLength = 0;
+
+ for (let i = 0, ii = streams.length; i < ii; i++) {
+ const stream = streams[i];
+
+ if (stream instanceof DecodeStream) {
+ maybeLength += stream._rawMinBufferLength;
+ } else {
+ maybeLength += stream.length;
+ }
+ }
+
+ DecodeStream.call(this, maybeLength);
+ }
+
+ StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);
+
+ StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() {
+ var streams = this.streams;
+
+ if (streams.length === 0) {
+ this.eof = true;
+ return;
+ }
+
+ var stream = streams.shift();
+ var chunk = stream.getBytes();
+ var bufferLength = this.bufferLength;
+ var newLength = bufferLength + chunk.length;
+ var buffer = this.ensureBuffer(newLength);
+ buffer.set(chunk, bufferLength);
+ this.bufferLength = newLength;
+ };
+
+ StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() {
+ var baseStreams = [];
+
+ for (var i = 0, ii = this.streams.length; i < ii; i++) {
+ var stream = this.streams[i];
+
+ if (stream.getBaseStreams) {
+ baseStreams.push(...stream.getBaseStreams());
+ }
+ }
+
+ return baseStreams;
+ };
+
+ return StreamsSequenceStream;
+}();
+
+exports.StreamsSequenceStream = StreamsSequenceStream;
+
+var FlateStream = function FlateStreamClosure() {
+ var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
+ var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]);
+ var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]);
+ var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9];
+ var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5];
+
+ function FlateStream(str, maybeLength) {
+ this.str = str;
+ this.dict = str.dict;
+ var cmf = str.getByte();
+ var flg = str.getByte();
+
+ if (cmf === -1 || flg === -1) {
+ throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);
+ }
+
+ if ((cmf & 0x0f) !== 0x08) {
+ throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`);
+ }
+
+ if (((cmf << 8) + flg) % 31 !== 0) {
+ throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);
+ }
+
+ if (flg & 0x20) {
+ throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);
+ }
+
+ this.codeSize = 0;
+ this.codeBuf = 0;
+ DecodeStream.call(this, maybeLength);
+ }
+
+ FlateStream.prototype = Object.create(DecodeStream.prototype);
+
+ FlateStream.prototype.getBits = function FlateStream_getBits(bits) {
+ var str = this.str;
+ var codeSize = this.codeSize;
+ var codeBuf = this.codeBuf;
+ var b;
+
+ while (codeSize < bits) {
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad encoding in flate stream");
+ }
+
+ codeBuf |= b << codeSize;
+ codeSize += 8;
+ }
+
+ b = codeBuf & (1 << bits) - 1;
+ this.codeBuf = codeBuf >> bits;
+ this.codeSize = codeSize -= bits;
+ return b;
+ };
+
+ FlateStream.prototype.getCode = function FlateStream_getCode(table) {
+ var str = this.str;
+ var codes = table[0];
+ var maxLen = table[1];
+ var codeSize = this.codeSize;
+ var codeBuf = this.codeBuf;
+ var b;
+
+ while (codeSize < maxLen) {
+ if ((b = str.getByte()) === -1) {
+ break;
+ }
+
+ codeBuf |= b << codeSize;
+ codeSize += 8;
+ }
+
+ var code = codes[codeBuf & (1 << maxLen) - 1];
+ var codeLen = code >> 16;
+ var codeVal = code & 0xffff;
+
+ if (codeLen < 1 || codeSize < codeLen) {
+ throw new _util.FormatError("Bad encoding in flate stream");
+ }
+
+ this.codeBuf = codeBuf >> codeLen;
+ this.codeSize = codeSize - codeLen;
+ return codeVal;
+ };
+
+ FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) {
+ var n = lengths.length;
+ var maxLen = 0;
+ var i;
+
+ for (i = 0; i < n; ++i) {
+ if (lengths[i] > maxLen) {
+ maxLen = lengths[i];
+ }
+ }
+
+ var size = 1 << maxLen;
+ var codes = new Int32Array(size);
+
+ for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {
+ for (var val = 0; val < n; ++val) {
+ if (lengths[val] === len) {
+ var code2 = 0;
+ var t = code;
+
+ for (i = 0; i < len; ++i) {
+ code2 = code2 << 1 | t & 1;
+ t >>= 1;
+ }
+
+ for (i = code2; i < size; i += skip) {
+ codes[i] = len << 16 | val;
+ }
+
+ ++code;
+ }
+ }
+ }
+
+ return [codes, maxLen];
+ };
+
+ FlateStream.prototype.readBlock = function FlateStream_readBlock() {
+ var buffer, len;
+ var str = this.str;
+ var hdr = this.getBits(3);
+
+ if (hdr & 1) {
+ this.eof = true;
+ }
+
+ hdr >>= 1;
+
+ if (hdr === 0) {
+ var b;
+
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ var blockLen = b;
+
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ blockLen |= b << 8;
+
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ var check = b;
+
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ check |= b << 8;
+
+ if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {
+ throw new _util.FormatError("Bad uncompressed block length in flate stream");
+ }
+
+ this.codeBuf = 0;
+ this.codeSize = 0;
+ const bufferLength = this.bufferLength,
+ end = bufferLength + blockLen;
+ buffer = this.ensureBuffer(end);
+ this.bufferLength = end;
+
+ if (blockLen === 0) {
+ if (str.peekByte() === -1) {
+ this.eof = true;
+ }
+ } else {
+ const block = str.getBytes(blockLen);
+ buffer.set(block, bufferLength);
+
+ if (block.length < blockLen) {
+ this.eof = true;
+ }
+ }
+
+ return;
+ }
+
+ var litCodeTable;
+ var distCodeTable;
+
+ if (hdr === 1) {
+ litCodeTable = fixedLitCodeTab;
+ distCodeTable = fixedDistCodeTab;
+ } else if (hdr === 2) {
+ var numLitCodes = this.getBits(5) + 257;
+ var numDistCodes = this.getBits(5) + 1;
+ var numCodeLenCodes = this.getBits(4) + 4;
+ var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);
+ var i;
+
+ for (i = 0; i < numCodeLenCodes; ++i) {
+ codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);
+ }
+
+ var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
+ len = 0;
+ i = 0;
+ var codes = numLitCodes + numDistCodes;
+ var codeLengths = new Uint8Array(codes);
+ var bitsLength, bitsOffset, what;
+
+ while (i < codes) {
+ var code = this.getCode(codeLenCodeTab);
+
+ if (code === 16) {
+ bitsLength = 2;
+ bitsOffset = 3;
+ what = len;
+ } else if (code === 17) {
+ bitsLength = 3;
+ bitsOffset = 3;
+ what = len = 0;
+ } else if (code === 18) {
+ bitsLength = 7;
+ bitsOffset = 11;
+ what = len = 0;
+ } else {
+ codeLengths[i++] = len = code;
+ continue;
+ }
+
+ var repeatLength = this.getBits(bitsLength) + bitsOffset;
+
+ while (repeatLength-- > 0) {
+ codeLengths[i++] = what;
+ }
+ }
+
+ litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));
+ distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));
+ } else {
+ throw new _util.FormatError("Unknown block type in flate stream");
+ }
+
+ buffer = this.buffer;
+ var limit = buffer ? buffer.length : 0;
+ var pos = this.bufferLength;
+
+ while (true) {
+ var code1 = this.getCode(litCodeTable);
+
+ if (code1 < 256) {
+ if (pos + 1 >= limit) {
+ buffer = this.ensureBuffer(pos + 1);
+ limit = buffer.length;
+ }
+
+ buffer[pos++] = code1;
+ continue;
+ }
+
+ if (code1 === 256) {
+ this.bufferLength = pos;
+ return;
+ }
+
+ code1 -= 257;
+ code1 = lengthDecode[code1];
+ var code2 = code1 >> 16;
+
+ if (code2 > 0) {
+ code2 = this.getBits(code2);
+ }
+
+ len = (code1 & 0xffff) + code2;
+ code1 = this.getCode(distCodeTable);
+ code1 = distDecode[code1];
+ code2 = code1 >> 16;
+
+ if (code2 > 0) {
+ code2 = this.getBits(code2);
+ }
+
+ var dist = (code1 & 0xffff) + code2;
+
+ if (pos + len >= limit) {
+ buffer = this.ensureBuffer(pos + len);
+ limit = buffer.length;
+ }
+
+ for (var k = 0; k < len; ++k, ++pos) {
+ buffer[pos] = buffer[pos - dist];
+ }
+ }
+ };
+
+ return FlateStream;
+}();
+
+exports.FlateStream = FlateStream;
+
+var PredictorStream = function PredictorStreamClosure() {
+ function PredictorStream(str, maybeLength, params) {
+ if (!(0, _primitives.isDict)(params)) {
+ return str;
+ }
+
+ var predictor = this.predictor = params.get("Predictor") || 1;
+
+ if (predictor <= 1) {
+ return str;
+ }
+
+ if (predictor !== 2 && (predictor < 10 || predictor > 15)) {
+ throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
+ }
+
+ if (predictor === 2) {
+ this.readBlock = this.readBlockTiff;
+ } else {
+ this.readBlock = this.readBlockPng;
+ }
+
+ this.str = str;
+ this.dict = str.dict;
+ var colors = this.colors = params.get("Colors") || 1;
+ var bits = this.bits = params.get("BitsPerComponent") || 8;
+ var columns = this.columns = params.get("Columns") || 1;
+ this.pixBytes = colors * bits + 7 >> 3;
+ this.rowBytes = columns * colors * bits + 7 >> 3;
+ DecodeStream.call(this, maybeLength);
+ return this;
+ }
+
+ PredictorStream.prototype = Object.create(DecodeStream.prototype);
+
+ PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() {
+ var rowBytes = this.rowBytes;
+ var bufferLength = this.bufferLength;
+ var buffer = this.ensureBuffer(bufferLength + rowBytes);
+ var bits = this.bits;
+ var colors = this.colors;
+ var rawBytes = this.str.getBytes(rowBytes);
+ this.eof = !rawBytes.length;
+
+ if (this.eof) {
+ return;
+ }
+
+ var inbuf = 0,
+ outbuf = 0;
+ var inbits = 0,
+ outbits = 0;
+ var pos = bufferLength;
+ var i;
+
+ if (bits === 1 && colors === 1) {
+ for (i = 0; i < rowBytes; ++i) {
+ var c = rawBytes[i] ^ inbuf;
+ c ^= c >> 1;
+ c ^= c >> 2;
+ c ^= c >> 4;
+ inbuf = (c & 1) << 7;
+ buffer[pos++] = c;
+ }
+ } else if (bits === 8) {
+ for (i = 0; i < colors; ++i) {
+ buffer[pos++] = rawBytes[i];
+ }
+
+ for (; i < rowBytes; ++i) {
+ buffer[pos] = buffer[pos - colors] + rawBytes[i];
+ pos++;
+ }
+ } else if (bits === 16) {
+ var bytesPerPixel = colors * 2;
+
+ for (i = 0; i < bytesPerPixel; ++i) {
+ buffer[pos++] = rawBytes[i];
+ }
+
+ for (; i < rowBytes; i += 2) {
+ var sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);
+ buffer[pos++] = sum >> 8 & 0xff;
+ buffer[pos++] = sum & 0xff;
+ }
+ } else {
+ var compArray = new Uint8Array(colors + 1);
+ var bitMask = (1 << bits) - 1;
+ var j = 0,
+ k = bufferLength;
+ var columns = this.columns;
+
+ for (i = 0; i < columns; ++i) {
+ for (var kk = 0; kk < colors; ++kk) {
+ if (inbits < bits) {
+ inbuf = inbuf << 8 | rawBytes[j++] & 0xff;
+ inbits += 8;
+ }
+
+ compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;
+ inbits -= bits;
+ outbuf = outbuf << bits | compArray[kk];
+ outbits += bits;
+
+ if (outbits >= 8) {
+ buffer[k++] = outbuf >> outbits - 8 & 0xff;
+ outbits -= 8;
+ }
+ }
+ }
+
+ if (outbits > 0) {
+ buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);
+ }
+ }
+
+ this.bufferLength += rowBytes;
+ };
+
+ PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() {
+ var rowBytes = this.rowBytes;
+ var pixBytes = this.pixBytes;
+ var predictor = this.str.getByte();
+ var rawBytes = this.str.getBytes(rowBytes);
+ this.eof = !rawBytes.length;
+
+ if (this.eof) {
+ return;
+ }
+
+ var bufferLength = this.bufferLength;
+ var buffer = this.ensureBuffer(bufferLength + rowBytes);
+ var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
+
+ if (prevRow.length === 0) {
+ prevRow = new Uint8Array(rowBytes);
+ }
+
+ var i,
+ j = bufferLength,
+ up,
+ c;
+
+ switch (predictor) {
+ case 0:
+ for (i = 0; i < rowBytes; ++i) {
+ buffer[j++] = rawBytes[i];
+ }
+
+ break;
+
+ case 1:
+ for (i = 0; i < pixBytes; ++i) {
+ buffer[j++] = rawBytes[i];
+ }
+
+ for (; i < rowBytes; ++i) {
+ buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;
+ j++;
+ }
+
+ break;
+
+ case 2:
+ for (i = 0; i < rowBytes; ++i) {
+ buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;
+ }
+
+ break;
+
+ case 3:
+ for (i = 0; i < pixBytes; ++i) {
+ buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
+ }
+
+ for (; i < rowBytes; ++i) {
+ buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;
+ j++;
+ }
+
+ break;
+
+ case 4:
+ for (i = 0; i < pixBytes; ++i) {
+ up = prevRow[i];
+ c = rawBytes[i];
+ buffer[j++] = up + c;
+ }
+
+ for (; i < rowBytes; ++i) {
+ up = prevRow[i];
+ var upLeft = prevRow[i - pixBytes];
+ var left = buffer[j - pixBytes];
+ var p = left + up - upLeft;
+ var pa = p - left;
+
+ if (pa < 0) {
+ pa = -pa;
+ }
+
+ var pb = p - up;
+
+ if (pb < 0) {
+ pb = -pb;
+ }
+
+ var pc = p - upLeft;
+
+ if (pc < 0) {
+ pc = -pc;
+ }
+
+ c = rawBytes[i];
+
+ if (pa <= pb && pa <= pc) {
+ buffer[j++] = left + c;
+ } else if (pb <= pc) {
+ buffer[j++] = up + c;
+ } else {
+ buffer[j++] = upLeft + c;
+ }
+ }
+
+ break;
+
+ default:
+ throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
+ }
+
+ this.bufferLength += rowBytes;
+ };
+
+ return PredictorStream;
+}();
+
+exports.PredictorStream = PredictorStream;
+
+var DecryptStream = function DecryptStreamClosure() {
+ function DecryptStream(str, maybeLength, decrypt) {
+ this.str = str;
+ this.dict = str.dict;
+ this.decrypt = decrypt;
+ this.nextChunk = null;
+ this.initialized = false;
+ DecodeStream.call(this, maybeLength);
+ }
+
+ var chunkSize = 512;
+ DecryptStream.prototype = Object.create(DecodeStream.prototype);
+
+ DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {
+ var chunk;
+
+ if (this.initialized) {
+ chunk = this.nextChunk;
+ } else {
+ chunk = this.str.getBytes(chunkSize);
+ this.initialized = true;
+ }
+
+ if (!chunk || chunk.length === 0) {
+ this.eof = true;
+ return;
+ }
+
+ this.nextChunk = this.str.getBytes(chunkSize);
+ var hasMoreData = this.nextChunk && this.nextChunk.length > 0;
+ var decrypt = this.decrypt;
+ chunk = decrypt(chunk, !hasMoreData);
+ var bufferLength = this.bufferLength;
+ var i,
+ n = chunk.length;
+ var buffer = this.ensureBuffer(bufferLength + n);
+
+ for (i = 0; i < n; i++) {
+ buffer[bufferLength++] = chunk[i];
+ }
+
+ this.bufferLength = bufferLength;
+ };
+
+ return DecryptStream;
+}();
+
+exports.DecryptStream = DecryptStream;
+
+var Ascii85Stream = function Ascii85StreamClosure() {
+ function Ascii85Stream(str, maybeLength) {
+ this.str = str;
+ this.dict = str.dict;
+ this.input = new Uint8Array(5);
+
+ if (maybeLength) {
+ maybeLength = 0.8 * maybeLength;
+ }
+
+ DecodeStream.call(this, maybeLength);
+ }
+
+ Ascii85Stream.prototype = Object.create(DecodeStream.prototype);
+
+ Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {
+ var TILDA_CHAR = 0x7e;
+ var Z_LOWER_CHAR = 0x7a;
+ var EOF = -1;
+ var str = this.str;
+ var c = str.getByte();
+
+ while ((0, _core_utils.isWhiteSpace)(c)) {
+ c = str.getByte();
+ }
+
+ if (c === EOF || c === TILDA_CHAR) {
+ this.eof = true;
+ return;
+ }
+
+ var bufferLength = this.bufferLength,
+ buffer;
+ var i;
+
+ if (c === Z_LOWER_CHAR) {
+ buffer = this.ensureBuffer(bufferLength + 4);
+
+ for (i = 0; i < 4; ++i) {
+ buffer[bufferLength + i] = 0;
+ }
+
+ this.bufferLength += 4;
+ } else {
+ var input = this.input;
+ input[0] = c;
+
+ for (i = 1; i < 5; ++i) {
+ c = str.getByte();
+
+ while ((0, _core_utils.isWhiteSpace)(c)) {
+ c = str.getByte();
+ }
+
+ input[i] = c;
+
+ if (c === EOF || c === TILDA_CHAR) {
+ break;
+ }
+ }
+
+ buffer = this.ensureBuffer(bufferLength + i - 1);
+ this.bufferLength += i - 1;
+
+ if (i < 5) {
+ for (; i < 5; ++i) {
+ input[i] = 0x21 + 84;
+ }
+
+ this.eof = true;
+ }
+
+ var t = 0;
+
+ for (i = 0; i < 5; ++i) {
+ t = t * 85 + (input[i] - 0x21);
+ }
+
+ for (i = 3; i >= 0; --i) {
+ buffer[bufferLength + i] = t & 0xff;
+ t >>= 8;
+ }
+ }
+ };
+
+ return Ascii85Stream;
+}();
+
+exports.Ascii85Stream = Ascii85Stream;
+
+var AsciiHexStream = function AsciiHexStreamClosure() {
+ function AsciiHexStream(str, maybeLength) {
+ this.str = str;
+ this.dict = str.dict;
+ this.firstDigit = -1;
+
+ if (maybeLength) {
+ maybeLength = 0.5 * maybeLength;
+ }
+
+ DecodeStream.call(this, maybeLength);
+ }
+
+ AsciiHexStream.prototype = Object.create(DecodeStream.prototype);
+
+ AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {
+ var UPSTREAM_BLOCK_SIZE = 8000;
+ var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);
+
+ if (!bytes.length) {
+ this.eof = true;
+ return;
+ }
+
+ var maxDecodeLength = bytes.length + 1 >> 1;
+ var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);
+ var bufferLength = this.bufferLength;
+ var firstDigit = this.firstDigit;
+
+ for (var i = 0, ii = bytes.length; i < ii; i++) {
+ var ch = bytes[i],
+ digit;
+
+ if (ch >= 0x30 && ch <= 0x39) {
+ digit = ch & 0x0f;
+ } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
+ digit = (ch & 0x0f) + 9;
+ } else if (ch === 0x3e) {
+ this.eof = true;
+ break;
+ } else {
+ continue;
+ }
+
+ if (firstDigit < 0) {
+ firstDigit = digit;
+ } else {
+ buffer[bufferLength++] = firstDigit << 4 | digit;
+ firstDigit = -1;
+ }
+ }
+
+ if (firstDigit >= 0 && this.eof) {
+ buffer[bufferLength++] = firstDigit << 4;
+ firstDigit = -1;
+ }
+
+ this.firstDigit = firstDigit;
+ this.bufferLength = bufferLength;
+ };
+
+ return AsciiHexStream;
+}();
+
+exports.AsciiHexStream = AsciiHexStream;
+
+var RunLengthStream = function RunLengthStreamClosure() {
+ function RunLengthStream(str, maybeLength) {
+ this.str = str;
+ this.dict = str.dict;
+ DecodeStream.call(this, maybeLength);
+ }
+
+ RunLengthStream.prototype = Object.create(DecodeStream.prototype);
+
+ RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {
+ var repeatHeader = this.str.getBytes(2);
+
+ if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {
+ this.eof = true;
+ return;
+ }
+
+ var buffer;
+ var bufferLength = this.bufferLength;
+ var n = repeatHeader[0];
+
+ if (n < 128) {
+ buffer = this.ensureBuffer(bufferLength + n + 1);
+ buffer[bufferLength++] = repeatHeader[1];
+
+ if (n > 0) {
+ var source = this.str.getBytes(n);
+ buffer.set(source, bufferLength);
+ bufferLength += n;
+ }
+ } else {
+ n = 257 - n;
+ var b = repeatHeader[1];
+ buffer = this.ensureBuffer(bufferLength + n + 1);
+
+ for (var i = 0; i < n; i++) {
+ buffer[bufferLength++] = b;
+ }
+ }
+
+ this.bufferLength = bufferLength;
+ };
+
+ return RunLengthStream;
+}();
+
+exports.RunLengthStream = RunLengthStream;
+
+var LZWStream = function LZWStreamClosure() {
+ function LZWStream(str, maybeLength, earlyChange) {
+ this.str = str;
+ this.dict = str.dict;
+ this.cachedData = 0;
+ this.bitsCached = 0;
+ var maxLzwDictionarySize = 4096;
+ var lzwState = {
+ earlyChange,
+ codeLength: 9,
+ nextCode: 258,
+ dictionaryValues: new Uint8Array(maxLzwDictionarySize),
+ dictionaryLengths: new Uint16Array(maxLzwDictionarySize),
+ dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),
+ currentSequence: new Uint8Array(maxLzwDictionarySize),
+ currentSequenceLength: 0
+ };
+
+ for (var i = 0; i < 256; ++i) {
+ lzwState.dictionaryValues[i] = i;
+ lzwState.dictionaryLengths[i] = 1;
+ }
+
+ this.lzwState = lzwState;
+ DecodeStream.call(this, maybeLength);
+ }
+
+ LZWStream.prototype = Object.create(DecodeStream.prototype);
+
+ LZWStream.prototype.readBits = function LZWStream_readBits(n) {
+ var bitsCached = this.bitsCached;
+ var cachedData = this.cachedData;
+
+ while (bitsCached < n) {
+ var c = this.str.getByte();
+
+ if (c === -1) {
+ this.eof = true;
+ return null;
+ }
+
+ cachedData = cachedData << 8 | c;
+ bitsCached += 8;
+ }
+
+ this.bitsCached = bitsCached -= n;
+ this.cachedData = cachedData;
+ this.lastCode = null;
+ return cachedData >>> bitsCached & (1 << n) - 1;
+ };
+
+ LZWStream.prototype.readBlock = function LZWStream_readBlock() {
+ var blockSize = 512;
+ var estimatedDecodedSize = blockSize * 2,
+ decodedSizeDelta = blockSize;
+ var i, j, q;
+ var lzwState = this.lzwState;
+
+ if (!lzwState) {
+ return;
+ }
+
+ var earlyChange = lzwState.earlyChange;
+ var nextCode = lzwState.nextCode;
+ var dictionaryValues = lzwState.dictionaryValues;
+ var dictionaryLengths = lzwState.dictionaryLengths;
+ var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;
+ var codeLength = lzwState.codeLength;
+ var prevCode = lzwState.prevCode;
+ var currentSequence = lzwState.currentSequence;
+ var currentSequenceLength = lzwState.currentSequenceLength;
+ var decodedLength = 0;
+ var currentBufferLength = this.bufferLength;
+ var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+
+ for (i = 0; i < blockSize; i++) {
+ var code = this.readBits(codeLength);
+ var hasPrev = currentSequenceLength > 0;
+
+ if (code < 256) {
+ currentSequence[0] = code;
+ currentSequenceLength = 1;
+ } else if (code >= 258) {
+ if (code < nextCode) {
+ currentSequenceLength = dictionaryLengths[code];
+
+ for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {
+ currentSequence[j] = dictionaryValues[q];
+ q = dictionaryPrevCodes[q];
+ }
+ } else {
+ currentSequence[currentSequenceLength++] = currentSequence[0];
+ }
+ } else if (code === 256) {
+ codeLength = 9;
+ nextCode = 258;
+ currentSequenceLength = 0;
+ continue;
+ } else {
+ this.eof = true;
+ delete this.lzwState;
+ break;
+ }
+
+ if (hasPrev) {
+ dictionaryPrevCodes[nextCode] = prevCode;
+ dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;
+ dictionaryValues[nextCode] = currentSequence[0];
+ nextCode++;
+ codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;
+ }
+
+ prevCode = code;
+ decodedLength += currentSequenceLength;
+
+ if (estimatedDecodedSize < decodedLength) {
+ do {
+ estimatedDecodedSize += decodedSizeDelta;
+ } while (estimatedDecodedSize < decodedLength);
+
+ buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+ }
+
+ for (j = 0; j < currentSequenceLength; j++) {
+ buffer[currentBufferLength++] = currentSequence[j];
+ }
+ }
+
+ lzwState.nextCode = nextCode;
+ lzwState.codeLength = codeLength;
+ lzwState.prevCode = prevCode;
+ lzwState.currentSequenceLength = currentSequenceLength;
+ this.bufferLength = currentBufferLength;
+ };
+
+ return LZWStream;
+}();
+
+exports.LZWStream = LZWStream;
+
+var NullStream = function NullStreamClosure() {
+ function NullStream() {
+ Stream.call(this, new Uint8Array(0));
+ }
+
+ NullStream.prototype = Stream.prototype;
+ return NullStream;
+}();
+
+exports.NullStream = NullStream;
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.CCITTFaxStream = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _ccitt = __w_pdfjs_require__(14);
+
+var _stream = __w_pdfjs_require__(12);
+
+var CCITTFaxStream = function CCITTFaxStreamClosure() {
+ function CCITTFaxStream(str, maybeLength, params) {
+ this.str = str;
+ this.dict = str.dict;
+
+ if (!(0, _primitives.isDict)(params)) {
+ params = _primitives.Dict.empty;
+ }
+
+ const source = {
+ next() {
+ return str.getByte();
+ }
+
+ };
+ this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, {
+ K: params.get("K"),
+ EndOfLine: params.get("EndOfLine"),
+ EncodedByteAlign: params.get("EncodedByteAlign"),
+ Columns: params.get("Columns"),
+ Rows: params.get("Rows"),
+ EndOfBlock: params.get("EndOfBlock"),
+ BlackIs1: params.get("BlackIs1")
+ });
+
+ _stream.DecodeStream.call(this, maybeLength);
+ }
+
+ CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype);
+
+ CCITTFaxStream.prototype.readBlock = function () {
+ while (!this.eof) {
+ const c = this.ccittFaxDecoder.readNextChar();
+
+ if (c === -1) {
+ this.eof = true;
+ return;
+ }
+
+ this.ensureBuffer(this.bufferLength + 1);
+ this.buffer[this.bufferLength++] = c;
+ }
+ };
+
+ return CCITTFaxStream;
+}();
+
+exports.CCITTFaxStream = CCITTFaxStream;
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.CCITTFaxDecoder = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+const CCITTFaxDecoder = function CCITTFaxDecoder() {
+ const ccittEOL = -2;
+ const ccittEOF = -1;
+ const twoDimPass = 0;
+ const twoDimHoriz = 1;
+ const twoDimVert0 = 2;
+ const twoDimVertR1 = 3;
+ const twoDimVertL1 = 4;
+ const twoDimVertR2 = 5;
+ const twoDimVertL2 = 6;
+ const twoDimVertR3 = 7;
+ const twoDimVertL3 = 8;
+ const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];
+ const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];
+ const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];
+ const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];
+ const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];
+ const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];
+
+ function CCITTFaxDecoder(source, options = {}) {
+ if (!source || typeof source.next !== "function") {
+ throw new Error('CCITTFaxDecoder - invalid "source" parameter.');
+ }
+
+ this.source = source;
+ this.eof = false;
+ this.encoding = options.K || 0;
+ this.eoline = options.EndOfLine || false;
+ this.byteAlign = options.EncodedByteAlign || false;
+ this.columns = options.Columns || 1728;
+ this.rows = options.Rows || 0;
+ let eoblock = options.EndOfBlock;
+
+ if (eoblock === null || eoblock === undefined) {
+ eoblock = true;
+ }
+
+ this.eoblock = eoblock;
+ this.black = options.BlackIs1 || false;
+ this.codingLine = new Uint32Array(this.columns + 1);
+ this.refLine = new Uint32Array(this.columns + 2);
+ this.codingLine[0] = this.columns;
+ this.codingPos = 0;
+ this.row = 0;
+ this.nextLine2D = this.encoding < 0;
+ this.inputBits = 0;
+ this.inputBuf = 0;
+ this.outputBits = 0;
+ this.rowsDone = false;
+ let code1;
+
+ while ((code1 = this._lookBits(12)) === 0) {
+ this._eatBits(1);
+ }
+
+ if (code1 === 1) {
+ this._eatBits(12);
+ }
+
+ if (this.encoding > 0) {
+ this.nextLine2D = !this._lookBits(1);
+
+ this._eatBits(1);
+ }
+ }
+
+ CCITTFaxDecoder.prototype = {
+ readNextChar() {
+ if (this.eof) {
+ return -1;
+ }
+
+ const refLine = this.refLine;
+ const codingLine = this.codingLine;
+ const columns = this.columns;
+ let refPos, blackPixels, bits, i;
+
+ if (this.outputBits === 0) {
+ if (this.rowsDone) {
+ this.eof = true;
+ }
+
+ if (this.eof) {
+ return -1;
+ }
+
+ this.err = false;
+ let code1, code2, code3;
+
+ if (this.nextLine2D) {
+ for (i = 0; codingLine[i] < columns; ++i) {
+ refLine[i] = codingLine[i];
+ }
+
+ refLine[i++] = columns;
+ refLine[i] = columns;
+ codingLine[0] = 0;
+ this.codingPos = 0;
+ refPos = 0;
+ blackPixels = 0;
+
+ while (codingLine[this.codingPos] < columns) {
+ code1 = this._getTwoDimCode();
+
+ switch (code1) {
+ case twoDimPass:
+ this._addPixels(refLine[refPos + 1], blackPixels);
+
+ if (refLine[refPos + 1] < columns) {
+ refPos += 2;
+ }
+
+ break;
+
+ case twoDimHoriz:
+ code1 = code2 = 0;
+
+ if (blackPixels) {
+ do {
+ code1 += code3 = this._getBlackCode();
+ } while (code3 >= 64);
+
+ do {
+ code2 += code3 = this._getWhiteCode();
+ } while (code3 >= 64);
+ } else {
+ do {
+ code1 += code3 = this._getWhiteCode();
+ } while (code3 >= 64);
+
+ do {
+ code2 += code3 = this._getBlackCode();
+ } while (code3 >= 64);
+ }
+
+ this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
+
+ if (codingLine[this.codingPos] < columns) {
+ this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+
+ break;
+
+ case twoDimVertR3:
+ this._addPixels(refLine[refPos] + 3, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertR2:
+ this._addPixels(refLine[refPos] + 2, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertR1:
+ this._addPixels(refLine[refPos] + 1, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVert0:
+ this._addPixels(refLine[refPos], blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertL3:
+ this._addPixelsNeg(refLine[refPos] - 3, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ if (refPos > 0) {
+ --refPos;
+ } else {
+ ++refPos;
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertL2:
+ this._addPixelsNeg(refLine[refPos] - 2, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ if (refPos > 0) {
+ --refPos;
+ } else {
+ ++refPos;
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertL1:
+ this._addPixelsNeg(refLine[refPos] - 1, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ if (refPos > 0) {
+ --refPos;
+ } else {
+ ++refPos;
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case ccittEOF:
+ this._addPixels(columns, 0);
+
+ this.eof = true;
+ break;
+
+ default:
+ (0, _util.info)("bad 2d code");
+
+ this._addPixels(columns, 0);
+
+ this.err = true;
+ }
+ }
+ } else {
+ codingLine[0] = 0;
+ this.codingPos = 0;
+ blackPixels = 0;
+
+ while (codingLine[this.codingPos] < columns) {
+ code1 = 0;
+
+ if (blackPixels) {
+ do {
+ code1 += code3 = this._getBlackCode();
+ } while (code3 >= 64);
+ } else {
+ do {
+ code1 += code3 = this._getWhiteCode();
+ } while (code3 >= 64);
+ }
+
+ this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
+
+ blackPixels ^= 1;
+ }
+ }
+
+ let gotEOL = false;
+
+ if (this.byteAlign) {
+ this.inputBits &= ~7;
+ }
+
+ if (!this.eoblock && this.row === this.rows - 1) {
+ this.rowsDone = true;
+ } else {
+ code1 = this._lookBits(12);
+
+ if (this.eoline) {
+ while (code1 !== ccittEOF && code1 !== 1) {
+ this._eatBits(1);
+
+ code1 = this._lookBits(12);
+ }
+ } else {
+ while (code1 === 0) {
+ this._eatBits(1);
+
+ code1 = this._lookBits(12);
+ }
+ }
+
+ if (code1 === 1) {
+ this._eatBits(12);
+
+ gotEOL = true;
+ } else if (code1 === ccittEOF) {
+ this.eof = true;
+ }
+ }
+
+ if (!this.eof && this.encoding > 0 && !this.rowsDone) {
+ this.nextLine2D = !this._lookBits(1);
+
+ this._eatBits(1);
+ }
+
+ if (this.eoblock && gotEOL && this.byteAlign) {
+ code1 = this._lookBits(12);
+
+ if (code1 === 1) {
+ this._eatBits(12);
+
+ if (this.encoding > 0) {
+ this._lookBits(1);
+
+ this._eatBits(1);
+ }
+
+ if (this.encoding >= 0) {
+ for (i = 0; i < 4; ++i) {
+ code1 = this._lookBits(12);
+
+ if (code1 !== 1) {
+ (0, _util.info)("bad rtc code: " + code1);
+ }
+
+ this._eatBits(12);
+
+ if (this.encoding > 0) {
+ this._lookBits(1);
+
+ this._eatBits(1);
+ }
+ }
+ }
+
+ this.eof = true;
+ }
+ } else if (this.err && this.eoline) {
+ while (true) {
+ code1 = this._lookBits(13);
+
+ if (code1 === ccittEOF) {
+ this.eof = true;
+ return -1;
+ }
+
+ if (code1 >> 1 === 1) {
+ break;
+ }
+
+ this._eatBits(1);
+ }
+
+ this._eatBits(12);
+
+ if (this.encoding > 0) {
+ this._eatBits(1);
+
+ this.nextLine2D = !(code1 & 1);
+ }
+ }
+
+ if (codingLine[0] > 0) {
+ this.outputBits = codingLine[this.codingPos = 0];
+ } else {
+ this.outputBits = codingLine[this.codingPos = 1];
+ }
+
+ this.row++;
+ }
+
+ let c;
+
+ if (this.outputBits >= 8) {
+ c = this.codingPos & 1 ? 0 : 0xff;
+ this.outputBits -= 8;
+
+ if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {
+ this.codingPos++;
+ this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
+ }
+ } else {
+ bits = 8;
+ c = 0;
+
+ do {
+ if (this.outputBits > bits) {
+ c <<= bits;
+
+ if (!(this.codingPos & 1)) {
+ c |= 0xff >> 8 - bits;
+ }
+
+ this.outputBits -= bits;
+ bits = 0;
+ } else {
+ c <<= this.outputBits;
+
+ if (!(this.codingPos & 1)) {
+ c |= 0xff >> 8 - this.outputBits;
+ }
+
+ bits -= this.outputBits;
+ this.outputBits = 0;
+
+ if (codingLine[this.codingPos] < columns) {
+ this.codingPos++;
+ this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
+ } else if (bits > 0) {
+ c <<= bits;
+ bits = 0;
+ }
+ }
+ } while (bits);
+ }
+
+ if (this.black) {
+ c ^= 0xff;
+ }
+
+ return c;
+ },
+
+ _addPixels(a1, blackPixels) {
+ const codingLine = this.codingLine;
+ let codingPos = this.codingPos;
+
+ if (a1 > codingLine[codingPos]) {
+ if (a1 > this.columns) {
+ (0, _util.info)("row is wrong length");
+ this.err = true;
+ a1 = this.columns;
+ }
+
+ if (codingPos & 1 ^ blackPixels) {
+ ++codingPos;
+ }
+
+ codingLine[codingPos] = a1;
+ }
+
+ this.codingPos = codingPos;
+ },
+
+ _addPixelsNeg(a1, blackPixels) {
+ const codingLine = this.codingLine;
+ let codingPos = this.codingPos;
+
+ if (a1 > codingLine[codingPos]) {
+ if (a1 > this.columns) {
+ (0, _util.info)("row is wrong length");
+ this.err = true;
+ a1 = this.columns;
+ }
+
+ if (codingPos & 1 ^ blackPixels) {
+ ++codingPos;
+ }
+
+ codingLine[codingPos] = a1;
+ } else if (a1 < codingLine[codingPos]) {
+ if (a1 < 0) {
+ (0, _util.info)("invalid code");
+ this.err = true;
+ a1 = 0;
+ }
+
+ while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {
+ --codingPos;
+ }
+
+ codingLine[codingPos] = a1;
+ }
+
+ this.codingPos = codingPos;
+ },
+
+ _findTableCode(start, end, table, limit) {
+ const limitValue = limit || 0;
+
+ for (let i = start; i <= end; ++i) {
+ let code = this._lookBits(i);
+
+ if (code === ccittEOF) {
+ return [true, 1, false];
+ }
+
+ if (i < end) {
+ code <<= end - i;
+ }
+
+ if (!limitValue || code >= limitValue) {
+ const p = table[code - limitValue];
+
+ if (p[0] === i) {
+ this._eatBits(i);
+
+ return [true, p[1], true];
+ }
+ }
+ }
+
+ return [false, 0, false];
+ },
+
+ _getTwoDimCode() {
+ let code = 0;
+ let p;
+
+ if (this.eoblock) {
+ code = this._lookBits(7);
+ p = twoDimTable[code];
+
+ if (p && p[0] > 0) {
+ this._eatBits(p[0]);
+
+ return p[1];
+ }
+ } else {
+ const result = this._findTableCode(1, 7, twoDimTable);
+
+ if (result[0] && result[2]) {
+ return result[1];
+ }
+ }
+
+ (0, _util.info)("Bad two dim code");
+ return ccittEOF;
+ },
+
+ _getWhiteCode() {
+ let code = 0;
+ let p;
+
+ if (this.eoblock) {
+ code = this._lookBits(12);
+
+ if (code === ccittEOF) {
+ return 1;
+ }
+
+ if (code >> 5 === 0) {
+ p = whiteTable1[code];
+ } else {
+ p = whiteTable2[code >> 3];
+ }
+
+ if (p[0] > 0) {
+ this._eatBits(p[0]);
+
+ return p[1];
+ }
+ } else {
+ let result = this._findTableCode(1, 9, whiteTable2);
+
+ if (result[0]) {
+ return result[1];
+ }
+
+ result = this._findTableCode(11, 12, whiteTable1);
+
+ if (result[0]) {
+ return result[1];
+ }
+ }
+
+ (0, _util.info)("bad white code");
+
+ this._eatBits(1);
+
+ return 1;
+ },
+
+ _getBlackCode() {
+ let code, p;
+
+ if (this.eoblock) {
+ code = this._lookBits(13);
+
+ if (code === ccittEOF) {
+ return 1;
+ }
+
+ if (code >> 7 === 0) {
+ p = blackTable1[code];
+ } else if (code >> 9 === 0 && code >> 7 !== 0) {
+ p = blackTable2[(code >> 1) - 64];
+ } else {
+ p = blackTable3[code >> 7];
+ }
+
+ if (p[0] > 0) {
+ this._eatBits(p[0]);
+
+ return p[1];
+ }
+ } else {
+ let result = this._findTableCode(2, 6, blackTable3);
+
+ if (result[0]) {
+ return result[1];
+ }
+
+ result = this._findTableCode(7, 12, blackTable2, 64);
+
+ if (result[0]) {
+ return result[1];
+ }
+
+ result = this._findTableCode(10, 13, blackTable1);
+
+ if (result[0]) {
+ return result[1];
+ }
+ }
+
+ (0, _util.info)("bad black code");
+
+ this._eatBits(1);
+
+ return 1;
+ },
+
+ _lookBits(n) {
+ let c;
+
+ while (this.inputBits < n) {
+ if ((c = this.source.next()) === -1) {
+ if (this.inputBits === 0) {
+ return ccittEOF;
+ }
+
+ return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;
+ }
+
+ this.inputBuf = this.inputBuf << 8 | c;
+ this.inputBits += 8;
+ }
+
+ return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;
+ },
+
+ _eatBits(n) {
+ if ((this.inputBits -= n) < 0) {
+ this.inputBits = 0;
+ }
+ }
+
+ };
+ return CCITTFaxDecoder;
+}();
+
+exports.CCITTFaxDecoder = CCITTFaxDecoder;
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Jbig2Stream = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _jbig = __w_pdfjs_require__(16);
+
+var _util = __w_pdfjs_require__(2);
+
+const Jbig2Stream = function Jbig2StreamClosure() {
+ function Jbig2Stream(stream, maybeLength, dict, params) {
+ this.stream = stream;
+ this.maybeLength = maybeLength;
+ this.dict = dict;
+ this.params = params;
+
+ _stream.DecodeStream.call(this, maybeLength);
+ }
+
+ Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype);
+ Object.defineProperty(Jbig2Stream.prototype, "bytes", {
+ get() {
+ return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
+ },
+
+ configurable: true
+ });
+
+ Jbig2Stream.prototype.ensureBuffer = function (requested) {};
+
+ Jbig2Stream.prototype.readBlock = function () {
+ if (this.eof) {
+ return;
+ }
+
+ const jbig2Image = new _jbig.Jbig2Image();
+ const chunks = [];
+
+ if ((0, _primitives.isDict)(this.params)) {
+ const globalsStream = this.params.get("JBIG2Globals");
+
+ if ((0, _primitives.isStream)(globalsStream)) {
+ const globals = globalsStream.getBytes();
+ chunks.push({
+ data: globals,
+ start: 0,
+ end: globals.length
+ });
+ }
+ }
+
+ chunks.push({
+ data: this.bytes,
+ start: 0,
+ end: this.bytes.length
+ });
+ const data = jbig2Image.parseChunks(chunks);
+ const dataLength = data.length;
+
+ for (let i = 0; i < dataLength; i++) {
+ data[i] ^= 0xff;
+ }
+
+ this.buffer = data;
+ this.bufferLength = dataLength;
+ this.eof = true;
+ };
+
+ return Jbig2Stream;
+}();
+
+exports.Jbig2Stream = Jbig2Stream;
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Jbig2Image = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _arithmetic_decoder = __w_pdfjs_require__(17);
+
+var _ccitt = __w_pdfjs_require__(14);
+
+class Jbig2Error extends _util.BaseException {
+ constructor(msg) {
+ super(`JBIG2 error: ${msg}`);
+ }
+
+}
+
+var Jbig2Image = function Jbig2ImageClosure() {
+ function ContextCache() {}
+
+ ContextCache.prototype = {
+ getContexts(id) {
+ if (id in this) {
+ return this[id];
+ }
+
+ return this[id] = new Int8Array(1 << 16);
+ }
+
+ };
+
+ function DecodingContext(data, start, end) {
+ this.data = data;
+ this.start = start;
+ this.end = end;
+ }
+
+ DecodingContext.prototype = {
+ get decoder() {
+ var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
+ return (0, _util.shadow)(this, "decoder", decoder);
+ },
+
+ get contextCache() {
+ var cache = new ContextCache();
+ return (0, _util.shadow)(this, "contextCache", cache);
+ }
+
+ };
+
+ function decodeInteger(contextCache, procedure, decoder) {
+ var contexts = contextCache.getContexts(procedure);
+ var prev = 1;
+
+ function readBits(length) {
+ var v = 0;
+
+ for (var i = 0; i < length; i++) {
+ var bit = decoder.readBit(contexts, prev);
+ prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;
+ v = v << 1 | bit;
+ }
+
+ return v >>> 0;
+ }
+
+ var sign = readBits(1);
+ var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);
+
+ if (sign === 0) {
+ return value;
+ } else if (value > 0) {
+ return -value;
+ }
+
+ return null;
+ }
+
+ function decodeIAID(contextCache, decoder, codeLength) {
+ var contexts = contextCache.getContexts("IAID");
+ var prev = 1;
+
+ for (var i = 0; i < codeLength; i++) {
+ var bit = decoder.readBit(contexts, prev);
+ prev = prev << 1 | bit;
+ }
+
+ if (codeLength < 31) {
+ return prev & (1 << codeLength) - 1;
+ }
+
+ return prev & 0x7fffffff;
+ }
+
+ var SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"];
+ var CodingTemplates = [[{
+ x: -1,
+ y: -2
+ }, {
+ x: 0,
+ y: -2
+ }, {
+ x: 1,
+ y: -2
+ }, {
+ x: -2,
+ y: -1
+ }, {
+ x: -1,
+ y: -1
+ }, {
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: 2,
+ y: -1
+ }, {
+ x: -4,
+ y: 0
+ }, {
+ x: -3,
+ y: 0
+ }, {
+ x: -2,
+ y: 0
+ }, {
+ x: -1,
+ y: 0
+ }], [{
+ x: -1,
+ y: -2
+ }, {
+ x: 0,
+ y: -2
+ }, {
+ x: 1,
+ y: -2
+ }, {
+ x: 2,
+ y: -2
+ }, {
+ x: -2,
+ y: -1
+ }, {
+ x: -1,
+ y: -1
+ }, {
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: 2,
+ y: -1
+ }, {
+ x: -3,
+ y: 0
+ }, {
+ x: -2,
+ y: 0
+ }, {
+ x: -1,
+ y: 0
+ }], [{
+ x: -1,
+ y: -2
+ }, {
+ x: 0,
+ y: -2
+ }, {
+ x: 1,
+ y: -2
+ }, {
+ x: -2,
+ y: -1
+ }, {
+ x: -1,
+ y: -1
+ }, {
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -2,
+ y: 0
+ }, {
+ x: -1,
+ y: 0
+ }], [{
+ x: -3,
+ y: -1
+ }, {
+ x: -2,
+ y: -1
+ }, {
+ x: -1,
+ y: -1
+ }, {
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -4,
+ y: 0
+ }, {
+ x: -3,
+ y: 0
+ }, {
+ x: -2,
+ y: 0
+ }, {
+ x: -1,
+ y: 0
+ }]];
+ var RefinementTemplates = [{
+ coding: [{
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }],
+ reference: [{
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }, {
+ x: 0,
+ y: 0
+ }, {
+ x: 1,
+ y: 0
+ }, {
+ x: -1,
+ y: 1
+ }, {
+ x: 0,
+ y: 1
+ }, {
+ x: 1,
+ y: 1
+ }]
+ }, {
+ coding: [{
+ x: -1,
+ y: -1
+ }, {
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }],
+ reference: [{
+ x: 0,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }, {
+ x: 0,
+ y: 0
+ }, {
+ x: 1,
+ y: 0
+ }, {
+ x: 0,
+ y: 1
+ }, {
+ x: 1,
+ y: 1
+ }]
+ }];
+ var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];
+ var RefinementReusedContexts = [0x0020, 0x0008];
+
+ function decodeBitmapTemplate0(width, height, decodingContext) {
+ var decoder = decodingContext.decoder;
+ var contexts = decodingContext.contextCache.getContexts("GB");
+ var contextLabel,
+ i,
+ j,
+ pixel,
+ row,
+ row1,
+ row2,
+ bitmap = [];
+ var OLD_PIXEL_MASK = 0x7bf7;
+
+ for (i = 0; i < height; i++) {
+ row = bitmap[i] = new Uint8Array(width);
+ row1 = i < 1 ? row : bitmap[i - 1];
+ row2 = i < 2 ? row : bitmap[i - 2];
+ contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;
+
+ for (j = 0; j < width; j++) {
+ row[j] = pixel = decoder.readBit(contexts, contextLabel);
+ contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
+ }
+ }
+
+ return bitmap;
+ }
+
+ function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
+ if (mmr) {
+ const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
+ return decodeMMRBitmap(input, width, height, false);
+ }
+
+ if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
+ return decodeBitmapTemplate0(width, height, decodingContext);
+ }
+
+ var useskip = !!skip;
+ var template = CodingTemplates[templateIndex].concat(at);
+ template.sort(function (a, b) {
+ return a.y - b.y || a.x - b.x;
+ });
+ var templateLength = template.length;
+ var templateX = new Int8Array(templateLength);
+ var templateY = new Int8Array(templateLength);
+ var changingTemplateEntries = [];
+ var reuseMask = 0,
+ minX = 0,
+ maxX = 0,
+ minY = 0;
+ var c, k;
+
+ for (k = 0; k < templateLength; k++) {
+ templateX[k] = template[k].x;
+ templateY[k] = template[k].y;
+ minX = Math.min(minX, template[k].x);
+ maxX = Math.max(maxX, template[k].x);
+ minY = Math.min(minY, template[k].y);
+
+ if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {
+ reuseMask |= 1 << templateLength - 1 - k;
+ } else {
+ changingTemplateEntries.push(k);
+ }
+ }
+
+ var changingEntriesLength = changingTemplateEntries.length;
+ var changingTemplateX = new Int8Array(changingEntriesLength);
+ var changingTemplateY = new Int8Array(changingEntriesLength);
+ var changingTemplateBit = new Uint16Array(changingEntriesLength);
+
+ for (c = 0; c < changingEntriesLength; c++) {
+ k = changingTemplateEntries[c];
+ changingTemplateX[c] = template[k].x;
+ changingTemplateY[c] = template[k].y;
+ changingTemplateBit[c] = 1 << templateLength - 1 - k;
+ }
+
+ var sbb_left = -minX;
+ var sbb_top = -minY;
+ var sbb_right = width - maxX;
+ var pseudoPixelContext = ReusedContexts[templateIndex];
+ var row = new Uint8Array(width);
+ var bitmap = [];
+ var decoder = decodingContext.decoder;
+ var contexts = decodingContext.contextCache.getContexts("GB");
+ var ltp = 0,
+ j,
+ i0,
+ j0,
+ contextLabel = 0,
+ bit,
+ shift;
+
+ for (var i = 0; i < height; i++) {
+ if (prediction) {
+ var sltp = decoder.readBit(contexts, pseudoPixelContext);
+ ltp ^= sltp;
+
+ if (ltp) {
+ bitmap.push(row);
+ continue;
+ }
+ }
+
+ row = new Uint8Array(row);
+ bitmap.push(row);
+
+ for (j = 0; j < width; j++) {
+ if (useskip && skip[i][j]) {
+ row[j] = 0;
+ continue;
+ }
+
+ if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
+ contextLabel = contextLabel << 1 & reuseMask;
+
+ for (k = 0; k < changingEntriesLength; k++) {
+ i0 = i + changingTemplateY[k];
+ j0 = j + changingTemplateX[k];
+ bit = bitmap[i0][j0];
+
+ if (bit) {
+ bit = changingTemplateBit[k];
+ contextLabel |= bit;
+ }
+ }
+ } else {
+ contextLabel = 0;
+ shift = templateLength - 1;
+
+ for (k = 0; k < templateLength; k++, shift--) {
+ j0 = j + templateX[k];
+
+ if (j0 >= 0 && j0 < width) {
+ i0 = i + templateY[k];
+
+ if (i0 >= 0) {
+ bit = bitmap[i0][j0];
+
+ if (bit) {
+ contextLabel |= bit << shift;
+ }
+ }
+ }
+ }
+ }
+
+ var pixel = decoder.readBit(contexts, contextLabel);
+ row[j] = pixel;
+ }
+ }
+
+ return bitmap;
+ }
+
+ function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {
+ var codingTemplate = RefinementTemplates[templateIndex].coding;
+
+ if (templateIndex === 0) {
+ codingTemplate = codingTemplate.concat([at[0]]);
+ }
+
+ var codingTemplateLength = codingTemplate.length;
+ var codingTemplateX = new Int32Array(codingTemplateLength);
+ var codingTemplateY = new Int32Array(codingTemplateLength);
+ var k;
+
+ for (k = 0; k < codingTemplateLength; k++) {
+ codingTemplateX[k] = codingTemplate[k].x;
+ codingTemplateY[k] = codingTemplate[k].y;
+ }
+
+ var referenceTemplate = RefinementTemplates[templateIndex].reference;
+
+ if (templateIndex === 0) {
+ referenceTemplate = referenceTemplate.concat([at[1]]);
+ }
+
+ var referenceTemplateLength = referenceTemplate.length;
+ var referenceTemplateX = new Int32Array(referenceTemplateLength);
+ var referenceTemplateY = new Int32Array(referenceTemplateLength);
+
+ for (k = 0; k < referenceTemplateLength; k++) {
+ referenceTemplateX[k] = referenceTemplate[k].x;
+ referenceTemplateY[k] = referenceTemplate[k].y;
+ }
+
+ var referenceWidth = referenceBitmap[0].length;
+ var referenceHeight = referenceBitmap.length;
+ var pseudoPixelContext = RefinementReusedContexts[templateIndex];
+ var bitmap = [];
+ var decoder = decodingContext.decoder;
+ var contexts = decodingContext.contextCache.getContexts("GR");
+ var ltp = 0;
+
+ for (var i = 0; i < height; i++) {
+ if (prediction) {
+ var sltp = decoder.readBit(contexts, pseudoPixelContext);
+ ltp ^= sltp;
+
+ if (ltp) {
+ throw new Jbig2Error("prediction is not supported");
+ }
+ }
+
+ var row = new Uint8Array(width);
+ bitmap.push(row);
+
+ for (var j = 0; j < width; j++) {
+ var i0, j0;
+ var contextLabel = 0;
+
+ for (k = 0; k < codingTemplateLength; k++) {
+ i0 = i + codingTemplateY[k];
+ j0 = j + codingTemplateX[k];
+
+ if (i0 < 0 || j0 < 0 || j0 >= width) {
+ contextLabel <<= 1;
+ } else {
+ contextLabel = contextLabel << 1 | bitmap[i0][j0];
+ }
+ }
+
+ for (k = 0; k < referenceTemplateLength; k++) {
+ i0 = i + referenceTemplateY[k] - offsetY;
+ j0 = j + referenceTemplateX[k] - offsetX;
+
+ if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {
+ contextLabel <<= 1;
+ } else {
+ contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];
+ }
+ }
+
+ var pixel = decoder.readBit(contexts, contextLabel);
+ row[j] = pixel;
+ }
+ }
+
+ return bitmap;
+ }
+
+ function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
+ if (huffman && refinement) {
+ throw new Jbig2Error("symbol refinement with Huffman is not supported");
+ }
+
+ var newSymbols = [];
+ var currentHeight = 0;
+ var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);
+ var decoder = decodingContext.decoder;
+ var contextCache = decodingContext.contextCache;
+ let tableB1, symbolWidths;
+
+ if (huffman) {
+ tableB1 = getStandardTable(1);
+ symbolWidths = [];
+ symbolCodeLength = Math.max(symbolCodeLength, 1);
+ }
+
+ while (newSymbols.length < numberOfNewSymbols) {
+ var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder);
+ currentHeight += deltaHeight;
+ let currentWidth = 0,
+ totalWidth = 0;
+ const firstSymbol = huffman ? symbolWidths.length : 0;
+
+ while (true) {
+ var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder);
+
+ if (deltaWidth === null) {
+ break;
+ }
+
+ currentWidth += deltaWidth;
+ totalWidth += currentWidth;
+ var bitmap;
+
+ if (refinement) {
+ var numberOfInstances = decodeInteger(contextCache, "IAAI", decoder);
+
+ if (numberOfInstances > 1) {
+ bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
+ } else {
+ var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
+ var rdx = decodeInteger(contextCache, "IARDX", decoder);
+ var rdy = decodeInteger(contextCache, "IARDY", decoder);
+ var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
+ bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
+ }
+
+ newSymbols.push(bitmap);
+ } else if (huffman) {
+ symbolWidths.push(currentWidth);
+ } else {
+ bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);
+ newSymbols.push(bitmap);
+ }
+ }
+
+ if (huffman && !refinement) {
+ const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
+ huffmanInput.byteAlign();
+ let collectiveBitmap;
+
+ if (bitmapSize === 0) {
+ collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
+ } else {
+ const originalEnd = huffmanInput.end;
+ const bitmapEnd = huffmanInput.position + bitmapSize;
+ huffmanInput.end = bitmapEnd;
+ collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);
+ huffmanInput.end = originalEnd;
+ huffmanInput.position = bitmapEnd;
+ }
+
+ const numberOfSymbolsDecoded = symbolWidths.length;
+
+ if (firstSymbol === numberOfSymbolsDecoded - 1) {
+ newSymbols.push(collectiveBitmap);
+ } else {
+ let i,
+ y,
+ xMin = 0,
+ xMax,
+ bitmapWidth,
+ symbolBitmap;
+
+ for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {
+ bitmapWidth = symbolWidths[i];
+ xMax = xMin + bitmapWidth;
+ symbolBitmap = [];
+
+ for (y = 0; y < currentHeight; y++) {
+ symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
+ }
+
+ newSymbols.push(symbolBitmap);
+ xMin = xMax;
+ }
+ }
+ }
+ }
+
+ var exportedSymbols = [];
+ var flags = [],
+ currentFlag = false;
+ var totalSymbolsLength = symbols.length + numberOfNewSymbols;
+
+ while (flags.length < totalSymbolsLength) {
+ var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder);
+
+ while (runLength--) {
+ flags.push(currentFlag);
+ }
+
+ currentFlag = !currentFlag;
+ }
+
+ for (var i = 0, ii = symbols.length; i < ii; i++) {
+ if (flags[i]) {
+ exportedSymbols.push(symbols[i]);
+ }
+ }
+
+ for (var j = 0; j < numberOfNewSymbols; i++, j++) {
+ if (flags[i]) {
+ exportedSymbols.push(newSymbols[j]);
+ }
+ }
+
+ return exportedSymbols;
+ }
+
+ function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
+ if (huffman && refinement) {
+ throw new Jbig2Error("refinement with Huffman is not supported");
+ }
+
+ var bitmap = [];
+ var i, row;
+
+ for (i = 0; i < height; i++) {
+ row = new Uint8Array(width);
+
+ if (defaultPixelValue) {
+ for (var j = 0; j < width; j++) {
+ row[j] = defaultPixelValue;
+ }
+ }
+
+ bitmap.push(row);
+ }
+
+ var decoder = decodingContext.decoder;
+ var contextCache = decodingContext.contextCache;
+ var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder);
+ var firstS = 0;
+ i = 0;
+
+ while (i < numberOfSymbolInstances) {
+ var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder);
+ stripT += deltaT;
+ var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder);
+ firstS += deltaFirstS;
+ var currentS = firstS;
+
+ do {
+ let currentT = 0;
+
+ if (stripSize > 1) {
+ currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder);
+ }
+
+ var t = stripSize * stripT + currentT;
+ var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
+ var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder));
+ var symbolBitmap = inputSymbols[symbolId];
+ var symbolWidth = symbolBitmap[0].length;
+ var symbolHeight = symbolBitmap.length;
+
+ if (applyRefinement) {
+ var rdw = decodeInteger(contextCache, "IARDW", decoder);
+ var rdh = decodeInteger(contextCache, "IARDH", decoder);
+ var rdx = decodeInteger(contextCache, "IARDX", decoder);
+ var rdy = decodeInteger(contextCache, "IARDY", decoder);
+ symbolWidth += rdw;
+ symbolHeight += rdh;
+ symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
+ }
+
+ var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
+ var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
+ var s2, t2, symbolRow;
+
+ if (transposed) {
+ for (s2 = 0; s2 < symbolHeight; s2++) {
+ row = bitmap[offsetS + s2];
+
+ if (!row) {
+ continue;
+ }
+
+ symbolRow = symbolBitmap[s2];
+ var maxWidth = Math.min(width - offsetT, symbolWidth);
+
+ switch (combinationOperator) {
+ case 0:
+ for (t2 = 0; t2 < maxWidth; t2++) {
+ row[offsetT + t2] |= symbolRow[t2];
+ }
+
+ break;
+
+ case 2:
+ for (t2 = 0; t2 < maxWidth; t2++) {
+ row[offsetT + t2] ^= symbolRow[t2];
+ }
+
+ break;
+
+ default:
+ throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
+ }
+ }
+
+ currentS += symbolHeight - 1;
+ } else {
+ for (t2 = 0; t2 < symbolHeight; t2++) {
+ row = bitmap[offsetT + t2];
+
+ if (!row) {
+ continue;
+ }
+
+ symbolRow = symbolBitmap[t2];
+
+ switch (combinationOperator) {
+ case 0:
+ for (s2 = 0; s2 < symbolWidth; s2++) {
+ row[offsetS + s2] |= symbolRow[s2];
+ }
+
+ break;
+
+ case 2:
+ for (s2 = 0; s2 < symbolWidth; s2++) {
+ row[offsetS + s2] ^= symbolRow[s2];
+ }
+
+ break;
+
+ default:
+ throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
+ }
+ }
+
+ currentS += symbolWidth - 1;
+ }
+
+ i++;
+ var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder);
+
+ if (deltaS === null) {
+ break;
+ }
+
+ currentS += deltaS + dsOffset;
+ } while (true);
+ }
+
+ return bitmap;
+ }
+
+ function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
+ const at = [];
+
+ if (!mmr) {
+ at.push({
+ x: -patternWidth,
+ y: 0
+ });
+
+ if (template === 0) {
+ at.push({
+ x: -3,
+ y: -1
+ });
+ at.push({
+ x: 2,
+ y: -2
+ });
+ at.push({
+ x: -2,
+ y: -2
+ });
+ }
+ }
+
+ const collectiveWidth = (maxPatternIndex + 1) * patternWidth;
+ const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
+ const patterns = [];
+
+ for (let i = 0; i <= maxPatternIndex; i++) {
+ const patternBitmap = [];
+ const xMin = patternWidth * i;
+ const xMax = xMin + patternWidth;
+
+ for (let y = 0; y < patternHeight; y++) {
+ patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
+ }
+
+ patterns.push(patternBitmap);
+ }
+
+ return patterns;
+ }
+
+ function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
+ const skip = null;
+
+ if (enableSkip) {
+ throw new Jbig2Error("skip is not supported");
+ }
+
+ if (combinationOperator !== 0) {
+ throw new Jbig2Error("operator " + combinationOperator + " is not supported in halftone region");
+ }
+
+ const regionBitmap = [];
+ let i, j, row;
+
+ for (i = 0; i < regionHeight; i++) {
+ row = new Uint8Array(regionWidth);
+
+ if (defaultPixelValue) {
+ for (j = 0; j < regionWidth; j++) {
+ row[j] = defaultPixelValue;
+ }
+ }
+
+ regionBitmap.push(row);
+ }
+
+ const numberOfPatterns = patterns.length;
+ const pattern0 = patterns[0];
+ const patternWidth = pattern0[0].length,
+ patternHeight = pattern0.length;
+ const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);
+ const at = [];
+
+ if (!mmr) {
+ at.push({
+ x: template <= 1 ? 3 : 2,
+ y: -1
+ });
+
+ if (template === 0) {
+ at.push({
+ x: -3,
+ y: -1
+ });
+ at.push({
+ x: 2,
+ y: -2
+ });
+ at.push({
+ x: -2,
+ y: -2
+ });
+ }
+ }
+
+ const grayScaleBitPlanes = [];
+ let mmrInput, bitmap;
+
+ if (mmr) {
+ mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
+ }
+
+ for (i = bitsPerValue - 1; i >= 0; i--) {
+ if (mmr) {
+ bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);
+ } else {
+ bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);
+ }
+
+ grayScaleBitPlanes[i] = bitmap;
+ }
+
+ let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
+
+ for (mg = 0; mg < gridHeight; mg++) {
+ for (ng = 0; ng < gridWidth; ng++) {
+ bit = 0;
+ patternIndex = 0;
+
+ for (j = bitsPerValue - 1; j >= 0; j--) {
+ bit = grayScaleBitPlanes[j][mg][ng] ^ bit;
+ patternIndex |= bit << j;
+ }
+
+ patternBitmap = patterns[patternIndex];
+ x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;
+ y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;
+
+ if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {
+ for (i = 0; i < patternHeight; i++) {
+ regionRow = regionBitmap[y + i];
+ patternRow = patternBitmap[i];
+
+ for (j = 0; j < patternWidth; j++) {
+ regionRow[x + j] |= patternRow[j];
+ }
+ }
+ } else {
+ let regionX, regionY;
+
+ for (i = 0; i < patternHeight; i++) {
+ regionY = y + i;
+
+ if (regionY < 0 || regionY >= regionHeight) {
+ continue;
+ }
+
+ regionRow = regionBitmap[regionY];
+ patternRow = patternBitmap[i];
+
+ for (j = 0; j < patternWidth; j++) {
+ regionX = x + j;
+
+ if (regionX >= 0 && regionX < regionWidth) {
+ regionRow[regionX] |= patternRow[j];
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return regionBitmap;
+ }
+
+ function readSegmentHeader(data, start) {
+ var segmentHeader = {};
+ segmentHeader.number = (0, _core_utils.readUint32)(data, start);
+ var flags = data[start + 4];
+ var segmentType = flags & 0x3f;
+
+ if (!SegmentTypes[segmentType]) {
+ throw new Jbig2Error("invalid segment type: " + segmentType);
+ }
+
+ segmentHeader.type = segmentType;
+ segmentHeader.typeName = SegmentTypes[segmentType];
+ segmentHeader.deferredNonRetain = !!(flags & 0x80);
+ var pageAssociationFieldSize = !!(flags & 0x40);
+ var referredFlags = data[start + 5];
+ var referredToCount = referredFlags >> 5 & 7;
+ var retainBits = [referredFlags & 31];
+ var position = start + 6;
+
+ if (referredFlags === 7) {
+ referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;
+ position += 3;
+ var bytes = referredToCount + 7 >> 3;
+ retainBits[0] = data[position++];
+
+ while (--bytes > 0) {
+ retainBits.push(data[position++]);
+ }
+ } else if (referredFlags === 5 || referredFlags === 6) {
+ throw new Jbig2Error("invalid referred-to flags");
+ }
+
+ segmentHeader.retainBits = retainBits;
+ let referredToSegmentNumberSize = 4;
+
+ if (segmentHeader.number <= 256) {
+ referredToSegmentNumberSize = 1;
+ } else if (segmentHeader.number <= 65536) {
+ referredToSegmentNumberSize = 2;
+ }
+
+ var referredTo = [];
+ var i, ii;
+
+ for (i = 0; i < referredToCount; i++) {
+ let number;
+
+ if (referredToSegmentNumberSize === 1) {
+ number = data[position];
+ } else if (referredToSegmentNumberSize === 2) {
+ number = (0, _core_utils.readUint16)(data, position);
+ } else {
+ number = (0, _core_utils.readUint32)(data, position);
+ }
+
+ referredTo.push(number);
+ position += referredToSegmentNumberSize;
+ }
+
+ segmentHeader.referredTo = referredTo;
+
+ if (!pageAssociationFieldSize) {
+ segmentHeader.pageAssociation = data[position++];
+ } else {
+ segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ }
+
+ segmentHeader.length = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+
+ if (segmentHeader.length === 0xffffffff) {
+ if (segmentType === 38) {
+ var genericRegionInfo = readRegionSegmentInformation(data, position);
+ var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
+ var genericRegionMmr = !!(genericRegionSegmentFlags & 1);
+ var searchPatternLength = 6;
+ var searchPattern = new Uint8Array(searchPatternLength);
+
+ if (!genericRegionMmr) {
+ searchPattern[0] = 0xff;
+ searchPattern[1] = 0xac;
+ }
+
+ searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;
+ searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;
+ searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;
+ searchPattern[5] = genericRegionInfo.height & 0xff;
+
+ for (i = position, ii = data.length; i < ii; i++) {
+ var j = 0;
+
+ while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
+ j++;
+ }
+
+ if (j === searchPatternLength) {
+ segmentHeader.length = i + searchPatternLength;
+ break;
+ }
+ }
+
+ if (segmentHeader.length === 0xffffffff) {
+ throw new Jbig2Error("segment end was not found");
+ }
+ } else {
+ throw new Jbig2Error("invalid unknown segment length");
+ }
+ }
+
+ segmentHeader.headerEnd = position;
+ return segmentHeader;
+ }
+
+ function readSegments(header, data, start, end) {
+ var segments = [];
+ var position = start;
+
+ while (position < end) {
+ var segmentHeader = readSegmentHeader(data, position);
+ position = segmentHeader.headerEnd;
+ var segment = {
+ header: segmentHeader,
+ data
+ };
+
+ if (!header.randomAccess) {
+ segment.start = position;
+ position += segmentHeader.length;
+ segment.end = position;
+ }
+
+ segments.push(segment);
+
+ if (segmentHeader.type === 51) {
+ break;
+ }
+ }
+
+ if (header.randomAccess) {
+ for (var i = 0, ii = segments.length; i < ii; i++) {
+ segments[i].start = position;
+ position += segments[i].header.length;
+ segments[i].end = position;
+ }
+ }
+
+ return segments;
+ }
+
+ function readRegionSegmentInformation(data, start) {
+ return {
+ width: (0, _core_utils.readUint32)(data, start),
+ height: (0, _core_utils.readUint32)(data, start + 4),
+ x: (0, _core_utils.readUint32)(data, start + 8),
+ y: (0, _core_utils.readUint32)(data, start + 12),
+ combinationOperator: data[start + 16] & 7
+ };
+ }
+
+ var RegionSegmentInformationFieldLength = 17;
+
+ function processSegment(segment, visitor) {
+ var header = segment.header;
+ var data = segment.data,
+ position = segment.start,
+ end = segment.end;
+ var args, at, i, atLength;
+
+ switch (header.type) {
+ case 0:
+ var dictionary = {};
+ var dictionaryFlags = (0, _core_utils.readUint16)(data, position);
+ dictionary.huffman = !!(dictionaryFlags & 1);
+ dictionary.refinement = !!(dictionaryFlags & 2);
+ dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
+ dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;
+ dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;
+ dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;
+ dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
+ dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
+ dictionary.template = dictionaryFlags >> 10 & 3;
+ dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;
+ position += 2;
+
+ if (!dictionary.huffman) {
+ atLength = dictionary.template === 0 ? 4 : 1;
+ at = [];
+
+ for (i = 0; i < atLength; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
+ });
+ position += 2;
+ }
+
+ dictionary.at = at;
+ }
+
+ if (dictionary.refinement && !dictionary.refinementTemplate) {
+ at = [];
+
+ for (i = 0; i < 2; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
+ });
+ position += 2;
+ }
+
+ dictionary.refinementAt = at;
+ }
+
+ dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ args = [dictionary, header.number, header.referredTo, data, position, end];
+ break;
+
+ case 6:
+ case 7:
+ var textRegion = {};
+ textRegion.info = readRegionSegmentInformation(data, position);
+ position += RegionSegmentInformationFieldLength;
+ var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ textRegion.huffman = !!(textRegionSegmentFlags & 1);
+ textRegion.refinement = !!(textRegionSegmentFlags & 2);
+ textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;
+ textRegion.stripSize = 1 << textRegion.logStripSize;
+ textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;
+ textRegion.transposed = !!(textRegionSegmentFlags & 64);
+ textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;
+ textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;
+ textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;
+ textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
+
+ if (textRegion.huffman) {
+ var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ textRegion.huffmanFS = textRegionHuffmanFlags & 3;
+ textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
+ textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;
+ textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;
+ textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;
+ textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;
+ textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;
+ textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);
+ }
+
+ if (textRegion.refinement && !textRegion.refinementTemplate) {
+ at = [];
+
+ for (i = 0; i < 2; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
+ });
+ position += 2;
+ }
+
+ textRegion.refinementAt = at;
+ }
+
+ textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ args = [textRegion, header.referredTo, data, position, end];
+ break;
+
+ case 16:
+ const patternDictionary = {};
+ const patternDictionaryFlags = data[position++];
+ patternDictionary.mmr = !!(patternDictionaryFlags & 1);
+ patternDictionary.template = patternDictionaryFlags >> 1 & 3;
+ patternDictionary.patternWidth = data[position++];
+ patternDictionary.patternHeight = data[position++];
+ patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ args = [patternDictionary, header.number, data, position, end];
+ break;
+
+ case 22:
+ case 23:
+ const halftoneRegion = {};
+ halftoneRegion.info = readRegionSegmentInformation(data, position);
+ position += RegionSegmentInformationFieldLength;
+ const halftoneRegionFlags = data[position++];
+ halftoneRegion.mmr = !!(halftoneRegionFlags & 1);
+ halftoneRegion.template = halftoneRegionFlags >> 1 & 3;
+ halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);
+ halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;
+ halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;
+ halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
+ position += 4;
+ halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
+ position += 4;
+ halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ args = [halftoneRegion, header.referredTo, data, position, end];
+ break;
+
+ case 38:
+ case 39:
+ var genericRegion = {};
+ genericRegion.info = readRegionSegmentInformation(data, position);
+ position += RegionSegmentInformationFieldLength;
+ var genericRegionSegmentFlags = data[position++];
+ genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
+ genericRegion.template = genericRegionSegmentFlags >> 1 & 3;
+ genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
+
+ if (!genericRegion.mmr) {
+ atLength = genericRegion.template === 0 ? 4 : 1;
+ at = [];
+
+ for (i = 0; i < atLength; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
+ });
+ position += 2;
+ }
+
+ genericRegion.at = at;
+ }
+
+ args = [genericRegion, data, position, end];
+ break;
+
+ case 48:
+ var pageInfo = {
+ width: (0, _core_utils.readUint32)(data, position),
+ height: (0, _core_utils.readUint32)(data, position + 4),
+ resolutionX: (0, _core_utils.readUint32)(data, position + 8),
+ resolutionY: (0, _core_utils.readUint32)(data, position + 12)
+ };
+
+ if (pageInfo.height === 0xffffffff) {
+ delete pageInfo.height;
+ }
+
+ var pageSegmentFlags = data[position + 16];
+ (0, _core_utils.readUint16)(data, position + 17);
+ pageInfo.lossless = !!(pageSegmentFlags & 1);
+ pageInfo.refinement = !!(pageSegmentFlags & 2);
+ pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
+ pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;
+ pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
+ pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
+ args = [pageInfo];
+ break;
+
+ case 49:
+ break;
+
+ case 50:
+ break;
+
+ case 51:
+ break;
+
+ case 53:
+ args = [header.number, data, position, end];
+ break;
+
+ case 62:
+ break;
+
+ default:
+ throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented");
+ }
+
+ var callbackName = "on" + header.typeName;
+
+ if (callbackName in visitor) {
+ visitor[callbackName].apply(visitor, args);
+ }
+ }
+
+ function processSegments(segments, visitor) {
+ for (var i = 0, ii = segments.length; i < ii; i++) {
+ processSegment(segments[i], visitor);
+ }
+ }
+
+ function parseJbig2Chunks(chunks) {
+ var visitor = new SimpleSegmentVisitor();
+
+ for (var i = 0, ii = chunks.length; i < ii; i++) {
+ var chunk = chunks[i];
+ var segments = readSegments({}, chunk.data, chunk.start, chunk.end);
+ processSegments(segments, visitor);
+ }
+
+ return visitor.buffer;
+ }
+
+ function parseJbig2(data) {
+ const end = data.length;
+ let position = 0;
+
+ if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) {
+ throw new Jbig2Error("parseJbig2 - invalid header.");
+ }
+
+ const header = Object.create(null);
+ position += 8;
+ const flags = data[position++];
+ header.randomAccess = !(flags & 1);
+
+ if (!(flags & 2)) {
+ header.numberOfPages = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ }
+
+ const segments = readSegments(header, data, position, end);
+ const visitor = new SimpleSegmentVisitor();
+ processSegments(segments, visitor);
+ const {
+ width,
+ height
+ } = visitor.currentPageInfo;
+ const bitPacked = visitor.buffer;
+ const imgData = new Uint8ClampedArray(width * height);
+ let q = 0,
+ k = 0;
+
+ for (let i = 0; i < height; i++) {
+ let mask = 0,
+ buffer;
+
+ for (let j = 0; j < width; j++) {
+ if (!mask) {
+ mask = 128;
+ buffer = bitPacked[k++];
+ }
+
+ imgData[q++] = buffer & mask ? 0 : 255;
+ mask >>= 1;
+ }
+ }
+
+ return {
+ imgData,
+ width,
+ height
+ };
+ }
+
+ function SimpleSegmentVisitor() {}
+
+ SimpleSegmentVisitor.prototype = {
+ onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {
+ this.currentPageInfo = info;
+ var rowSize = info.width + 7 >> 3;
+ var buffer = new Uint8ClampedArray(rowSize * info.height);
+
+ if (info.defaultPixelValue) {
+ for (var i = 0, ii = buffer.length; i < ii; i++) {
+ buffer[i] = 0xff;
+ }
+ }
+
+ this.buffer = buffer;
+ },
+ drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {
+ var pageInfo = this.currentPageInfo;
+ var width = regionInfo.width,
+ height = regionInfo.height;
+ var rowSize = pageInfo.width + 7 >> 3;
+ var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;
+ var buffer = this.buffer;
+ var mask0 = 128 >> (regionInfo.x & 7);
+ var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
+ var i, j, mask, offset;
+
+ switch (combinationOperator) {
+ case 0:
+ for (i = 0; i < height; i++) {
+ mask = mask0;
+ offset = offset0;
+
+ for (j = 0; j < width; j++) {
+ if (bitmap[i][j]) {
+ buffer[offset] |= mask;
+ }
+
+ mask >>= 1;
+
+ if (!mask) {
+ mask = 128;
+ offset++;
+ }
+ }
+
+ offset0 += rowSize;
+ }
+
+ break;
+
+ case 2:
+ for (i = 0; i < height; i++) {
+ mask = mask0;
+ offset = offset0;
+
+ for (j = 0; j < width; j++) {
+ if (bitmap[i][j]) {
+ buffer[offset] ^= mask;
+ }
+
+ mask >>= 1;
+
+ if (!mask) {
+ mask = 128;
+ offset++;
+ }
+ }
+
+ offset0 += rowSize;
+ }
+
+ break;
+
+ default:
+ throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
+ }
+ },
+ onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {
+ var regionInfo = region.info;
+ var decodingContext = new DecodingContext(data, start, end);
+ var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);
+ this.drawBitmap(regionInfo, bitmap);
+ },
+ onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {
+ this.onImmediateGenericRegion.apply(this, arguments);
+ },
+ onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
+ let huffmanTables, huffmanInput;
+
+ if (dictionary.huffman) {
+ huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
+ huffmanInput = new Reader(data, start, end);
+ }
+
+ var symbols = this.symbols;
+
+ if (!symbols) {
+ this.symbols = symbols = {};
+ }
+
+ var inputSymbols = [];
+
+ for (var i = 0, ii = referredSegments.length; i < ii; i++) {
+ const referredSymbols = symbols[referredSegments[i]];
+
+ if (referredSymbols) {
+ inputSymbols = inputSymbols.concat(referredSymbols);
+ }
+ }
+
+ var decodingContext = new DecodingContext(data, start, end);
+ symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);
+ },
+ onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {
+ var regionInfo = region.info;
+ let huffmanTables, huffmanInput;
+ var symbols = this.symbols;
+ var inputSymbols = [];
+
+ for (var i = 0, ii = referredSegments.length; i < ii; i++) {
+ const referredSymbols = symbols[referredSegments[i]];
+
+ if (referredSymbols) {
+ inputSymbols = inputSymbols.concat(referredSymbols);
+ }
+ }
+
+ var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);
+
+ if (region.huffman) {
+ huffmanInput = new Reader(data, start, end);
+ huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);
+ }
+
+ var decodingContext = new DecodingContext(data, start, end);
+ var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);
+ this.drawBitmap(regionInfo, bitmap);
+ },
+ onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
+ this.onImmediateTextRegion.apply(this, arguments);
+ },
+
+ onPatternDictionary(dictionary, currentSegment, data, start, end) {
+ let patterns = this.patterns;
+
+ if (!patterns) {
+ this.patterns = patterns = {};
+ }
+
+ const decodingContext = new DecodingContext(data, start, end);
+ patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
+ },
+
+ onImmediateHalftoneRegion(region, referredSegments, data, start, end) {
+ const patterns = this.patterns[referredSegments[0]];
+ const regionInfo = region.info;
+ const decodingContext = new DecodingContext(data, start, end);
+ const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);
+ this.drawBitmap(regionInfo, bitmap);
+ },
+
+ onImmediateLosslessHalftoneRegion() {
+ this.onImmediateHalftoneRegion.apply(this, arguments);
+ },
+
+ onTables(currentSegment, data, start, end) {
+ let customTables = this.customTables;
+
+ if (!customTables) {
+ this.customTables = customTables = {};
+ }
+
+ customTables[currentSegment] = decodeTablesSegment(data, start, end);
+ }
+
+ };
+
+ function HuffmanLine(lineData) {
+ if (lineData.length === 2) {
+ this.isOOB = true;
+ this.rangeLow = 0;
+ this.prefixLength = lineData[0];
+ this.rangeLength = 0;
+ this.prefixCode = lineData[1];
+ this.isLowerRange = false;
+ } else {
+ this.isOOB = false;
+ this.rangeLow = lineData[0];
+ this.prefixLength = lineData[1];
+ this.rangeLength = lineData[2];
+ this.prefixCode = lineData[3];
+ this.isLowerRange = lineData[4] === "lower";
+ }
+ }
+
+ function HuffmanTreeNode(line) {
+ this.children = [];
+
+ if (line) {
+ this.isLeaf = true;
+ this.rangeLength = line.rangeLength;
+ this.rangeLow = line.rangeLow;
+ this.isLowerRange = line.isLowerRange;
+ this.isOOB = line.isOOB;
+ } else {
+ this.isLeaf = false;
+ }
+ }
+
+ HuffmanTreeNode.prototype = {
+ buildTree(line, shift) {
+ const bit = line.prefixCode >> shift & 1;
+
+ if (shift <= 0) {
+ this.children[bit] = new HuffmanTreeNode(line);
+ } else {
+ let node = this.children[bit];
+
+ if (!node) {
+ this.children[bit] = node = new HuffmanTreeNode(null);
+ }
+
+ node.buildTree(line, shift - 1);
+ }
+ },
+
+ decodeNode(reader) {
+ if (this.isLeaf) {
+ if (this.isOOB) {
+ return null;
+ }
+
+ const htOffset = reader.readBits(this.rangeLength);
+ return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
+ }
+
+ const node = this.children[reader.readBit()];
+
+ if (!node) {
+ throw new Jbig2Error("invalid Huffman data");
+ }
+
+ return node.decodeNode(reader);
+ }
+
+ };
+
+ function HuffmanTable(lines, prefixCodesDone) {
+ if (!prefixCodesDone) {
+ this.assignPrefixCodes(lines);
+ }
+
+ this.rootNode = new HuffmanTreeNode(null);
+
+ for (let i = 0, ii = lines.length; i < ii; i++) {
+ const line = lines[i];
+
+ if (line.prefixLength > 0) {
+ this.rootNode.buildTree(line, line.prefixLength - 1);
+ }
+ }
+ }
+
+ HuffmanTable.prototype = {
+ decode(reader) {
+ return this.rootNode.decodeNode(reader);
+ },
+
+ assignPrefixCodes(lines) {
+ const linesLength = lines.length;
+ let prefixLengthMax = 0;
+
+ for (let i = 0; i < linesLength; i++) {
+ prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
+ }
+
+ const histogram = new Uint32Array(prefixLengthMax + 1);
+
+ for (let i = 0; i < linesLength; i++) {
+ histogram[lines[i].prefixLength]++;
+ }
+
+ let currentLength = 1,
+ firstCode = 0,
+ currentCode,
+ currentTemp,
+ line;
+ histogram[0] = 0;
+
+ while (currentLength <= prefixLengthMax) {
+ firstCode = firstCode + histogram[currentLength - 1] << 1;
+ currentCode = firstCode;
+ currentTemp = 0;
+
+ while (currentTemp < linesLength) {
+ line = lines[currentTemp];
+
+ if (line.prefixLength === currentLength) {
+ line.prefixCode = currentCode;
+ currentCode++;
+ }
+
+ currentTemp++;
+ }
+
+ currentLength++;
+ }
+ }
+
+ };
+
+ function decodeTablesSegment(data, start, end) {
+ const flags = data[start];
+ const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;
+ const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;
+ const reader = new Reader(data, start + 9, end);
+ const prefixSizeBits = (flags >> 1 & 7) + 1;
+ const rangeSizeBits = (flags >> 4 & 7) + 1;
+ const lines = [];
+ let prefixLength,
+ rangeLength,
+ currentRangeLow = lowestValue;
+
+ do {
+ prefixLength = reader.readBits(prefixSizeBits);
+ rangeLength = reader.readBits(rangeSizeBits);
+ lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));
+ currentRangeLow += 1 << rangeLength;
+ } while (currentRangeLow < highestValue);
+
+ prefixLength = reader.readBits(prefixSizeBits);
+ lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"]));
+ prefixLength = reader.readBits(prefixSizeBits);
+ lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
+
+ if (flags & 1) {
+ prefixLength = reader.readBits(prefixSizeBits);
+ lines.push(new HuffmanLine([prefixLength, 0]));
+ }
+
+ return new HuffmanTable(lines, false);
+ }
+
+ const standardTablesCache = {};
+
+ function getStandardTable(number) {
+ let table = standardTablesCache[number];
+
+ if (table) {
+ return table;
+ }
+
+ let lines;
+
+ switch (number) {
+ case 1:
+ lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];
+ break;
+
+ case 2:
+ lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];
+ break;
+
+ case 3:
+ lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]];
+ break;
+
+ case 4:
+ lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];
+ break;
+
+ case 5:
+ lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]];
+ break;
+
+ case 6:
+ lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]];
+ break;
+
+ case 7:
+ lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]];
+ break;
+
+ case 8:
+ lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]];
+ break;
+
+ case 9:
+ lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]];
+ break;
+
+ case 10:
+ lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]];
+ break;
+
+ case 11:
+ lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
+ break;
+
+ case 12:
+ lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];
+ break;
+
+ case 13:
+ lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
+ break;
+
+ case 14:
+ lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];
+ break;
+
+ case 15:
+ lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]];
+ break;
+
+ default:
+ throw new Jbig2Error(`standard table B.${number} does not exist`);
+ }
+
+ for (let i = 0, ii = lines.length; i < ii; i++) {
+ lines[i] = new HuffmanLine(lines[i]);
+ }
+
+ table = new HuffmanTable(lines, true);
+ standardTablesCache[number] = table;
+ return table;
+ }
+
+ function Reader(data, start, end) {
+ this.data = data;
+ this.start = start;
+ this.end = end;
+ this.position = start;
+ this.shift = -1;
+ this.currentByte = 0;
+ }
+
+ Reader.prototype = {
+ readBit() {
+ if (this.shift < 0) {
+ if (this.position >= this.end) {
+ throw new Jbig2Error("end of data while reading bit");
+ }
+
+ this.currentByte = this.data[this.position++];
+ this.shift = 7;
+ }
+
+ const bit = this.currentByte >> this.shift & 1;
+ this.shift--;
+ return bit;
+ },
+
+ readBits(numBits) {
+ let result = 0,
+ i;
+
+ for (i = numBits - 1; i >= 0; i--) {
+ result |= this.readBit() << i;
+ }
+
+ return result;
+ },
+
+ byteAlign() {
+ this.shift = -1;
+ },
+
+ next() {
+ if (this.position >= this.end) {
+ return -1;
+ }
+
+ return this.data[this.position++];
+ }
+
+ };
+
+ function getCustomHuffmanTable(index, referredTo, customTables) {
+ let currentIndex = 0;
+
+ for (let i = 0, ii = referredTo.length; i < ii; i++) {
+ const table = customTables[referredTo[i]];
+
+ if (table) {
+ if (index === currentIndex) {
+ return table;
+ }
+
+ currentIndex++;
+ }
+ }
+
+ throw new Jbig2Error("can't find custom Huffman table");
+ }
+
+ function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
+ const codes = [];
+
+ for (let i = 0; i <= 34; i++) {
+ const codeLength = reader.readBits(4);
+ codes.push(new HuffmanLine([i, codeLength, 0, 0]));
+ }
+
+ const runCodesTable = new HuffmanTable(codes, false);
+ codes.length = 0;
+
+ for (let i = 0; i < numberOfSymbols;) {
+ const codeLength = runCodesTable.decode(reader);
+
+ if (codeLength >= 32) {
+ let repeatedLength, numberOfRepeats, j;
+
+ switch (codeLength) {
+ case 32:
+ if (i === 0) {
+ throw new Jbig2Error("no previous value in symbol ID table");
+ }
+
+ numberOfRepeats = reader.readBits(2) + 3;
+ repeatedLength = codes[i - 1].prefixLength;
+ break;
+
+ case 33:
+ numberOfRepeats = reader.readBits(3) + 3;
+ repeatedLength = 0;
+ break;
+
+ case 34:
+ numberOfRepeats = reader.readBits(7) + 11;
+ repeatedLength = 0;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid code length in symbol ID table");
+ }
+
+ for (j = 0; j < numberOfRepeats; j++) {
+ codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));
+ i++;
+ }
+ } else {
+ codes.push(new HuffmanLine([i, codeLength, 0, 0]));
+ i++;
+ }
+ }
+
+ reader.byteAlign();
+ const symbolIDTable = new HuffmanTable(codes, false);
+ let customIndex = 0,
+ tableFirstS,
+ tableDeltaS,
+ tableDeltaT;
+
+ switch (textRegion.huffmanFS) {
+ case 0:
+ case 1:
+ tableFirstS = getStandardTable(textRegion.huffmanFS + 6);
+ break;
+
+ case 3:
+ tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman FS selector");
+ }
+
+ switch (textRegion.huffmanDS) {
+ case 0:
+ case 1:
+ case 2:
+ tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);
+ break;
+
+ case 3:
+ tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DS selector");
+ }
+
+ switch (textRegion.huffmanDT) {
+ case 0:
+ case 1:
+ case 2:
+ tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);
+ break;
+
+ case 3:
+ tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DT selector");
+ }
+
+ if (textRegion.refinement) {
+ throw new Jbig2Error("refinement with Huffman is not supported");
+ }
+
+ return {
+ symbolIDTable,
+ tableFirstS,
+ tableDeltaS,
+ tableDeltaT
+ };
+ }
+
+ function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
+ let customIndex = 0,
+ tableDeltaHeight,
+ tableDeltaWidth;
+
+ switch (dictionary.huffmanDHSelector) {
+ case 0:
+ case 1:
+ tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);
+ break;
+
+ case 3:
+ tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DH selector");
+ }
+
+ switch (dictionary.huffmanDWSelector) {
+ case 0:
+ case 1:
+ tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);
+ break;
+
+ case 3:
+ tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DW selector");
+ }
+
+ let tableBitmapSize, tableAggregateInstances;
+
+ if (dictionary.bitmapSizeSelector) {
+ tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ } else {
+ tableBitmapSize = getStandardTable(1);
+ }
+
+ if (dictionary.aggregationInstancesSelector) {
+ tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ } else {
+ tableAggregateInstances = getStandardTable(1);
+ }
+
+ return {
+ tableDeltaHeight,
+ tableDeltaWidth,
+ tableBitmapSize,
+ tableAggregateInstances
+ };
+ }
+
+ function readUncompressedBitmap(reader, width, height) {
+ const bitmap = [];
+
+ for (let y = 0; y < height; y++) {
+ const row = new Uint8Array(width);
+ bitmap.push(row);
+
+ for (let x = 0; x < width; x++) {
+ row[x] = reader.readBit();
+ }
+
+ reader.byteAlign();
+ }
+
+ return bitmap;
+ }
+
+ function decodeMMRBitmap(input, width, height, endOfBlock) {
+ const params = {
+ K: -1,
+ Columns: width,
+ Rows: height,
+ BlackIs1: true,
+ EndOfBlock: endOfBlock
+ };
+ const decoder = new _ccitt.CCITTFaxDecoder(input, params);
+ const bitmap = [];
+ let currentByte,
+ eof = false;
+
+ for (let y = 0; y < height; y++) {
+ const row = new Uint8Array(width);
+ bitmap.push(row);
+ let shift = -1;
+
+ for (let x = 0; x < width; x++) {
+ if (shift < 0) {
+ currentByte = decoder.readNextChar();
+
+ if (currentByte === -1) {
+ currentByte = 0;
+ eof = true;
+ }
+
+ shift = 7;
+ }
+
+ row[x] = currentByte >> shift & 1;
+ shift--;
+ }
+ }
+
+ if (endOfBlock && !eof) {
+ const lookForEOFLimit = 5;
+
+ for (let i = 0; i < lookForEOFLimit; i++) {
+ if (decoder.readNextChar() === -1) {
+ break;
+ }
+ }
+ }
+
+ return bitmap;
+ }
+
+ function Jbig2Image() {}
+
+ Jbig2Image.prototype = {
+ parseChunks(chunks) {
+ return parseJbig2Chunks(chunks);
+ },
+
+ parse(data) {
+ const {
+ imgData,
+ width,
+ height
+ } = parseJbig2(data);
+ this.width = width;
+ this.height = height;
+ return imgData;
+ }
+
+ };
+ return Jbig2Image;
+}();
+
+exports.Jbig2Image = Jbig2Image;
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ArithmeticDecoder = void 0;
+const QeTable = [{
+ qe: 0x5601,
+ nmps: 1,
+ nlps: 1,
+ switchFlag: 1
+}, {
+ qe: 0x3401,
+ nmps: 2,
+ nlps: 6,
+ switchFlag: 0
+}, {
+ qe: 0x1801,
+ nmps: 3,
+ nlps: 9,
+ switchFlag: 0
+}, {
+ qe: 0x0ac1,
+ nmps: 4,
+ nlps: 12,
+ switchFlag: 0
+}, {
+ qe: 0x0521,
+ nmps: 5,
+ nlps: 29,
+ switchFlag: 0
+}, {
+ qe: 0x0221,
+ nmps: 38,
+ nlps: 33,
+ switchFlag: 0
+}, {
+ qe: 0x5601,
+ nmps: 7,
+ nlps: 6,
+ switchFlag: 1
+}, {
+ qe: 0x5401,
+ nmps: 8,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x4801,
+ nmps: 9,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x3801,
+ nmps: 10,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x3001,
+ nmps: 11,
+ nlps: 17,
+ switchFlag: 0
+}, {
+ qe: 0x2401,
+ nmps: 12,
+ nlps: 18,
+ switchFlag: 0
+}, {
+ qe: 0x1c01,
+ nmps: 13,
+ nlps: 20,
+ switchFlag: 0
+}, {
+ qe: 0x1601,
+ nmps: 29,
+ nlps: 21,
+ switchFlag: 0
+}, {
+ qe: 0x5601,
+ nmps: 15,
+ nlps: 14,
+ switchFlag: 1
+}, {
+ qe: 0x5401,
+ nmps: 16,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x5101,
+ nmps: 17,
+ nlps: 15,
+ switchFlag: 0
+}, {
+ qe: 0x4801,
+ nmps: 18,
+ nlps: 16,
+ switchFlag: 0
+}, {
+ qe: 0x3801,
+ nmps: 19,
+ nlps: 17,
+ switchFlag: 0
+}, {
+ qe: 0x3401,
+ nmps: 20,
+ nlps: 18,
+ switchFlag: 0
+}, {
+ qe: 0x3001,
+ nmps: 21,
+ nlps: 19,
+ switchFlag: 0
+}, {
+ qe: 0x2801,
+ nmps: 22,
+ nlps: 19,
+ switchFlag: 0
+}, {
+ qe: 0x2401,
+ nmps: 23,
+ nlps: 20,
+ switchFlag: 0
+}, {
+ qe: 0x2201,
+ nmps: 24,
+ nlps: 21,
+ switchFlag: 0
+}, {
+ qe: 0x1c01,
+ nmps: 25,
+ nlps: 22,
+ switchFlag: 0
+}, {
+ qe: 0x1801,
+ nmps: 26,
+ nlps: 23,
+ switchFlag: 0
+}, {
+ qe: 0x1601,
+ nmps: 27,
+ nlps: 24,
+ switchFlag: 0
+}, {
+ qe: 0x1401,
+ nmps: 28,
+ nlps: 25,
+ switchFlag: 0
+}, {
+ qe: 0x1201,
+ nmps: 29,
+ nlps: 26,
+ switchFlag: 0
+}, {
+ qe: 0x1101,
+ nmps: 30,
+ nlps: 27,
+ switchFlag: 0
+}, {
+ qe: 0x0ac1,
+ nmps: 31,
+ nlps: 28,
+ switchFlag: 0
+}, {
+ qe: 0x09c1,
+ nmps: 32,
+ nlps: 29,
+ switchFlag: 0
+}, {
+ qe: 0x08a1,
+ nmps: 33,
+ nlps: 30,
+ switchFlag: 0
+}, {
+ qe: 0x0521,
+ nmps: 34,
+ nlps: 31,
+ switchFlag: 0
+}, {
+ qe: 0x0441,
+ nmps: 35,
+ nlps: 32,
+ switchFlag: 0
+}, {
+ qe: 0x02a1,
+ nmps: 36,
+ nlps: 33,
+ switchFlag: 0
+}, {
+ qe: 0x0221,
+ nmps: 37,
+ nlps: 34,
+ switchFlag: 0
+}, {
+ qe: 0x0141,
+ nmps: 38,
+ nlps: 35,
+ switchFlag: 0
+}, {
+ qe: 0x0111,
+ nmps: 39,
+ nlps: 36,
+ switchFlag: 0
+}, {
+ qe: 0x0085,
+ nmps: 40,
+ nlps: 37,
+ switchFlag: 0
+}, {
+ qe: 0x0049,
+ nmps: 41,
+ nlps: 38,
+ switchFlag: 0
+}, {
+ qe: 0x0025,
+ nmps: 42,
+ nlps: 39,
+ switchFlag: 0
+}, {
+ qe: 0x0015,
+ nmps: 43,
+ nlps: 40,
+ switchFlag: 0
+}, {
+ qe: 0x0009,
+ nmps: 44,
+ nlps: 41,
+ switchFlag: 0
+}, {
+ qe: 0x0005,
+ nmps: 45,
+ nlps: 42,
+ switchFlag: 0
+}, {
+ qe: 0x0001,
+ nmps: 45,
+ nlps: 43,
+ switchFlag: 0
+}, {
+ qe: 0x5601,
+ nmps: 46,
+ nlps: 46,
+ switchFlag: 0
+}];
+
+class ArithmeticDecoder {
+ constructor(data, start, end) {
+ this.data = data;
+ this.bp = start;
+ this.dataEnd = end;
+ this.chigh = data[start];
+ this.clow = 0;
+ this.byteIn();
+ this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;
+ this.clow = this.clow << 7 & 0xffff;
+ this.ct -= 7;
+ this.a = 0x8000;
+ }
+
+ byteIn() {
+ const data = this.data;
+ let bp = this.bp;
+
+ if (data[bp] === 0xff) {
+ if (data[bp + 1] > 0x8f) {
+ this.clow += 0xff00;
+ this.ct = 8;
+ } else {
+ bp++;
+ this.clow += data[bp] << 9;
+ this.ct = 7;
+ this.bp = bp;
+ }
+ } else {
+ bp++;
+ this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;
+ this.ct = 8;
+ this.bp = bp;
+ }
+
+ if (this.clow > 0xffff) {
+ this.chigh += this.clow >> 16;
+ this.clow &= 0xffff;
+ }
+ }
+
+ readBit(contexts, pos) {
+ let cx_index = contexts[pos] >> 1,
+ cx_mps = contexts[pos] & 1;
+ const qeTableIcx = QeTable[cx_index];
+ const qeIcx = qeTableIcx.qe;
+ let d;
+ let a = this.a - qeIcx;
+
+ if (this.chigh < qeIcx) {
+ if (a < qeIcx) {
+ a = qeIcx;
+ d = cx_mps;
+ cx_index = qeTableIcx.nmps;
+ } else {
+ a = qeIcx;
+ d = 1 ^ cx_mps;
+
+ if (qeTableIcx.switchFlag === 1) {
+ cx_mps = d;
+ }
+
+ cx_index = qeTableIcx.nlps;
+ }
+ } else {
+ this.chigh -= qeIcx;
+
+ if ((a & 0x8000) !== 0) {
+ this.a = a;
+ return cx_mps;
+ }
+
+ if (a < qeIcx) {
+ d = 1 ^ cx_mps;
+
+ if (qeTableIcx.switchFlag === 1) {
+ cx_mps = d;
+ }
+
+ cx_index = qeTableIcx.nlps;
+ } else {
+ d = cx_mps;
+ cx_index = qeTableIcx.nmps;
+ }
+ }
+
+ do {
+ if (this.ct === 0) {
+ this.byteIn();
+ }
+
+ a <<= 1;
+ this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;
+ this.clow = this.clow << 1 & 0xffff;
+ this.ct--;
+ } while ((a & 0x8000) === 0);
+
+ this.a = a;
+ contexts[pos] = cx_index << 1 | cx_mps;
+ return d;
+ }
+
+}
+
+exports.ArithmeticDecoder = ArithmeticDecoder;
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.JpegStream = void 0;
+
+var _stream = __w_pdfjs_require__(12);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _jpg = __w_pdfjs_require__(19);
+
+var _util = __w_pdfjs_require__(2);
+
+const JpegStream = function JpegStreamClosure() {
+ function JpegStream(stream, maybeLength, dict, params) {
+ let ch;
+
+ while ((ch = stream.getByte()) !== -1) {
+ if (ch === 0xff) {
+ stream.skip(-1);
+ break;
+ }
+ }
+
+ this.stream = stream;
+ this.maybeLength = maybeLength;
+ this.dict = dict;
+ this.params = params;
+
+ _stream.DecodeStream.call(this, maybeLength);
+ }
+
+ JpegStream.prototype = Object.create(_stream.DecodeStream.prototype);
+ Object.defineProperty(JpegStream.prototype, "bytes", {
+ get: function JpegStream_bytes() {
+ return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
+ },
+ configurable: true
+ });
+
+ JpegStream.prototype.ensureBuffer = function (requested) {};
+
+ JpegStream.prototype.readBlock = function () {
+ if (this.eof) {
+ return;
+ }
+
+ const jpegOptions = {
+ decodeTransform: undefined,
+ colorTransform: undefined
+ };
+ const decodeArr = this.dict.getArray("Decode", "D");
+
+ if (this.forceRGB && Array.isArray(decodeArr)) {
+ const bitsPerComponent = this.dict.get("BitsPerComponent") || 8;
+ const decodeArrLength = decodeArr.length;
+ const transform = new Int32Array(decodeArrLength);
+ let transformNeeded = false;
+ const maxValue = (1 << bitsPerComponent) - 1;
+
+ for (let i = 0; i < decodeArrLength; i += 2) {
+ transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;
+ transform[i + 1] = decodeArr[i] * maxValue | 0;
+
+ if (transform[i] !== 256 || transform[i + 1] !== 0) {
+ transformNeeded = true;
+ }
+ }
+
+ if (transformNeeded) {
+ jpegOptions.decodeTransform = transform;
+ }
+ }
+
+ if ((0, _primitives.isDict)(this.params)) {
+ const colorTransform = this.params.get("ColorTransform");
+
+ if (Number.isInteger(colorTransform)) {
+ jpegOptions.colorTransform = colorTransform;
+ }
+ }
+
+ const jpegImage = new _jpg.JpegImage(jpegOptions);
+ jpegImage.parse(this.bytes);
+ const data = jpegImage.getData({
+ width: this.drawWidth,
+ height: this.drawHeight,
+ forceRGB: this.forceRGB,
+ isSourcePDF: true
+ });
+ this.buffer = data;
+ this.bufferLength = data.length;
+ this.eof = true;
+ };
+
+ return JpegStream;
+}();
+
+exports.JpegStream = JpegStream;
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.JpegImage = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+class JpegError extends _util.BaseException {
+ constructor(msg) {
+ super(`JPEG error: ${msg}`);
+ }
+
+}
+
+class DNLMarkerError extends _util.BaseException {
+ constructor(message, scanLines) {
+ super(message);
+ this.scanLines = scanLines;
+ }
+
+}
+
+class EOIMarkerError extends _util.BaseException {}
+
+var JpegImage = function JpegImageClosure() {
+ var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);
+ var dctCos1 = 4017;
+ var dctSin1 = 799;
+ var dctCos3 = 3406;
+ var dctSin3 = 2276;
+ var dctCos6 = 1567;
+ var dctSin6 = 3784;
+ var dctSqrt2 = 5793;
+ var dctSqrt1d2 = 2896;
+
+ function JpegImage({
+ decodeTransform = null,
+ colorTransform = -1
+ } = {}) {
+ this._decodeTransform = decodeTransform;
+ this._colorTransform = colorTransform;
+ }
+
+ function buildHuffmanTable(codeLengths, values) {
+ var k = 0,
+ code = [],
+ i,
+ j,
+ length = 16;
+
+ while (length > 0 && !codeLengths[length - 1]) {
+ length--;
+ }
+
+ code.push({
+ children: [],
+ index: 0
+ });
+ var p = code[0],
+ q;
+
+ for (i = 0; i < length; i++) {
+ for (j = 0; j < codeLengths[i]; j++) {
+ p = code.pop();
+ p.children[p.index] = values[k];
+
+ while (p.index > 0) {
+ p = code.pop();
+ }
+
+ p.index++;
+ code.push(p);
+
+ while (code.length <= i) {
+ code.push(q = {
+ children: [],
+ index: 0
+ });
+ p.children[p.index] = q.children;
+ p = q;
+ }
+
+ k++;
+ }
+
+ if (i + 1 < length) {
+ code.push(q = {
+ children: [],
+ index: 0
+ });
+ p.children[p.index] = q.children;
+ p = q;
+ }
+ }
+
+ return code[0].children;
+ }
+
+ function getBlockBufferOffset(component, row, col) {
+ return 64 * ((component.blocksPerLine + 1) * row + col);
+ }
+
+ function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
+ var mcusPerLine = frame.mcusPerLine;
+ var progressive = frame.progressive;
+ const startOffset = offset;
+ let bitsData = 0,
+ bitsCount = 0;
+
+ function readBit() {
+ if (bitsCount > 0) {
+ bitsCount--;
+ return bitsData >> bitsCount & 1;
+ }
+
+ bitsData = data[offset++];
+
+ if (bitsData === 0xff) {
+ var nextByte = data[offset++];
+
+ if (nextByte) {
+ if (nextByte === 0xdc && parseDNLMarker) {
+ offset += 2;
+ const scanLines = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+
+ if (scanLines > 0 && scanLines !== frame.scanLines) {
+ throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines);
+ }
+ } else if (nextByte === 0xd9) {
+ if (parseDNLMarker) {
+ const maybeScanLines = blockRow * 8;
+
+ if (maybeScanLines > 0 && maybeScanLines < frame.scanLines / 10) {
+ throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
+ }
+ }
+
+ throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data");
+ }
+
+ throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);
+ }
+ }
+
+ bitsCount = 7;
+ return bitsData >>> 7;
+ }
+
+ function decodeHuffman(tree) {
+ var node = tree;
+
+ while (true) {
+ node = node[readBit()];
+
+ switch (typeof node) {
+ case "number":
+ return node;
+
+ case "object":
+ continue;
+ }
+
+ throw new JpegError("invalid huffman sequence");
+ }
+ }
+
+ function receive(length) {
+ var n = 0;
+
+ while (length > 0) {
+ n = n << 1 | readBit();
+ length--;
+ }
+
+ return n;
+ }
+
+ function receiveAndExtend(length) {
+ if (length === 1) {
+ return readBit() === 1 ? 1 : -1;
+ }
+
+ var n = receive(length);
+
+ if (n >= 1 << length - 1) {
+ return n;
+ }
+
+ return n + (-1 << length) + 1;
+ }
+
+ function decodeBaseline(component, blockOffset) {
+ var t = decodeHuffman(component.huffmanTableDC);
+ var diff = t === 0 ? 0 : receiveAndExtend(t);
+ component.blockData[blockOffset] = component.pred += diff;
+ var k = 1;
+
+ while (k < 64) {
+ var rs = decodeHuffman(component.huffmanTableAC);
+ var s = rs & 15,
+ r = rs >> 4;
+
+ if (s === 0) {
+ if (r < 15) {
+ break;
+ }
+
+ k += 16;
+ continue;
+ }
+
+ k += r;
+ var z = dctZigZag[k];
+ component.blockData[blockOffset + z] = receiveAndExtend(s);
+ k++;
+ }
+ }
+
+ function decodeDCFirst(component, blockOffset) {
+ var t = decodeHuffman(component.huffmanTableDC);
+ var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
+ component.blockData[blockOffset] = component.pred += diff;
+ }
+
+ function decodeDCSuccessive(component, blockOffset) {
+ component.blockData[blockOffset] |= readBit() << successive;
+ }
+
+ var eobrun = 0;
+
+ function decodeACFirst(component, blockOffset) {
+ if (eobrun > 0) {
+ eobrun--;
+ return;
+ }
+
+ var k = spectralStart,
+ e = spectralEnd;
+
+ while (k <= e) {
+ var rs = decodeHuffman(component.huffmanTableAC);
+ var s = rs & 15,
+ r = rs >> 4;
+
+ if (s === 0) {
+ if (r < 15) {
+ eobrun = receive(r) + (1 << r) - 1;
+ break;
+ }
+
+ k += 16;
+ continue;
+ }
+
+ k += r;
+ var z = dctZigZag[k];
+ component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
+ k++;
+ }
+ }
+
+ var successiveACState = 0,
+ successiveACNextValue;
+
+ function decodeACSuccessive(component, blockOffset) {
+ var k = spectralStart;
+ var e = spectralEnd;
+ var r = 0;
+ var s;
+ var rs;
+
+ while (k <= e) {
+ const offsetZ = blockOffset + dctZigZag[k];
+ const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
+
+ switch (successiveACState) {
+ case 0:
+ rs = decodeHuffman(component.huffmanTableAC);
+ s = rs & 15;
+ r = rs >> 4;
+
+ if (s === 0) {
+ if (r < 15) {
+ eobrun = receive(r) + (1 << r);
+ successiveACState = 4;
+ } else {
+ r = 16;
+ successiveACState = 1;
+ }
+ } else {
+ if (s !== 1) {
+ throw new JpegError("invalid ACn encoding");
+ }
+
+ successiveACNextValue = receiveAndExtend(s);
+ successiveACState = r ? 2 : 3;
+ }
+
+ continue;
+
+ case 1:
+ case 2:
+ if (component.blockData[offsetZ]) {
+ component.blockData[offsetZ] += sign * (readBit() << successive);
+ } else {
+ r--;
+
+ if (r === 0) {
+ successiveACState = successiveACState === 2 ? 3 : 0;
+ }
+ }
+
+ break;
+
+ case 3:
+ if (component.blockData[offsetZ]) {
+ component.blockData[offsetZ] += sign * (readBit() << successive);
+ } else {
+ component.blockData[offsetZ] = successiveACNextValue << successive;
+ successiveACState = 0;
+ }
+
+ break;
+
+ case 4:
+ if (component.blockData[offsetZ]) {
+ component.blockData[offsetZ] += sign * (readBit() << successive);
+ }
+
+ break;
+ }
+
+ k++;
+ }
+
+ if (successiveACState === 4) {
+ eobrun--;
+
+ if (eobrun === 0) {
+ successiveACState = 0;
+ }
+ }
+ }
+
+ let blockRow = 0;
+
+ function decodeMcu(component, decode, mcu, row, col) {
+ var mcuRow = mcu / mcusPerLine | 0;
+ var mcuCol = mcu % mcusPerLine;
+ blockRow = mcuRow * component.v + row;
+ var blockCol = mcuCol * component.h + col;
+ const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+ decode(component, blockOffset);
+ }
+
+ function decodeBlock(component, decode, mcu) {
+ blockRow = mcu / component.blocksPerLine | 0;
+ var blockCol = mcu % component.blocksPerLine;
+ const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+ decode(component, blockOffset);
+ }
+
+ var componentsLength = components.length;
+ var component, i, j, k, n;
+ var decodeFn;
+
+ if (progressive) {
+ if (spectralStart === 0) {
+ decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
+ } else {
+ decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
+ }
+ } else {
+ decodeFn = decodeBaseline;
+ }
+
+ var mcu = 0,
+ fileMarker;
+ var mcuExpected;
+
+ if (componentsLength === 1) {
+ mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
+ } else {
+ mcuExpected = mcusPerLine * frame.mcusPerColumn;
+ }
+
+ var h, v;
+
+ while (mcu <= mcuExpected) {
+ var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
+
+ if (mcuToRead > 0) {
+ for (i = 0; i < componentsLength; i++) {
+ components[i].pred = 0;
+ }
+
+ eobrun = 0;
+
+ if (componentsLength === 1) {
+ component = components[0];
+
+ for (n = 0; n < mcuToRead; n++) {
+ decodeBlock(component, decodeFn, mcu);
+ mcu++;
+ }
+ } else {
+ for (n = 0; n < mcuToRead; n++) {
+ for (i = 0; i < componentsLength; i++) {
+ component = components[i];
+ h = component.h;
+ v = component.v;
+
+ for (j = 0; j < v; j++) {
+ for (k = 0; k < h; k++) {
+ decodeMcu(component, decodeFn, mcu, j, k);
+ }
+ }
+ }
+
+ mcu++;
+ }
+ }
+ }
+
+ bitsCount = 0;
+ fileMarker = findNextFileMarker(data, offset);
+
+ if (!fileMarker) {
+ break;
+ }
+
+ if (fileMarker.invalid) {
+ const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
+ (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
+ offset = fileMarker.offset;
+ }
+
+ if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
+ offset += 2;
+ } else {
+ break;
+ }
+ }
+
+ return offset - startOffset;
+ }
+
+ function quantizeAndInverse(component, blockBufferOffset, p) {
+ var qt = component.quantizationTable,
+ blockData = component.blockData;
+ var v0, v1, v2, v3, v4, v5, v6, v7;
+ var p0, p1, p2, p3, p4, p5, p6, p7;
+ var t;
+
+ if (!qt) {
+ throw new JpegError("missing required Quantization Table.");
+ }
+
+ for (var row = 0; row < 64; row += 8) {
+ p0 = blockData[blockBufferOffset + row];
+ p1 = blockData[blockBufferOffset + row + 1];
+ p2 = blockData[blockBufferOffset + row + 2];
+ p3 = blockData[blockBufferOffset + row + 3];
+ p4 = blockData[blockBufferOffset + row + 4];
+ p5 = blockData[blockBufferOffset + row + 5];
+ p6 = blockData[blockBufferOffset + row + 6];
+ p7 = blockData[blockBufferOffset + row + 7];
+ p0 *= qt[row];
+
+ if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
+ t = dctSqrt2 * p0 + 512 >> 10;
+ p[row] = t;
+ p[row + 1] = t;
+ p[row + 2] = t;
+ p[row + 3] = t;
+ p[row + 4] = t;
+ p[row + 5] = t;
+ p[row + 6] = t;
+ p[row + 7] = t;
+ continue;
+ }
+
+ p1 *= qt[row + 1];
+ p2 *= qt[row + 2];
+ p3 *= qt[row + 3];
+ p4 *= qt[row + 4];
+ p5 *= qt[row + 5];
+ p6 *= qt[row + 6];
+ p7 *= qt[row + 7];
+ v0 = dctSqrt2 * p0 + 128 >> 8;
+ v1 = dctSqrt2 * p4 + 128 >> 8;
+ v2 = p2;
+ v3 = p6;
+ v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;
+ v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;
+ v5 = p3 << 4;
+ v6 = p5 << 4;
+ v0 = v0 + v1 + 1 >> 1;
+ v1 = v0 - v1;
+ t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;
+ v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;
+ v3 = t;
+ v4 = v4 + v6 + 1 >> 1;
+ v6 = v4 - v6;
+ v7 = v7 + v5 + 1 >> 1;
+ v5 = v7 - v5;
+ v0 = v0 + v3 + 1 >> 1;
+ v3 = v0 - v3;
+ v1 = v1 + v2 + 1 >> 1;
+ v2 = v1 - v2;
+ t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
+ v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
+ v7 = t;
+ t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
+ v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
+ v6 = t;
+ p[row] = v0 + v7;
+ p[row + 7] = v0 - v7;
+ p[row + 1] = v1 + v6;
+ p[row + 6] = v1 - v6;
+ p[row + 2] = v2 + v5;
+ p[row + 5] = v2 - v5;
+ p[row + 3] = v3 + v4;
+ p[row + 4] = v3 - v4;
+ }
+
+ for (var col = 0; col < 8; ++col) {
+ p0 = p[col];
+ p1 = p[col + 8];
+ p2 = p[col + 16];
+ p3 = p[col + 24];
+ p4 = p[col + 32];
+ p5 = p[col + 40];
+ p6 = p[col + 48];
+ p7 = p[col + 56];
+
+ if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
+ t = dctSqrt2 * p0 + 8192 >> 14;
+
+ if (t < -2040) {
+ t = 0;
+ } else if (t >= 2024) {
+ t = 255;
+ } else {
+ t = t + 2056 >> 4;
+ }
+
+ blockData[blockBufferOffset + col] = t;
+ blockData[blockBufferOffset + col + 8] = t;
+ blockData[blockBufferOffset + col + 16] = t;
+ blockData[blockBufferOffset + col + 24] = t;
+ blockData[blockBufferOffset + col + 32] = t;
+ blockData[blockBufferOffset + col + 40] = t;
+ blockData[blockBufferOffset + col + 48] = t;
+ blockData[blockBufferOffset + col + 56] = t;
+ continue;
+ }
+
+ v0 = dctSqrt2 * p0 + 2048 >> 12;
+ v1 = dctSqrt2 * p4 + 2048 >> 12;
+ v2 = p2;
+ v3 = p6;
+ v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;
+ v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;
+ v5 = p3;
+ v6 = p5;
+ v0 = (v0 + v1 + 1 >> 1) + 4112;
+ v1 = v0 - v1;
+ t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;
+ v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;
+ v3 = t;
+ v4 = v4 + v6 + 1 >> 1;
+ v6 = v4 - v6;
+ v7 = v7 + v5 + 1 >> 1;
+ v5 = v7 - v5;
+ v0 = v0 + v3 + 1 >> 1;
+ v3 = v0 - v3;
+ v1 = v1 + v2 + 1 >> 1;
+ v2 = v1 - v2;
+ t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
+ v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
+ v7 = t;
+ t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
+ v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
+ v6 = t;
+ p0 = v0 + v7;
+ p7 = v0 - v7;
+ p1 = v1 + v6;
+ p6 = v1 - v6;
+ p2 = v2 + v5;
+ p5 = v2 - v5;
+ p3 = v3 + v4;
+ p4 = v3 - v4;
+
+ if (p0 < 16) {
+ p0 = 0;
+ } else if (p0 >= 4080) {
+ p0 = 255;
+ } else {
+ p0 >>= 4;
+ }
+
+ if (p1 < 16) {
+ p1 = 0;
+ } else if (p1 >= 4080) {
+ p1 = 255;
+ } else {
+ p1 >>= 4;
+ }
+
+ if (p2 < 16) {
+ p2 = 0;
+ } else if (p2 >= 4080) {
+ p2 = 255;
+ } else {
+ p2 >>= 4;
+ }
+
+ if (p3 < 16) {
+ p3 = 0;
+ } else if (p3 >= 4080) {
+ p3 = 255;
+ } else {
+ p3 >>= 4;
+ }
+
+ if (p4 < 16) {
+ p4 = 0;
+ } else if (p4 >= 4080) {
+ p4 = 255;
+ } else {
+ p4 >>= 4;
+ }
+
+ if (p5 < 16) {
+ p5 = 0;
+ } else if (p5 >= 4080) {
+ p5 = 255;
+ } else {
+ p5 >>= 4;
+ }
+
+ if (p6 < 16) {
+ p6 = 0;
+ } else if (p6 >= 4080) {
+ p6 = 255;
+ } else {
+ p6 >>= 4;
+ }
+
+ if (p7 < 16) {
+ p7 = 0;
+ } else if (p7 >= 4080) {
+ p7 = 255;
+ } else {
+ p7 >>= 4;
+ }
+
+ blockData[blockBufferOffset + col] = p0;
+ blockData[blockBufferOffset + col + 8] = p1;
+ blockData[blockBufferOffset + col + 16] = p2;
+ blockData[blockBufferOffset + col + 24] = p3;
+ blockData[blockBufferOffset + col + 32] = p4;
+ blockData[blockBufferOffset + col + 40] = p5;
+ blockData[blockBufferOffset + col + 48] = p6;
+ blockData[blockBufferOffset + col + 56] = p7;
+ }
+ }
+
+ function buildComponentData(frame, component) {
+ var blocksPerLine = component.blocksPerLine;
+ var blocksPerColumn = component.blocksPerColumn;
+ var computationBuffer = new Int16Array(64);
+
+ for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
+ for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
+ var offset = getBlockBufferOffset(component, blockRow, blockCol);
+ quantizeAndInverse(component, offset, computationBuffer);
+ }
+ }
+
+ return component.blockData;
+ }
+
+ function findNextFileMarker(data, currentPos, startPos = currentPos) {
+ const maxPos = data.length - 1;
+ var newPos = startPos < currentPos ? startPos : currentPos;
+
+ if (currentPos >= maxPos) {
+ return null;
+ }
+
+ var currentMarker = (0, _core_utils.readUint16)(data, currentPos);
+
+ if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
+ return {
+ invalid: null,
+ marker: currentMarker,
+ offset: currentPos
+ };
+ }
+
+ var newMarker = (0, _core_utils.readUint16)(data, newPos);
+
+ while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
+ if (++newPos >= maxPos) {
+ return null;
+ }
+
+ newMarker = (0, _core_utils.readUint16)(data, newPos);
+ }
+
+ return {
+ invalid: currentMarker.toString(16),
+ marker: newMarker,
+ offset: newPos
+ };
+ }
+
+ JpegImage.prototype = {
+ parse(data, {
+ dnlScanLines = null
+ } = {}) {
+ function readDataBlock() {
+ const length = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ let endOffset = offset + length - 2;
+ var fileMarker = findNextFileMarker(data, endOffset, offset);
+
+ if (fileMarker && fileMarker.invalid) {
+ (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid);
+ endOffset = fileMarker.offset;
+ }
+
+ var array = data.subarray(offset, endOffset);
+ offset += array.length;
+ return array;
+ }
+
+ function prepareComponents(frame) {
+ var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
+ var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
+
+ for (var i = 0; i < frame.components.length; i++) {
+ component = frame.components[i];
+ var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);
+ var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);
+ var blocksPerLineForMcu = mcusPerLine * component.h;
+ var blocksPerColumnForMcu = mcusPerColumn * component.v;
+ var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);
+ component.blockData = new Int16Array(blocksBufferSize);
+ component.blocksPerLine = blocksPerLine;
+ component.blocksPerColumn = blocksPerColumn;
+ }
+
+ frame.mcusPerLine = mcusPerLine;
+ frame.mcusPerColumn = mcusPerColumn;
+ }
+
+ var offset = 0;
+ var jfif = null;
+ var adobe = null;
+ var frame, resetInterval;
+ let numSOSMarkers = 0;
+ var quantizationTables = [];
+ var huffmanTablesAC = [],
+ huffmanTablesDC = [];
+ let fileMarker = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+
+ if (fileMarker !== 0xffd8) {
+ throw new JpegError("SOI not found");
+ }
+
+ fileMarker = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+
+ markerLoop: while (fileMarker !== 0xffd9) {
+ var i, j, l;
+
+ switch (fileMarker) {
+ case 0xffe0:
+ case 0xffe1:
+ case 0xffe2:
+ case 0xffe3:
+ case 0xffe4:
+ case 0xffe5:
+ case 0xffe6:
+ case 0xffe7:
+ case 0xffe8:
+ case 0xffe9:
+ case 0xffea:
+ case 0xffeb:
+ case 0xffec:
+ case 0xffed:
+ case 0xffee:
+ case 0xffef:
+ case 0xfffe:
+ var appData = readDataBlock();
+
+ if (fileMarker === 0xffe0) {
+ if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
+ jfif = {
+ version: {
+ major: appData[5],
+ minor: appData[6]
+ },
+ densityUnits: appData[7],
+ xDensity: appData[8] << 8 | appData[9],
+ yDensity: appData[10] << 8 | appData[11],
+ thumbWidth: appData[12],
+ thumbHeight: appData[13],
+ thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
+ };
+ }
+ }
+
+ if (fileMarker === 0xffee) {
+ if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {
+ adobe = {
+ version: appData[5] << 8 | appData[6],
+ flags0: appData[7] << 8 | appData[8],
+ flags1: appData[9] << 8 | appData[10],
+ transformCode: appData[11]
+ };
+ }
+ }
+
+ break;
+
+ case 0xffdb:
+ const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ var quantizationTablesEnd = quantizationTablesLength + offset - 2;
+ var z;
+
+ while (offset < quantizationTablesEnd) {
+ var quantizationTableSpec = data[offset++];
+ var tableData = new Uint16Array(64);
+
+ if (quantizationTableSpec >> 4 === 0) {
+ for (j = 0; j < 64; j++) {
+ z = dctZigZag[j];
+ tableData[z] = data[offset++];
+ }
+ } else if (quantizationTableSpec >> 4 === 1) {
+ for (j = 0; j < 64; j++) {
+ z = dctZigZag[j];
+ tableData[z] = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ }
+ } else {
+ throw new JpegError("DQT - invalid table spec");
+ }
+
+ quantizationTables[quantizationTableSpec & 15] = tableData;
+ }
+
+ break;
+
+ case 0xffc0:
+ case 0xffc1:
+ case 0xffc2:
+ if (frame) {
+ throw new JpegError("Only single frame JPEGs supported");
+ }
+
+ offset += 2;
+ frame = {};
+ frame.extended = fileMarker === 0xffc1;
+ frame.progressive = fileMarker === 0xffc2;
+ frame.precision = data[offset++];
+ const sofScanLines = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ frame.scanLines = dnlScanLines || sofScanLines;
+ frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ frame.components = [];
+ frame.componentIds = {};
+ var componentsCount = data[offset++],
+ componentId;
+ var maxH = 0,
+ maxV = 0;
+
+ for (i = 0; i < componentsCount; i++) {
+ componentId = data[offset];
+ var h = data[offset + 1] >> 4;
+ var v = data[offset + 1] & 15;
+
+ if (maxH < h) {
+ maxH = h;
+ }
+
+ if (maxV < v) {
+ maxV = v;
+ }
+
+ var qId = data[offset + 2];
+ l = frame.components.push({
+ h,
+ v,
+ quantizationId: qId,
+ quantizationTable: null
+ });
+ frame.componentIds[componentId] = l - 1;
+ offset += 3;
+ }
+
+ frame.maxH = maxH;
+ frame.maxV = maxV;
+ prepareComponents(frame);
+ break;
+
+ case 0xffc4:
+ const huffmanLength = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+
+ for (i = 2; i < huffmanLength;) {
+ var huffmanTableSpec = data[offset++];
+ var codeLengths = new Uint8Array(16);
+ var codeLengthSum = 0;
+
+ for (j = 0; j < 16; j++, offset++) {
+ codeLengthSum += codeLengths[j] = data[offset];
+ }
+
+ var huffmanValues = new Uint8Array(codeLengthSum);
+
+ for (j = 0; j < codeLengthSum; j++, offset++) {
+ huffmanValues[j] = data[offset];
+ }
+
+ i += 17 + codeLengthSum;
+ (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
+ }
+
+ break;
+
+ case 0xffdd:
+ offset += 2;
+ resetInterval = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ break;
+
+ case 0xffda:
+ const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
+ offset += 2;
+ var selectorsCount = data[offset++];
+ var components = [],
+ component;
+
+ for (i = 0; i < selectorsCount; i++) {
+ var componentIndex = frame.componentIds[data[offset++]];
+ component = frame.components[componentIndex];
+ var tableSpec = data[offset++];
+ component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
+ component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
+ components.push(component);
+ }
+
+ var spectralStart = data[offset++];
+ var spectralEnd = data[offset++];
+ var successiveApproximation = data[offset++];
+
+ try {
+ var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);
+ offset += processed;
+ } catch (ex) {
+ if (ex instanceof DNLMarkerError) {
+ (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);
+ return this.parse(data, {
+ dnlScanLines: ex.scanLines
+ });
+ } else if (ex instanceof EOIMarkerError) {
+ (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);
+ break markerLoop;
+ }
+
+ throw ex;
+ }
+
+ break;
+
+ case 0xffdc:
+ offset += 4;
+ break;
+
+ case 0xffff:
+ if (data[offset] !== 0xff) {
+ offset--;
+ }
+
+ break;
+
+ default:
+ const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);
+
+ if (nextFileMarker && nextFileMarker.invalid) {
+ (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid);
+ offset = nextFileMarker.offset;
+ break;
+ }
+
+ if (offset >= data.length - 1) {
+ (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9).");
+ break markerLoop;
+ }
+
+ throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16));
+ }
+
+ fileMarker = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ }
+
+ this.width = frame.samplesPerLine;
+ this.height = frame.scanLines;
+ this.jfif = jfif;
+ this.adobe = adobe;
+ this.components = [];
+
+ for (i = 0; i < frame.components.length; i++) {
+ component = frame.components[i];
+ var quantizationTable = quantizationTables[component.quantizationId];
+
+ if (quantizationTable) {
+ component.quantizationTable = quantizationTable;
+ }
+
+ this.components.push({
+ output: buildComponentData(frame, component),
+ scaleX: component.h / frame.maxH,
+ scaleY: component.v / frame.maxV,
+ blocksPerLine: component.blocksPerLine,
+ blocksPerColumn: component.blocksPerColumn
+ });
+ }
+
+ this.numComponents = this.components.length;
+ return undefined;
+ },
+
+ _getLinearizedBlockData(width, height, isSourcePDF = false) {
+ var scaleX = this.width / width,
+ scaleY = this.height / height;
+ var component, componentScaleX, componentScaleY, blocksPerScanline;
+ var x, y, i, j, k;
+ var index;
+ var offset = 0;
+ var output;
+ var numComponents = this.components.length;
+ var dataLength = width * height * numComponents;
+ var data = new Uint8ClampedArray(dataLength);
+ var xScaleBlockOffset = new Uint32Array(width);
+ var mask3LSB = 0xfffffff8;
+ let lastComponentScaleX;
+
+ for (i = 0; i < numComponents; i++) {
+ component = this.components[i];
+ componentScaleX = component.scaleX * scaleX;
+ componentScaleY = component.scaleY * scaleY;
+ offset = i;
+ output = component.output;
+ blocksPerScanline = component.blocksPerLine + 1 << 3;
+
+ if (componentScaleX !== lastComponentScaleX) {
+ for (x = 0; x < width; x++) {
+ j = 0 | x * componentScaleX;
+ xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
+ }
+
+ lastComponentScaleX = componentScaleX;
+ }
+
+ for (y = 0; y < height; y++) {
+ j = 0 | y * componentScaleY;
+ index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;
+
+ for (x = 0; x < width; x++) {
+ data[offset] = output[index + xScaleBlockOffset[x]];
+ offset += numComponents;
+ }
+ }
+ }
+
+ let transform = this._decodeTransform;
+
+ if (!isSourcePDF && numComponents === 4 && !transform) {
+ transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
+ }
+
+ if (transform) {
+ for (i = 0; i < dataLength;) {
+ for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
+ data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];
+ }
+ }
+ }
+
+ return data;
+ },
+
+ get _isColorConversionNeeded() {
+ if (this.adobe) {
+ return !!this.adobe.transformCode;
+ }
+
+ if (this.numComponents === 3) {
+ if (this._colorTransform === 0) {
+ return false;
+ }
+
+ return true;
+ }
+
+ if (this._colorTransform === 1) {
+ return true;
+ }
+
+ return false;
+ },
+
+ _convertYccToRgb: function convertYccToRgb(data) {
+ var Y, Cb, Cr;
+
+ for (var i = 0, length = data.length; i < length; i += 3) {
+ Y = data[i];
+ Cb = data[i + 1];
+ Cr = data[i + 2];
+ data[i] = Y - 179.456 + 1.402 * Cr;
+ data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
+ data[i + 2] = Y - 226.816 + 1.772 * Cb;
+ }
+
+ return data;
+ },
+ _convertYcckToRgb: function convertYcckToRgb(data) {
+ var Y, Cb, Cr, k;
+ var offset = 0;
+
+ for (var i = 0, length = data.length; i < length; i += 4) {
+ Y = data[i];
+ Cb = data[i + 1];
+ Cr = data[i + 2];
+ k = data[i + 3];
+ data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);
+ data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
+ data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
+ }
+
+ return data.subarray(0, offset);
+ },
+ _convertYcckToCmyk: function convertYcckToCmyk(data) {
+ var Y, Cb, Cr;
+
+ for (var i = 0, length = data.length; i < length; i += 4) {
+ Y = data[i];
+ Cb = data[i + 1];
+ Cr = data[i + 2];
+ data[i] = 434.456 - Y - 1.402 * Cr;
+ data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;
+ data[i + 2] = 481.816 - Y - 1.772 * Cb;
+ }
+
+ return data;
+ },
+ _convertCmykToRgb: function convertCmykToRgb(data) {
+ var c, m, y, k;
+ var offset = 0;
+
+ for (var i = 0, length = data.length; i < length; i += 4) {
+ c = data[i];
+ m = data[i + 1];
+ y = data[i + 2];
+ k = data[i + 3];
+ data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
+ data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);
+ data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
+ }
+
+ return data.subarray(0, offset);
+ },
+
+ getData({
+ width,
+ height,
+ forceRGB = false,
+ isSourcePDF = false
+ }) {
+ if (this.numComponents > 4) {
+ throw new JpegError("Unsupported color mode");
+ }
+
+ var data = this._getLinearizedBlockData(width, height, isSourcePDF);
+
+ if (this.numComponents === 1 && forceRGB) {
+ var dataLength = data.length;
+ var rgbData = new Uint8ClampedArray(dataLength * 3);
+ var offset = 0;
+
+ for (var i = 0; i < dataLength; i++) {
+ var grayColor = data[i];
+ rgbData[offset++] = grayColor;
+ rgbData[offset++] = grayColor;
+ rgbData[offset++] = grayColor;
+ }
+
+ return rgbData;
+ } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
+ return this._convertYccToRgb(data);
+ } else if (this.numComponents === 4) {
+ if (this._isColorConversionNeeded) {
+ if (forceRGB) {
+ return this._convertYcckToRgb(data);
+ }
+
+ return this._convertYcckToCmyk(data);
+ } else if (forceRGB) {
+ return this._convertCmykToRgb(data);
+ }
+ }
+
+ return data;
+ }
+
+ };
+ return JpegImage;
+}();
+
+exports.JpegImage = JpegImage;
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.JpxStream = void 0;
+
+var _stream = __w_pdfjs_require__(12);
+
+var _jpx = __w_pdfjs_require__(21);
+
+var _util = __w_pdfjs_require__(2);
+
+const JpxStream = function JpxStreamClosure() {
+ function JpxStream(stream, maybeLength, dict, params) {
+ this.stream = stream;
+ this.maybeLength = maybeLength;
+ this.dict = dict;
+ this.params = params;
+
+ _stream.DecodeStream.call(this, maybeLength);
+ }
+
+ JpxStream.prototype = Object.create(_stream.DecodeStream.prototype);
+ Object.defineProperty(JpxStream.prototype, "bytes", {
+ get: function JpxStream_bytes() {
+ return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
+ },
+ configurable: true
+ });
+
+ JpxStream.prototype.ensureBuffer = function (requested) {};
+
+ JpxStream.prototype.readBlock = function () {
+ if (this.eof) {
+ return;
+ }
+
+ const jpxImage = new _jpx.JpxImage();
+ jpxImage.parse(this.bytes);
+ const width = jpxImage.width;
+ const height = jpxImage.height;
+ const componentsCount = jpxImage.componentsCount;
+ const tileCount = jpxImage.tiles.length;
+
+ if (tileCount === 1) {
+ this.buffer = jpxImage.tiles[0].items;
+ } else {
+ const data = new Uint8ClampedArray(width * height * componentsCount);
+
+ for (let k = 0; k < tileCount; k++) {
+ const tileComponents = jpxImage.tiles[k];
+ const tileWidth = tileComponents.width;
+ const tileHeight = tileComponents.height;
+ const tileLeft = tileComponents.left;
+ const tileTop = tileComponents.top;
+ const src = tileComponents.items;
+ let srcPosition = 0;
+ let dataPosition = (width * tileTop + tileLeft) * componentsCount;
+ const imgRowSize = width * componentsCount;
+ const tileRowSize = tileWidth * componentsCount;
+
+ for (let j = 0; j < tileHeight; j++) {
+ const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);
+ data.set(rowBytes, dataPosition);
+ srcPosition += tileRowSize;
+ dataPosition += imgRowSize;
+ }
+ }
+
+ this.buffer = data;
+ }
+
+ this.bufferLength = this.buffer.length;
+ this.eof = true;
+ };
+
+ return JpxStream;
+}();
+
+exports.JpxStream = JpxStream;
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.JpxImage = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _arithmetic_decoder = __w_pdfjs_require__(17);
+
+class JpxError extends _util.BaseException {
+ constructor(msg) {
+ super(`JPX error: ${msg}`);
+ }
+
+}
+
+var JpxImage = function JpxImageClosure() {
+ var SubbandsGainLog2 = {
+ LL: 0,
+ LH: 1,
+ HL: 1,
+ HH: 2
+ };
+
+ function JpxImage() {
+ this.failOnCorruptedImage = false;
+ }
+
+ JpxImage.prototype = {
+ parse: function JpxImage_parse(data) {
+ var head = (0, _core_utils.readUint16)(data, 0);
+
+ if (head === 0xff4f) {
+ this.parseCodestream(data, 0, data.length);
+ return;
+ }
+
+ var position = 0,
+ length = data.length;
+
+ while (position < length) {
+ var headerSize = 8;
+ var lbox = (0, _core_utils.readUint32)(data, position);
+ var tbox = (0, _core_utils.readUint32)(data, position + 4);
+ position += headerSize;
+
+ if (lbox === 1) {
+ lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4);
+ position += 8;
+ headerSize += 8;
+ }
+
+ if (lbox === 0) {
+ lbox = length - position + headerSize;
+ }
+
+ if (lbox < headerSize) {
+ throw new JpxError("Invalid box field size");
+ }
+
+ var dataLength = lbox - headerSize;
+ var jumpDataLength = true;
+
+ switch (tbox) {
+ case 0x6a703268:
+ jumpDataLength = false;
+ break;
+
+ case 0x636f6c72:
+ var method = data[position];
+
+ if (method === 1) {
+ var colorspace = (0, _core_utils.readUint32)(data, position + 3);
+
+ switch (colorspace) {
+ case 16:
+ case 17:
+ case 18:
+ break;
+
+ default:
+ (0, _util.warn)("Unknown colorspace " + colorspace);
+ break;
+ }
+ } else if (method === 2) {
+ (0, _util.info)("ICC profile not supported");
+ }
+
+ break;
+
+ case 0x6a703263:
+ this.parseCodestream(data, position, position + dataLength);
+ break;
+
+ case 0x6a502020:
+ if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) {
+ (0, _util.warn)("Invalid JP2 signature");
+ }
+
+ break;
+
+ case 0x6a501a1a:
+ case 0x66747970:
+ case 0x72726571:
+ case 0x72657320:
+ case 0x69686472:
+ break;
+
+ default:
+ var headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff);
+ (0, _util.warn)("Unsupported header type " + tbox + " (" + headerType + ")");
+ break;
+ }
+
+ if (jumpDataLength) {
+ position += dataLength;
+ }
+ }
+ },
+ parseImageProperties: function JpxImage_parseImageProperties(stream) {
+ var newByte = stream.getByte();
+
+ while (newByte >= 0) {
+ var oldByte = newByte;
+ newByte = stream.getByte();
+ var code = oldByte << 8 | newByte;
+
+ if (code === 0xff51) {
+ stream.skip(4);
+ var Xsiz = stream.getInt32() >>> 0;
+ var Ysiz = stream.getInt32() >>> 0;
+ var XOsiz = stream.getInt32() >>> 0;
+ var YOsiz = stream.getInt32() >>> 0;
+ stream.skip(16);
+ var Csiz = stream.getUint16();
+ this.width = Xsiz - XOsiz;
+ this.height = Ysiz - YOsiz;
+ this.componentsCount = Csiz;
+ this.bitsPerComponent = 8;
+ return;
+ }
+ }
+
+ throw new JpxError("No size marker found in JPX stream");
+ },
+ parseCodestream: function JpxImage_parseCodestream(data, start, end) {
+ var context = {};
+ var doNotRecover = false;
+
+ try {
+ var position = start;
+
+ while (position + 1 < end) {
+ var code = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ var length = 0,
+ j,
+ sqcd,
+ spqcds,
+ spqcdSize,
+ scalarExpounded,
+ tile;
+
+ switch (code) {
+ case 0xff4f:
+ context.mainHeader = true;
+ break;
+
+ case 0xffd9:
+ break;
+
+ case 0xff51:
+ length = (0, _core_utils.readUint16)(data, position);
+ var siz = {};
+ siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4);
+ siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8);
+ siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12);
+ siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16);
+ siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20);
+ siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24);
+ siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28);
+ siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32);
+ var componentsCount = (0, _core_utils.readUint16)(data, position + 36);
+ siz.Csiz = componentsCount;
+ var components = [];
+ j = position + 38;
+
+ for (var i = 0; i < componentsCount; i++) {
+ var component = {
+ precision: (data[j] & 0x7f) + 1,
+ isSigned: !!(data[j] & 0x80),
+ XRsiz: data[j + 1],
+ YRsiz: data[j + 2]
+ };
+ j += 3;
+ calculateComponentDimensions(component, siz);
+ components.push(component);
+ }
+
+ context.SIZ = siz;
+ context.components = components;
+ calculateTileGrids(context, components);
+ context.QCC = [];
+ context.COC = [];
+ break;
+
+ case 0xff5c:
+ length = (0, _core_utils.readUint16)(data, position);
+ var qcd = {};
+ j = position + 2;
+ sqcd = data[j++];
+
+ switch (sqcd & 0x1f) {
+ case 0:
+ spqcdSize = 8;
+ scalarExpounded = true;
+ break;
+
+ case 1:
+ spqcdSize = 16;
+ scalarExpounded = false;
+ break;
+
+ case 2:
+ spqcdSize = 16;
+ scalarExpounded = true;
+ break;
+
+ default:
+ throw new Error("Invalid SQcd value " + sqcd);
+ }
+
+ qcd.noQuantization = spqcdSize === 8;
+ qcd.scalarExpounded = scalarExpounded;
+ qcd.guardBits = sqcd >> 5;
+ spqcds = [];
+
+ while (j < length + position) {
+ var spqcd = {};
+
+ if (spqcdSize === 8) {
+ spqcd.epsilon = data[j++] >> 3;
+ spqcd.mu = 0;
+ } else {
+ spqcd.epsilon = data[j] >> 3;
+ spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
+ j += 2;
+ }
+
+ spqcds.push(spqcd);
+ }
+
+ qcd.SPqcds = spqcds;
+
+ if (context.mainHeader) {
+ context.QCD = qcd;
+ } else {
+ context.currentTile.QCD = qcd;
+ context.currentTile.QCC = [];
+ }
+
+ break;
+
+ case 0xff5d:
+ length = (0, _core_utils.readUint16)(data, position);
+ var qcc = {};
+ j = position + 2;
+ var cqcc;
+
+ if (context.SIZ.Csiz < 257) {
+ cqcc = data[j++];
+ } else {
+ cqcc = (0, _core_utils.readUint16)(data, j);
+ j += 2;
+ }
+
+ sqcd = data[j++];
+
+ switch (sqcd & 0x1f) {
+ case 0:
+ spqcdSize = 8;
+ scalarExpounded = true;
+ break;
+
+ case 1:
+ spqcdSize = 16;
+ scalarExpounded = false;
+ break;
+
+ case 2:
+ spqcdSize = 16;
+ scalarExpounded = true;
+ break;
+
+ default:
+ throw new Error("Invalid SQcd value " + sqcd);
+ }
+
+ qcc.noQuantization = spqcdSize === 8;
+ qcc.scalarExpounded = scalarExpounded;
+ qcc.guardBits = sqcd >> 5;
+ spqcds = [];
+
+ while (j < length + position) {
+ spqcd = {};
+
+ if (spqcdSize === 8) {
+ spqcd.epsilon = data[j++] >> 3;
+ spqcd.mu = 0;
+ } else {
+ spqcd.epsilon = data[j] >> 3;
+ spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
+ j += 2;
+ }
+
+ spqcds.push(spqcd);
+ }
+
+ qcc.SPqcds = spqcds;
+
+ if (context.mainHeader) {
+ context.QCC[cqcc] = qcc;
+ } else {
+ context.currentTile.QCC[cqcc] = qcc;
+ }
+
+ break;
+
+ case 0xff52:
+ length = (0, _core_utils.readUint16)(data, position);
+ var cod = {};
+ j = position + 2;
+ var scod = data[j++];
+ cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
+ cod.sopMarkerUsed = !!(scod & 2);
+ cod.ephMarkerUsed = !!(scod & 4);
+ cod.progressionOrder = data[j++];
+ cod.layersCount = (0, _core_utils.readUint16)(data, j);
+ j += 2;
+ cod.multipleComponentTransform = data[j++];
+ cod.decompositionLevelsCount = data[j++];
+ cod.xcb = (data[j++] & 0xf) + 2;
+ cod.ycb = (data[j++] & 0xf) + 2;
+ var blockStyle = data[j++];
+ cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
+ cod.resetContextProbabilities = !!(blockStyle & 2);
+ cod.terminationOnEachCodingPass = !!(blockStyle & 4);
+ cod.verticallyStripe = !!(blockStyle & 8);
+ cod.predictableTermination = !!(blockStyle & 16);
+ cod.segmentationSymbolUsed = !!(blockStyle & 32);
+ cod.reversibleTransformation = data[j++];
+
+ if (cod.entropyCoderWithCustomPrecincts) {
+ var precinctsSizes = [];
+
+ while (j < length + position) {
+ var precinctsSize = data[j++];
+ precinctsSizes.push({
+ PPx: precinctsSize & 0xf,
+ PPy: precinctsSize >> 4
+ });
+ }
+
+ cod.precinctsSizes = precinctsSizes;
+ }
+
+ var unsupported = [];
+
+ if (cod.selectiveArithmeticCodingBypass) {
+ unsupported.push("selectiveArithmeticCodingBypass");
+ }
+
+ if (cod.resetContextProbabilities) {
+ unsupported.push("resetContextProbabilities");
+ }
+
+ if (cod.terminationOnEachCodingPass) {
+ unsupported.push("terminationOnEachCodingPass");
+ }
+
+ if (cod.verticallyStripe) {
+ unsupported.push("verticallyStripe");
+ }
+
+ if (cod.predictableTermination) {
+ unsupported.push("predictableTermination");
+ }
+
+ if (unsupported.length > 0) {
+ doNotRecover = true;
+ throw new Error("Unsupported COD options (" + unsupported.join(", ") + ")");
+ }
+
+ if (context.mainHeader) {
+ context.COD = cod;
+ } else {
+ context.currentTile.COD = cod;
+ context.currentTile.COC = [];
+ }
+
+ break;
+
+ case 0xff90:
+ length = (0, _core_utils.readUint16)(data, position);
+ tile = {};
+ tile.index = (0, _core_utils.readUint16)(data, position + 2);
+ tile.length = (0, _core_utils.readUint32)(data, position + 4);
+ tile.dataEnd = tile.length + position - 2;
+ tile.partIndex = data[position + 8];
+ tile.partsCount = data[position + 9];
+ context.mainHeader = false;
+
+ if (tile.partIndex === 0) {
+ tile.COD = context.COD;
+ tile.COC = context.COC.slice(0);
+ tile.QCD = context.QCD;
+ tile.QCC = context.QCC.slice(0);
+ }
+
+ context.currentTile = tile;
+ break;
+
+ case 0xff93:
+ tile = context.currentTile;
+
+ if (tile.partIndex === 0) {
+ initializeTile(context, tile.index);
+ buildPackets(context);
+ }
+
+ length = tile.dataEnd - position;
+ parseTilePackets(context, data, position, length);
+ break;
+
+ case 0xff55:
+ case 0xff57:
+ case 0xff58:
+ case 0xff64:
+ length = (0, _core_utils.readUint16)(data, position);
+ break;
+
+ case 0xff53:
+ throw new Error("Codestream code 0xFF53 (COC) is not implemented");
+
+ default:
+ throw new Error("Unknown codestream code: " + code.toString(16));
+ }
+
+ position += length;
+ }
+ } catch (e) {
+ if (doNotRecover || this.failOnCorruptedImage) {
+ throw new JpxError(e.message);
+ } else {
+ (0, _util.warn)("JPX: Trying to recover from: " + e.message);
+ }
+ }
+
+ this.tiles = transformComponents(context);
+ this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
+ this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
+ this.componentsCount = context.SIZ.Csiz;
+ }
+ };
+
+ function calculateComponentDimensions(component, siz) {
+ component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
+ component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
+ component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
+ component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
+ component.width = component.x1 - component.x0;
+ component.height = component.y1 - component.y0;
+ }
+
+ function calculateTileGrids(context, components) {
+ var siz = context.SIZ;
+ var tile,
+ tiles = [];
+ var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
+ var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
+
+ for (var q = 0; q < numYtiles; q++) {
+ for (var p = 0; p < numXtiles; p++) {
+ tile = {};
+ tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
+ tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
+ tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
+ tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
+ tile.width = tile.tx1 - tile.tx0;
+ tile.height = tile.ty1 - tile.ty0;
+ tile.components = [];
+ tiles.push(tile);
+ }
+ }
+
+ context.tiles = tiles;
+ var componentsCount = siz.Csiz;
+
+ for (var i = 0, ii = componentsCount; i < ii; i++) {
+ var component = components[i];
+
+ for (var j = 0, jj = tiles.length; j < jj; j++) {
+ var tileComponent = {};
+ tile = tiles[j];
+ tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
+ tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
+ tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
+ tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
+ tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
+ tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
+ tile.components[i] = tileComponent;
+ }
+ }
+ }
+
+ function getBlocksDimensions(context, component, r) {
+ var codOrCoc = component.codingStyleParameters;
+ var result = {};
+
+ if (!codOrCoc.entropyCoderWithCustomPrecincts) {
+ result.PPx = 15;
+ result.PPy = 15;
+ } else {
+ result.PPx = codOrCoc.precinctsSizes[r].PPx;
+ result.PPy = codOrCoc.precinctsSizes[r].PPy;
+ }
+
+ result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);
+ result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);
+ return result;
+ }
+
+ function buildPrecincts(context, resolution, dimensions) {
+ var precinctWidth = 1 << dimensions.PPx;
+ var precinctHeight = 1 << dimensions.PPy;
+ var isZeroRes = resolution.resLevel === 0;
+ var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);
+ var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);
+ var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;
+ var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;
+ var numprecincts = numprecinctswide * numprecinctshigh;
+ resolution.precinctParameters = {
+ precinctWidth,
+ precinctHeight,
+ numprecinctswide,
+ numprecinctshigh,
+ numprecincts,
+ precinctWidthInSubband,
+ precinctHeightInSubband
+ };
+ }
+
+ function buildCodeblocks(context, subband, dimensions) {
+ var xcb_ = dimensions.xcb_;
+ var ycb_ = dimensions.ycb_;
+ var codeblockWidth = 1 << xcb_;
+ var codeblockHeight = 1 << ycb_;
+ var cbx0 = subband.tbx0 >> xcb_;
+ var cby0 = subband.tby0 >> ycb_;
+ var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;
+ var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;
+ var precinctParameters = subband.resolution.precinctParameters;
+ var codeblocks = [];
+ var precincts = [];
+ var i, j, codeblock, precinctNumber;
+
+ for (j = cby0; j < cby1; j++) {
+ for (i = cbx0; i < cbx1; i++) {
+ codeblock = {
+ cbx: i,
+ cby: j,
+ tbx0: codeblockWidth * i,
+ tby0: codeblockHeight * j,
+ tbx1: codeblockWidth * (i + 1),
+ tby1: codeblockHeight * (j + 1)
+ };
+ codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
+ codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
+ codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
+ codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
+ var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);
+ var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);
+ precinctNumber = pi + pj * precinctParameters.numprecinctswide;
+ codeblock.precinctNumber = precinctNumber;
+ codeblock.subbandType = subband.type;
+ codeblock.Lblock = 3;
+
+ if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {
+ continue;
+ }
+
+ codeblocks.push(codeblock);
+ var precinct = precincts[precinctNumber];
+
+ if (precinct !== undefined) {
+ if (i < precinct.cbxMin) {
+ precinct.cbxMin = i;
+ } else if (i > precinct.cbxMax) {
+ precinct.cbxMax = i;
+ }
+
+ if (j < precinct.cbyMin) {
+ precinct.cbxMin = j;
+ } else if (j > precinct.cbyMax) {
+ precinct.cbyMax = j;
+ }
+ } else {
+ precincts[precinctNumber] = precinct = {
+ cbxMin: i,
+ cbyMin: j,
+ cbxMax: i,
+ cbyMax: j
+ };
+ }
+
+ codeblock.precinct = precinct;
+ }
+ }
+
+ subband.codeblockParameters = {
+ codeblockWidth: xcb_,
+ codeblockHeight: ycb_,
+ numcodeblockwide: cbx1 - cbx0 + 1,
+ numcodeblockhigh: cby1 - cby0 + 1
+ };
+ subband.codeblocks = codeblocks;
+ subband.precincts = precincts;
+ }
+
+ function createPacket(resolution, precinctNumber, layerNumber) {
+ var precinctCodeblocks = [];
+ var subbands = resolution.subbands;
+
+ for (var i = 0, ii = subbands.length; i < ii; i++) {
+ var subband = subbands[i];
+ var codeblocks = subband.codeblocks;
+
+ for (var j = 0, jj = codeblocks.length; j < jj; j++) {
+ var codeblock = codeblocks[j];
+
+ if (codeblock.precinctNumber !== precinctNumber) {
+ continue;
+ }
+
+ precinctCodeblocks.push(codeblock);
+ }
+ }
+
+ return {
+ layerNumber,
+ codeblocks: precinctCodeblocks
+ };
+ }
+
+ function LayerResolutionComponentPositionIterator(context) {
+ var siz = context.SIZ;
+ var tileIndex = context.currentTile.index;
+ var tile = context.tiles[tileIndex];
+ var layersCount = tile.codingStyleDefaultParameters.layersCount;
+ var componentsCount = siz.Csiz;
+ var maxDecompositionLevelsCount = 0;
+
+ for (var q = 0; q < componentsCount; q++) {
+ maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
+ }
+
+ var l = 0,
+ r = 0,
+ i = 0,
+ k = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; l < layersCount; l++) {
+ for (; r <= maxDecompositionLevelsCount; r++) {
+ for (; i < componentsCount; i++) {
+ var component = tile.components[i];
+
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
+ continue;
+ }
+
+ var resolution = component.resolutions[r];
+ var numprecincts = resolution.precinctParameters.numprecincts;
+
+ for (; k < numprecincts;) {
+ var packet = createPacket(resolution, k, l);
+ k++;
+ return packet;
+ }
+
+ k = 0;
+ }
+
+ i = 0;
+ }
+
+ r = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+ }
+
+ function ResolutionLayerComponentPositionIterator(context) {
+ var siz = context.SIZ;
+ var tileIndex = context.currentTile.index;
+ var tile = context.tiles[tileIndex];
+ var layersCount = tile.codingStyleDefaultParameters.layersCount;
+ var componentsCount = siz.Csiz;
+ var maxDecompositionLevelsCount = 0;
+
+ for (var q = 0; q < componentsCount; q++) {
+ maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
+ }
+
+ var r = 0,
+ l = 0,
+ i = 0,
+ k = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; r <= maxDecompositionLevelsCount; r++) {
+ for (; l < layersCount; l++) {
+ for (; i < componentsCount; i++) {
+ var component = tile.components[i];
+
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
+ continue;
+ }
+
+ var resolution = component.resolutions[r];
+ var numprecincts = resolution.precinctParameters.numprecincts;
+
+ for (; k < numprecincts;) {
+ var packet = createPacket(resolution, k, l);
+ k++;
+ return packet;
+ }
+
+ k = 0;
+ }
+
+ i = 0;
+ }
+
+ l = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+ }
+
+ function ResolutionPositionComponentLayerIterator(context) {
+ var siz = context.SIZ;
+ var tileIndex = context.currentTile.index;
+ var tile = context.tiles[tileIndex];
+ var layersCount = tile.codingStyleDefaultParameters.layersCount;
+ var componentsCount = siz.Csiz;
+ var l, r, c, p;
+ var maxDecompositionLevelsCount = 0;
+
+ for (c = 0; c < componentsCount; c++) {
+ const component = tile.components[c];
+ maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
+ }
+
+ var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);
+
+ for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
+ var maxNumPrecincts = 0;
+
+ for (c = 0; c < componentsCount; ++c) {
+ var resolutions = tile.components[c].resolutions;
+
+ if (r < resolutions.length) {
+ maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);
+ }
+ }
+
+ maxNumPrecinctsInLevel[r] = maxNumPrecincts;
+ }
+
+ l = 0;
+ r = 0;
+ c = 0;
+ p = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; r <= maxDecompositionLevelsCount; r++) {
+ for (; p < maxNumPrecinctsInLevel[r]; p++) {
+ for (; c < componentsCount; c++) {
+ const component = tile.components[c];
+
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
+ continue;
+ }
+
+ var resolution = component.resolutions[r];
+ var numprecincts = resolution.precinctParameters.numprecincts;
+
+ if (p >= numprecincts) {
+ continue;
+ }
+
+ for (; l < layersCount;) {
+ var packet = createPacket(resolution, p, l);
+ l++;
+ return packet;
+ }
+
+ l = 0;
+ }
+
+ c = 0;
+ }
+
+ p = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+ }
+
+ function PositionComponentResolutionLayerIterator(context) {
+ var siz = context.SIZ;
+ var tileIndex = context.currentTile.index;
+ var tile = context.tiles[tileIndex];
+ var layersCount = tile.codingStyleDefaultParameters.layersCount;
+ var componentsCount = siz.Csiz;
+ var precinctsSizes = getPrecinctSizesInImageScale(tile);
+ var precinctsIterationSizes = precinctsSizes;
+ var l = 0,
+ r = 0,
+ c = 0,
+ px = 0,
+ py = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; py < precinctsIterationSizes.maxNumHigh; py++) {
+ for (; px < precinctsIterationSizes.maxNumWide; px++) {
+ for (; c < componentsCount; c++) {
+ var component = tile.components[c];
+ var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
+
+ for (; r <= decompositionLevelsCount; r++) {
+ var resolution = component.resolutions[r];
+ var sizeInImageScale = precinctsSizes.components[c].resolutions[r];
+ var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
+
+ if (k === null) {
+ continue;
+ }
+
+ for (; l < layersCount;) {
+ var packet = createPacket(resolution, k, l);
+ l++;
+ return packet;
+ }
+
+ l = 0;
+ }
+
+ r = 0;
+ }
+
+ c = 0;
+ }
+
+ px = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+ }
+
+ function ComponentPositionResolutionLayerIterator(context) {
+ var siz = context.SIZ;
+ var tileIndex = context.currentTile.index;
+ var tile = context.tiles[tileIndex];
+ var layersCount = tile.codingStyleDefaultParameters.layersCount;
+ var componentsCount = siz.Csiz;
+ var precinctsSizes = getPrecinctSizesInImageScale(tile);
+ var l = 0,
+ r = 0,
+ c = 0,
+ px = 0,
+ py = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; c < componentsCount; ++c) {
+ var component = tile.components[c];
+ var precinctsIterationSizes = precinctsSizes.components[c];
+ var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
+
+ for (; py < precinctsIterationSizes.maxNumHigh; py++) {
+ for (; px < precinctsIterationSizes.maxNumWide; px++) {
+ for (; r <= decompositionLevelsCount; r++) {
+ var resolution = component.resolutions[r];
+ var sizeInImageScale = precinctsIterationSizes.resolutions[r];
+ var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
+
+ if (k === null) {
+ continue;
+ }
+
+ for (; l < layersCount;) {
+ var packet = createPacket(resolution, k, l);
+ l++;
+ return packet;
+ }
+
+ l = 0;
+ }
+
+ r = 0;
+ }
+
+ px = 0;
+ }
+
+ py = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+ }
+
+ function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {
+ var posX = pxIndex * precinctIterationSizes.minWidth;
+ var posY = pyIndex * precinctIterationSizes.minHeight;
+
+ if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {
+ return null;
+ }
+
+ var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;
+ return posX / sizeInImageScale.height + startPrecinctRowIndex;
+ }
+
+ function getPrecinctSizesInImageScale(tile) {
+ var componentsCount = tile.components.length;
+ var minWidth = Number.MAX_VALUE;
+ var minHeight = Number.MAX_VALUE;
+ var maxNumWide = 0;
+ var maxNumHigh = 0;
+ var sizePerComponent = new Array(componentsCount);
+
+ for (var c = 0; c < componentsCount; c++) {
+ var component = tile.components[c];
+ var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
+ var sizePerResolution = new Array(decompositionLevelsCount + 1);
+ var minWidthCurrentComponent = Number.MAX_VALUE;
+ var minHeightCurrentComponent = Number.MAX_VALUE;
+ var maxNumWideCurrentComponent = 0;
+ var maxNumHighCurrentComponent = 0;
+ var scale = 1;
+
+ for (var r = decompositionLevelsCount; r >= 0; --r) {
+ var resolution = component.resolutions[r];
+ var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;
+ var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;
+ minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);
+ minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);
+ maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);
+ maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);
+ sizePerResolution[r] = {
+ width: widthCurrentResolution,
+ height: heightCurrentResolution
+ };
+ scale <<= 1;
+ }
+
+ minWidth = Math.min(minWidth, minWidthCurrentComponent);
+ minHeight = Math.min(minHeight, minHeightCurrentComponent);
+ maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
+ maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
+ sizePerComponent[c] = {
+ resolutions: sizePerResolution,
+ minWidth: minWidthCurrentComponent,
+ minHeight: minHeightCurrentComponent,
+ maxNumWide: maxNumWideCurrentComponent,
+ maxNumHigh: maxNumHighCurrentComponent
+ };
+ }
+
+ return {
+ components: sizePerComponent,
+ minWidth,
+ minHeight,
+ maxNumWide,
+ maxNumHigh
+ };
+ }
+
+ function buildPackets(context) {
+ var siz = context.SIZ;
+ var tileIndex = context.currentTile.index;
+ var tile = context.tiles[tileIndex];
+ var componentsCount = siz.Csiz;
+
+ for (var c = 0; c < componentsCount; c++) {
+ var component = tile.components[c];
+ var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
+ var resolutions = [];
+ var subbands = [];
+
+ for (var r = 0; r <= decompositionLevelsCount; r++) {
+ var blocksDimensions = getBlocksDimensions(context, component, r);
+ var resolution = {};
+ var scale = 1 << decompositionLevelsCount - r;
+ resolution.trx0 = Math.ceil(component.tcx0 / scale);
+ resolution.try0 = Math.ceil(component.tcy0 / scale);
+ resolution.trx1 = Math.ceil(component.tcx1 / scale);
+ resolution.try1 = Math.ceil(component.tcy1 / scale);
+ resolution.resLevel = r;
+ buildPrecincts(context, resolution, blocksDimensions);
+ resolutions.push(resolution);
+ var subband;
+
+ if (r === 0) {
+ subband = {};
+ subband.type = "LL";
+ subband.tbx0 = Math.ceil(component.tcx0 / scale);
+ subband.tby0 = Math.ceil(component.tcy0 / scale);
+ subband.tbx1 = Math.ceil(component.tcx1 / scale);
+ subband.tby1 = Math.ceil(component.tcy1 / scale);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolution.subbands = [subband];
+ } else {
+ var bscale = 1 << decompositionLevelsCount - r + 1;
+ var resolutionSubbands = [];
+ subband = {};
+ subband.type = "HL";
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+ subband.tby0 = Math.ceil(component.tcy0 / bscale);
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+ subband.tby1 = Math.ceil(component.tcy1 / bscale);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolutionSubbands.push(subband);
+ subband = {};
+ subband.type = "LH";
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale);
+ subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale);
+ subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolutionSubbands.push(subband);
+ subband = {};
+ subband.type = "HH";
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+ subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+ subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolutionSubbands.push(subband);
+ resolution.subbands = resolutionSubbands;
+ }
+ }
+
+ component.resolutions = resolutions;
+ component.subbands = subbands;
+ }
+
+ var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
+
+ switch (progressionOrder) {
+ case 0:
+ tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);
+ break;
+
+ case 1:
+ tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);
+ break;
+
+ case 2:
+ tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);
+ break;
+
+ case 3:
+ tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);
+ break;
+
+ case 4:
+ tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);
+ break;
+
+ default:
+ throw new JpxError(`Unsupported progression order ${progressionOrder}`);
+ }
+ }
+
+ function parseTilePackets(context, data, offset, dataLength) {
+ var position = 0;
+ var buffer,
+ bufferSize = 0,
+ skipNextBit = false;
+
+ function readBits(count) {
+ while (bufferSize < count) {
+ var b = data[offset + position];
+ position++;
+
+ if (skipNextBit) {
+ buffer = buffer << 7 | b;
+ bufferSize += 7;
+ skipNextBit = false;
+ } else {
+ buffer = buffer << 8 | b;
+ bufferSize += 8;
+ }
+
+ if (b === 0xff) {
+ skipNextBit = true;
+ }
+ }
+
+ bufferSize -= count;
+ return buffer >>> bufferSize & (1 << count) - 1;
+ }
+
+ function skipMarkerIfEqual(value) {
+ if (data[offset + position - 1] === 0xff && data[offset + position] === value) {
+ skipBytes(1);
+ return true;
+ } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) {
+ skipBytes(2);
+ return true;
+ }
+
+ return false;
+ }
+
+ function skipBytes(count) {
+ position += count;
+ }
+
+ function alignToByte() {
+ bufferSize = 0;
+
+ if (skipNextBit) {
+ position++;
+ skipNextBit = false;
+ }
+ }
+
+ function readCodingpasses() {
+ if (readBits(1) === 0) {
+ return 1;
+ }
+
+ if (readBits(1) === 0) {
+ return 2;
+ }
+
+ var value = readBits(2);
+
+ if (value < 3) {
+ return value + 3;
+ }
+
+ value = readBits(5);
+
+ if (value < 31) {
+ return value + 6;
+ }
+
+ value = readBits(7);
+ return value + 37;
+ }
+
+ var tileIndex = context.currentTile.index;
+ var tile = context.tiles[tileIndex];
+ var sopMarkerUsed = context.COD.sopMarkerUsed;
+ var ephMarkerUsed = context.COD.ephMarkerUsed;
+ var packetsIterator = tile.packetsIterator;
+
+ while (position < dataLength) {
+ alignToByte();
+
+ if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
+ skipBytes(4);
+ }
+
+ var packet = packetsIterator.nextPacket();
+
+ if (!readBits(1)) {
+ continue;
+ }
+
+ var layerNumber = packet.layerNumber;
+ var queue = [],
+ codeblock;
+
+ for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {
+ codeblock = packet.codeblocks[i];
+ var precinct = codeblock.precinct;
+ var codeblockColumn = codeblock.cbx - precinct.cbxMin;
+ var codeblockRow = codeblock.cby - precinct.cbyMin;
+ var codeblockIncluded = false;
+ var firstTimeInclusion = false;
+ var valueReady;
+
+ if (codeblock.included !== undefined) {
+ codeblockIncluded = !!readBits(1);
+ } else {
+ precinct = codeblock.precinct;
+ var inclusionTree, zeroBitPlanesTree;
+
+ if (precinct.inclusionTree !== undefined) {
+ inclusionTree = precinct.inclusionTree;
+ } else {
+ var width = precinct.cbxMax - precinct.cbxMin + 1;
+ var height = precinct.cbyMax - precinct.cbyMin + 1;
+ inclusionTree = new InclusionTree(width, height, layerNumber);
+ zeroBitPlanesTree = new TagTree(width, height);
+ precinct.inclusionTree = inclusionTree;
+ precinct.zeroBitPlanesTree = zeroBitPlanesTree;
+ }
+
+ if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
+ while (true) {
+ if (readBits(1)) {
+ valueReady = !inclusionTree.nextLevel();
+
+ if (valueReady) {
+ codeblock.included = true;
+ codeblockIncluded = firstTimeInclusion = true;
+ break;
+ }
+ } else {
+ inclusionTree.incrementValue(layerNumber);
+ break;
+ }
+ }
+ }
+ }
+
+ if (!codeblockIncluded) {
+ continue;
+ }
+
+ if (firstTimeInclusion) {
+ zeroBitPlanesTree = precinct.zeroBitPlanesTree;
+ zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
+
+ while (true) {
+ if (readBits(1)) {
+ valueReady = !zeroBitPlanesTree.nextLevel();
+
+ if (valueReady) {
+ break;
+ }
+ } else {
+ zeroBitPlanesTree.incrementValue();
+ }
+ }
+
+ codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
+ }
+
+ var codingpasses = readCodingpasses();
+
+ while (readBits(1)) {
+ codeblock.Lblock++;
+ }
+
+ var codingpassesLog2 = (0, _core_utils.log2)(codingpasses);
+ var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
+ var codedDataLength = readBits(bits);
+ queue.push({
+ codeblock,
+ codingpasses,
+ dataLength: codedDataLength
+ });
+ }
+
+ alignToByte();
+
+ if (ephMarkerUsed) {
+ skipMarkerIfEqual(0x92);
+ }
+
+ while (queue.length > 0) {
+ var packetItem = queue.shift();
+ codeblock = packetItem.codeblock;
+
+ if (codeblock.data === undefined) {
+ codeblock.data = [];
+ }
+
+ codeblock.data.push({
+ data,
+ start: offset + position,
+ end: offset + position + packetItem.dataLength,
+ codingpasses: packetItem.codingpasses
+ });
+ position += packetItem.dataLength;
+ }
+ }
+
+ return position;
+ }
+
+ function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {
+ var x0 = subband.tbx0;
+ var y0 = subband.tby0;
+ var width = subband.tbx1 - subband.tbx0;
+ var codeblocks = subband.codeblocks;
+ var right = subband.type.charAt(0) === "H" ? 1 : 0;
+ var bottom = subband.type.charAt(1) === "H" ? levelWidth : 0;
+
+ for (var i = 0, ii = codeblocks.length; i < ii; ++i) {
+ var codeblock = codeblocks[i];
+ var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
+ var blockHeight = codeblock.tby1_ - codeblock.tby0_;
+
+ if (blockWidth === 0 || blockHeight === 0) {
+ continue;
+ }
+
+ if (codeblock.data === undefined) {
+ continue;
+ }
+
+ var bitModel, currentCodingpassType;
+ bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);
+ currentCodingpassType = 2;
+ var data = codeblock.data,
+ totalLength = 0,
+ codingpasses = 0;
+ var j, jj, dataItem;
+
+ for (j = 0, jj = data.length; j < jj; j++) {
+ dataItem = data[j];
+ totalLength += dataItem.end - dataItem.start;
+ codingpasses += dataItem.codingpasses;
+ }
+
+ var encodedData = new Uint8Array(totalLength);
+ var position = 0;
+
+ for (j = 0, jj = data.length; j < jj; j++) {
+ dataItem = data[j];
+ var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
+ encodedData.set(chunk, position);
+ position += chunk.length;
+ }
+
+ var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);
+ bitModel.setDecoder(decoder);
+
+ for (j = 0; j < codingpasses; j++) {
+ switch (currentCodingpassType) {
+ case 0:
+ bitModel.runSignificancePropagationPass();
+ break;
+
+ case 1:
+ bitModel.runMagnitudeRefinementPass();
+ break;
+
+ case 2:
+ bitModel.runCleanupPass();
+
+ if (segmentationSymbolUsed) {
+ bitModel.checkSegmentationSymbol();
+ }
+
+ break;
+ }
+
+ currentCodingpassType = (currentCodingpassType + 1) % 3;
+ }
+
+ var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;
+ var sign = bitModel.coefficentsSign;
+ var magnitude = bitModel.coefficentsMagnitude;
+ var bitsDecoded = bitModel.bitsDecoded;
+ var magnitudeCorrection = reversible ? 0 : 0.5;
+ var k, n, nb;
+ position = 0;
+ var interleave = subband.type !== "LL";
+
+ for (j = 0; j < blockHeight; j++) {
+ var row = offset / width | 0;
+ var levelOffset = 2 * row * (levelWidth - width) + right + bottom;
+
+ for (k = 0; k < blockWidth; k++) {
+ n = magnitude[position];
+
+ if (n !== 0) {
+ n = (n + magnitudeCorrection) * delta;
+
+ if (sign[position] !== 0) {
+ n = -n;
+ }
+
+ nb = bitsDecoded[position];
+ var pos = interleave ? levelOffset + (offset << 1) : offset;
+
+ if (reversible && nb >= mb) {
+ coefficients[pos] = n;
+ } else {
+ coefficients[pos] = n * (1 << mb - nb);
+ }
+ }
+
+ offset++;
+ position++;
+ }
+
+ offset += width - blockWidth;
+ }
+ }
+ }
+
+ function transformTile(context, tile, c) {
+ var component = tile.components[c];
+ var codingStyleParameters = component.codingStyleParameters;
+ var quantizationParameters = component.quantizationParameters;
+ var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;
+ var spqcds = quantizationParameters.SPqcds;
+ var scalarExpounded = quantizationParameters.scalarExpounded;
+ var guardBits = quantizationParameters.guardBits;
+ var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
+ var precision = context.components[c].precision;
+ var reversible = codingStyleParameters.reversibleTransformation;
+ var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();
+ var subbandCoefficients = [];
+ var b = 0;
+
+ for (var i = 0; i <= decompositionLevelsCount; i++) {
+ var resolution = component.resolutions[i];
+ var width = resolution.trx1 - resolution.trx0;
+ var height = resolution.try1 - resolution.try0;
+ var coefficients = new Float32Array(width * height);
+
+ for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {
+ var mu, epsilon;
+
+ if (!scalarExpounded) {
+ mu = spqcds[0].mu;
+ epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
+ } else {
+ mu = spqcds[b].mu;
+ epsilon = spqcds[b].epsilon;
+ b++;
+ }
+
+ var subband = resolution.subbands[j];
+ var gainLog2 = SubbandsGainLog2[subband.type];
+ var delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);
+ var mb = guardBits + epsilon - 1;
+ copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);
+ }
+
+ subbandCoefficients.push({
+ width,
+ height,
+ items: coefficients
+ });
+ }
+
+ var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);
+ return {
+ left: component.tcx0,
+ top: component.tcy0,
+ width: result.width,
+ height: result.height,
+ items: result.items
+ };
+ }
+
+ function transformComponents(context) {
+ var siz = context.SIZ;
+ var components = context.components;
+ var componentsCount = siz.Csiz;
+ var resultImages = [];
+
+ for (var i = 0, ii = context.tiles.length; i < ii; i++) {
+ var tile = context.tiles[i];
+ var transformedTiles = [];
+ var c;
+
+ for (c = 0; c < componentsCount; c++) {
+ transformedTiles[c] = transformTile(context, tile, c);
+ }
+
+ var tile0 = transformedTiles[0];
+ var out = new Uint8ClampedArray(tile0.items.length * componentsCount);
+ var result = {
+ left: tile0.left,
+ top: tile0.top,
+ width: tile0.width,
+ height: tile0.height,
+ items: out
+ };
+ var shift, offset;
+ var pos = 0,
+ j,
+ jj,
+ y0,
+ y1,
+ y2;
+
+ if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
+ var fourComponents = componentsCount === 4;
+ var y0items = transformedTiles[0].items;
+ var y1items = transformedTiles[1].items;
+ var y2items = transformedTiles[2].items;
+ var y3items = fourComponents ? transformedTiles[3].items : null;
+ shift = components[0].precision - 8;
+ offset = (128 << shift) + 0.5;
+ var component0 = tile.components[0];
+ var alpha01 = componentsCount - 3;
+ jj = y0items.length;
+
+ if (!component0.codingStyleParameters.reversibleTransformation) {
+ for (j = 0; j < jj; j++, pos += alpha01) {
+ y0 = y0items[j] + offset;
+ y1 = y1items[j];
+ y2 = y2items[j];
+ out[pos++] = y0 + 1.402 * y2 >> shift;
+ out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;
+ out[pos++] = y0 + 1.772 * y1 >> shift;
+ }
+ } else {
+ for (j = 0; j < jj; j++, pos += alpha01) {
+ y0 = y0items[j] + offset;
+ y1 = y1items[j];
+ y2 = y2items[j];
+ const g = y0 - (y2 + y1 >> 2);
+ out[pos++] = g + y2 >> shift;
+ out[pos++] = g >> shift;
+ out[pos++] = g + y1 >> shift;
+ }
+ }
+
+ if (fourComponents) {
+ for (j = 0, pos = 3; j < jj; j++, pos += 4) {
+ out[pos] = y3items[j] + offset >> shift;
+ }
+ }
+ } else {
+ for (c = 0; c < componentsCount; c++) {
+ var items = transformedTiles[c].items;
+ shift = components[c].precision - 8;
+ offset = (128 << shift) + 0.5;
+
+ for (pos = c, j = 0, jj = items.length; j < jj; j++) {
+ out[pos] = items[j] + offset >> shift;
+ pos += componentsCount;
+ }
+ }
+ }
+
+ resultImages.push(result);
+ }
+
+ return resultImages;
+ }
+
+ function initializeTile(context, tileIndex) {
+ var siz = context.SIZ;
+ var componentsCount = siz.Csiz;
+ var tile = context.tiles[tileIndex];
+
+ for (var c = 0; c < componentsCount; c++) {
+ var component = tile.components[c];
+ var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;
+ component.quantizationParameters = qcdOrQcc;
+ var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;
+ component.codingStyleParameters = codOrCoc;
+ }
+
+ tile.codingStyleDefaultParameters = context.currentTile.COD;
+ }
+
+ var TagTree = function TagTreeClosure() {
+ function TagTree(width, height) {
+ var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
+ this.levels = [];
+
+ for (var i = 0; i < levelsLength; i++) {
+ var level = {
+ width,
+ height,
+ items: []
+ };
+ this.levels.push(level);
+ width = Math.ceil(width / 2);
+ height = Math.ceil(height / 2);
+ }
+ }
+
+ TagTree.prototype = {
+ reset: function TagTree_reset(i, j) {
+ var currentLevel = 0,
+ value = 0,
+ level;
+
+ while (currentLevel < this.levels.length) {
+ level = this.levels[currentLevel];
+ var index = i + j * level.width;
+
+ if (level.items[index] !== undefined) {
+ value = level.items[index];
+ break;
+ }
+
+ level.index = index;
+ i >>= 1;
+ j >>= 1;
+ currentLevel++;
+ }
+
+ currentLevel--;
+ level = this.levels[currentLevel];
+ level.items[level.index] = value;
+ this.currentLevel = currentLevel;
+ delete this.value;
+ },
+ incrementValue: function TagTree_incrementValue() {
+ var level = this.levels[this.currentLevel];
+ level.items[level.index]++;
+ },
+ nextLevel: function TagTree_nextLevel() {
+ var currentLevel = this.currentLevel;
+ var level = this.levels[currentLevel];
+ var value = level.items[level.index];
+ currentLevel--;
+
+ if (currentLevel < 0) {
+ this.value = value;
+ return false;
+ }
+
+ this.currentLevel = currentLevel;
+ level = this.levels[currentLevel];
+ level.items[level.index] = value;
+ return true;
+ }
+ };
+ return TagTree;
+ }();
+
+ var InclusionTree = function InclusionTreeClosure() {
+ function InclusionTree(width, height, defaultValue) {
+ var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
+ this.levels = [];
+
+ for (var i = 0; i < levelsLength; i++) {
+ var items = new Uint8Array(width * height);
+
+ for (var j = 0, jj = items.length; j < jj; j++) {
+ items[j] = defaultValue;
+ }
+
+ var level = {
+ width,
+ height,
+ items
+ };
+ this.levels.push(level);
+ width = Math.ceil(width / 2);
+ height = Math.ceil(height / 2);
+ }
+ }
+
+ InclusionTree.prototype = {
+ reset: function InclusionTree_reset(i, j, stopValue) {
+ var currentLevel = 0;
+
+ while (currentLevel < this.levels.length) {
+ var level = this.levels[currentLevel];
+ var index = i + j * level.width;
+ level.index = index;
+ var value = level.items[index];
+
+ if (value === 0xff) {
+ break;
+ }
+
+ if (value > stopValue) {
+ this.currentLevel = currentLevel;
+ this.propagateValues();
+ return false;
+ }
+
+ i >>= 1;
+ j >>= 1;
+ currentLevel++;
+ }
+
+ this.currentLevel = currentLevel - 1;
+ return true;
+ },
+ incrementValue: function InclusionTree_incrementValue(stopValue) {
+ var level = this.levels[this.currentLevel];
+ level.items[level.index] = stopValue + 1;
+ this.propagateValues();
+ },
+ propagateValues: function InclusionTree_propagateValues() {
+ var levelIndex = this.currentLevel;
+ var level = this.levels[levelIndex];
+ var currentValue = level.items[level.index];
+
+ while (--levelIndex >= 0) {
+ level = this.levels[levelIndex];
+ level.items[level.index] = currentValue;
+ }
+ },
+ nextLevel: function InclusionTree_nextLevel() {
+ var currentLevel = this.currentLevel;
+ var level = this.levels[currentLevel];
+ var value = level.items[level.index];
+ level.items[level.index] = 0xff;
+ currentLevel--;
+
+ if (currentLevel < 0) {
+ return false;
+ }
+
+ this.currentLevel = currentLevel;
+ level = this.levels[currentLevel];
+ level.items[level.index] = value;
+ return true;
+ }
+ };
+ return InclusionTree;
+ }();
+
+ var BitModel = function BitModelClosure() {
+ var UNIFORM_CONTEXT = 17;
+ var RUNLENGTH_CONTEXT = 18;
+ var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);
+ var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);
+ var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);
+
+ function BitModel(width, height, subband, zeroBitPlanes, mb) {
+ this.width = width;
+ this.height = height;
+ let contextLabelTable;
+
+ if (subband === "HH") {
+ contextLabelTable = HHContextLabel;
+ } else if (subband === "HL") {
+ contextLabelTable = HLContextLabel;
+ } else {
+ contextLabelTable = LLAndLHContextsLabel;
+ }
+
+ this.contextLabelTable = contextLabelTable;
+ var coefficientCount = width * height;
+ this.neighborsSignificance = new Uint8Array(coefficientCount);
+ this.coefficentsSign = new Uint8Array(coefficientCount);
+ let coefficentsMagnitude;
+
+ if (mb > 14) {
+ coefficentsMagnitude = new Uint32Array(coefficientCount);
+ } else if (mb > 6) {
+ coefficentsMagnitude = new Uint16Array(coefficientCount);
+ } else {
+ coefficentsMagnitude = new Uint8Array(coefficientCount);
+ }
+
+ this.coefficentsMagnitude = coefficentsMagnitude;
+ this.processingFlags = new Uint8Array(coefficientCount);
+ var bitsDecoded = new Uint8Array(coefficientCount);
+
+ if (zeroBitPlanes !== 0) {
+ for (var i = 0; i < coefficientCount; i++) {
+ bitsDecoded[i] = zeroBitPlanes;
+ }
+ }
+
+ this.bitsDecoded = bitsDecoded;
+ this.reset();
+ }
+
+ BitModel.prototype = {
+ setDecoder: function BitModel_setDecoder(decoder) {
+ this.decoder = decoder;
+ },
+ reset: function BitModel_reset() {
+ this.contexts = new Int8Array(19);
+ this.contexts[0] = 4 << 1 | 0;
+ this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;
+ this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;
+ },
+ setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) {
+ var neighborsSignificance = this.neighborsSignificance;
+ var width = this.width,
+ height = this.height;
+ var left = column > 0;
+ var right = column + 1 < width;
+ var i;
+
+ if (row > 0) {
+ i = index - width;
+
+ if (left) {
+ neighborsSignificance[i - 1] += 0x10;
+ }
+
+ if (right) {
+ neighborsSignificance[i + 1] += 0x10;
+ }
+
+ neighborsSignificance[i] += 0x04;
+ }
+
+ if (row + 1 < height) {
+ i = index + width;
+
+ if (left) {
+ neighborsSignificance[i - 1] += 0x10;
+ }
+
+ if (right) {
+ neighborsSignificance[i + 1] += 0x10;
+ }
+
+ neighborsSignificance[i] += 0x04;
+ }
+
+ if (left) {
+ neighborsSignificance[index - 1] += 0x01;
+ }
+
+ if (right) {
+ neighborsSignificance[index + 1] += 0x01;
+ }
+
+ neighborsSignificance[index] |= 0x80;
+ },
+ runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {
+ var decoder = this.decoder;
+ var width = this.width,
+ height = this.height;
+ var coefficentsMagnitude = this.coefficentsMagnitude;
+ var coefficentsSign = this.coefficentsSign;
+ var neighborsSignificance = this.neighborsSignificance;
+ var processingFlags = this.processingFlags;
+ var contexts = this.contexts;
+ var labels = this.contextLabelTable;
+ var bitsDecoded = this.bitsDecoded;
+ var processedInverseMask = ~1;
+ var processedMask = 1;
+ var firstMagnitudeBitMask = 2;
+
+ for (var i0 = 0; i0 < height; i0 += 4) {
+ for (var j = 0; j < width; j++) {
+ var index = i0 * width + j;
+
+ for (var i1 = 0; i1 < 4; i1++, index += width) {
+ var i = i0 + i1;
+
+ if (i >= height) {
+ break;
+ }
+
+ processingFlags[index] &= processedInverseMask;
+
+ if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {
+ continue;
+ }
+
+ var contextLabel = labels[neighborsSignificance[index]];
+ var decision = decoder.readBit(contexts, contextLabel);
+
+ if (decision) {
+ var sign = this.decodeSignBit(i, j, index);
+ coefficentsSign[index] = sign;
+ coefficentsMagnitude[index] = 1;
+ this.setNeighborsSignificance(i, j, index);
+ processingFlags[index] |= firstMagnitudeBitMask;
+ }
+
+ bitsDecoded[index]++;
+ processingFlags[index] |= processedMask;
+ }
+ }
+ }
+ },
+ decodeSignBit: function BitModel_decodeSignBit(row, column, index) {
+ var width = this.width,
+ height = this.height;
+ var coefficentsMagnitude = this.coefficentsMagnitude;
+ var coefficentsSign = this.coefficentsSign;
+ var contribution, sign0, sign1, significance1;
+ var contextLabel, decoded;
+ significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;
+
+ if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
+ sign1 = coefficentsSign[index + 1];
+
+ if (significance1) {
+ sign0 = coefficentsSign[index - 1];
+ contribution = 1 - sign1 - sign0;
+ } else {
+ contribution = 1 - sign1 - sign1;
+ }
+ } else if (significance1) {
+ sign0 = coefficentsSign[index - 1];
+ contribution = 1 - sign0 - sign0;
+ } else {
+ contribution = 0;
+ }
+
+ var horizontalContribution = 3 * contribution;
+ significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;
+
+ if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
+ sign1 = coefficentsSign[index + width];
+
+ if (significance1) {
+ sign0 = coefficentsSign[index - width];
+ contribution = 1 - sign1 - sign0 + horizontalContribution;
+ } else {
+ contribution = 1 - sign1 - sign1 + horizontalContribution;
+ }
+ } else if (significance1) {
+ sign0 = coefficentsSign[index - width];
+ contribution = 1 - sign0 - sign0 + horizontalContribution;
+ } else {
+ contribution = horizontalContribution;
+ }
+
+ if (contribution >= 0) {
+ contextLabel = 9 + contribution;
+ decoded = this.decoder.readBit(this.contexts, contextLabel);
+ } else {
+ contextLabel = 9 - contribution;
+ decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
+ }
+
+ return decoded;
+ },
+ runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {
+ var decoder = this.decoder;
+ var width = this.width,
+ height = this.height;
+ var coefficentsMagnitude = this.coefficentsMagnitude;
+ var neighborsSignificance = this.neighborsSignificance;
+ var contexts = this.contexts;
+ var bitsDecoded = this.bitsDecoded;
+ var processingFlags = this.processingFlags;
+ var processedMask = 1;
+ var firstMagnitudeBitMask = 2;
+ var length = width * height;
+ var width4 = width * 4;
+
+ for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {
+ indexNext = Math.min(length, index0 + width4);
+
+ for (var j = 0; j < width; j++) {
+ for (var index = index0 + j; index < indexNext; index += width) {
+ if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
+ continue;
+ }
+
+ var contextLabel = 16;
+
+ if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
+ processingFlags[index] ^= firstMagnitudeBitMask;
+ var significance = neighborsSignificance[index] & 127;
+ contextLabel = significance === 0 ? 15 : 14;
+ }
+
+ var bit = decoder.readBit(contexts, contextLabel);
+ coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;
+ bitsDecoded[index]++;
+ processingFlags[index] |= processedMask;
+ }
+ }
+ }
+ },
+ runCleanupPass: function BitModel_runCleanupPass() {
+ var decoder = this.decoder;
+ var width = this.width,
+ height = this.height;
+ var neighborsSignificance = this.neighborsSignificance;
+ var coefficentsMagnitude = this.coefficentsMagnitude;
+ var coefficentsSign = this.coefficentsSign;
+ var contexts = this.contexts;
+ var labels = this.contextLabelTable;
+ var bitsDecoded = this.bitsDecoded;
+ var processingFlags = this.processingFlags;
+ var processedMask = 1;
+ var firstMagnitudeBitMask = 2;
+ var oneRowDown = width;
+ var twoRowsDown = width * 2;
+ var threeRowsDown = width * 3;
+ var iNext;
+
+ for (var i0 = 0; i0 < height; i0 = iNext) {
+ iNext = Math.min(i0 + 4, height);
+ var indexBase = i0 * width;
+ var checkAllEmpty = i0 + 3 < height;
+
+ for (var j = 0; j < width; j++) {
+ var index0 = indexBase + j;
+ var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;
+ var i1 = 0,
+ index = index0;
+ var i = i0,
+ sign;
+
+ if (allEmpty) {
+ var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);
+
+ if (!hasSignificantCoefficent) {
+ bitsDecoded[index0]++;
+ bitsDecoded[index0 + oneRowDown]++;
+ bitsDecoded[index0 + twoRowsDown]++;
+ bitsDecoded[index0 + threeRowsDown]++;
+ continue;
+ }
+
+ i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
+
+ if (i1 !== 0) {
+ i = i0 + i1;
+ index += i1 * width;
+ }
+
+ sign = this.decodeSignBit(i, j, index);
+ coefficentsSign[index] = sign;
+ coefficentsMagnitude[index] = 1;
+ this.setNeighborsSignificance(i, j, index);
+ processingFlags[index] |= firstMagnitudeBitMask;
+ index = index0;
+
+ for (var i2 = i0; i2 <= i; i2++, index += width) {
+ bitsDecoded[index]++;
+ }
+
+ i1++;
+ }
+
+ for (i = i0 + i1; i < iNext; i++, index += width) {
+ if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
+ continue;
+ }
+
+ var contextLabel = labels[neighborsSignificance[index]];
+ var decision = decoder.readBit(contexts, contextLabel);
+
+ if (decision === 1) {
+ sign = this.decodeSignBit(i, j, index);
+ coefficentsSign[index] = sign;
+ coefficentsMagnitude[index] = 1;
+ this.setNeighborsSignificance(i, j, index);
+ processingFlags[index] |= firstMagnitudeBitMask;
+ }
+
+ bitsDecoded[index]++;
+ }
+ }
+ }
+ },
+ checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {
+ var decoder = this.decoder;
+ var contexts = this.contexts;
+ var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
+
+ if (symbol !== 0xa) {
+ throw new JpxError("Invalid segmentation symbol");
+ }
+ }
+ };
+ return BitModel;
+ }();
+
+ var Transform = function TransformClosure() {
+ function Transform() {}
+
+ Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) {
+ var ll = subbands[0];
+
+ for (var i = 1, ii = subbands.length; i < ii; i++) {
+ ll = this.iterate(ll, subbands[i], u0, v0);
+ }
+
+ return ll;
+ };
+
+ Transform.prototype.extend = function extend(buffer, offset, size) {
+ var i1 = offset - 1,
+ j1 = offset + 1;
+ var i2 = offset + size - 2,
+ j2 = offset + size;
+ buffer[i1--] = buffer[j1++];
+ buffer[j2++] = buffer[i2--];
+ buffer[i1--] = buffer[j1++];
+ buffer[j2++] = buffer[i2--];
+ buffer[i1--] = buffer[j1++];
+ buffer[j2++] = buffer[i2--];
+ buffer[i1] = buffer[j1];
+ buffer[j2] = buffer[i2];
+ };
+
+ Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) {
+ var llWidth = ll.width,
+ llHeight = ll.height,
+ llItems = ll.items;
+ var width = hl_lh_hh.width;
+ var height = hl_lh_hh.height;
+ var items = hl_lh_hh.items;
+ var i, j, k, l, u, v;
+
+ for (k = 0, i = 0; i < llHeight; i++) {
+ l = i * 2 * width;
+
+ for (j = 0; j < llWidth; j++, k++, l += 2) {
+ items[l] = llItems[k];
+ }
+ }
+
+ llItems = ll.items = null;
+ var bufferPadding = 4;
+ var rowBuffer = new Float32Array(width + 2 * bufferPadding);
+
+ if (width === 1) {
+ if ((u0 & 1) !== 0) {
+ for (v = 0, k = 0; v < height; v++, k += width) {
+ items[k] *= 0.5;
+ }
+ }
+ } else {
+ for (v = 0, k = 0; v < height; v++, k += width) {
+ rowBuffer.set(items.subarray(k, k + width), bufferPadding);
+ this.extend(rowBuffer, bufferPadding, width);
+ this.filter(rowBuffer, bufferPadding, width);
+ items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);
+ }
+ }
+
+ var numBuffers = 16;
+ var colBuffers = [];
+
+ for (i = 0; i < numBuffers; i++) {
+ colBuffers.push(new Float32Array(height + 2 * bufferPadding));
+ }
+
+ var b,
+ currentBuffer = 0;
+ ll = bufferPadding + height;
+
+ if (height === 1) {
+ if ((v0 & 1) !== 0) {
+ for (u = 0; u < width; u++) {
+ items[u] *= 0.5;
+ }
+ }
+ } else {
+ for (u = 0; u < width; u++) {
+ if (currentBuffer === 0) {
+ numBuffers = Math.min(width - u, numBuffers);
+
+ for (k = u, l = bufferPadding; l < ll; k += width, l++) {
+ for (b = 0; b < numBuffers; b++) {
+ colBuffers[b][l] = items[k + b];
+ }
+ }
+
+ currentBuffer = numBuffers;
+ }
+
+ currentBuffer--;
+ var buffer = colBuffers[currentBuffer];
+ this.extend(buffer, bufferPadding, height);
+ this.filter(buffer, bufferPadding, height);
+
+ if (currentBuffer === 0) {
+ k = u - numBuffers + 1;
+
+ for (l = bufferPadding; l < ll; k += width, l++) {
+ for (b = 0; b < numBuffers; b++) {
+ items[k + b] = colBuffers[b][l];
+ }
+ }
+ }
+ }
+ }
+
+ return {
+ width,
+ height,
+ items
+ };
+ };
+
+ return Transform;
+ }();
+
+ var IrreversibleTransform = function IrreversibleTransformClosure() {
+ function IrreversibleTransform() {
+ Transform.call(this);
+ }
+
+ IrreversibleTransform.prototype = Object.create(Transform.prototype);
+
+ IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) {
+ var len = length >> 1;
+ offset = offset | 0;
+ var j, n, current, next;
+ var alpha = -1.586134342059924;
+ var beta = -0.052980118572961;
+ var gamma = 0.882911075530934;
+ var delta = 0.443506852043971;
+ var K = 1.230174104914001;
+ var K_ = 1 / K;
+ j = offset - 3;
+
+ for (n = len + 4; n--; j += 2) {
+ x[j] *= K_;
+ }
+
+ j = offset - 2;
+ current = delta * x[j - 1];
+
+ for (n = len + 3; n--; j += 2) {
+ next = delta * x[j + 1];
+ x[j] = K * x[j] - current - next;
+
+ if (n--) {
+ j += 2;
+ current = delta * x[j + 1];
+ x[j] = K * x[j] - current - next;
+ } else {
+ break;
+ }
+ }
+
+ j = offset - 1;
+ current = gamma * x[j - 1];
+
+ for (n = len + 2; n--; j += 2) {
+ next = gamma * x[j + 1];
+ x[j] -= current + next;
+
+ if (n--) {
+ j += 2;
+ current = gamma * x[j + 1];
+ x[j] -= current + next;
+ } else {
+ break;
+ }
+ }
+
+ j = offset;
+ current = beta * x[j - 1];
+
+ for (n = len + 1; n--; j += 2) {
+ next = beta * x[j + 1];
+ x[j] -= current + next;
+
+ if (n--) {
+ j += 2;
+ current = beta * x[j + 1];
+ x[j] -= current + next;
+ } else {
+ break;
+ }
+ }
+
+ if (len !== 0) {
+ j = offset + 1;
+ current = alpha * x[j - 1];
+
+ for (n = len; n--; j += 2) {
+ next = alpha * x[j + 1];
+ x[j] -= current + next;
+
+ if (n--) {
+ j += 2;
+ current = alpha * x[j + 1];
+ x[j] -= current + next;
+ } else {
+ break;
+ }
+ }
+ }
+ };
+
+ return IrreversibleTransform;
+ }();
+
+ var ReversibleTransform = function ReversibleTransformClosure() {
+ function ReversibleTransform() {
+ Transform.call(this);
+ }
+
+ ReversibleTransform.prototype = Object.create(Transform.prototype);
+
+ ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) {
+ var len = length >> 1;
+ offset = offset | 0;
+ var j, n;
+
+ for (j = offset, n = len + 1; n--; j += 2) {
+ x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;
+ }
+
+ for (j = offset + 1, n = len; n--; j += 2) {
+ x[j] += x[j - 1] + x[j + 1] >> 1;
+ }
+ };
+
+ return ReversibleTransform;
+ }();
+
+ return JpxImage;
+}();
+
+exports.JpxImage = JpxImage;
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _stream = __w_pdfjs_require__(12);
+
+var ARCFourCipher = function ARCFourCipherClosure() {
+ function ARCFourCipher(key) {
+ this.a = 0;
+ this.b = 0;
+ var s = new Uint8Array(256);
+ var i,
+ j = 0,
+ tmp,
+ keyLength = key.length;
+
+ for (i = 0; i < 256; ++i) {
+ s[i] = i;
+ }
+
+ for (i = 0; i < 256; ++i) {
+ tmp = s[i];
+ j = j + tmp + key[i % keyLength] & 0xff;
+ s[i] = s[j];
+ s[j] = tmp;
+ }
+
+ this.s = s;
+ }
+
+ ARCFourCipher.prototype = {
+ encryptBlock: function ARCFourCipher_encryptBlock(data) {
+ var i,
+ n = data.length,
+ tmp,
+ tmp2;
+ var a = this.a,
+ b = this.b,
+ s = this.s;
+ var output = new Uint8Array(n);
+
+ for (i = 0; i < n; ++i) {
+ a = a + 1 & 0xff;
+ tmp = s[a];
+ b = b + tmp & 0xff;
+ tmp2 = s[b];
+ s[a] = tmp2;
+ s[b] = tmp;
+ output[i] = data[i] ^ s[tmp + tmp2 & 0xff];
+ }
+
+ this.a = a;
+ this.b = b;
+ return output;
+ }
+ };
+ ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;
+ return ARCFourCipher;
+}();
+
+exports.ARCFourCipher = ARCFourCipher;
+
+var calculateMD5 = function calculateMD5Closure() {
+ var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
+ var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);
+
+ function hash(data, offset, length) {
+ var h0 = 1732584193,
+ h1 = -271733879,
+ h2 = -1732584194,
+ h3 = 271733878;
+ var paddedLength = length + 72 & ~63;
+ var padded = new Uint8Array(paddedLength);
+ var i, j, n;
+
+ for (i = 0; i < length; ++i) {
+ padded[i] = data[offset++];
+ }
+
+ padded[i++] = 0x80;
+ n = paddedLength - 8;
+
+ while (i < n) {
+ padded[i++] = 0;
+ }
+
+ padded[i++] = length << 3 & 0xff;
+ padded[i++] = length >> 5 & 0xff;
+ padded[i++] = length >> 13 & 0xff;
+ padded[i++] = length >> 21 & 0xff;
+ padded[i++] = length >>> 29 & 0xff;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ var w = new Int32Array(16);
+
+ for (i = 0; i < paddedLength;) {
+ for (j = 0; j < 16; ++j, i += 4) {
+ w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;
+ }
+
+ var a = h0,
+ b = h1,
+ c = h2,
+ d = h3,
+ f,
+ g;
+
+ for (j = 0; j < 64; ++j) {
+ if (j < 16) {
+ f = b & c | ~b & d;
+ g = j;
+ } else if (j < 32) {
+ f = d & b | ~d & c;
+ g = 5 * j + 1 & 15;
+ } else if (j < 48) {
+ f = b ^ c ^ d;
+ g = 3 * j + 5 & 15;
+ } else {
+ f = c ^ (b | ~d);
+ g = 7 * j & 15;
+ }
+
+ var tmp = d,
+ rotateArg = a + f + k[j] + w[g] | 0,
+ rotate = r[j];
+ d = c;
+ c = b;
+ b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;
+ a = tmp;
+ }
+
+ h0 = h0 + a | 0;
+ h1 = h1 + b | 0;
+ h2 = h2 + c | 0;
+ h3 = h3 + d | 0;
+ }
+
+ return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);
+ }
+
+ return hash;
+}();
+
+exports.calculateMD5 = calculateMD5;
+
+var Word64 = function Word64Closure() {
+ function Word64(highInteger, lowInteger) {
+ this.high = highInteger | 0;
+ this.low = lowInteger | 0;
+ }
+
+ Word64.prototype = {
+ and: function Word64_and(word) {
+ this.high &= word.high;
+ this.low &= word.low;
+ },
+ xor: function Word64_xor(word) {
+ this.high ^= word.high;
+ this.low ^= word.low;
+ },
+ or: function Word64_or(word) {
+ this.high |= word.high;
+ this.low |= word.low;
+ },
+ shiftRight: function Word64_shiftRight(places) {
+ if (places >= 32) {
+ this.low = this.high >>> places - 32 | 0;
+ this.high = 0;
+ } else {
+ this.low = this.low >>> places | this.high << 32 - places;
+ this.high = this.high >>> places | 0;
+ }
+ },
+ shiftLeft: function Word64_shiftLeft(places) {
+ if (places >= 32) {
+ this.high = this.low << places - 32;
+ this.low = 0;
+ } else {
+ this.high = this.high << places | this.low >>> 32 - places;
+ this.low = this.low << places;
+ }
+ },
+ rotateRight: function Word64_rotateRight(places) {
+ var low, high;
+
+ if (places & 32) {
+ high = this.low;
+ low = this.high;
+ } else {
+ low = this.low;
+ high = this.high;
+ }
+
+ places &= 31;
+ this.low = low >>> places | high << 32 - places;
+ this.high = high >>> places | low << 32 - places;
+ },
+ not: function Word64_not() {
+ this.high = ~this.high;
+ this.low = ~this.low;
+ },
+ add: function Word64_add(word) {
+ var lowAdd = (this.low >>> 0) + (word.low >>> 0);
+ var highAdd = (this.high >>> 0) + (word.high >>> 0);
+
+ if (lowAdd > 0xffffffff) {
+ highAdd += 1;
+ }
+
+ this.low = lowAdd | 0;
+ this.high = highAdd | 0;
+ },
+ copyTo: function Word64_copyTo(bytes, offset) {
+ bytes[offset] = this.high >>> 24 & 0xff;
+ bytes[offset + 1] = this.high >> 16 & 0xff;
+ bytes[offset + 2] = this.high >> 8 & 0xff;
+ bytes[offset + 3] = this.high & 0xff;
+ bytes[offset + 4] = this.low >>> 24 & 0xff;
+ bytes[offset + 5] = this.low >> 16 & 0xff;
+ bytes[offset + 6] = this.low >> 8 & 0xff;
+ bytes[offset + 7] = this.low & 0xff;
+ },
+ assign: function Word64_assign(word) {
+ this.high = word.high;
+ this.low = word.low;
+ }
+ };
+ return Word64;
+}();
+
+var calculateSHA256 = function calculateSHA256Closure() {
+ function rotr(x, n) {
+ return x >>> n | x << 32 - n;
+ }
+
+ function ch(x, y, z) {
+ return x & y ^ ~x & z;
+ }
+
+ function maj(x, y, z) {
+ return x & y ^ x & z ^ y & z;
+ }
+
+ function sigma(x) {
+ return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);
+ }
+
+ function sigmaPrime(x) {
+ return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);
+ }
+
+ function littleSigma(x) {
+ return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;
+ }
+
+ function littleSigmaPrime(x) {
+ return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;
+ }
+
+ var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
+
+ function hash(data, offset, length) {
+ var h0 = 0x6a09e667,
+ h1 = 0xbb67ae85,
+ h2 = 0x3c6ef372,
+ h3 = 0xa54ff53a,
+ h4 = 0x510e527f,
+ h5 = 0x9b05688c,
+ h6 = 0x1f83d9ab,
+ h7 = 0x5be0cd19;
+ var paddedLength = Math.ceil((length + 9) / 64) * 64;
+ var padded = new Uint8Array(paddedLength);
+ var i, j, n;
+
+ for (i = 0; i < length; ++i) {
+ padded[i] = data[offset++];
+ }
+
+ padded[i++] = 0x80;
+ n = paddedLength - 8;
+
+ while (i < n) {
+ padded[i++] = 0;
+ }
+
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = length >>> 29 & 0xff;
+ padded[i++] = length >> 21 & 0xff;
+ padded[i++] = length >> 13 & 0xff;
+ padded[i++] = length >> 5 & 0xff;
+ padded[i++] = length << 3 & 0xff;
+ var w = new Uint32Array(64);
+
+ for (i = 0; i < paddedLength;) {
+ for (j = 0; j < 16; ++j) {
+ w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
+ i += 4;
+ }
+
+ for (j = 16; j < 64; ++j) {
+ w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;
+ }
+
+ var a = h0,
+ b = h1,
+ c = h2,
+ d = h3,
+ e = h4,
+ f = h5,
+ g = h6,
+ h = h7,
+ t1,
+ t2;
+
+ for (j = 0; j < 64; ++j) {
+ t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];
+ t2 = sigma(a) + maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + t1 | 0;
+ d = c;
+ c = b;
+ b = a;
+ a = t1 + t2 | 0;
+ }
+
+ h0 = h0 + a | 0;
+ h1 = h1 + b | 0;
+ h2 = h2 + c | 0;
+ h3 = h3 + d | 0;
+ h4 = h4 + e | 0;
+ h5 = h5 + f | 0;
+ h6 = h6 + g | 0;
+ h7 = h7 + h | 0;
+ }
+
+ return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);
+ }
+
+ return hash;
+}();
+
+exports.calculateSHA256 = calculateSHA256;
+
+var calculateSHA512 = function calculateSHA512Closure() {
+ function ch(result, x, y, z, tmp) {
+ result.assign(x);
+ result.and(y);
+ tmp.assign(x);
+ tmp.not();
+ tmp.and(z);
+ result.xor(tmp);
+ }
+
+ function maj(result, x, y, z, tmp) {
+ result.assign(x);
+ result.and(y);
+ tmp.assign(x);
+ tmp.and(z);
+ result.xor(tmp);
+ tmp.assign(y);
+ tmp.and(z);
+ result.xor(tmp);
+ }
+
+ function sigma(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(28);
+ tmp.assign(x);
+ tmp.rotateRight(34);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.rotateRight(39);
+ result.xor(tmp);
+ }
+
+ function sigmaPrime(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(14);
+ tmp.assign(x);
+ tmp.rotateRight(18);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.rotateRight(41);
+ result.xor(tmp);
+ }
+
+ function littleSigma(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(1);
+ tmp.assign(x);
+ tmp.rotateRight(8);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.shiftRight(7);
+ result.xor(tmp);
+ }
+
+ function littleSigmaPrime(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(19);
+ tmp.assign(x);
+ tmp.rotateRight(61);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.shiftRight(6);
+ result.xor(tmp);
+ }
+
+ var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];
+
+ function hash(data, offset, length, mode384) {
+ mode384 = !!mode384;
+ var h0, h1, h2, h3, h4, h5, h6, h7;
+
+ if (!mode384) {
+ h0 = new Word64(0x6a09e667, 0xf3bcc908);
+ h1 = new Word64(0xbb67ae85, 0x84caa73b);
+ h2 = new Word64(0x3c6ef372, 0xfe94f82b);
+ h3 = new Word64(0xa54ff53a, 0x5f1d36f1);
+ h4 = new Word64(0x510e527f, 0xade682d1);
+ h5 = new Word64(0x9b05688c, 0x2b3e6c1f);
+ h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);
+ h7 = new Word64(0x5be0cd19, 0x137e2179);
+ } else {
+ h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);
+ h1 = new Word64(0x629a292a, 0x367cd507);
+ h2 = new Word64(0x9159015a, 0x3070dd17);
+ h3 = new Word64(0x152fecd8, 0xf70e5939);
+ h4 = new Word64(0x67332667, 0xffc00b31);
+ h5 = new Word64(0x8eb44a87, 0x68581511);
+ h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);
+ h7 = new Word64(0x47b5481d, 0xbefa4fa4);
+ }
+
+ var paddedLength = Math.ceil((length + 17) / 128) * 128;
+ var padded = new Uint8Array(paddedLength);
+ var i, j, n;
+
+ for (i = 0; i < length; ++i) {
+ padded[i] = data[offset++];
+ }
+
+ padded[i++] = 0x80;
+ n = paddedLength - 16;
+
+ while (i < n) {
+ padded[i++] = 0;
+ }
+
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = length >>> 29 & 0xff;
+ padded[i++] = length >> 21 & 0xff;
+ padded[i++] = length >> 13 & 0xff;
+ padded[i++] = length >> 5 & 0xff;
+ padded[i++] = length << 3 & 0xff;
+ var w = new Array(80);
+
+ for (i = 0; i < 80; i++) {
+ w[i] = new Word64(0, 0);
+ }
+
+ var a = new Word64(0, 0),
+ b = new Word64(0, 0),
+ c = new Word64(0, 0);
+ var d = new Word64(0, 0),
+ e = new Word64(0, 0),
+ f = new Word64(0, 0);
+ var g = new Word64(0, 0),
+ h = new Word64(0, 0);
+ var t1 = new Word64(0, 0),
+ t2 = new Word64(0, 0);
+ var tmp1 = new Word64(0, 0),
+ tmp2 = new Word64(0, 0),
+ tmp3;
+
+ for (i = 0; i < paddedLength;) {
+ for (j = 0; j < 16; ++j) {
+ w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
+ w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];
+ i += 8;
+ }
+
+ for (j = 16; j < 80; ++j) {
+ tmp3 = w[j];
+ littleSigmaPrime(tmp3, w[j - 2], tmp2);
+ tmp3.add(w[j - 7]);
+ littleSigma(tmp1, w[j - 15], tmp2);
+ tmp3.add(tmp1);
+ tmp3.add(w[j - 16]);
+ }
+
+ a.assign(h0);
+ b.assign(h1);
+ c.assign(h2);
+ d.assign(h3);
+ e.assign(h4);
+ f.assign(h5);
+ g.assign(h6);
+ h.assign(h7);
+
+ for (j = 0; j < 80; ++j) {
+ t1.assign(h);
+ sigmaPrime(tmp1, e, tmp2);
+ t1.add(tmp1);
+ ch(tmp1, e, f, g, tmp2);
+ t1.add(tmp1);
+ t1.add(k[j]);
+ t1.add(w[j]);
+ sigma(t2, a, tmp2);
+ maj(tmp1, a, b, c, tmp2);
+ t2.add(tmp1);
+ tmp3 = h;
+ h = g;
+ g = f;
+ f = e;
+ d.add(t1);
+ e = d;
+ d = c;
+ c = b;
+ b = a;
+ tmp3.assign(t1);
+ tmp3.add(t2);
+ a = tmp3;
+ }
+
+ h0.add(a);
+ h1.add(b);
+ h2.add(c);
+ h3.add(d);
+ h4.add(e);
+ h5.add(f);
+ h6.add(g);
+ h7.add(h);
+ }
+
+ var result;
+
+ if (!mode384) {
+ result = new Uint8Array(64);
+ h0.copyTo(result, 0);
+ h1.copyTo(result, 8);
+ h2.copyTo(result, 16);
+ h3.copyTo(result, 24);
+ h4.copyTo(result, 32);
+ h5.copyTo(result, 40);
+ h6.copyTo(result, 48);
+ h7.copyTo(result, 56);
+ } else {
+ result = new Uint8Array(48);
+ h0.copyTo(result, 0);
+ h1.copyTo(result, 8);
+ h2.copyTo(result, 16);
+ h3.copyTo(result, 24);
+ h4.copyTo(result, 32);
+ h5.copyTo(result, 40);
+ }
+
+ return result;
+ }
+
+ return hash;
+}();
+
+exports.calculateSHA512 = calculateSHA512;
+
+var calculateSHA384 = function calculateSHA384Closure() {
+ function hash(data, offset, length) {
+ return calculateSHA512(data, offset, length, true);
+ }
+
+ return hash;
+}();
+
+exports.calculateSHA384 = calculateSHA384;
+
+var NullCipher = function NullCipherClosure() {
+ function NullCipher() {}
+
+ NullCipher.prototype = {
+ decryptBlock: function NullCipher_decryptBlock(data) {
+ return data;
+ }
+ };
+ return NullCipher;
+}();
+
+class AESBaseCipher {
+ constructor() {
+ if (this.constructor === AESBaseCipher) {
+ (0, _util.unreachable)("Cannot initialize AESBaseCipher.");
+ }
+
+ this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);
+ this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);
+ this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
+ this._mixCol = new Uint8Array(256);
+
+ for (let i = 0; i < 256; i++) {
+ if (i < 128) {
+ this._mixCol[i] = i << 1;
+ } else {
+ this._mixCol[i] = i << 1 ^ 0x1b;
+ }
+ }
+
+ this.buffer = new Uint8Array(16);
+ this.bufferPosition = 0;
+ }
+
+ _expandKey(cipherKey) {
+ (0, _util.unreachable)("Cannot call `_expandKey` on the base class");
+ }
+
+ _decrypt(input, key) {
+ let t, u, v;
+ const state = new Uint8Array(16);
+ state.set(input);
+
+ for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+
+ for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {
+ t = state[13];
+ state[13] = state[9];
+ state[9] = state[5];
+ state[5] = state[1];
+ state[1] = t;
+ t = state[14];
+ u = state[10];
+ state[14] = state[6];
+ state[10] = state[2];
+ state[6] = t;
+ state[2] = u;
+ t = state[15];
+ u = state[11];
+ v = state[7];
+ state[15] = state[3];
+ state[11] = t;
+ state[7] = u;
+ state[3] = v;
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] = this._inv_s[state[j]];
+ }
+
+ for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+
+ for (let j = 0; j < 16; j += 4) {
+ const s0 = this._mix[state[j]];
+ const s1 = this._mix[state[j + 1]];
+ const s2 = this._mix[state[j + 2]];
+ const s3 = this._mix[state[j + 3]];
+ t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;
+ state[j] = t >>> 24 & 0xff;
+ state[j + 1] = t >> 16 & 0xff;
+ state[j + 2] = t >> 8 & 0xff;
+ state[j + 3] = t & 0xff;
+ }
+ }
+
+ t = state[13];
+ state[13] = state[9];
+ state[9] = state[5];
+ state[5] = state[1];
+ state[1] = t;
+ t = state[14];
+ u = state[10];
+ state[14] = state[6];
+ state[10] = state[2];
+ state[6] = t;
+ state[2] = u;
+ t = state[15];
+ u = state[11];
+ v = state[7];
+ state[15] = state[3];
+ state[11] = t;
+ state[7] = u;
+ state[3] = v;
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] = this._inv_s[state[j]];
+ state[j] ^= key[j];
+ }
+
+ return state;
+ }
+
+ _encrypt(input, key) {
+ const s = this._s;
+ let t, u, v;
+ const state = new Uint8Array(16);
+ state.set(input);
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] ^= key[j];
+ }
+
+ for (let i = 1; i < this._cyclesOfRepetition; i++) {
+ for (let j = 0; j < 16; ++j) {
+ state[j] = s[state[j]];
+ }
+
+ v = state[1];
+ state[1] = state[5];
+ state[5] = state[9];
+ state[9] = state[13];
+ state[13] = v;
+ v = state[2];
+ u = state[6];
+ state[2] = state[10];
+ state[6] = state[14];
+ state[10] = v;
+ state[14] = u;
+ v = state[3];
+ u = state[7];
+ t = state[11];
+ state[3] = state[15];
+ state[7] = v;
+ state[11] = u;
+ state[15] = t;
+
+ for (let j = 0; j < 16; j += 4) {
+ const s0 = state[j + 0];
+ const s1 = state[j + 1];
+ const s2 = state[j + 2];
+ const s3 = state[j + 3];
+ t = s0 ^ s1 ^ s2 ^ s3;
+ state[j + 0] ^= t ^ this._mixCol[s0 ^ s1];
+ state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];
+ state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];
+ state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];
+ }
+
+ for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+ }
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] = s[state[j]];
+ }
+
+ v = state[1];
+ state[1] = state[5];
+ state[5] = state[9];
+ state[9] = state[13];
+ state[13] = v;
+ v = state[2];
+ u = state[6];
+ state[2] = state[10];
+ state[6] = state[14];
+ state[10] = v;
+ state[14] = u;
+ v = state[3];
+ u = state[7];
+ t = state[11];
+ state[3] = state[15];
+ state[7] = v;
+ state[11] = u;
+ state[15] = t;
+
+ for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+
+ return state;
+ }
+
+ _decryptBlock2(data, finalize) {
+ const sourceLength = data.length;
+ let buffer = this.buffer,
+ bufferLength = this.bufferPosition;
+ const result = [];
+ let iv = this.iv;
+
+ for (let i = 0; i < sourceLength; ++i) {
+ buffer[bufferLength] = data[i];
+ ++bufferLength;
+
+ if (bufferLength < 16) {
+ continue;
+ }
+
+ const plain = this._decrypt(buffer, this._key);
+
+ for (let j = 0; j < 16; ++j) {
+ plain[j] ^= iv[j];
+ }
+
+ iv = buffer;
+ result.push(plain);
+ buffer = new Uint8Array(16);
+ bufferLength = 0;
+ }
+
+ this.buffer = buffer;
+ this.bufferLength = bufferLength;
+ this.iv = iv;
+
+ if (result.length === 0) {
+ return new Uint8Array(0);
+ }
+
+ let outputLength = 16 * result.length;
+
+ if (finalize) {
+ const lastBlock = result[result.length - 1];
+ let psLen = lastBlock[15];
+
+ if (psLen <= 16) {
+ for (let i = 15, ii = 16 - psLen; i >= ii; --i) {
+ if (lastBlock[i] !== psLen) {
+ psLen = 0;
+ break;
+ }
+ }
+
+ outputLength -= psLen;
+ result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
+ }
+ }
+
+ const output = new Uint8Array(outputLength);
+
+ for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+ output.set(result[i], j);
+ }
+
+ return output;
+ }
+
+ decryptBlock(data, finalize, iv = null) {
+ const sourceLength = data.length;
+ const buffer = this.buffer;
+ let bufferLength = this.bufferPosition;
+
+ if (iv) {
+ this.iv = iv;
+ } else {
+ for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {
+ buffer[bufferLength] = data[i];
+ }
+
+ if (bufferLength < 16) {
+ this.bufferLength = bufferLength;
+ return new Uint8Array(0);
+ }
+
+ this.iv = buffer;
+ data = data.subarray(16);
+ }
+
+ this.buffer = new Uint8Array(16);
+ this.bufferLength = 0;
+ this.decryptBlock = this._decryptBlock2;
+ return this.decryptBlock(data, finalize);
+ }
+
+ encrypt(data, iv) {
+ const sourceLength = data.length;
+ let buffer = this.buffer,
+ bufferLength = this.bufferPosition;
+ const result = [];
+
+ if (!iv) {
+ iv = new Uint8Array(16);
+ }
+
+ for (let i = 0; i < sourceLength; ++i) {
+ buffer[bufferLength] = data[i];
+ ++bufferLength;
+
+ if (bufferLength < 16) {
+ continue;
+ }
+
+ for (let j = 0; j < 16; ++j) {
+ buffer[j] ^= iv[j];
+ }
+
+ const cipher = this._encrypt(buffer, this._key);
+
+ iv = cipher;
+ result.push(cipher);
+ buffer = new Uint8Array(16);
+ bufferLength = 0;
+ }
+
+ this.buffer = buffer;
+ this.bufferLength = bufferLength;
+ this.iv = iv;
+
+ if (result.length === 0) {
+ return new Uint8Array(0);
+ }
+
+ const outputLength = 16 * result.length;
+ const output = new Uint8Array(outputLength);
+
+ for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+ output.set(result[i], j);
+ }
+
+ return output;
+ }
+
+}
+
+class AES128Cipher extends AESBaseCipher {
+ constructor(key) {
+ super();
+ this._cyclesOfRepetition = 10;
+ this._keySize = 160;
+ this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);
+ this._key = this._expandKey(key);
+ }
+
+ _expandKey(cipherKey) {
+ const b = 176;
+ const s = this._s;
+ const rcon = this._rcon;
+ const result = new Uint8Array(b);
+ result.set(cipherKey);
+
+ for (let j = 16, i = 1; j < b; ++i) {
+ let t1 = result[j - 3];
+ let t2 = result[j - 2];
+ let t3 = result[j - 1];
+ let t4 = result[j - 4];
+ t1 = s[t1];
+ t2 = s[t2];
+ t3 = s[t3];
+ t4 = s[t4];
+ t1 = t1 ^ rcon[i];
+
+ for (let n = 0; n < 4; ++n) {
+ result[j] = t1 ^= result[j - 16];
+ j++;
+ result[j] = t2 ^= result[j - 16];
+ j++;
+ result[j] = t3 ^= result[j - 16];
+ j++;
+ result[j] = t4 ^= result[j - 16];
+ j++;
+ }
+ }
+
+ return result;
+ }
+
+}
+
+exports.AES128Cipher = AES128Cipher;
+
+class AES256Cipher extends AESBaseCipher {
+ constructor(key) {
+ super();
+ this._cyclesOfRepetition = 14;
+ this._keySize = 224;
+ this._key = this._expandKey(key);
+ }
+
+ _expandKey(cipherKey) {
+ const b = 240;
+ const s = this._s;
+ const result = new Uint8Array(b);
+ result.set(cipherKey);
+ let r = 1;
+ let t1, t2, t3, t4;
+
+ for (let j = 32, i = 1; j < b; ++i) {
+ if (j % 32 === 16) {
+ t1 = s[t1];
+ t2 = s[t2];
+ t3 = s[t3];
+ t4 = s[t4];
+ } else if (j % 32 === 0) {
+ t1 = result[j - 3];
+ t2 = result[j - 2];
+ t3 = result[j - 1];
+ t4 = result[j - 4];
+ t1 = s[t1];
+ t2 = s[t2];
+ t3 = s[t3];
+ t4 = s[t4];
+ t1 = t1 ^ r;
+
+ if ((r <<= 1) >= 256) {
+ r = (r ^ 0x1b) & 0xff;
+ }
+ }
+
+ for (let n = 0; n < 4; ++n) {
+ result[j] = t1 ^= result[j - 32];
+ j++;
+ result[j] = t2 ^= result[j - 32];
+ j++;
+ result[j] = t3 ^= result[j - 32];
+ j++;
+ result[j] = t4 ^= result[j - 32];
+ j++;
+ }
+ }
+
+ return result;
+ }
+
+}
+
+exports.AES256Cipher = AES256Cipher;
+
+var PDF17 = function PDF17Closure() {
+ function compareByteArrays(array1, array2) {
+ if (array1.length !== array2.length) {
+ return false;
+ }
+
+ for (var i = 0; i < array1.length; i++) {
+ if (array1[i] !== array2[i]) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ function PDF17() {}
+
+ PDF17.prototype = {
+ checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
+ var hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerValidationSalt, password.length);
+ hashData.set(userBytes, password.length + ownerValidationSalt.length);
+ var result = calculateSHA256(hashData, 0, hashData.length);
+ return compareByteArrays(result, ownerPassword);
+ },
+ checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) {
+ var hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userValidationSalt, password.length);
+ var result = calculateSHA256(hashData, 0, hashData.length);
+ return compareByteArrays(result, userPassword);
+ },
+ getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
+ var hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerKeySalt, password.length);
+ hashData.set(userBytes, password.length + ownerKeySalt.length);
+ var key = calculateSHA256(hashData, 0, hashData.length);
+ var cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
+ },
+ getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) {
+ var hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userKeySalt, password.length);
+ var key = calculateSHA256(hashData, 0, hashData.length);
+ var cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
+ }
+ };
+ return PDF17;
+}();
+
+exports.PDF17 = PDF17;
+
+var PDF20 = function PDF20Closure() {
+ function concatArrays(array1, array2) {
+ var t = new Uint8Array(array1.length + array2.length);
+ t.set(array1, 0);
+ t.set(array2, array1.length);
+ return t;
+ }
+
+ function calculatePDF20Hash(password, input, userBytes) {
+ var k = calculateSHA256(input, 0, input.length).subarray(0, 32);
+ var e = [0];
+ var i = 0;
+
+ while (i < 64 || e[e.length - 1] > i - 32) {
+ var arrayLength = password.length + k.length + userBytes.length;
+ var k1 = new Uint8Array(arrayLength * 64);
+ var array = concatArrays(password, k);
+ array = concatArrays(array, userBytes);
+
+ for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {
+ k1.set(array, pos);
+ }
+
+ var cipher = new AES128Cipher(k.subarray(0, 16));
+ e = cipher.encrypt(k1, k.subarray(16, 32));
+ var remainder = 0;
+
+ for (var z = 0; z < 16; z++) {
+ remainder *= 256 % 3;
+ remainder %= 3;
+ remainder += (e[z] >>> 0) % 3;
+ remainder %= 3;
+ }
+
+ if (remainder === 0) {
+ k = calculateSHA256(e, 0, e.length);
+ } else if (remainder === 1) {
+ k = calculateSHA384(e, 0, e.length);
+ } else if (remainder === 2) {
+ k = calculateSHA512(e, 0, e.length);
+ }
+
+ i++;
+ }
+
+ return k.subarray(0, 32);
+ }
+
+ function PDF20() {}
+
+ function compareByteArrays(array1, array2) {
+ if (array1.length !== array2.length) {
+ return false;
+ }
+
+ for (var i = 0; i < array1.length; i++) {
+ if (array1[i] !== array2[i]) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ PDF20.prototype = {
+ hash: function PDF20_hash(password, concatBytes, userBytes) {
+ return calculatePDF20Hash(password, concatBytes, userBytes);
+ },
+ checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
+ var hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerValidationSalt, password.length);
+ hashData.set(userBytes, password.length + ownerValidationSalt.length);
+ var result = calculatePDF20Hash(password, hashData, userBytes);
+ return compareByteArrays(result, ownerPassword);
+ },
+ checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) {
+ var hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userValidationSalt, password.length);
+ var result = calculatePDF20Hash(password, hashData, []);
+ return compareByteArrays(result, userPassword);
+ },
+ getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
+ var hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerKeySalt, password.length);
+ hashData.set(userBytes, password.length + ownerKeySalt.length);
+ var key = calculatePDF20Hash(password, hashData, userBytes);
+ var cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
+ },
+ getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) {
+ var hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userKeySalt, password.length);
+ var key = calculatePDF20Hash(password, hashData, []);
+ var cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
+ }
+ };
+ return PDF20;
+}();
+
+exports.PDF20 = PDF20;
+
+var CipherTransform = function CipherTransformClosure() {
+ function CipherTransform(stringCipherConstructor, streamCipherConstructor) {
+ this.StringCipherConstructor = stringCipherConstructor;
+ this.StreamCipherConstructor = streamCipherConstructor;
+ }
+
+ CipherTransform.prototype = {
+ createStream: function CipherTransform_createStream(stream, length) {
+ var cipher = new this.StreamCipherConstructor();
+ return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {
+ return cipher.decryptBlock(data, finalize);
+ });
+ },
+ decryptString: function CipherTransform_decryptString(s) {
+ var cipher = new this.StringCipherConstructor();
+ var data = (0, _util.stringToBytes)(s);
+ data = cipher.decryptBlock(data, true);
+ return (0, _util.bytesToString)(data);
+ }
+ };
+ return CipherTransform;
+}();
+
+var CipherTransformFactory = function CipherTransformFactoryClosure() {
+ var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
+
+ function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {
+ if (password) {
+ var passwordLength = Math.min(127, password.length);
+ password = password.subarray(0, passwordLength);
+ } else {
+ password = [];
+ }
+
+ var pdfAlgorithm;
+
+ if (revision === 6) {
+ pdfAlgorithm = new PDF20();
+ } else {
+ pdfAlgorithm = new PDF17();
+ }
+
+ if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {
+ return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);
+ } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {
+ return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);
+ }
+
+ return null;
+ }
+
+ function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {
+ var hashDataSize = 40 + ownerPassword.length + fileId.length;
+ var hashData = new Uint8Array(hashDataSize),
+ i = 0,
+ j,
+ n;
+
+ if (password) {
+ n = Math.min(32, password.length);
+
+ for (; i < n; ++i) {
+ hashData[i] = password[i];
+ }
+ }
+
+ j = 0;
+
+ while (i < 32) {
+ hashData[i++] = defaultPasswordBytes[j++];
+ }
+
+ for (j = 0, n = ownerPassword.length; j < n; ++j) {
+ hashData[i++] = ownerPassword[j];
+ }
+
+ hashData[i++] = flags & 0xff;
+ hashData[i++] = flags >> 8 & 0xff;
+ hashData[i++] = flags >> 16 & 0xff;
+ hashData[i++] = flags >>> 24 & 0xff;
+
+ for (j = 0, n = fileId.length; j < n; ++j) {
+ hashData[i++] = fileId[j];
+ }
+
+ if (revision >= 4 && !encryptMetadata) {
+ hashData[i++] = 0xff;
+ hashData[i++] = 0xff;
+ hashData[i++] = 0xff;
+ hashData[i++] = 0xff;
+ }
+
+ var hash = calculateMD5(hashData, 0, i);
+ var keyLengthInBytes = keyLength >> 3;
+
+ if (revision >= 3) {
+ for (j = 0; j < 50; ++j) {
+ hash = calculateMD5(hash, 0, keyLengthInBytes);
+ }
+ }
+
+ var encryptionKey = hash.subarray(0, keyLengthInBytes);
+ var cipher, checkData;
+
+ if (revision >= 3) {
+ for (i = 0; i < 32; ++i) {
+ hashData[i] = defaultPasswordBytes[i];
+ }
+
+ for (j = 0, n = fileId.length; j < n; ++j) {
+ hashData[i++] = fileId[j];
+ }
+
+ cipher = new ARCFourCipher(encryptionKey);
+ checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
+ n = encryptionKey.length;
+ var derivedKey = new Uint8Array(n),
+ k;
+
+ for (j = 1; j <= 19; ++j) {
+ for (k = 0; k < n; ++k) {
+ derivedKey[k] = encryptionKey[k] ^ j;
+ }
+
+ cipher = new ARCFourCipher(derivedKey);
+ checkData = cipher.encryptBlock(checkData);
+ }
+
+ for (j = 0, n = checkData.length; j < n; ++j) {
+ if (userPassword[j] !== checkData[j]) {
+ return null;
+ }
+ }
+ } else {
+ cipher = new ARCFourCipher(encryptionKey);
+ checkData = cipher.encryptBlock(defaultPasswordBytes);
+
+ for (j = 0, n = checkData.length; j < n; ++j) {
+ if (userPassword[j] !== checkData[j]) {
+ return null;
+ }
+ }
+ }
+
+ return encryptionKey;
+ }
+
+ function decodeUserPassword(password, ownerPassword, revision, keyLength) {
+ var hashData = new Uint8Array(32),
+ i = 0,
+ j,
+ n;
+ n = Math.min(32, password.length);
+
+ for (; i < n; ++i) {
+ hashData[i] = password[i];
+ }
+
+ j = 0;
+
+ while (i < 32) {
+ hashData[i++] = defaultPasswordBytes[j++];
+ }
+
+ var hash = calculateMD5(hashData, 0, i);
+ var keyLengthInBytes = keyLength >> 3;
+
+ if (revision >= 3) {
+ for (j = 0; j < 50; ++j) {
+ hash = calculateMD5(hash, 0, hash.length);
+ }
+ }
+
+ var cipher, userPassword;
+
+ if (revision >= 3) {
+ userPassword = ownerPassword;
+ var derivedKey = new Uint8Array(keyLengthInBytes),
+ k;
+
+ for (j = 19; j >= 0; j--) {
+ for (k = 0; k < keyLengthInBytes; ++k) {
+ derivedKey[k] = hash[k] ^ j;
+ }
+
+ cipher = new ARCFourCipher(derivedKey);
+ userPassword = cipher.encryptBlock(userPassword);
+ }
+ } else {
+ cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
+ userPassword = cipher.encryptBlock(ownerPassword);
+ }
+
+ return userPassword;
+ }
+
+ var identityName = _primitives.Name.get("Identity");
+
+ function CipherTransformFactory(dict, fileId, password) {
+ var filter = dict.get("Filter");
+
+ if (!(0, _primitives.isName)(filter, "Standard")) {
+ throw new _util.FormatError("unknown encryption method");
+ }
+
+ this.dict = dict;
+ var algorithm = dict.get("V");
+
+ if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {
+ throw new _util.FormatError("unsupported encryption algorithm");
+ }
+
+ this.algorithm = algorithm;
+ var keyLength = dict.get("Length");
+
+ if (!keyLength) {
+ if (algorithm <= 3) {
+ keyLength = 40;
+ } else {
+ var cfDict = dict.get("CF");
+ var streamCryptoName = dict.get("StmF");
+
+ if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {
+ cfDict.suppressEncryption = true;
+ var handlerDict = cfDict.get(streamCryptoName.name);
+ keyLength = handlerDict && handlerDict.get("Length") || 128;
+
+ if (keyLength < 40) {
+ keyLength <<= 3;
+ }
+ }
+ }
+ }
+
+ if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {
+ throw new _util.FormatError("invalid key length");
+ }
+
+ var ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32);
+ var userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32);
+ var flags = dict.get("P");
+ var revision = dict.get("R");
+ var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false;
+ this.encryptMetadata = encryptMetadata;
+ var fileIdBytes = (0, _util.stringToBytes)(fileId);
+ var passwordBytes;
+
+ if (password) {
+ if (revision === 6) {
+ try {
+ password = (0, _util.utf8StringToString)(password);
+ } catch (ex) {
+ (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password.");
+ }
+ }
+
+ passwordBytes = (0, _util.stringToBytes)(password);
+ }
+
+ var encryptionKey;
+
+ if (algorithm !== 5) {
+ encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
+ } else {
+ var ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40);
+ var ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48);
+ var uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48);
+ var userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40);
+ var userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48);
+ var ownerEncryption = (0, _util.stringToBytes)(dict.get("OE"));
+ var userEncryption = (0, _util.stringToBytes)(dict.get("UE"));
+ var perms = (0, _util.stringToBytes)(dict.get("Perms"));
+ encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);
+ }
+
+ if (!encryptionKey && !password) {
+ throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD);
+ } else if (!encryptionKey && password) {
+ var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);
+ encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
+ }
+
+ if (!encryptionKey) {
+ throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD);
+ }
+
+ this.encryptionKey = encryptionKey;
+
+ if (algorithm >= 4) {
+ var cf = dict.get("CF");
+
+ if ((0, _primitives.isDict)(cf)) {
+ cf.suppressEncryption = true;
+ }
+
+ this.cf = cf;
+ this.stmf = dict.get("StmF") || identityName;
+ this.strf = dict.get("StrF") || identityName;
+ this.eff = dict.get("EFF") || this.stmf;
+ }
+ }
+
+ function buildObjectKey(num, gen, encryptionKey, isAes) {
+ var key = new Uint8Array(encryptionKey.length + 9),
+ i,
+ n;
+
+ for (i = 0, n = encryptionKey.length; i < n; ++i) {
+ key[i] = encryptionKey[i];
+ }
+
+ key[i++] = num & 0xff;
+ key[i++] = num >> 8 & 0xff;
+ key[i++] = num >> 16 & 0xff;
+ key[i++] = gen & 0xff;
+ key[i++] = gen >> 8 & 0xff;
+
+ if (isAes) {
+ key[i++] = 0x73;
+ key[i++] = 0x41;
+ key[i++] = 0x6c;
+ key[i++] = 0x54;
+ }
+
+ var hash = calculateMD5(key, 0, i);
+ return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
+ }
+
+ function buildCipherConstructor(cf, name, num, gen, key) {
+ if (!(0, _primitives.isName)(name)) {
+ throw new _util.FormatError("Invalid crypt filter name.");
+ }
+
+ var cryptFilter = cf.get(name.name);
+ var cfm;
+
+ if (cryptFilter !== null && cryptFilter !== undefined) {
+ cfm = cryptFilter.get("CFM");
+ }
+
+ if (!cfm || cfm.name === "None") {
+ return function cipherTransformFactoryBuildCipherConstructorNone() {
+ return new NullCipher();
+ };
+ }
+
+ if (cfm.name === "V2") {
+ return function cipherTransformFactoryBuildCipherConstructorV2() {
+ return new ARCFourCipher(buildObjectKey(num, gen, key, false));
+ };
+ }
+
+ if (cfm.name === "AESV2") {
+ return function cipherTransformFactoryBuildCipherConstructorAESV2() {
+ return new AES128Cipher(buildObjectKey(num, gen, key, true));
+ };
+ }
+
+ if (cfm.name === "AESV3") {
+ return function cipherTransformFactoryBuildCipherConstructorAESV3() {
+ return new AES256Cipher(key);
+ };
+ }
+
+ throw new _util.FormatError("Unknown crypto method");
+ }
+
+ CipherTransformFactory.prototype = {
+ createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) {
+ if (this.algorithm === 4 || this.algorithm === 5) {
+ return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey));
+ }
+
+ var key = buildObjectKey(num, gen, this.encryptionKey, false);
+
+ var cipherConstructor = function buildCipherCipherConstructor() {
+ return new ARCFourCipher(key);
+ };
+
+ return new CipherTransform(cipherConstructor, cipherConstructor);
+ }
+ };
+ return CipherTransformFactory;
+}();
+
+exports.CipherTransformFactory = CipherTransformFactory;
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ColorSpace = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
+ const COMPONENTS = 3;
+ alpha01 = alpha01 !== 1 ? 0 : alpha01;
+ const xRatio = w1 / w2;
+ const yRatio = h1 / h2;
+ let newIndex = 0,
+ oldIndex;
+ const xScaled = new Uint16Array(w2);
+ const w1Scanline = w1 * COMPONENTS;
+
+ for (let i = 0; i < w2; i++) {
+ xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;
+ }
+
+ for (let i = 0; i < h2; i++) {
+ const py = Math.floor(i * yRatio) * w1Scanline;
+
+ for (let j = 0; j < w2; j++) {
+ oldIndex = py + xScaled[j];
+ dest[newIndex++] = src[oldIndex++];
+ dest[newIndex++] = src[oldIndex++];
+ dest[newIndex++] = src[oldIndex++];
+ newIndex += alpha01;
+ }
+ }
+}
+
+class ColorSpace {
+ constructor(name, numComps) {
+ if (this.constructor === ColorSpace) {
+ (0, _util.unreachable)("Cannot initialize ColorSpace.");
+ }
+
+ this.name = name;
+ this.numComps = numComps;
+ }
+
+ getRgb(src, srcOffset) {
+ const rgb = new Uint8ClampedArray(3);
+ this.getRgbItem(src, srcOffset, rgb, 0);
+ return rgb;
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ (0, _util.unreachable)("Should not call ColorSpace.getRgbItem");
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer");
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ (0, _util.unreachable)("Should not call ColorSpace.getOutputLength");
+ }
+
+ isPassthrough(bits) {
+ return false;
+ }
+
+ isDefaultDecode(decodeMap, bpc) {
+ return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+ }
+
+ fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {
+ const count = originalWidth * originalHeight;
+ let rgbBuf = null;
+ const numComponentColors = 1 << bpc;
+ const needsResizing = originalHeight !== height || originalWidth !== width;
+
+ if (this.isPassthrough(bpc)) {
+ rgbBuf = comps;
+ } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") {
+ const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);
+
+ for (let i = 0; i < numComponentColors; i++) {
+ allColors[i] = i;
+ }
+
+ const colorMap = new Uint8ClampedArray(numComponentColors * 3);
+ this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);
+
+ if (!needsResizing) {
+ let destPos = 0;
+
+ for (let i = 0; i < count; ++i) {
+ const key = comps[i] * 3;
+ dest[destPos++] = colorMap[key];
+ dest[destPos++] = colorMap[key + 1];
+ dest[destPos++] = colorMap[key + 2];
+ destPos += alpha01;
+ }
+ } else {
+ rgbBuf = new Uint8Array(count * 3);
+ let rgbPos = 0;
+
+ for (let i = 0; i < count; ++i) {
+ const key = comps[i] * 3;
+ rgbBuf[rgbPos++] = colorMap[key];
+ rgbBuf[rgbPos++] = colorMap[key + 1];
+ rgbBuf[rgbPos++] = colorMap[key + 2];
+ }
+ }
+ } else {
+ if (!needsResizing) {
+ this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);
+ } else {
+ rgbBuf = new Uint8ClampedArray(count * 3);
+ this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);
+ }
+ }
+
+ if (rgbBuf) {
+ if (needsResizing) {
+ resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);
+ } else {
+ let destPos = 0,
+ rgbPos = 0;
+
+ for (let i = 0, ii = width * actualHeight; i < ii; i++) {
+ dest[destPos++] = rgbBuf[rgbPos++];
+ dest[destPos++] = rgbBuf[rgbPos++];
+ dest[destPos++] = rgbBuf[rgbPos++];
+ destPos += alpha01;
+ }
+ }
+ }
+ }
+
+ get usesZeroToOneRange() {
+ return (0, _util.shadow)(this, "usesZeroToOneRange", true);
+ }
+
+ static parse(cs, xref, res, pdfFunctionFactory) {
+ const IR = this.parseToIR(cs, xref, res, pdfFunctionFactory);
+ return this.fromIR(IR);
+ }
+
+ static fromIR(IR) {
+ const name = Array.isArray(IR) ? IR[0] : IR;
+ let whitePoint, blackPoint, gamma;
+
+ switch (name) {
+ case "DeviceGrayCS":
+ return this.singletons.gray;
+
+ case "DeviceRgbCS":
+ return this.singletons.rgb;
+
+ case "DeviceCmykCS":
+ return this.singletons.cmyk;
+
+ case "CalGrayCS":
+ whitePoint = IR[1];
+ blackPoint = IR[2];
+ gamma = IR[3];
+ return new CalGrayCS(whitePoint, blackPoint, gamma);
+
+ case "CalRGBCS":
+ whitePoint = IR[1];
+ blackPoint = IR[2];
+ gamma = IR[3];
+ const matrix = IR[4];
+ return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
+
+ case "PatternCS":
+ let basePatternCS = IR[1];
+
+ if (basePatternCS) {
+ basePatternCS = this.fromIR(basePatternCS);
+ }
+
+ return new PatternCS(basePatternCS);
+
+ case "IndexedCS":
+ const baseIndexedCS = IR[1];
+ const hiVal = IR[2];
+ const lookup = IR[3];
+ return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup);
+
+ case "AlternateCS":
+ const numComps = IR[1];
+ const alt = IR[2];
+ const tintFn = IR[3];
+ return new AlternateCS(numComps, this.fromIR(alt), tintFn);
+
+ case "LabCS":
+ whitePoint = IR[1];
+ blackPoint = IR[2];
+ const range = IR[3];
+ return new LabCS(whitePoint, blackPoint, range);
+
+ default:
+ throw new _util.FormatError(`Unknown colorspace name: ${name}`);
+ }
+ }
+
+ static parseToIR(cs, xref, res = null, pdfFunctionFactory) {
+ cs = xref.fetchIfRef(cs);
+
+ if ((0, _primitives.isName)(cs)) {
+ switch (cs.name) {
+ case "DeviceGray":
+ case "G":
+ return "DeviceGrayCS";
+
+ case "DeviceRGB":
+ case "RGB":
+ return "DeviceRgbCS";
+
+ case "DeviceCMYK":
+ case "CMYK":
+ return "DeviceCmykCS";
+
+ case "Pattern":
+ return ["PatternCS", null];
+
+ default:
+ if ((0, _primitives.isDict)(res)) {
+ const colorSpaces = res.get("ColorSpace");
+
+ if ((0, _primitives.isDict)(colorSpaces)) {
+ const resCS = colorSpaces.get(cs.name);
+
+ if (resCS) {
+ if ((0, _primitives.isName)(resCS)) {
+ return this.parseToIR(resCS, xref, res, pdfFunctionFactory);
+ }
+
+ cs = resCS;
+ break;
+ }
+ }
+ }
+
+ throw new _util.FormatError(`unrecognized colorspace ${cs.name}`);
+ }
+ }
+
+ if (Array.isArray(cs)) {
+ const mode = xref.fetchIfRef(cs[0]).name;
+ let numComps, params, alt, whitePoint, blackPoint, gamma;
+
+ switch (mode) {
+ case "DeviceGray":
+ case "G":
+ return "DeviceGrayCS";
+
+ case "DeviceRGB":
+ case "RGB":
+ return "DeviceRgbCS";
+
+ case "DeviceCMYK":
+ case "CMYK":
+ return "DeviceCmykCS";
+
+ case "CalGray":
+ params = xref.fetchIfRef(cs[1]);
+ whitePoint = params.getArray("WhitePoint");
+ blackPoint = params.getArray("BlackPoint");
+ gamma = params.get("Gamma");
+ return ["CalGrayCS", whitePoint, blackPoint, gamma];
+
+ case "CalRGB":
+ params = xref.fetchIfRef(cs[1]);
+ whitePoint = params.getArray("WhitePoint");
+ blackPoint = params.getArray("BlackPoint");
+ gamma = params.getArray("Gamma");
+ const matrix = params.getArray("Matrix");
+ return ["CalRGBCS", whitePoint, blackPoint, gamma, matrix];
+
+ case "ICCBased":
+ const stream = xref.fetchIfRef(cs[1]);
+ const dict = stream.dict;
+ numComps = dict.get("N");
+ alt = dict.get("Alternate");
+
+ if (alt) {
+ const altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory);
+ const altCS = this.fromIR(altIR, pdfFunctionFactory);
+
+ if (altCS.numComps === numComps) {
+ return altIR;
+ }
+
+ (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.");
+ }
+
+ if (numComps === 1) {
+ return "DeviceGrayCS";
+ } else if (numComps === 3) {
+ return "DeviceRgbCS";
+ } else if (numComps === 4) {
+ return "DeviceCmykCS";
+ }
+
+ break;
+
+ case "Pattern":
+ let basePatternCS = cs[1] || null;
+
+ if (basePatternCS) {
+ basePatternCS = this.parseToIR(basePatternCS, xref, res, pdfFunctionFactory);
+ }
+
+ return ["PatternCS", basePatternCS];
+
+ case "Indexed":
+ case "I":
+ const baseIndexedCS = this.parseToIR(cs[1], xref, res, pdfFunctionFactory);
+ const hiVal = xref.fetchIfRef(cs[2]) + 1;
+ let lookup = xref.fetchIfRef(cs[3]);
+
+ if ((0, _primitives.isStream)(lookup)) {
+ lookup = lookup.getBytes();
+ }
+
+ return ["IndexedCS", baseIndexedCS, hiVal, lookup];
+
+ case "Separation":
+ case "DeviceN":
+ const name = xref.fetchIfRef(cs[1]);
+ numComps = Array.isArray(name) ? name.length : 1;
+ alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory);
+ const tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));
+ return ["AlternateCS", numComps, alt, tintFn];
+
+ case "Lab":
+ params = xref.fetchIfRef(cs[1]);
+ whitePoint = params.getArray("WhitePoint");
+ blackPoint = params.getArray("BlackPoint");
+ const range = params.getArray("Range");
+ return ["LabCS", whitePoint, blackPoint, range];
+
+ default:
+ throw new _util.FormatError(`unimplemented color space object "${mode}"`);
+ }
+ }
+
+ throw new _util.FormatError(`unrecognized color space object: "${cs}"`);
+ }
+
+ static isDefaultDecode(decode, numComps) {
+ if (!Array.isArray(decode)) {
+ return true;
+ }
+
+ if (numComps * 2 !== decode.length) {
+ (0, _util.warn)("The decode map is not the correct length");
+ return true;
+ }
+
+ for (let i = 0, ii = decode.length; i < ii; i += 2) {
+ if (decode[i] !== 0 || decode[i + 1] !== 1) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ static get singletons() {
+ return (0, _util.shadow)(this, "singletons", {
+ get gray() {
+ return (0, _util.shadow)(this, "gray", new DeviceGrayCS());
+ },
+
+ get rgb() {
+ return (0, _util.shadow)(this, "rgb", new DeviceRgbCS());
+ },
+
+ get cmyk() {
+ return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS());
+ }
+
+ });
+ }
+
+}
+
+exports.ColorSpace = ColorSpace;
+
+class AlternateCS extends ColorSpace {
+ constructor(numComps, base, tintFn) {
+ super("Alternate", numComps);
+ this.base = base;
+ this.tintFn = tintFn;
+ this.tmpBuf = new Float32Array(base.numComps);
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ const tmpBuf = this.tmpBuf;
+ this.tintFn(src, srcOffset, tmpBuf, 0);
+ this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ const tintFn = this.tintFn;
+ const base = this.base;
+ const scale = 1 / ((1 << bits) - 1);
+ const baseNumComps = base.numComps;
+ const usesZeroToOneRange = base.usesZeroToOneRange;
+ const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;
+ let pos = isPassthrough ? destOffset : 0;
+ const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);
+ const numComps = this.numComps;
+ const scaled = new Float32Array(numComps);
+ const tinted = new Float32Array(baseNumComps);
+ let i, j;
+
+ for (i = 0; i < count; i++) {
+ for (j = 0; j < numComps; j++) {
+ scaled[j] = src[srcOffset++] * scale;
+ }
+
+ tintFn(scaled, 0, tinted, 0);
+
+ if (usesZeroToOneRange) {
+ for (j = 0; j < baseNumComps; j++) {
+ baseBuf[pos++] = tinted[j] * 255;
+ }
+ } else {
+ base.getRgbItem(tinted, 0, baseBuf, pos);
+ pos += baseNumComps;
+ }
+ }
+
+ if (!isPassthrough) {
+ base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);
+ }
+
+}
+
+class PatternCS extends ColorSpace {
+ constructor(baseCS) {
+ super("Pattern", null);
+ this.base = baseCS;
+ }
+
+ isDefaultDecode(decodeMap, bpc) {
+ (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode");
+ }
+
+}
+
+class IndexedCS extends ColorSpace {
+ constructor(base, highVal, lookup) {
+ super("Indexed", 1);
+ this.base = base;
+ this.highVal = highVal;
+ const baseNumComps = base.numComps;
+ const length = baseNumComps * highVal;
+
+ if ((0, _primitives.isStream)(lookup)) {
+ this.lookup = new Uint8Array(length);
+ const bytes = lookup.getBytes(length);
+ this.lookup.set(bytes);
+ } else if ((0, _util.isString)(lookup)) {
+ this.lookup = new Uint8Array(length);
+
+ for (let i = 0; i < length; ++i) {
+ this.lookup[i] = lookup.charCodeAt(i);
+ }
+ } else if (lookup instanceof Uint8Array) {
+ this.lookup = lookup;
+ } else {
+ throw new _util.FormatError(`Unrecognized lookup table: ${lookup}`);
+ }
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ const numComps = this.base.numComps;
+ const start = src[srcOffset] * numComps;
+ this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ const base = this.base;
+ const numComps = base.numComps;
+ const outputDelta = base.getOutputLength(numComps, alpha01);
+ const lookup = this.lookup;
+
+ for (let i = 0; i < count; ++i) {
+ const lookupPos = src[srcOffset++] * numComps;
+ base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
+ destOffset += outputDelta;
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
+ }
+
+ isDefaultDecode(decodeMap, bpc) {
+ if (!Array.isArray(decodeMap)) {
+ return true;
+ }
+
+ if (decodeMap.length !== 2) {
+ (0, _util.warn)("Decode map length is not correct");
+ return true;
+ }
+
+ if (!Number.isInteger(bpc) || bpc < 1) {
+ (0, _util.warn)("Bits per component is not correct");
+ return true;
+ }
+
+ return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1;
+ }
+
+}
+
+class DeviceGrayCS extends ColorSpace {
+ constructor() {
+ super("DeviceGray", 1);
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ const c = src[srcOffset] * 255;
+ dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ const scale = 255 / ((1 << bits) - 1);
+ let j = srcOffset,
+ q = destOffset;
+
+ for (let i = 0; i < count; ++i) {
+ const c = scale * src[j++];
+ dest[q++] = c;
+ dest[q++] = c;
+ dest[q++] = c;
+ q += alpha01;
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return inputLength * (3 + alpha01);
+ }
+
+}
+
+class DeviceRgbCS extends ColorSpace {
+ constructor() {
+ super("DeviceRGB", 3);
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ dest[destOffset] = src[srcOffset] * 255;
+ dest[destOffset + 1] = src[srcOffset + 1] * 255;
+ dest[destOffset + 2] = src[srcOffset + 2] * 255;
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ if (bits === 8 && alpha01 === 0) {
+ dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
+ return;
+ }
+
+ const scale = 255 / ((1 << bits) - 1);
+ let j = srcOffset,
+ q = destOffset;
+
+ for (let i = 0; i < count; ++i) {
+ dest[q++] = scale * src[j++];
+ dest[q++] = scale * src[j++];
+ dest[q++] = scale * src[j++];
+ q += alpha01;
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return inputLength * (3 + alpha01) / 3 | 0;
+ }
+
+ isPassthrough(bits) {
+ return bits === 8;
+ }
+
+}
+
+const DeviceCmykCS = function DeviceCmykCSClosure() {
+ function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
+ const c = src[srcOffset] * srcScale;
+ const m = src[srcOffset + 1] * srcScale;
+ const y = src[srcOffset + 2] * srcScale;
+ const k = src[srcOffset + 3] * srcScale;
+ dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747);
+ dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578);
+ dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367);
+ }
+
+ class DeviceCmykCS extends ColorSpace {
+ constructor() {
+ super("DeviceCMYK", 4);
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ convertToRgb(src, srcOffset, 1, dest, destOffset);
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ const scale = 1 / ((1 << bits) - 1);
+
+ for (let i = 0; i < count; i++) {
+ convertToRgb(src, srcOffset, scale, dest, destOffset);
+ srcOffset += 4;
+ destOffset += 3 + alpha01;
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return inputLength / 4 * (3 + alpha01) | 0;
+ }
+
+ }
+
+ return DeviceCmykCS;
+}();
+
+const CalGrayCS = function CalGrayCSClosure() {
+ function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
+ const A = src[srcOffset] * scale;
+ const AG = A ** cs.G;
+ const L = cs.YW * AG;
+ const val = Math.max(295.8 * L ** 0.333333333333333333 - 40.8, 0);
+ dest[destOffset] = val;
+ dest[destOffset + 1] = val;
+ dest[destOffset + 2] = val;
+ }
+
+ class CalGrayCS extends ColorSpace {
+ constructor(whitePoint, blackPoint, gamma) {
+ super("CalGray", 1);
+
+ if (!whitePoint) {
+ throw new _util.FormatError("WhitePoint missing - required for color space CalGray");
+ }
+
+ blackPoint = blackPoint || [0, 0, 0];
+ gamma = gamma || 1;
+ this.XW = whitePoint[0];
+ this.YW = whitePoint[1];
+ this.ZW = whitePoint[2];
+ this.XB = blackPoint[0];
+ this.YB = blackPoint[1];
+ this.ZB = blackPoint[2];
+ this.G = gamma;
+
+ if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+ throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available");
+ }
+
+ if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+ (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`);
+ this.XB = this.YB = this.ZB = 0;
+ }
+
+ if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {
+ (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`);
+ }
+
+ if (this.G < 1) {
+ (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + "falling back to default.");
+ this.G = 1;
+ }
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ convertToRgb(this, src, srcOffset, dest, destOffset, 1);
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ const scale = 1 / ((1 << bits) - 1);
+
+ for (let i = 0; i < count; ++i) {
+ convertToRgb(this, src, srcOffset, dest, destOffset, scale);
+ srcOffset += 1;
+ destOffset += 3 + alpha01;
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return inputLength * (3 + alpha01);
+ }
+
+ }
+
+ return CalGrayCS;
+}();
+
+const CalRGBCS = function CalRGBCSClosure() {
+ const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);
+ const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);
+ const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);
+ const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
+ const tempNormalizeMatrix = new Float32Array(3);
+ const tempConvertMatrix1 = new Float32Array(3);
+ const tempConvertMatrix2 = new Float32Array(3);
+ const DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0;
+
+ function matrixProduct(a, b, result) {
+ result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+ result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];
+ result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];
+ }
+
+ function convertToFlat(sourceWhitePoint, LMS, result) {
+ result[0] = LMS[0] * 1 / sourceWhitePoint[0];
+ result[1] = LMS[1] * 1 / sourceWhitePoint[1];
+ result[2] = LMS[2] * 1 / sourceWhitePoint[2];
+ }
+
+ function convertToD65(sourceWhitePoint, LMS, result) {
+ const D65X = 0.95047;
+ const D65Y = 1;
+ const D65Z = 1.08883;
+ result[0] = LMS[0] * D65X / sourceWhitePoint[0];
+ result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
+ result[2] = LMS[2] * D65Z / sourceWhitePoint[2];
+ }
+
+ function sRGBTransferFunction(color) {
+ if (color <= 0.0031308) {
+ return adjustToRange(0, 1, 12.92 * color);
+ }
+
+ return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055);
+ }
+
+ function adjustToRange(min, max, value) {
+ return Math.max(min, Math.min(max, value));
+ }
+
+ function decodeL(L) {
+ if (L < 0) {
+ return -decodeL(-L);
+ }
+
+ if (L > 8.0) {
+ return ((L + 16) / 116) ** 3;
+ }
+
+ return L * DECODE_L_CONSTANT;
+ }
+
+ function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {
+ if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) {
+ result[0] = XYZ_Flat[0];
+ result[1] = XYZ_Flat[1];
+ result[2] = XYZ_Flat[2];
+ return;
+ }
+
+ const zeroDecodeL = decodeL(0);
+ const X_DST = zeroDecodeL;
+ const X_SRC = decodeL(sourceBlackPoint[0]);
+ const Y_DST = zeroDecodeL;
+ const Y_SRC = decodeL(sourceBlackPoint[1]);
+ const Z_DST = zeroDecodeL;
+ const Z_SRC = decodeL(sourceBlackPoint[2]);
+ const X_Scale = (1 - X_DST) / (1 - X_SRC);
+ const X_Offset = 1 - X_Scale;
+ const Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
+ const Y_Offset = 1 - Y_Scale;
+ const Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
+ const Z_Offset = 1 - Z_Scale;
+ result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
+ result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
+ result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;
+ }
+
+ function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {
+ if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {
+ result[0] = XYZ_In[0];
+ result[1] = XYZ_In[1];
+ result[2] = XYZ_In[2];
+ return;
+ }
+
+ const LMS = result;
+ matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
+ const LMS_Flat = tempNormalizeMatrix;
+ convertToFlat(sourceWhitePoint, LMS, LMS_Flat);
+ matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
+ }
+
+ function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
+ const LMS = result;
+ matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
+ const LMS_D65 = tempNormalizeMatrix;
+ convertToD65(sourceWhitePoint, LMS, LMS_D65);
+ matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
+ }
+
+ function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
+ const A = adjustToRange(0, 1, src[srcOffset] * scale);
+ const B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
+ const C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
+ const AGR = A ** cs.GR;
+ const BGG = B ** cs.GG;
+ const CGB = C ** cs.GB;
+ const X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
+ const Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
+ const Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
+ const XYZ = tempConvertMatrix1;
+ XYZ[0] = X;
+ XYZ[1] = Y;
+ XYZ[2] = Z;
+ const XYZ_Flat = tempConvertMatrix2;
+ normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
+ const XYZ_Black = tempConvertMatrix1;
+ compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);
+ const XYZ_D65 = tempConvertMatrix2;
+ normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
+ const SRGB = tempConvertMatrix1;
+ matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
+ dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255;
+ dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255;
+ dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255;
+ }
+
+ class CalRGBCS extends ColorSpace {
+ constructor(whitePoint, blackPoint, gamma, matrix) {
+ super("CalRGB", 3);
+
+ if (!whitePoint) {
+ throw new _util.FormatError("WhitePoint missing - required for color space CalRGB");
+ }
+
+ blackPoint = blackPoint || new Float32Array(3);
+ gamma = gamma || new Float32Array([1, 1, 1]);
+ matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
+ const XW = whitePoint[0];
+ const YW = whitePoint[1];
+ const ZW = whitePoint[2];
+ this.whitePoint = whitePoint;
+ const XB = blackPoint[0];
+ const YB = blackPoint[1];
+ const ZB = blackPoint[2];
+ this.blackPoint = blackPoint;
+ this.GR = gamma[0];
+ this.GG = gamma[1];
+ this.GB = gamma[2];
+ this.MXA = matrix[0];
+ this.MYA = matrix[1];
+ this.MZA = matrix[2];
+ this.MXB = matrix[3];
+ this.MYB = matrix[4];
+ this.MZB = matrix[5];
+ this.MXC = matrix[6];
+ this.MYC = matrix[7];
+ this.MZC = matrix[8];
+
+ if (XW < 0 || ZW < 0 || YW !== 1) {
+ throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available");
+ }
+
+ if (XB < 0 || YB < 0 || ZB < 0) {
+ (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default.");
+ this.blackPoint = new Float32Array(3);
+ }
+
+ if (this.GR < 0 || this.GG < 0 || this.GB < 0) {
+ (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`);
+ this.GR = this.GG = this.GB = 1;
+ }
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ convertToRgb(this, src, srcOffset, dest, destOffset, 1);
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ const scale = 1 / ((1 << bits) - 1);
+
+ for (let i = 0; i < count; ++i) {
+ convertToRgb(this, src, srcOffset, dest, destOffset, scale);
+ srcOffset += 3;
+ destOffset += 3 + alpha01;
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return inputLength * (3 + alpha01) / 3 | 0;
+ }
+
+ }
+
+ return CalRGBCS;
+}();
+
+const LabCS = function LabCSClosure() {
+ function fn_g(x) {
+ let result;
+
+ if (x >= 6 / 29) {
+ result = x * x * x;
+ } else {
+ result = 108 / 841 * (x - 4 / 29);
+ }
+
+ return result;
+ }
+
+ function decode(value, high1, low2, high2) {
+ return low2 + value * (high2 - low2) / high1;
+ }
+
+ function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {
+ let Ls = src[srcOffset];
+ let as = src[srcOffset + 1];
+ let bs = src[srcOffset + 2];
+
+ if (maxVal !== false) {
+ Ls = decode(Ls, maxVal, 0, 100);
+ as = decode(as, maxVal, cs.amin, cs.amax);
+ bs = decode(bs, maxVal, cs.bmin, cs.bmax);
+ }
+
+ if (as > cs.amax) {
+ as = cs.amax;
+ } else if (as < cs.amin) {
+ as = cs.amin;
+ }
+
+ if (bs > cs.bmax) {
+ bs = cs.bmax;
+ } else if (bs < cs.bmin) {
+ bs = cs.bmin;
+ }
+
+ const M = (Ls + 16) / 116;
+ const L = M + as / 500;
+ const N = M - bs / 200;
+ const X = cs.XW * fn_g(L);
+ const Y = cs.YW * fn_g(M);
+ const Z = cs.ZW * fn_g(N);
+ let r, g, b;
+
+ if (cs.ZW < 1) {
+ r = X * 3.1339 + Y * -1.617 + Z * -0.4906;
+ g = X * -0.9785 + Y * 1.916 + Z * 0.0333;
+ b = X * 0.072 + Y * -0.229 + Z * 1.4057;
+ } else {
+ r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
+ g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
+ b = X * 0.0557 + Y * -0.204 + Z * 1.057;
+ }
+
+ dest[destOffset] = Math.sqrt(r) * 255;
+ dest[destOffset + 1] = Math.sqrt(g) * 255;
+ dest[destOffset + 2] = Math.sqrt(b) * 255;
+ }
+
+ class LabCS extends ColorSpace {
+ constructor(whitePoint, blackPoint, range) {
+ super("Lab", 3);
+
+ if (!whitePoint) {
+ throw new _util.FormatError("WhitePoint missing - required for color space Lab");
+ }
+
+ blackPoint = blackPoint || [0, 0, 0];
+ range = range || [-100, 100, -100, 100];
+ this.XW = whitePoint[0];
+ this.YW = whitePoint[1];
+ this.ZW = whitePoint[2];
+ this.amin = range[0];
+ this.amax = range[1];
+ this.bmin = range[2];
+ this.bmax = range[3];
+ this.XB = blackPoint[0];
+ this.YB = blackPoint[1];
+ this.ZB = blackPoint[2];
+
+ if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+ throw new _util.FormatError("Invalid WhitePoint components, no fallback available");
+ }
+
+ if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+ (0, _util.info)("Invalid BlackPoint, falling back to default");
+ this.XB = this.YB = this.ZB = 0;
+ }
+
+ if (this.amin > this.amax || this.bmin > this.bmax) {
+ (0, _util.info)("Invalid Range, falling back to defaults");
+ this.amin = -100;
+ this.amax = 100;
+ this.bmin = -100;
+ this.bmax = 100;
+ }
+ }
+
+ getRgbItem(src, srcOffset, dest, destOffset) {
+ convertToRgb(this, src, srcOffset, false, dest, destOffset);
+ }
+
+ getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+ const maxVal = (1 << bits) - 1;
+
+ for (let i = 0; i < count; i++) {
+ convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
+ srcOffset += 3;
+ destOffset += 3 + alpha01;
+ }
+ }
+
+ getOutputLength(inputLength, alpha01) {
+ return inputLength * (3 + alpha01) / 3 | 0;
+ }
+
+ isDefaultDecode(decodeMap, bpc) {
+ return true;
+ }
+
+ get usesZeroToOneRange() {
+ return (0, _util.shadow)(this, "usesZeroToOneRange", false);
+ }
+
+ }
+
+ return LabCS;
+}();
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.GlobalImageCache = exports.LocalImageCache = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+class LocalImageCache {
+ constructor() {
+ this._nameRefMap = new Map();
+ this._imageMap = new Map();
+ this._imageCache = new _primitives.RefSetCache();
+ }
+
+ getByName(name) {
+ const ref = this._nameRefMap.get(name);
+
+ if (ref) {
+ return this.getByRef(ref);
+ }
+
+ return this._imageMap.get(name) || null;
+ }
+
+ getByRef(ref) {
+ return this._imageCache.get(ref) || null;
+ }
+
+ set(name, ref = null, data) {
+ if (!name) {
+ throw new Error('LocalImageCache.set - expected "name" argument.');
+ }
+
+ if (ref) {
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ this._nameRefMap.set(name, ref);
+
+ this._imageCache.put(ref, data);
+
+ return;
+ }
+
+ if (this._imageMap.has(name)) {
+ return;
+ }
+
+ this._imageMap.set(name, data);
+ }
+
+}
+
+exports.LocalImageCache = LocalImageCache;
+
+class GlobalImageCache {
+ static get NUM_PAGES_THRESHOLD() {
+ return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2);
+ }
+
+ static get MAX_IMAGES_TO_CACHE() {
+ return (0, _util.shadow)(this, "MAX_IMAGES_TO_CACHE", 10);
+ }
+
+ constructor() {
+ this._refCache = new _primitives.RefSetCache();
+ this._imageCache = new _primitives.RefSetCache();
+ }
+
+ shouldCache(ref, pageIndex) {
+ const pageIndexSet = this._refCache.get(ref);
+
+ const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1;
+
+ if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) {
+ return false;
+ }
+
+ if (!this._imageCache.has(ref) && this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
+ return false;
+ }
+
+ return true;
+ }
+
+ addPageIndex(ref, pageIndex) {
+ let pageIndexSet = this._refCache.get(ref);
+
+ if (!pageIndexSet) {
+ pageIndexSet = new Set();
+
+ this._refCache.put(ref, pageIndexSet);
+ }
+
+ pageIndexSet.add(pageIndex);
+ }
+
+ getData(ref, pageIndex) {
+ if (!this._refCache.has(ref)) {
+ return null;
+ }
+
+ const pageIndexSet = this._refCache.get(ref);
+
+ if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
+ return null;
+ }
+
+ if (!this._imageCache.has(ref)) {
+ return null;
+ }
+
+ pageIndexSet.add(pageIndex);
+ return this._imageCache.get(ref);
+ }
+
+ setData(ref, data) {
+ if (!this._refCache.has(ref)) {
+ throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.');
+ }
+
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ if (this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
+ (0, _util.info)("GlobalImageCache.setData - ignoring image above MAX_IMAGES_TO_CACHE.");
+ return;
+ }
+
+ this._imageCache.put(ref, data);
+ }
+
+ clear(onlyData = false) {
+ if (!onlyData) {
+ this._refCache.clear();
+ }
+
+ this._imageCache.clear();
+ }
+
+}
+
+exports.GlobalImageCache = GlobalImageCache;
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getQuadPoints = getQuadPoints;
+exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _obj = __w_pdfjs_require__(10);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _operator_list = __w_pdfjs_require__(26);
+
+var _stream = __w_pdfjs_require__(12);
+
+class AnnotationFactory {
+ static create(xref, ref, pdfManager, idFactory) {
+ return pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory]);
+ }
+
+ static _create(xref, ref, pdfManager, idFactory) {
+ const dict = xref.fetchIfRef(ref);
+
+ if (!(0, _primitives.isDict)(dict)) {
+ return undefined;
+ }
+
+ const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`;
+ let subtype = dict.get("Subtype");
+ subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;
+ const parameters = {
+ xref,
+ dict,
+ subtype,
+ id,
+ pdfManager
+ };
+
+ switch (subtype) {
+ case "Link":
+ return new LinkAnnotation(parameters);
+
+ case "Text":
+ return new TextAnnotation(parameters);
+
+ case "Widget":
+ let fieldType = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "FT"
+ });
+ fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
+
+ switch (fieldType) {
+ case "Tx":
+ return new TextWidgetAnnotation(parameters);
+
+ case "Btn":
+ return new ButtonWidgetAnnotation(parameters);
+
+ case "Ch":
+ return new ChoiceWidgetAnnotation(parameters);
+ }
+
+ (0, _util.warn)('Unimplemented widget field type "' + fieldType + '", ' + "falling back to base field type.");
+ return new WidgetAnnotation(parameters);
+
+ case "Popup":
+ return new PopupAnnotation(parameters);
+
+ case "FreeText":
+ return new FreeTextAnnotation(parameters);
+
+ case "Line":
+ return new LineAnnotation(parameters);
+
+ case "Square":
+ return new SquareAnnotation(parameters);
+
+ case "Circle":
+ return new CircleAnnotation(parameters);
+
+ case "PolyLine":
+ return new PolylineAnnotation(parameters);
+
+ case "Polygon":
+ return new PolygonAnnotation(parameters);
+
+ case "Caret":
+ return new CaretAnnotation(parameters);
+
+ case "Ink":
+ return new InkAnnotation(parameters);
+
+ case "Highlight":
+ return new HighlightAnnotation(parameters);
+
+ case "Underline":
+ return new UnderlineAnnotation(parameters);
+
+ case "Squiggly":
+ return new SquigglyAnnotation(parameters);
+
+ case "StrikeOut":
+ return new StrikeOutAnnotation(parameters);
+
+ case "Stamp":
+ return new StampAnnotation(parameters);
+
+ case "FileAttachment":
+ return new FileAttachmentAnnotation(parameters);
+
+ default:
+ if (!subtype) {
+ (0, _util.warn)("Annotation is missing the required /Subtype.");
+ } else {
+ (0, _util.warn)('Unimplemented annotation type "' + subtype + '", ' + "falling back to base annotation.");
+ }
+
+ return new Annotation(parameters);
+ }
+ }
+
+}
+
+exports.AnnotationFactory = AnnotationFactory;
+
+function getQuadPoints(dict, rect) {
+ if (!dict.has("QuadPoints")) {
+ return null;
+ }
+
+ const quadPoints = dict.getArray("QuadPoints");
+
+ if (!Array.isArray(quadPoints) || quadPoints.length % 8 > 0) {
+ return null;
+ }
+
+ const quadPointsLists = [];
+
+ for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {
+ quadPointsLists.push([]);
+
+ for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {
+ const x = quadPoints[j];
+ const y = quadPoints[j + 1];
+
+ if (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3]) {
+ return null;
+ }
+
+ quadPointsLists[i].push({
+ x,
+ y
+ });
+ }
+ }
+
+ return quadPointsLists;
+}
+
+function getTransformMatrix(rect, bbox, matrix) {
+ const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);
+
+ if (minX === maxX || minY === maxY) {
+ return [1, 0, 0, 1, rect[0], rect[1]];
+ }
+
+ const xRatio = (rect[2] - rect[0]) / (maxX - minX);
+ const yRatio = (rect[3] - rect[1]) / (maxY - minY);
+ return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];
+}
+
+class Annotation {
+ constructor(params) {
+ const dict = params.dict;
+ this.setContents(dict.get("Contents"));
+ this.setModificationDate(dict.get("M"));
+ this.setFlags(dict.get("F"));
+ this.setRectangle(dict.getArray("Rect"));
+ this.setColor(dict.getArray("C"));
+ this.setBorderStyle(dict);
+ this.setAppearance(dict);
+ this.data = {
+ annotationFlags: this.flags,
+ borderStyle: this.borderStyle,
+ color: this.color,
+ contents: this.contents,
+ hasAppearance: !!this.appearance,
+ id: params.id,
+ modificationDate: this.modificationDate,
+ rect: this.rectangle,
+ subtype: params.subtype
+ };
+ }
+
+ _hasFlag(flags, flag) {
+ return !!(flags & flag);
+ }
+
+ _isViewable(flags) {
+ return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);
+ }
+
+ _isPrintable(flags) {
+ return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN);
+ }
+
+ get viewable() {
+ if (this.flags === 0) {
+ return true;
+ }
+
+ return this._isViewable(this.flags);
+ }
+
+ get printable() {
+ if (this.flags === 0) {
+ return false;
+ }
+
+ return this._isPrintable(this.flags);
+ }
+
+ setContents(contents) {
+ this.contents = (0, _util.stringToPDFString)(contents || "");
+ }
+
+ setModificationDate(modificationDate) {
+ this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;
+ }
+
+ setFlags(flags) {
+ this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
+ }
+
+ hasFlag(flag) {
+ return this._hasFlag(this.flags, flag);
+ }
+
+ setRectangle(rectangle) {
+ if (Array.isArray(rectangle) && rectangle.length === 4) {
+ this.rectangle = _util.Util.normalizeRect(rectangle);
+ } else {
+ this.rectangle = [0, 0, 0, 0];
+ }
+ }
+
+ setColor(color) {
+ const rgbColor = new Uint8ClampedArray(3);
+
+ if (!Array.isArray(color)) {
+ this.color = rgbColor;
+ return;
+ }
+
+ switch (color.length) {
+ case 0:
+ this.color = null;
+ break;
+
+ case 1:
+ _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
+
+ this.color = rgbColor;
+ break;
+
+ case 3:
+ _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
+
+ this.color = rgbColor;
+ break;
+
+ case 4:
+ _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
+
+ this.color = rgbColor;
+ break;
+
+ default:
+ this.color = rgbColor;
+ break;
+ }
+ }
+
+ setBorderStyle(borderStyle) {
+ this.borderStyle = new AnnotationBorderStyle();
+
+ if (!(0, _primitives.isDict)(borderStyle)) {
+ return;
+ }
+
+ if (borderStyle.has("BS")) {
+ const dict = borderStyle.get("BS");
+ const dictType = dict.get("Type");
+
+ if (!dictType || (0, _primitives.isName)(dictType, "Border")) {
+ this.borderStyle.setWidth(dict.get("W"), this.rectangle);
+ this.borderStyle.setStyle(dict.get("S"));
+ this.borderStyle.setDashArray(dict.getArray("D"));
+ }
+ } else if (borderStyle.has("Border")) {
+ const array = borderStyle.getArray("Border");
+
+ if (Array.isArray(array) && array.length >= 3) {
+ this.borderStyle.setHorizontalCornerRadius(array[0]);
+ this.borderStyle.setVerticalCornerRadius(array[1]);
+ this.borderStyle.setWidth(array[2], this.rectangle);
+
+ if (array.length === 4) {
+ this.borderStyle.setDashArray(array[3]);
+ }
+ }
+ } else {
+ this.borderStyle.setWidth(0);
+ }
+ }
+
+ setAppearance(dict) {
+ this.appearance = null;
+ const appearanceStates = dict.get("AP");
+
+ if (!(0, _primitives.isDict)(appearanceStates)) {
+ return;
+ }
+
+ const normalAppearanceState = appearanceStates.get("N");
+
+ if ((0, _primitives.isStream)(normalAppearanceState)) {
+ this.appearance = normalAppearanceState;
+ return;
+ }
+
+ if (!(0, _primitives.isDict)(normalAppearanceState)) {
+ return;
+ }
+
+ const as = dict.get("AS");
+
+ if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {
+ return;
+ }
+
+ this.appearance = normalAppearanceState.get(as.name);
+ }
+
+ loadResources(keys) {
+ return this.appearance.dict.getAsync("Resources").then(resources => {
+ if (!resources) {
+ return undefined;
+ }
+
+ const objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);
+ return objectLoader.load().then(function () {
+ return resources;
+ });
+ });
+ }
+
+ getOperatorList(evaluator, task, renderForms) {
+ if (!this.appearance) {
+ return Promise.resolve(new _operator_list.OperatorList());
+ }
+
+ const data = this.data;
+ const appearanceDict = this.appearance.dict;
+ const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]);
+ const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
+ const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
+ const transform = getTransformMatrix(data.rect, bbox, matrix);
+ return resourcesPromise.then(resources => {
+ const opList = new _operator_list.OperatorList();
+ opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);
+ return evaluator.getOperatorList({
+ stream: this.appearance,
+ task,
+ resources,
+ operatorList: opList
+ }).then(() => {
+ opList.addOp(_util.OPS.endAnnotation, []);
+ this.appearance.reset();
+ return opList;
+ });
+ });
+ }
+
+}
+
+exports.Annotation = Annotation;
+
+class AnnotationBorderStyle {
+ constructor() {
+ this.width = 1;
+ this.style = _util.AnnotationBorderStyleType.SOLID;
+ this.dashArray = [3];
+ this.horizontalCornerRadius = 0;
+ this.verticalCornerRadius = 0;
+ }
+
+ setWidth(width, rect = [0, 0, 0, 0]) {
+ if ((0, _primitives.isName)(width)) {
+ this.width = 0;
+ return;
+ }
+
+ if (Number.isInteger(width)) {
+ if (width > 0) {
+ const maxWidth = (rect[2] - rect[0]) / 2;
+ const maxHeight = (rect[3] - rect[1]) / 2;
+
+ if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {
+ (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);
+ width = 1;
+ }
+ }
+
+ this.width = width;
+ }
+ }
+
+ setStyle(style) {
+ if (!(0, _primitives.isName)(style)) {
+ return;
+ }
+
+ switch (style.name) {
+ case "S":
+ this.style = _util.AnnotationBorderStyleType.SOLID;
+ break;
+
+ case "D":
+ this.style = _util.AnnotationBorderStyleType.DASHED;
+ break;
+
+ case "B":
+ this.style = _util.AnnotationBorderStyleType.BEVELED;
+ break;
+
+ case "I":
+ this.style = _util.AnnotationBorderStyleType.INSET;
+ break;
+
+ case "U":
+ this.style = _util.AnnotationBorderStyleType.UNDERLINE;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ setDashArray(dashArray) {
+ if (Array.isArray(dashArray) && dashArray.length > 0) {
+ let isValid = true;
+ let allZeros = true;
+
+ for (const element of dashArray) {
+ const validNumber = +element >= 0;
+
+ if (!validNumber) {
+ isValid = false;
+ break;
+ } else if (element > 0) {
+ allZeros = false;
+ }
+ }
+
+ if (isValid && !allZeros) {
+ this.dashArray = dashArray;
+ } else {
+ this.width = 0;
+ }
+ } else if (dashArray) {
+ this.width = 0;
+ }
+ }
+
+ setHorizontalCornerRadius(radius) {
+ if (Number.isInteger(radius)) {
+ this.horizontalCornerRadius = radius;
+ }
+ }
+
+ setVerticalCornerRadius(radius) {
+ if (Number.isInteger(radius)) {
+ this.verticalCornerRadius = radius;
+ }
+ }
+
+}
+
+exports.AnnotationBorderStyle = AnnotationBorderStyle;
+
+class MarkupAnnotation extends Annotation {
+ constructor(parameters) {
+ super(parameters);
+ const dict = parameters.dict;
+
+ if (dict.has("IRT")) {
+ const rawIRT = dict.getRaw("IRT");
+ this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;
+ const rt = dict.get("RT");
+ this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;
+ }
+
+ if (this.data.replyType === _util.AnnotationReplyType.GROUP) {
+ const parent = dict.get("IRT");
+ this.data.title = (0, _util.stringToPDFString)(parent.get("T") || "");
+ this.setContents(parent.get("Contents"));
+ this.data.contents = this.contents;
+
+ if (!parent.has("CreationDate")) {
+ this.data.creationDate = null;
+ } else {
+ this.setCreationDate(parent.get("CreationDate"));
+ this.data.creationDate = this.creationDate;
+ }
+
+ if (!parent.has("M")) {
+ this.data.modificationDate = null;
+ } else {
+ this.setModificationDate(parent.get("M"));
+ this.data.modificationDate = this.modificationDate;
+ }
+
+ this.data.hasPopup = parent.has("Popup");
+
+ if (!parent.has("C")) {
+ this.data.color = null;
+ } else {
+ this.setColor(parent.getArray("C"));
+ this.data.color = this.color;
+ }
+ } else {
+ this.data.title = (0, _util.stringToPDFString)(dict.get("T") || "");
+ this.setCreationDate(dict.get("CreationDate"));
+ this.data.creationDate = this.creationDate;
+ this.data.hasPopup = dict.has("Popup");
+
+ if (!dict.has("C")) {
+ this.data.color = null;
+ }
+ }
+ }
+
+ setCreationDate(creationDate) {
+ this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;
+ }
+
+}
+
+exports.MarkupAnnotation = MarkupAnnotation;
+
+class WidgetAnnotation extends Annotation {
+ constructor(params) {
+ super(params);
+ const dict = params.dict;
+ const data = this.data;
+ data.annotationType = _util.AnnotationType.WIDGET;
+ data.fieldName = this._constructFieldName(dict);
+ data.fieldValue = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "V",
+ getArray: true
+ });
+ data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
+ data.defaultAppearance = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "DA"
+ }) || "";
+ const fieldType = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "FT"
+ });
+ data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
+ this.fieldResources = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "DR"
+ }) || _primitives.Dict.empty;
+ data.fieldFlags = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "Ff"
+ });
+
+ if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {
+ data.fieldFlags = 0;
+ }
+
+ data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);
+
+ if (data.fieldType === "Sig") {
+ data.fieldValue = null;
+ this.setFlags(_util.AnnotationFlag.HIDDEN);
+ }
+ }
+
+ _constructFieldName(dict) {
+ if (!dict.has("T") && !dict.has("Parent")) {
+ (0, _util.warn)("Unknown field name, falling back to empty field name.");
+ return "";
+ }
+
+ if (!dict.has("Parent")) {
+ return (0, _util.stringToPDFString)(dict.get("T"));
+ }
+
+ const fieldName = [];
+
+ if (dict.has("T")) {
+ fieldName.unshift((0, _util.stringToPDFString)(dict.get("T")));
+ }
+
+ let loopDict = dict;
+
+ while (loopDict.has("Parent")) {
+ loopDict = loopDict.get("Parent");
+
+ if (!(0, _primitives.isDict)(loopDict)) {
+ break;
+ }
+
+ if (loopDict.has("T")) {
+ fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T")));
+ }
+ }
+
+ return fieldName.join(".");
+ }
+
+ hasFieldFlag(flag) {
+ return !!(this.data.fieldFlags & flag);
+ }
+
+ getOperatorList(evaluator, task, renderForms) {
+ if (renderForms) {
+ return Promise.resolve(new _operator_list.OperatorList());
+ }
+
+ return super.getOperatorList(evaluator, task, renderForms);
+ }
+
+}
+
+class TextWidgetAnnotation extends WidgetAnnotation {
+ constructor(params) {
+ super(params);
+ const dict = params.dict;
+ this.data.fieldValue = (0, _util.stringToPDFString)(this.data.fieldValue || "");
+ let alignment = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "Q"
+ });
+
+ if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {
+ alignment = null;
+ }
+
+ this.data.textAlignment = alignment;
+ let maximumLength = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "MaxLen"
+ });
+
+ if (!Number.isInteger(maximumLength) || maximumLength < 0) {
+ maximumLength = null;
+ }
+
+ this.data.maxLen = maximumLength;
+ this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);
+ this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null;
+ }
+
+ getOperatorList(evaluator, task, renderForms) {
+ if (renderForms || this.appearance) {
+ return super.getOperatorList(evaluator, task, renderForms);
+ }
+
+ const operatorList = new _operator_list.OperatorList();
+
+ if (!this.data.defaultAppearance) {
+ return Promise.resolve(operatorList);
+ }
+
+ const stream = new _stream.Stream((0, _util.stringToBytes)(this.data.defaultAppearance));
+ return evaluator.getOperatorList({
+ stream,
+ task,
+ resources: this.fieldResources,
+ operatorList
+ }).then(function () {
+ return operatorList;
+ });
+ }
+
+}
+
+class ButtonWidgetAnnotation extends WidgetAnnotation {
+ constructor(params) {
+ super(params);
+ this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+ this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+ this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+
+ if (this.data.checkBox) {
+ this._processCheckBox(params);
+ } else if (this.data.radioButton) {
+ this._processRadioButton(params);
+ } else if (this.data.pushButton) {
+ this._processPushButton(params);
+ } else {
+ (0, _util.warn)("Invalid field flags for button widget annotation");
+ }
+ }
+
+ _processCheckBox(params) {
+ if ((0, _primitives.isName)(this.data.fieldValue)) {
+ this.data.fieldValue = this.data.fieldValue.name;
+ }
+
+ const customAppearance = params.dict.get("AP");
+
+ if (!(0, _primitives.isDict)(customAppearance)) {
+ return;
+ }
+
+ const exportValueOptionsDict = customAppearance.get("D");
+
+ if (!(0, _primitives.isDict)(exportValueOptionsDict)) {
+ return;
+ }
+
+ const exportValues = exportValueOptionsDict.getKeys();
+ const hasCorrectOptionCount = exportValues.length === 2;
+
+ if (!hasCorrectOptionCount) {
+ return;
+ }
+
+ this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0];
+ }
+
+ _processRadioButton(params) {
+ this.data.fieldValue = this.data.buttonValue = null;
+ const fieldParent = params.dict.get("Parent");
+
+ if ((0, _primitives.isDict)(fieldParent) && fieldParent.has("V")) {
+ const fieldParentValue = fieldParent.get("V");
+
+ if ((0, _primitives.isName)(fieldParentValue)) {
+ this.data.fieldValue = fieldParentValue.name;
+ }
+ }
+
+ const appearanceStates = params.dict.get("AP");
+
+ if (!(0, _primitives.isDict)(appearanceStates)) {
+ return;
+ }
+
+ const normalAppearanceState = appearanceStates.get("N");
+
+ if (!(0, _primitives.isDict)(normalAppearanceState)) {
+ return;
+ }
+
+ for (const key of normalAppearanceState.getKeys()) {
+ if (key !== "Off") {
+ this.data.buttonValue = key;
+ break;
+ }
+ }
+ }
+
+ _processPushButton(params) {
+ if (!params.dict.has("A")) {
+ (0, _util.warn)("Push buttons without action dictionaries are not supported");
+ return;
+ }
+
+ _obj.Catalog.parseDestDictionary({
+ destDict: params.dict,
+ resultObj: this.data,
+ docBaseUrl: params.pdfManager.docBaseUrl
+ });
+ }
+
+}
+
+class ChoiceWidgetAnnotation extends WidgetAnnotation {
+ constructor(params) {
+ super(params);
+ this.data.options = [];
+ const options = (0, _core_utils.getInheritableProperty)({
+ dict: params.dict,
+ key: "Opt"
+ });
+
+ if (Array.isArray(options)) {
+ const xref = params.xref;
+
+ for (let i = 0, ii = options.length; i < ii; i++) {
+ const option = xref.fetchIfRef(options[i]);
+ const isOptionArray = Array.isArray(option);
+ this.data.options[i] = {
+ exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option,
+ displayValue: (0, _util.stringToPDFString)(isOptionArray ? xref.fetchIfRef(option[1]) : option)
+ };
+ }
+ }
+
+ if (!Array.isArray(this.data.fieldValue)) {
+ this.data.fieldValue = [this.data.fieldValue];
+ }
+
+ this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
+ this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
+ }
+
+}
+
+class TextAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ const DEFAULT_ICON_SIZE = 22;
+ super(parameters);
+ const dict = parameters.dict;
+ this.data.annotationType = _util.AnnotationType.TEXT;
+
+ if (this.data.hasAppearance) {
+ this.data.name = "NoIcon";
+ } else {
+ this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;
+ this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;
+ this.data.name = dict.has("Name") ? dict.get("Name").name : "Note";
+ }
+
+ if (dict.has("State")) {
+ this.data.state = dict.get("State") || null;
+ this.data.stateModel = dict.get("StateModel") || null;
+ } else {
+ this.data.state = null;
+ this.data.stateModel = null;
+ }
+ }
+
+}
+
+class LinkAnnotation extends Annotation {
+ constructor(params) {
+ super(params);
+ this.data.annotationType = _util.AnnotationType.LINK;
+ const quadPoints = getQuadPoints(params.dict, this.rectangle);
+
+ if (quadPoints) {
+ this.data.quadPoints = quadPoints;
+ }
+
+ _obj.Catalog.parseDestDictionary({
+ destDict: params.dict,
+ resultObj: this.data,
+ docBaseUrl: params.pdfManager.docBaseUrl
+ });
+ }
+
+}
+
+class PopupAnnotation extends Annotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.POPUP;
+ let parentItem = parameters.dict.get("Parent");
+
+ if (!parentItem) {
+ (0, _util.warn)("Popup annotation has a missing or invalid parent annotation.");
+ return;
+ }
+
+ const parentSubtype = parentItem.get("Subtype");
+ this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;
+ const rawParent = parameters.dict.getRaw("Parent");
+ this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;
+ const rt = parentItem.get("RT");
+
+ if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {
+ parentItem = parentItem.get("IRT");
+ }
+
+ if (!parentItem.has("M")) {
+ this.data.modificationDate = null;
+ } else {
+ this.setModificationDate(parentItem.get("M"));
+ this.data.modificationDate = this.modificationDate;
+ }
+
+ if (!parentItem.has("C")) {
+ this.data.color = null;
+ } else {
+ this.setColor(parentItem.getArray("C"));
+ this.data.color = this.color;
+ }
+
+ if (!this.viewable) {
+ const parentFlags = parentItem.get("F");
+
+ if (this._isViewable(parentFlags)) {
+ this.setFlags(parentFlags);
+ }
+ }
+
+ this.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || "");
+ this.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || "");
+ }
+
+}
+
+class FreeTextAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.FREETEXT;
+ }
+
+}
+
+class LineAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.LINE;
+ this.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray("L"));
+ }
+
+}
+
+class SquareAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.SQUARE;
+ }
+
+}
+
+class CircleAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.CIRCLE;
+ }
+
+}
+
+class PolylineAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.POLYLINE;
+ const rawVertices = parameters.dict.getArray("Vertices");
+ this.data.vertices = [];
+
+ for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {
+ this.data.vertices.push({
+ x: rawVertices[i],
+ y: rawVertices[i + 1]
+ });
+ }
+ }
+
+}
+
+class PolygonAnnotation extends PolylineAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.POLYGON;
+ }
+
+}
+
+class CaretAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.CARET;
+ }
+
+}
+
+class InkAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.INK;
+ const xref = parameters.xref;
+ const originalInkLists = parameters.dict.getArray("InkList");
+ this.data.inkLists = [];
+
+ for (let i = 0, ii = originalInkLists.length; i < ii; ++i) {
+ this.data.inkLists.push([]);
+
+ for (let j = 0, jj = originalInkLists[i].length; j < jj; j += 2) {
+ this.data.inkLists[i].push({
+ x: xref.fetchIfRef(originalInkLists[i][j]),
+ y: xref.fetchIfRef(originalInkLists[i][j + 1])
+ });
+ }
+ }
+ }
+
+}
+
+class HighlightAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.HIGHLIGHT;
+ const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
+
+ if (quadPoints) {
+ this.data.quadPoints = quadPoints;
+ }
+ }
+
+}
+
+class UnderlineAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.UNDERLINE;
+ const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
+
+ if (quadPoints) {
+ this.data.quadPoints = quadPoints;
+ }
+ }
+
+}
+
+class SquigglyAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.SQUIGGLY;
+ const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
+
+ if (quadPoints) {
+ this.data.quadPoints = quadPoints;
+ }
+ }
+
+}
+
+class StrikeOutAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.STRIKEOUT;
+ const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
+
+ if (quadPoints) {
+ this.data.quadPoints = quadPoints;
+ }
+ }
+
+}
+
+class StampAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.STAMP;
+ }
+
+}
+
+class FileAttachmentAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ const file = new _obj.FileSpec(parameters.dict.get("FS"), parameters.xref);
+ this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
+ this.data.file = file.serializable;
+ }
+
+}
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.OperatorList = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var QueueOptimizer = function QueueOptimizerClosure() {
+ function addState(parentState, pattern, checkFn, iterateFn, processFn) {
+ var state = parentState;
+
+ for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
+ var item = pattern[i];
+ state = state[item] || (state[item] = []);
+ }
+
+ state[pattern[pattern.length - 1]] = {
+ checkFn,
+ iterateFn,
+ processFn
+ };
+ }
+
+ function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
+ var iFirstPIMXO = iFirstSave + 2;
+
+ for (var i = 0; i < count; i++) {
+ var arg = argsArray[iFirstPIMXO + 4 * i];
+ var imageMask = arg.length === 1 && arg[0];
+
+ if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {
+ fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
+ continue;
+ }
+
+ break;
+ }
+
+ return count - i;
+ }
+
+ var InitialState = [];
+ addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
+ var fnArray = context.fnArray;
+ var iFirstSave = context.iCurr - 3;
+ var pos = (i - iFirstSave) % 4;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.save;
+
+ case 1:
+ return fnArray[i] === _util.OPS.transform;
+
+ case 2:
+ return fnArray[i] === _util.OPS.paintInlineImageXObject;
+
+ case 3:
+ return fnArray[i] === _util.OPS.restore;
+ }
+
+ throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
+ }, function foundInlineImageGroup(context, i) {
+ var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
+ var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
+ var MAX_WIDTH = 1000;
+ var IMAGE_PADDING = 1;
+ var fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ var curr = context.iCurr;
+ var iFirstSave = curr - 3;
+ var iFirstTransform = curr - 2;
+ var iFirstPIIXO = curr - 1;
+ var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
+
+ if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
+ return i - (i - iFirstSave) % 4;
+ }
+
+ var maxX = 0;
+ var map = [],
+ maxLineHeight = 0;
+ var currentX = IMAGE_PADDING,
+ currentY = IMAGE_PADDING;
+ var q;
+
+ for (q = 0; q < count; q++) {
+ var transform = argsArray[iFirstTransform + (q << 2)];
+ var img = argsArray[iFirstPIIXO + (q << 2)][0];
+
+ if (currentX + img.width > MAX_WIDTH) {
+ maxX = Math.max(maxX, currentX);
+ currentY += maxLineHeight + 2 * IMAGE_PADDING;
+ currentX = 0;
+ maxLineHeight = 0;
+ }
+
+ map.push({
+ transform,
+ x: currentX,
+ y: currentY,
+ w: img.width,
+ h: img.height
+ });
+ currentX += img.width + 2 * IMAGE_PADDING;
+ maxLineHeight = Math.max(maxLineHeight, img.height);
+ }
+
+ var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
+ var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
+ var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
+ var imgRowSize = imgWidth << 2;
+
+ for (q = 0; q < count; q++) {
+ var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
+ var rowSize = map[q].w << 2;
+ var dataOffset = 0;
+ var offset = map[q].x + map[q].y * imgWidth << 2;
+ imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
+
+ for (var k = 0, kk = map[q].h; k < kk; k++) {
+ imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
+ dataOffset += rowSize;
+ offset += imgRowSize;
+ }
+
+ imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
+
+ while (offset >= 0) {
+ data[offset - 4] = data[offset];
+ data[offset - 3] = data[offset + 1];
+ data[offset - 2] = data[offset + 2];
+ data[offset - 1] = data[offset + 3];
+ data[offset + rowSize] = data[offset + rowSize - 4];
+ data[offset + rowSize + 1] = data[offset + rowSize - 3];
+ data[offset + rowSize + 2] = data[offset + rowSize - 2];
+ data[offset + rowSize + 3] = data[offset + rowSize - 1];
+ offset -= imgRowSize;
+ }
+ }
+
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
+ argsArray.splice(iFirstSave, count * 4, [{
+ width: imgWidth,
+ height: imgHeight,
+ kind: _util.ImageKind.RGBA_32BPP,
+ data: imgData
+ }, map]);
+ return iFirstSave + 1;
+ });
+ addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
+ var fnArray = context.fnArray;
+ var iFirstSave = context.iCurr - 3;
+ var pos = (i - iFirstSave) % 4;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.save;
+
+ case 1:
+ return fnArray[i] === _util.OPS.transform;
+
+ case 2:
+ return fnArray[i] === _util.OPS.paintImageMaskXObject;
+
+ case 3:
+ return fnArray[i] === _util.OPS.restore;
+ }
+
+ throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
+ }, function foundImageMaskGroup(context, i) {
+ var MIN_IMAGES_IN_MASKS_BLOCK = 10;
+ var MAX_IMAGES_IN_MASKS_BLOCK = 100;
+ var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
+ var fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ var curr = context.iCurr;
+ var iFirstSave = curr - 3;
+ var iFirstTransform = curr - 2;
+ var iFirstPIMXO = curr - 1;
+ var count = Math.floor((i - iFirstSave) / 4);
+ count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
+
+ if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
+ return i - (i - iFirstSave) % 4;
+ }
+
+ var q;
+ var isSameImage = false;
+ var iTransform, transformArgs;
+ var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
+
+ if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) {
+ isSameImage = true;
+ var firstTransformArg0 = argsArray[iFirstTransform][0];
+ var firstTransformArg3 = argsArray[iFirstTransform][3];
+ iTransform = iFirstTransform + 4;
+ var iPIMXO = iFirstPIMXO + 4;
+
+ for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
+ transformArgs = argsArray[iTransform];
+
+ if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || transformArgs[3] !== firstTransformArg3) {
+ if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
+ isSameImage = false;
+ } else {
+ count = q;
+ }
+
+ break;
+ }
+ }
+ }
+
+ if (isSameImage) {
+ count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
+ var positions = new Float32Array(count * 2);
+ iTransform = iFirstTransform;
+
+ for (q = 0; q < count; q++, iTransform += 4) {
+ transformArgs = argsArray[iTransform];
+ positions[q << 1] = transformArgs[4];
+ positions[(q << 1) + 1] = transformArgs[5];
+ }
+
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
+ argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);
+ } else {
+ count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
+ var images = [];
+
+ for (q = 0; q < count; q++) {
+ transformArgs = argsArray[iFirstTransform + (q << 2)];
+ var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
+ images.push({
+ data: maskParams.data,
+ width: maskParams.width,
+ height: maskParams.height,
+ transform: transformArgs
+ });
+ }
+
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
+ argsArray.splice(iFirstSave, count * 4, [images]);
+ }
+
+ return iFirstSave + 1;
+ });
+ addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {
+ var argsArray = context.argsArray;
+ var iFirstTransform = context.iCurr - 2;
+ return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
+ }, function iterateImageGroup(context, i) {
+ var fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ var iFirstSave = context.iCurr - 3;
+ var pos = (i - iFirstSave) % 4;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.save;
+
+ case 1:
+ if (fnArray[i] !== _util.OPS.transform) {
+ return false;
+ }
+
+ var iFirstTransform = context.iCurr - 2;
+ var firstTransformArg0 = argsArray[iFirstTransform][0];
+ var firstTransformArg3 = argsArray[iFirstTransform][3];
+
+ if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
+ return false;
+ }
+
+ return true;
+
+ case 2:
+ if (fnArray[i] !== _util.OPS.paintImageXObject) {
+ return false;
+ }
+
+ var iFirstPIXO = context.iCurr - 1;
+ var firstPIXOArg0 = argsArray[iFirstPIXO][0];
+
+ if (argsArray[i][0] !== firstPIXOArg0) {
+ return false;
+ }
+
+ return true;
+
+ case 3:
+ return fnArray[i] === _util.OPS.restore;
+ }
+
+ throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
+ }, function (context, i) {
+ var MIN_IMAGES_IN_BLOCK = 3;
+ var MAX_IMAGES_IN_BLOCK = 1000;
+ var fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ var curr = context.iCurr;
+ var iFirstSave = curr - 3;
+ var iFirstTransform = curr - 2;
+ var iFirstPIXO = curr - 1;
+ var firstPIXOArg0 = argsArray[iFirstPIXO][0];
+ var firstTransformArg0 = argsArray[iFirstTransform][0];
+ var firstTransformArg3 = argsArray[iFirstTransform][3];
+ var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
+
+ if (count < MIN_IMAGES_IN_BLOCK) {
+ return i - (i - iFirstSave) % 4;
+ }
+
+ var positions = new Float32Array(count * 2);
+ var iTransform = iFirstTransform;
+
+ for (var q = 0; q < count; q++, iTransform += 4) {
+ var transformArgs = argsArray[iTransform];
+ positions[q << 1] = transformArgs[4];
+ positions[(q << 1) + 1] = transformArgs[5];
+ }
+
+ var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
+ argsArray.splice(iFirstSave, count * 4, args);
+ return iFirstSave + 1;
+ });
+ addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
+ var fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ var iFirstSave = context.iCurr - 4;
+ var pos = (i - iFirstSave) % 5;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.beginText;
+
+ case 1:
+ return fnArray[i] === _util.OPS.setFont;
+
+ case 2:
+ return fnArray[i] === _util.OPS.setTextMatrix;
+
+ case 3:
+ if (fnArray[i] !== _util.OPS.showText) {
+ return false;
+ }
+
+ var iFirstSetFont = context.iCurr - 3;
+ var firstSetFontArg0 = argsArray[iFirstSetFont][0];
+ var firstSetFontArg1 = argsArray[iFirstSetFont][1];
+
+ if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
+ return false;
+ }
+
+ return true;
+
+ case 4:
+ return fnArray[i] === _util.OPS.endText;
+ }
+
+ throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
+ }, function (context, i) {
+ var MIN_CHARS_IN_BLOCK = 3;
+ var MAX_CHARS_IN_BLOCK = 1000;
+ var fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ var curr = context.iCurr;
+ var iFirstBeginText = curr - 4;
+ var iFirstSetFont = curr - 3;
+ var iFirstSetTextMatrix = curr - 2;
+ var iFirstShowText = curr - 1;
+ var iFirstEndText = curr;
+ var firstSetFontArg0 = argsArray[iFirstSetFont][0];
+ var firstSetFontArg1 = argsArray[iFirstSetFont][1];
+ var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
+
+ if (count < MIN_CHARS_IN_BLOCK) {
+ return i - (i - iFirstBeginText) % 5;
+ }
+
+ var iFirst = iFirstBeginText;
+
+ if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
+ count++;
+ iFirst -= 5;
+ }
+
+ var iEndText = iFirst + 4;
+
+ for (var q = 1; q < count; q++) {
+ fnArray.splice(iEndText, 3);
+ argsArray.splice(iEndText, 3);
+ iEndText += 2;
+ }
+
+ return iEndText + 1;
+ });
+
+ function QueueOptimizer(queue) {
+ this.queue = queue;
+ this.state = null;
+ this.context = {
+ iCurr: 0,
+ fnArray: queue.fnArray,
+ argsArray: queue.argsArray
+ };
+ this.match = null;
+ this.lastProcessed = 0;
+ }
+
+ QueueOptimizer.prototype = {
+ _optimize() {
+ const fnArray = this.queue.fnArray;
+ let i = this.lastProcessed,
+ ii = fnArray.length;
+ let state = this.state;
+ let match = this.match;
+
+ if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
+ this.lastProcessed = ii;
+ return;
+ }
+
+ const context = this.context;
+
+ while (i < ii) {
+ if (match) {
+ const iterate = (0, match.iterateFn)(context, i);
+
+ if (iterate) {
+ i++;
+ continue;
+ }
+
+ i = (0, match.processFn)(context, i + 1);
+ ii = fnArray.length;
+ match = null;
+ state = null;
+
+ if (i >= ii) {
+ break;
+ }
+ }
+
+ state = (state || InitialState)[fnArray[i]];
+
+ if (!state || Array.isArray(state)) {
+ i++;
+ continue;
+ }
+
+ context.iCurr = i;
+ i++;
+
+ if (state.checkFn && !(0, state.checkFn)(context)) {
+ state = null;
+ continue;
+ }
+
+ match = state;
+ state = null;
+ }
+
+ this.state = state;
+ this.match = match;
+ this.lastProcessed = i;
+ },
+
+ push(fn, args) {
+ this.queue.fnArray.push(fn);
+ this.queue.argsArray.push(args);
+
+ this._optimize();
+ },
+
+ flush() {
+ while (this.match) {
+ const length = this.queue.fnArray.length;
+ this.lastProcessed = (0, this.match.processFn)(this.context, length);
+ this.match = null;
+ this.state = null;
+
+ this._optimize();
+ }
+ },
+
+ reset() {
+ this.state = null;
+ this.match = null;
+ this.lastProcessed = 0;
+ }
+
+ };
+ return QueueOptimizer;
+}();
+
+var NullOptimizer = function NullOptimizerClosure() {
+ function NullOptimizer(queue) {
+ this.queue = queue;
+ }
+
+ NullOptimizer.prototype = {
+ push(fn, args) {
+ this.queue.fnArray.push(fn);
+ this.queue.argsArray.push(args);
+ },
+
+ flush() {},
+
+ reset() {}
+
+ };
+ return NullOptimizer;
+}();
+
+var OperatorList = function OperatorListClosure() {
+ var CHUNK_SIZE = 1000;
+ var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
+
+ function OperatorList(intent, streamSink, pageIndex) {
+ this._streamSink = streamSink;
+ this.fnArray = [];
+ this.argsArray = [];
+
+ if (streamSink && intent !== "oplist") {
+ this.optimizer = new QueueOptimizer(this);
+ } else {
+ this.optimizer = new NullOptimizer(this);
+ }
+
+ this.dependencies = Object.create(null);
+ this._totalLength = 0;
+ this.pageIndex = pageIndex;
+ this.intent = intent;
+ this.weight = 0;
+ this._resolved = streamSink ? null : Promise.resolve();
+ }
+
+ OperatorList.prototype = {
+ get length() {
+ return this.argsArray.length;
+ },
+
+ get ready() {
+ return this._resolved || this._streamSink.ready;
+ },
+
+ get totalLength() {
+ return this._totalLength + this.length;
+ },
+
+ addOp(fn, args) {
+ this.optimizer.push(fn, args);
+ this.weight++;
+
+ if (this._streamSink) {
+ if (this.weight >= CHUNK_SIZE) {
+ this.flush();
+ } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
+ this.flush();
+ }
+ }
+ },
+
+ addDependency(dependency) {
+ if (dependency in this.dependencies) {
+ return;
+ }
+
+ this.dependencies[dependency] = true;
+ this.addOp(_util.OPS.dependency, [dependency]);
+ },
+
+ addDependencies(dependencies) {
+ for (var key in dependencies) {
+ this.addDependency(key);
+ }
+ },
+
+ addOpList(opList) {
+ if (!(opList instanceof OperatorList)) {
+ (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
+ return;
+ }
+
+ Object.assign(this.dependencies, opList.dependencies);
+
+ for (var i = 0, ii = opList.length; i < ii; i++) {
+ this.addOp(opList.fnArray[i], opList.argsArray[i]);
+ }
+ },
+
+ getIR() {
+ return {
+ fnArray: this.fnArray,
+ argsArray: this.argsArray,
+ length: this.length
+ };
+ },
+
+ get _transfers() {
+ const transfers = [];
+ const {
+ fnArray,
+ argsArray,
+ length
+ } = this;
+
+ for (let i = 0; i < length; i++) {
+ switch (fnArray[i]) {
+ case _util.OPS.paintInlineImageXObject:
+ case _util.OPS.paintInlineImageXObjectGroup:
+ case _util.OPS.paintImageMaskXObject:
+ const arg = argsArray[i][0];
+ ;
+
+ if (!arg.cached) {
+ transfers.push(arg.data.buffer);
+ }
+
+ break;
+ }
+ }
+
+ return transfers;
+ },
+
+ flush(lastChunk = false) {
+ this.optimizer.flush();
+ const length = this.length;
+ this._totalLength += length;
+
+ this._streamSink.enqueue({
+ fnArray: this.fnArray,
+ argsArray: this.argsArray,
+ lastChunk,
+ length
+ }, 1, this._transfers);
+
+ this.dependencies = Object.create(null);
+ this.fnArray.length = 0;
+ this.argsArray.length = 0;
+ this.weight = 0;
+ this.optimizer.reset();
+ }
+
+ };
+ return OperatorList;
+}();
+
+exports.OperatorList = OperatorList;
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PartialEvaluator = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _cmap = __w_pdfjs_require__(28);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _fonts = __w_pdfjs_require__(29);
+
+var _encodings = __w_pdfjs_require__(32);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _unicode = __w_pdfjs_require__(35);
+
+var _standard_fonts = __w_pdfjs_require__(34);
+
+var _pattern = __w_pdfjs_require__(38);
+
+var _parser = __w_pdfjs_require__(11);
+
+var _bidi = __w_pdfjs_require__(39);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _glyphlist = __w_pdfjs_require__(33);
+
+var _metrics = __w_pdfjs_require__(40);
+
+var _function = __w_pdfjs_require__(41);
+
+var _image_utils = __w_pdfjs_require__(24);
+
+var _murmurhash = __w_pdfjs_require__(43);
+
+var _operator_list = __w_pdfjs_require__(26);
+
+var _image = __w_pdfjs_require__(44);
+
+var PartialEvaluator = function PartialEvaluatorClosure() {
+ const DefaultPartialEvaluatorOptions = {
+ maxImageSize: -1,
+ disableFontFace: false,
+ ignoreErrors: false,
+ isEvalSupported: true,
+ fontExtraProperties: false
+ };
+
+ function PartialEvaluator({
+ xref,
+ handler,
+ pageIndex,
+ idFactory,
+ fontCache,
+ builtInCMapCache,
+ globalImageCache,
+ options = null,
+ pdfFunctionFactory
+ }) {
+ this.xref = xref;
+ this.handler = handler;
+ this.pageIndex = pageIndex;
+ this.idFactory = idFactory;
+ this.fontCache = fontCache;
+ this.builtInCMapCache = builtInCMapCache;
+ this.globalImageCache = globalImageCache;
+ this.options = options || DefaultPartialEvaluatorOptions;
+ this.pdfFunctionFactory = pdfFunctionFactory;
+ this.parsingType3Font = false;
+
+ this.fetchBuiltInCMap = async name => {
+ if (this.builtInCMapCache.has(name)) {
+ return this.builtInCMapCache.get(name);
+ }
+
+ const readableStream = this.handler.sendWithStream("FetchBuiltInCMap", {
+ name
+ });
+ const reader = readableStream.getReader();
+ const data = await new Promise(function (resolve, reject) {
+ function pump() {
+ reader.read().then(function ({
+ value,
+ done
+ }) {
+ if (done) {
+ return;
+ }
+
+ resolve(value);
+ pump();
+ }, reject);
+ }
+
+ pump();
+ });
+
+ if (data.compressionType !== _util.CMapCompressionType.NONE) {
+ this.builtInCMapCache.set(name, data);
+ }
+
+ return data;
+ };
+ }
+
+ var TIME_SLOT_DURATION_MS = 20;
+ var CHECK_TIME_EVERY = 100;
+
+ function TimeSlotManager() {
+ this.reset();
+ }
+
+ TimeSlotManager.prototype = {
+ check: function TimeSlotManager_check() {
+ if (++this.checked < CHECK_TIME_EVERY) {
+ return false;
+ }
+
+ this.checked = 0;
+ return this.endTime <= Date.now();
+ },
+ reset: function TimeSlotManager_reset() {
+ this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
+ this.checked = 0;
+ }
+ };
+
+ function normalizeBlendMode(value, parsingArray = false) {
+ if (Array.isArray(value)) {
+ for (let i = 0, ii = value.length; i < ii; i++) {
+ const maybeBM = normalizeBlendMode(value[i], true);
+
+ if (maybeBM) {
+ return maybeBM;
+ }
+ }
+
+ (0, _util.warn)(`Unsupported blend mode Array: ${value}`);
+ return "source-over";
+ }
+
+ if (!(0, _primitives.isName)(value)) {
+ if (parsingArray) {
+ return null;
+ }
+
+ return "source-over";
+ }
+
+ switch (value.name) {
+ case "Normal":
+ case "Compatible":
+ return "source-over";
+
+ case "Multiply":
+ return "multiply";
+
+ case "Screen":
+ return "screen";
+
+ case "Overlay":
+ return "overlay";
+
+ case "Darken":
+ return "darken";
+
+ case "Lighten":
+ return "lighten";
+
+ case "ColorDodge":
+ return "color-dodge";
+
+ case "ColorBurn":
+ return "color-burn";
+
+ case "HardLight":
+ return "hard-light";
+
+ case "SoftLight":
+ return "soft-light";
+
+ case "Difference":
+ return "difference";
+
+ case "Exclusion":
+ return "exclusion";
+
+ case "Hue":
+ return "hue";
+
+ case "Saturation":
+ return "saturation";
+
+ case "Color":
+ return "color";
+
+ case "Luminosity":
+ return "luminosity";
+ }
+
+ if (parsingArray) {
+ return null;
+ }
+
+ (0, _util.warn)(`Unsupported blend mode: ${value.name}`);
+ return "source-over";
+ }
+
+ var deferred = Promise.resolve();
+ var TILING_PATTERN = 1,
+ SHADING_PATTERN = 2;
+ PartialEvaluator.prototype = {
+ clone(newOptions = DefaultPartialEvaluatorOptions) {
+ var newEvaluator = Object.create(this);
+ newEvaluator.options = newOptions;
+ return newEvaluator;
+ },
+
+ hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {
+ if (!(resources instanceof _primitives.Dict)) {
+ return false;
+ }
+
+ var processed = Object.create(null);
+
+ if (resources.objId) {
+ processed[resources.objId] = true;
+ }
+
+ var nodes = [resources],
+ xref = this.xref;
+
+ while (nodes.length) {
+ var node = nodes.shift();
+ var graphicStates = node.get("ExtGState");
+
+ if (graphicStates instanceof _primitives.Dict) {
+ var graphicStatesKeys = graphicStates.getKeys();
+
+ for (let i = 0, ii = graphicStatesKeys.length; i < ii; i++) {
+ const key = graphicStatesKeys[i];
+ let graphicState = graphicStates.getRaw(key);
+
+ if (graphicState instanceof _primitives.Ref) {
+ if (processed[graphicState.toString()]) {
+ continue;
+ }
+
+ try {
+ graphicState = xref.fetch(graphicState);
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ if (this.options.ignoreErrors) {
+ if (graphicState instanceof _primitives.Ref) {
+ processed[graphicState.toString()] = true;
+ }
+
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorExtGState
+ });
+ (0, _util.warn)(`hasBlendModes - ignoring ExtGState: "${ex}".`);
+ continue;
+ }
+
+ throw ex;
+ }
+ }
+
+ if (!(graphicState instanceof _primitives.Dict)) {
+ continue;
+ }
+
+ if (graphicState.objId) {
+ processed[graphicState.objId] = true;
+ }
+
+ const bm = graphicState.get("BM");
+
+ if (bm instanceof _primitives.Name) {
+ if (bm.name !== "Normal") {
+ return true;
+ }
+
+ continue;
+ }
+
+ if (bm !== undefined && Array.isArray(bm)) {
+ for (let j = 0, jj = bm.length; j < jj; j++) {
+ if (bm[j] instanceof _primitives.Name && bm[j].name !== "Normal") {
+ return true;
+ }
+ }
+ }
+ }
+ }
+
+ var xObjects = node.get("XObject");
+
+ if (!(xObjects instanceof _primitives.Dict)) {
+ continue;
+ }
+
+ var xObjectsKeys = xObjects.getKeys();
+
+ for (let i = 0, ii = xObjectsKeys.length; i < ii; i++) {
+ const key = xObjectsKeys[i];
+ var xObject = xObjects.getRaw(key);
+
+ if (xObject instanceof _primitives.Ref) {
+ if (processed[xObject.toString()]) {
+ continue;
+ }
+
+ try {
+ xObject = xref.fetch(xObject);
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ if (this.options.ignoreErrors) {
+ if (xObject instanceof _primitives.Ref) {
+ processed[xObject.toString()] = true;
+ }
+
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorXObject
+ });
+ (0, _util.warn)(`hasBlendModes - ignoring XObject: "${ex}".`);
+ continue;
+ }
+
+ throw ex;
+ }
+ }
+
+ if (!(0, _primitives.isStream)(xObject)) {
+ continue;
+ }
+
+ if (xObject.dict.objId) {
+ if (processed[xObject.dict.objId]) {
+ continue;
+ }
+
+ processed[xObject.dict.objId] = true;
+ }
+
+ var xResources = xObject.dict.get("Resources");
+
+ if (xResources instanceof _primitives.Dict && (!xResources.objId || !processed[xResources.objId])) {
+ nodes.push(xResources);
+
+ if (xResources.objId) {
+ processed[xResources.objId] = true;
+ }
+ }
+ }
+ }
+
+ return false;
+ },
+
+ async buildFormXObject(resources, xobj, smask, operatorList, task, initialState) {
+ var dict = xobj.dict;
+ var matrix = dict.getArray("Matrix");
+ var bbox = dict.getArray("BBox");
+
+ if (Array.isArray(bbox) && bbox.length === 4) {
+ bbox = _util.Util.normalizeRect(bbox);
+ } else {
+ bbox = null;
+ }
+
+ var group = dict.get("Group");
+
+ if (group) {
+ var groupOptions = {
+ matrix,
+ bbox,
+ smask,
+ isolated: false,
+ knockout: false
+ };
+ var groupSubtype = group.get("S");
+ var colorSpace = null;
+
+ if ((0, _primitives.isName)(groupSubtype, "Transparency")) {
+ groupOptions.isolated = group.get("I") || false;
+ groupOptions.knockout = group.get("K") || false;
+
+ if (group.has("CS")) {
+ colorSpace = await this.parseColorSpace({
+ cs: group.get("CS"),
+ resources
+ });
+ }
+ }
+
+ if (smask && smask.backdrop) {
+ colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb;
+ smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);
+ }
+
+ operatorList.addOp(_util.OPS.beginGroup, [groupOptions]);
+ }
+
+ operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]);
+ return this.getOperatorList({
+ stream: xobj,
+ task,
+ resources: dict.get("Resources") || resources,
+ operatorList,
+ initialState
+ }).then(function () {
+ operatorList.addOp(_util.OPS.paintFormXObjectEnd, []);
+
+ if (group) {
+ operatorList.addOp(_util.OPS.endGroup, [groupOptions]);
+ }
+ });
+ },
+
+ async buildPaintImageXObject({
+ resources,
+ image,
+ isInline = false,
+ operatorList,
+ cacheKey,
+ localImageCache
+ }) {
+ var dict = image.dict;
+ const imageRef = dict.objId;
+ var w = dict.get("Width", "W");
+ var h = dict.get("Height", "H");
+
+ if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) {
+ (0, _util.warn)("Image dimensions are missing, or not numbers.");
+ return undefined;
+ }
+
+ var maxImageSize = this.options.maxImageSize;
+
+ if (maxImageSize !== -1 && w * h > maxImageSize) {
+ (0, _util.warn)("Image exceeded maximum allowed size and was removed.");
+ return undefined;
+ }
+
+ var imageMask = dict.get("ImageMask", "IM") || false;
+ var imgData, args;
+
+ if (imageMask) {
+ var width = dict.get("Width", "W");
+ var height = dict.get("Height", "H");
+ var bitStrideLength = width + 7 >> 3;
+ var imgArray = image.getBytes(bitStrideLength * height, true);
+ var decode = dict.getArray("Decode", "D");
+ imgData = _image.PDFImage.createMask({
+ imgArray,
+ width,
+ height,
+ imageIsFromDecodeStream: image instanceof _stream.DecodeStream,
+ inverseDecode: !!decode && decode[0] > 0
+ });
+ imgData.cached = !!cacheKey;
+ args = [imgData];
+ operatorList.addOp(_util.OPS.paintImageMaskXObject, args);
+
+ if (cacheKey) {
+ localImageCache.set(cacheKey, imageRef, {
+ fn: _util.OPS.paintImageMaskXObject,
+ args
+ });
+ }
+
+ return undefined;
+ }
+
+ var softMask = dict.get("SMask", "SM") || false;
+ var mask = dict.get("Mask") || false;
+ var SMALL_IMAGE_DIMENSIONS = 200;
+
+ if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) {
+ const imageObj = new _image.PDFImage({
+ xref: this.xref,
+ res: resources,
+ image,
+ isInline,
+ pdfFunctionFactory: this.pdfFunctionFactory
+ });
+ imgData = imageObj.createImageData(true);
+ operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]);
+ return undefined;
+ }
+
+ let objId = `img_${this.idFactory.createObjId()}`,
+ cacheGlobally = false;
+
+ if (this.parsingType3Font) {
+ objId = `${this.idFactory.getDocId()}_type3res_${objId}`;
+ } else if (imageRef) {
+ cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex);
+
+ if (cacheGlobally) {
+ objId = `${this.idFactory.getDocId()}_${objId}`;
+ }
+ }
+
+ operatorList.addDependency(objId);
+ args = [objId, w, h];
+
+ const imgPromise = _image.PDFImage.buildImage({
+ xref: this.xref,
+ res: resources,
+ image,
+ isInline,
+ pdfFunctionFactory: this.pdfFunctionFactory
+ }).then(imageObj => {
+ imgData = imageObj.createImageData(false);
+
+ if (this.parsingType3Font) {
+ return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", imgData], [imgData.data.buffer]);
+ } else if (cacheGlobally) {
+ this.handler.send("commonobj", [objId, "Image", imgData], [imgData.data.buffer]);
+ return undefined;
+ }
+
+ this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], [imgData.data.buffer]);
+ return undefined;
+ }).catch(reason => {
+ (0, _util.warn)("Unable to decode image: " + reason);
+
+ if (this.parsingType3Font) {
+ return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", null]);
+ } else if (cacheGlobally) {
+ this.handler.send("commonobj", [objId, "Image", null]);
+ return undefined;
+ }
+
+ this.handler.send("obj", [objId, this.pageIndex, "Image", null]);
+ return undefined;
+ });
+
+ if (this.parsingType3Font) {
+ await imgPromise;
+ }
+
+ operatorList.addOp(_util.OPS.paintImageXObject, args);
+
+ if (cacheKey) {
+ localImageCache.set(cacheKey, imageRef, {
+ fn: _util.OPS.paintImageXObject,
+ args
+ });
+
+ if (imageRef) {
+ (0, _util.assert)(!isInline, "Cannot cache an inline image globally.");
+ this.globalImageCache.addPageIndex(imageRef, this.pageIndex);
+
+ if (cacheGlobally) {
+ this.globalImageCache.setData(imageRef, {
+ objId,
+ fn: _util.OPS.paintImageXObject,
+ args
+ });
+ }
+ }
+ }
+
+ return undefined;
+ },
+
+ handleSMask: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) {
+ var smaskContent = smask.get("G");
+ var smaskOptions = {
+ subtype: smask.get("S").name,
+ backdrop: smask.get("BC")
+ };
+ var transferObj = smask.get("TR");
+
+ if ((0, _function.isPDFFunction)(transferObj)) {
+ const transferFn = this.pdfFunctionFactory.create(transferObj);
+ var transferMap = new Uint8Array(256);
+ var tmp = new Float32Array(1);
+
+ for (var i = 0; i < 256; i++) {
+ tmp[0] = i / 255;
+ transferFn(tmp, 0, tmp, 0);
+ transferMap[i] = tmp[0] * 255 | 0;
+ }
+
+ smaskOptions.transferMap = transferMap;
+ }
+
+ return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone());
+ },
+
+ handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) {
+ const tilingOpList = new _operator_list.OperatorList();
+ const resourcesArray = [patternDict.get("Resources"), resources];
+
+ const patternResources = _primitives.Dict.merge(this.xref, resourcesArray);
+
+ return this.getOperatorList({
+ stream: pattern,
+ task,
+ resources: patternResources,
+ operatorList: tilingOpList
+ }).then(function () {
+ return (0, _pattern.getTilingPatternIR)({
+ fnArray: tilingOpList.fnArray,
+ argsArray: tilingOpList.argsArray
+ }, patternDict, args);
+ }).then(function (tilingPatternIR) {
+ operatorList.addDependencies(tilingOpList.dependencies);
+ operatorList.addOp(fn, tilingPatternIR);
+ }, reason => {
+ if (reason instanceof _util.AbortException) {
+ return;
+ }
+
+ if (this.options.ignoreErrors) {
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern
+ });
+ (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`);
+ return;
+ }
+
+ throw reason;
+ });
+ },
+
+ handleSetFont: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {
+ var fontName;
+
+ if (fontArgs) {
+ fontArgs = fontArgs.slice();
+ fontName = fontArgs[0].name;
+ }
+
+ return this.loadFont(fontName, fontRef, resources).then(translated => {
+ if (!translated.font.isType3Font) {
+ return translated;
+ }
+
+ return translated.loadType3Data(this, resources, operatorList, task).then(function () {
+ return translated;
+ }).catch(reason => {
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3
+ });
+ return new TranslatedFont({
+ loadedName: "g_font_error",
+ font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`),
+ dict: translated.font,
+ extraProperties: this.options.fontExtraProperties
+ });
+ });
+ }).then(translated => {
+ state.font = translated.font;
+ translated.send(this.handler);
+ return translated.loadedName;
+ });
+ },
+
+ handleText(chars, state) {
+ const font = state.font;
+ const glyphs = font.charsToGlyphs(chars);
+
+ if (font.data) {
+ const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
+
+ if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) {
+ PartialEvaluator.buildFontPaths(font, glyphs, this.handler);
+ }
+ }
+
+ return glyphs;
+ },
+
+ ensureStateFont(state) {
+ if (state.font) {
+ return;
+ }
+
+ const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator.");
+
+ if (this.options.ignoreErrors) {
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontState
+ });
+ (0, _util.warn)(`ensureStateFont: "${reason}".`);
+ return;
+ }
+
+ throw reason;
+ },
+
+ setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, stateManager) {
+ var gStateObj = [];
+ var gStateKeys = gState.getKeys();
+ var promise = Promise.resolve();
+
+ for (var i = 0, ii = gStateKeys.length; i < ii; i++) {
+ const key = gStateKeys[i];
+ const value = gState.get(key);
+
+ switch (key) {
+ case "Type":
+ break;
+
+ case "LW":
+ case "LC":
+ case "LJ":
+ case "ML":
+ case "D":
+ case "RI":
+ case "FL":
+ case "CA":
+ case "ca":
+ gStateObj.push([key, value]);
+ break;
+
+ case "Font":
+ promise = promise.then(() => {
+ return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) {
+ operatorList.addDependency(loadedName);
+ gStateObj.push([key, [loadedName, value[1]]]);
+ });
+ });
+ break;
+
+ case "BM":
+ gStateObj.push([key, normalizeBlendMode(value)]);
+ break;
+
+ case "SMask":
+ if ((0, _primitives.isName)(value, "None")) {
+ gStateObj.push([key, false]);
+ break;
+ }
+
+ if ((0, _primitives.isDict)(value)) {
+ promise = promise.then(() => {
+ return this.handleSMask(value, resources, operatorList, task, stateManager);
+ });
+ gStateObj.push([key, true]);
+ } else {
+ (0, _util.warn)("Unsupported SMask type");
+ }
+
+ break;
+
+ case "OP":
+ case "op":
+ case "OPM":
+ case "BG":
+ case "BG2":
+ case "UCR":
+ case "UCR2":
+ case "TR":
+ case "TR2":
+ case "HT":
+ case "SM":
+ case "SA":
+ case "AIS":
+ case "TK":
+ (0, _util.info)("graphic state operator " + key);
+ break;
+
+ default:
+ (0, _util.info)("Unknown graphic state operator " + key);
+ break;
+ }
+ }
+
+ return promise.then(function () {
+ if (gStateObj.length > 0) {
+ operatorList.addOp(_util.OPS.setGState, [gStateObj]);
+ }
+ });
+ },
+ loadFont: function PartialEvaluator_loadFont(fontName, font, resources) {
+ const errorFont = () => {
+ return Promise.resolve(new TranslatedFont({
+ loadedName: "g_font_error",
+ font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`),
+ dict: font,
+ extraProperties: this.options.fontExtraProperties
+ }));
+ };
+
+ var fontRef,
+ xref = this.xref;
+
+ if (font) {
+ if (!(0, _primitives.isRef)(font)) {
+ throw new _util.FormatError('The "font" object should be a reference.');
+ }
+
+ fontRef = font;
+ } else {
+ var fontRes = resources.get("Font");
+
+ if (fontRes) {
+ fontRef = fontRes.getRaw(fontName);
+ }
+ }
+
+ if (!fontRef) {
+ const partialMsg = `Font "${fontName || font && font.toString()}" is not available`;
+
+ if (!this.options.ignoreErrors && !this.parsingType3Font) {
+ (0, _util.warn)(`${partialMsg}.`);
+ return errorFont();
+ }
+
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing
+ });
+ (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`);
+ fontRef = PartialEvaluator.getFallbackFontDict();
+ }
+
+ if (this.fontCache.has(fontRef)) {
+ return this.fontCache.get(fontRef);
+ }
+
+ font = xref.fetchIfRef(fontRef);
+
+ if (!(0, _primitives.isDict)(font)) {
+ return errorFont();
+ }
+
+ if (font.translated) {
+ return font.translated;
+ }
+
+ var fontCapability = (0, _util.createPromiseCapability)();
+ var preEvaluatedFont = this.preEvaluateFont(font);
+ const {
+ descriptor,
+ hash
+ } = preEvaluatedFont;
+ var fontRefIsRef = (0, _primitives.isRef)(fontRef),
+ fontID;
+
+ if (fontRefIsRef) {
+ fontID = fontRef.toString();
+ }
+
+ if (hash && (0, _primitives.isDict)(descriptor)) {
+ if (!descriptor.fontAliases) {
+ descriptor.fontAliases = Object.create(null);
+ }
+
+ var fontAliases = descriptor.fontAliases;
+
+ if (fontAliases[hash]) {
+ var aliasFontRef = fontAliases[hash].aliasRef;
+
+ if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {
+ this.fontCache.putAlias(fontRef, aliasFontRef);
+ return this.fontCache.get(fontRef);
+ }
+ } else {
+ fontAliases[hash] = {
+ fontID: _fonts.Font.getFontID()
+ };
+ }
+
+ if (fontRefIsRef) {
+ fontAliases[hash].aliasRef = fontRef;
+ }
+
+ fontID = fontAliases[hash].fontID;
+ }
+
+ if (fontRefIsRef) {
+ this.fontCache.put(fontRef, fontCapability.promise);
+ } else {
+ if (!fontID) {
+ fontID = this.idFactory.createObjId();
+ }
+
+ this.fontCache.put(`id_${fontID}`, fontCapability.promise);
+ }
+
+ (0, _util.assert)(fontID, 'The "fontID" must be defined.');
+ font.loadedName = `${this.idFactory.getDocId()}_f${fontID}`;
+ font.translated = fontCapability.promise;
+ var translatedPromise;
+
+ try {
+ translatedPromise = this.translateFont(preEvaluatedFont);
+ } catch (e) {
+ translatedPromise = Promise.reject(e);
+ }
+
+ translatedPromise.then(translatedFont => {
+ if (translatedFont.fontType !== undefined) {
+ var xrefFontStats = xref.stats.fontTypes;
+ xrefFontStats[translatedFont.fontType] = true;
+ }
+
+ fontCapability.resolve(new TranslatedFont({
+ loadedName: font.loadedName,
+ font: translatedFont,
+ dict: font,
+ extraProperties: this.options.fontExtraProperties
+ }));
+ }).catch(reason => {
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate
+ });
+
+ try {
+ var fontFile3 = descriptor && descriptor.get("FontFile3");
+ var subtype = fontFile3 && fontFile3.get("Subtype");
+ var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name);
+ var xrefFontStats = xref.stats.fontTypes;
+ xrefFontStats[fontType] = true;
+ } catch (ex) {}
+
+ fontCapability.resolve(new TranslatedFont({
+ loadedName: font.loadedName,
+ font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason),
+ dict: font,
+ extraProperties: this.options.fontExtraProperties
+ }));
+ });
+ return fontCapability.promise;
+ },
+
+ buildPath(operatorList, fn, args, parsingText = false) {
+ var lastIndex = operatorList.length - 1;
+
+ if (!args) {
+ args = [];
+ }
+
+ if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) {
+ if (parsingText) {
+ (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`);
+ operatorList.addOp(_util.OPS.save, null);
+ }
+
+ operatorList.addOp(_util.OPS.constructPath, [[fn], args]);
+
+ if (parsingText) {
+ operatorList.addOp(_util.OPS.restore, null);
+ }
+ } else {
+ var opArgs = operatorList.argsArray[lastIndex];
+ opArgs[0].push(fn);
+ Array.prototype.push.apply(opArgs[1], args);
+ }
+ },
+
+ parseColorSpace({
+ cs,
+ resources
+ }) {
+ return new Promise(resolve => {
+ resolve(_colorspace.ColorSpace.parse(cs, this.xref, resources, this.pdfFunctionFactory));
+ }).catch(reason => {
+ if (reason instanceof _util.AbortException) {
+ return null;
+ }
+
+ if (this.options.ignoreErrors) {
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace
+ });
+ (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
+ return null;
+ }
+
+ throw reason;
+ });
+ },
+
+ async handleColorN(operatorList, fn, args, cs, patterns, resources, task) {
+ var patternName = args[args.length - 1];
+ var pattern;
+
+ if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) {
+ var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;
+ var typeNum = dict.get("PatternType");
+
+ if (typeNum === TILING_PATTERN) {
+ var color = cs.base ? cs.base.getRgb(args, 0) : null;
+ return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task);
+ } else if (typeNum === SHADING_PATTERN) {
+ var shading = dict.get("Shading");
+ var matrix = dict.getArray("Matrix");
+ pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory);
+ operatorList.addOp(fn, pattern.getIR());
+ return undefined;
+ }
+
+ throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
+ }
+
+ throw new _util.FormatError(`Unknown PatternName: ${patternName}`);
+ },
+
+ getOperatorList({
+ stream,
+ task,
+ resources,
+ operatorList,
+ initialState = null
+ }) {
+ resources = resources || _primitives.Dict.empty;
+ initialState = initialState || new EvalState();
+
+ if (!operatorList) {
+ throw new Error('getOperatorList: missing "operatorList" parameter');
+ }
+
+ var self = this;
+ var xref = this.xref;
+ let parsingText = false;
+ const localImageCache = new _image_utils.LocalImageCache();
+
+ var xobjs = resources.get("XObject") || _primitives.Dict.empty;
+
+ var patterns = resources.get("Pattern") || _primitives.Dict.empty;
+
+ var stateManager = new StateManager(initialState);
+ var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+ var timeSlotManager = new TimeSlotManager();
+
+ function closePendingRestoreOPS(argument) {
+ for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
+ operatorList.addOp(_util.OPS.restore, []);
+ }
+ }
+
+ return new Promise(function promiseBody(resolve, reject) {
+ const next = function (promise) {
+ Promise.all([promise, operatorList.ready]).then(function () {
+ try {
+ promiseBody(resolve, reject);
+ } catch (ex) {
+ reject(ex);
+ }
+ }, reject);
+ };
+
+ task.ensureNotTerminated();
+ timeSlotManager.reset();
+ var stop,
+ operation = {},
+ i,
+ ii,
+ cs;
+
+ while (!(stop = timeSlotManager.check())) {
+ operation.args = null;
+
+ if (!preprocessor.read(operation)) {
+ break;
+ }
+
+ var args = operation.args;
+ var fn = operation.fn;
+
+ switch (fn | 0) {
+ case _util.OPS.paintXObject:
+ var name = args[0].name;
+
+ if (name) {
+ const localImage = localImageCache.getByName(name);
+
+ if (localImage) {
+ operatorList.addOp(localImage.fn, localImage.args);
+ args = null;
+ continue;
+ }
+ }
+
+ next(new Promise(function (resolveXObject, rejectXObject) {
+ if (!name) {
+ throw new _util.FormatError("XObject must be referred to by name.");
+ }
+
+ let xobj = xobjs.getRaw(name);
+
+ if (xobj instanceof _primitives.Ref) {
+ const localImage = localImageCache.getByRef(xobj);
+
+ if (localImage) {
+ operatorList.addOp(localImage.fn, localImage.args);
+ resolveXObject();
+ return;
+ }
+
+ const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);
+
+ if (globalImage) {
+ operatorList.addDependency(globalImage.objId);
+ operatorList.addOp(globalImage.fn, globalImage.args);
+ resolveXObject();
+ return;
+ }
+
+ xobj = xref.fetch(xobj);
+ }
+
+ if (!xobj) {
+ operatorList.addOp(fn, args);
+ resolveXObject();
+ return;
+ }
+
+ if (!(0, _primitives.isStream)(xobj)) {
+ throw new _util.FormatError("XObject should be a stream");
+ }
+
+ const type = xobj.dict.get("Subtype");
+
+ if (!(0, _primitives.isName)(type)) {
+ throw new _util.FormatError("XObject should have a Name subtype");
+ }
+
+ if (type.name === "Form") {
+ stateManager.save();
+ self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone()).then(function () {
+ stateManager.restore();
+ resolveXObject();
+ }, rejectXObject);
+ return;
+ } else if (type.name === "Image") {
+ self.buildPaintImageXObject({
+ resources,
+ image: xobj,
+ operatorList,
+ cacheKey: name,
+ localImageCache
+ }).then(resolveXObject, rejectXObject);
+ return;
+ } else if (type.name === "PS") {
+ (0, _util.info)("Ignored XObject subtype PS");
+ } else {
+ throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`);
+ }
+
+ resolveXObject();
+ }).catch(function (reason) {
+ if (reason instanceof _util.AbortException) {
+ return;
+ }
+
+ if (self.options.ignoreErrors) {
+ self.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorXObject
+ });
+ (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`);
+ return;
+ }
+
+ throw reason;
+ }));
+ return;
+
+ case _util.OPS.setFont:
+ var fontSize = args[1];
+ next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) {
+ operatorList.addDependency(loadedName);
+ operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);
+ }));
+ return;
+
+ case _util.OPS.beginText:
+ parsingText = true;
+ break;
+
+ case _util.OPS.endText:
+ parsingText = false;
+ break;
+
+ case _util.OPS.endInlineImage:
+ var cacheKey = args[0].cacheKey;
+
+ if (cacheKey) {
+ const localImage = localImageCache.getByName(cacheKey);
+
+ if (localImage) {
+ operatorList.addOp(localImage.fn, localImage.args);
+ args = null;
+ continue;
+ }
+ }
+
+ next(self.buildPaintImageXObject({
+ resources,
+ image: args[0],
+ isInline: true,
+ operatorList,
+ cacheKey,
+ localImageCache
+ }));
+ return;
+
+ case _util.OPS.showText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ args[0] = self.handleText(args[0], stateManager.state);
+ break;
+
+ case _util.OPS.showSpacedText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ var arr = args[0];
+ var combinedGlyphs = [];
+ var arrLength = arr.length;
+ var state = stateManager.state;
+
+ for (i = 0; i < arrLength; ++i) {
+ var arrItem = arr[i];
+
+ if ((0, _util.isString)(arrItem)) {
+ Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state));
+ } else if ((0, _util.isNum)(arrItem)) {
+ combinedGlyphs.push(arrItem);
+ }
+ }
+
+ args[0] = combinedGlyphs;
+ fn = _util.OPS.showText;
+ break;
+
+ case _util.OPS.nextLineShowText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ operatorList.addOp(_util.OPS.nextLine);
+ args[0] = self.handleText(args[0], stateManager.state);
+ fn = _util.OPS.showText;
+ break;
+
+ case _util.OPS.nextLineSetSpacingShowText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ operatorList.addOp(_util.OPS.nextLine);
+ operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]);
+ operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]);
+ args[0] = self.handleText(args[0], stateManager.state);
+ fn = _util.OPS.showText;
+ break;
+
+ case _util.OPS.setTextRenderingMode:
+ stateManager.state.textRenderingMode = args[0];
+ break;
+
+ case _util.OPS.setFillColorSpace:
+ next(self.parseColorSpace({
+ cs: args[0],
+ resources
+ }).then(function (colorSpace) {
+ if (colorSpace) {
+ stateManager.state.fillColorSpace = colorSpace;
+ }
+ }));
+ return;
+
+ case _util.OPS.setStrokeColorSpace:
+ next(self.parseColorSpace({
+ cs: args[0],
+ resources
+ }).then(function (colorSpace) {
+ if (colorSpace) {
+ stateManager.state.strokeColorSpace = colorSpace;
+ }
+ }));
+ return;
+
+ case _util.OPS.setFillColor:
+ cs = stateManager.state.fillColorSpace;
+ args = cs.getRgb(args, 0);
+ fn = _util.OPS.setFillRGBColor;
+ break;
+
+ case _util.OPS.setStrokeColor:
+ cs = stateManager.state.strokeColorSpace;
+ args = cs.getRgb(args, 0);
+ fn = _util.OPS.setStrokeRGBColor;
+ break;
+
+ case _util.OPS.setFillGray:
+ stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray;
+ args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);
+ fn = _util.OPS.setFillRGBColor;
+ break;
+
+ case _util.OPS.setStrokeGray:
+ stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;
+ args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);
+ fn = _util.OPS.setStrokeRGBColor;
+ break;
+
+ case _util.OPS.setFillCMYKColor:
+ stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk;
+ args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);
+ fn = _util.OPS.setFillRGBColor;
+ break;
+
+ case _util.OPS.setStrokeCMYKColor:
+ stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk;
+ args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);
+ fn = _util.OPS.setStrokeRGBColor;
+ break;
+
+ case _util.OPS.setFillRGBColor:
+ stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb;
+ args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);
+ break;
+
+ case _util.OPS.setStrokeRGBColor:
+ stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb;
+ args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);
+ break;
+
+ case _util.OPS.setFillColorN:
+ cs = stateManager.state.fillColorSpace;
+
+ if (cs.name === "Pattern") {
+ next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task));
+ return;
+ }
+
+ args = cs.getRgb(args, 0);
+ fn = _util.OPS.setFillRGBColor;
+ break;
+
+ case _util.OPS.setStrokeColorN:
+ cs = stateManager.state.strokeColorSpace;
+
+ if (cs.name === "Pattern") {
+ next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task));
+ return;
+ }
+
+ args = cs.getRgb(args, 0);
+ fn = _util.OPS.setStrokeRGBColor;
+ break;
+
+ case _util.OPS.shadingFill:
+ var shadingRes = resources.get("Shading");
+
+ if (!shadingRes) {
+ throw new _util.FormatError("No shading resource found");
+ }
+
+ var shading = shadingRes.get(args[0].name);
+
+ if (!shading) {
+ throw new _util.FormatError("No shading object found");
+ }
+
+ var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self.pdfFunctionFactory);
+
+ var patternIR = shadingFill.getIR();
+ args = [patternIR];
+ fn = _util.OPS.shadingFill;
+ break;
+
+ case _util.OPS.setGState:
+ var dictName = args[0];
+ var extGState = resources.get("ExtGState");
+
+ if (!(0, _primitives.isDict)(extGState) || !extGState.has(dictName.name)) {
+ break;
+ }
+
+ var gState = extGState.get(dictName.name);
+ next(self.setGState(resources, gState, operatorList, task, stateManager));
+ return;
+
+ case _util.OPS.moveTo:
+ case _util.OPS.lineTo:
+ case _util.OPS.curveTo:
+ case _util.OPS.curveTo2:
+ case _util.OPS.curveTo3:
+ case _util.OPS.closePath:
+ case _util.OPS.rectangle:
+ self.buildPath(operatorList, fn, args, parsingText);
+ continue;
+
+ case _util.OPS.markPoint:
+ case _util.OPS.markPointProps:
+ case _util.OPS.beginMarkedContent:
+ case _util.OPS.beginMarkedContentProps:
+ case _util.OPS.endMarkedContent:
+ case _util.OPS.beginCompat:
+ case _util.OPS.endCompat:
+ continue;
+
+ default:
+ if (args !== null) {
+ for (i = 0, ii = args.length; i < ii; i++) {
+ if (args[i] instanceof _primitives.Dict) {
+ break;
+ }
+ }
+
+ if (i < ii) {
+ (0, _util.warn)("getOperatorList - ignoring operator: " + fn);
+ continue;
+ }
+ }
+
+ }
+
+ operatorList.addOp(fn, args);
+ }
+
+ if (stop) {
+ next(deferred);
+ return;
+ }
+
+ closePendingRestoreOPS();
+ resolve();
+ }).catch(reason => {
+ if (reason instanceof _util.AbortException) {
+ return;
+ }
+
+ if (this.options.ignoreErrors) {
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList
+ });
+ (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
+ closePendingRestoreOPS();
+ return;
+ }
+
+ throw reason;
+ });
+ },
+
+ getTextContent({
+ stream,
+ task,
+ resources,
+ stateManager = null,
+ normalizeWhitespace = false,
+ combineTextItems = false,
+ sink,
+ seenStyles = Object.create(null)
+ }) {
+ resources = resources || _primitives.Dict.empty;
+ stateManager = stateManager || new StateManager(new TextState());
+ var WhitespaceRegexp = /\s/g;
+ var textContent = {
+ items: [],
+ styles: Object.create(null)
+ };
+ var textContentItem = {
+ initialized: false,
+ str: [],
+ width: 0,
+ height: 0,
+ vertical: false,
+ lastAdvanceWidth: 0,
+ lastAdvanceHeight: 0,
+ textAdvanceScale: 0,
+ spaceWidth: 0,
+ fakeSpaceMin: Infinity,
+ fakeMultiSpaceMin: Infinity,
+ fakeMultiSpaceMax: -0,
+ textRunBreakAllowed: false,
+ transform: null,
+ fontName: null
+ };
+ var SPACE_FACTOR = 0.3;
+ var MULTI_SPACE_FACTOR = 1.5;
+ var MULTI_SPACE_FACTOR_MAX = 4;
+ var self = this;
+ var xref = this.xref;
+ var xobjs = null;
+ const emptyXObjectCache = new _image_utils.LocalImageCache();
+ var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+ var textState;
+
+ function ensureTextContentItem() {
+ if (textContentItem.initialized) {
+ return textContentItem;
+ }
+
+ var font = textState.font;
+
+ if (!(font.loadedName in seenStyles)) {
+ seenStyles[font.loadedName] = true;
+ textContent.styles[font.loadedName] = {
+ fontFamily: font.fallbackName,
+ ascent: font.ascent,
+ descent: font.descent,
+ vertical: font.vertical
+ };
+ }
+
+ textContentItem.fontName = font.loadedName;
+ var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];
+
+ if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) {
+ const glyphHeight = font.bbox[3] - font.bbox[1];
+
+ if (glyphHeight > 0) {
+ tsm[3] *= glyphHeight * textState.fontMatrix[3];
+ }
+ }
+
+ var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));
+
+ textContentItem.transform = trm;
+
+ if (!font.vertical) {
+ textContentItem.width = 0;
+ textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);
+ textContentItem.vertical = false;
+ } else {
+ textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);
+ textContentItem.height = 0;
+ textContentItem.vertical = true;
+ }
+
+ var a = textState.textLineMatrix[0];
+ var b = textState.textLineMatrix[1];
+ var scaleLineX = Math.sqrt(a * a + b * b);
+ a = textState.ctm[0];
+ b = textState.ctm[1];
+ var scaleCtmX = Math.sqrt(a * a + b * b);
+ textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;
+ textContentItem.lastAdvanceWidth = 0;
+ textContentItem.lastAdvanceHeight = 0;
+ var spaceWidth = font.spaceWidth / 1000 * textState.fontSize;
+
+ if (spaceWidth) {
+ textContentItem.spaceWidth = spaceWidth;
+ textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR;
+ textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR;
+ textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX;
+ textContentItem.textRunBreakAllowed = !font.isMonospace;
+ } else {
+ textContentItem.spaceWidth = 0;
+ textContentItem.fakeSpaceMin = Infinity;
+ textContentItem.fakeMultiSpaceMin = Infinity;
+ textContentItem.fakeMultiSpaceMax = 0;
+ textContentItem.textRunBreakAllowed = false;
+ }
+
+ textContentItem.initialized = true;
+ return textContentItem;
+ }
+
+ function replaceWhitespace(str) {
+ var i = 0,
+ ii = str.length,
+ code;
+
+ while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) {
+ i++;
+ }
+
+ return i < ii ? str.replace(WhitespaceRegexp, " ") : str;
+ }
+
+ function runBidiTransform(textChunk) {
+ var str = textChunk.str.join("");
+ var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical);
+ return {
+ str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str,
+ dir: bidiResult.dir,
+ width: textChunk.width,
+ height: textChunk.height,
+ transform: textChunk.transform,
+ fontName: textChunk.fontName
+ };
+ }
+
+ function handleSetFont(fontName, fontRef) {
+ return self.loadFont(fontName, fontRef, resources).then(function (translated) {
+ textState.font = translated.font;
+ textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ });
+ }
+
+ function buildTextContentItem(chars) {
+ var font = textState.font;
+ var textChunk = ensureTextContentItem();
+ var width = 0;
+ var height = 0;
+ var glyphs = font.charsToGlyphs(chars);
+
+ for (var i = 0; i < glyphs.length; i++) {
+ var glyph = glyphs[i];
+ var glyphWidth = null;
+
+ if (font.vertical && glyph.vmetric) {
+ glyphWidth = glyph.vmetric[0];
+ } else {
+ glyphWidth = glyph.width;
+ }
+
+ var glyphUnicode = glyph.unicode;
+ var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();
+
+ if (NormalizedUnicodes[glyphUnicode] !== undefined) {
+ glyphUnicode = NormalizedUnicodes[glyphUnicode];
+ }
+
+ glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode);
+ var charSpacing = textState.charSpacing;
+
+ if (glyph.isSpace) {
+ var wordSpacing = textState.wordSpacing;
+ charSpacing += wordSpacing;
+
+ if (wordSpacing > 0) {
+ addFakeSpaces(wordSpacing, textChunk.str);
+ }
+ }
+
+ var tx = 0;
+ var ty = 0;
+
+ if (!font.vertical) {
+ var w0 = glyphWidth * textState.fontMatrix[0];
+ tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale;
+ width += tx;
+ } else {
+ var w1 = glyphWidth * textState.fontMatrix[0];
+ ty = w1 * textState.fontSize + charSpacing;
+ height += ty;
+ }
+
+ textState.translateTextMatrix(tx, ty);
+ textChunk.str.push(glyphUnicode);
+ }
+
+ if (!font.vertical) {
+ textChunk.lastAdvanceWidth = width;
+ textChunk.width += width;
+ } else {
+ textChunk.lastAdvanceHeight = height;
+ textChunk.height += Math.abs(height);
+ }
+
+ return textChunk;
+ }
+
+ function addFakeSpaces(width, strBuf) {
+ if (width < textContentItem.fakeSpaceMin) {
+ return;
+ }
+
+ if (width < textContentItem.fakeMultiSpaceMin) {
+ strBuf.push(" ");
+ return;
+ }
+
+ var fakeSpaces = Math.round(width / textContentItem.spaceWidth);
+
+ while (fakeSpaces-- > 0) {
+ strBuf.push(" ");
+ }
+ }
+
+ function flushTextContentItem() {
+ if (!textContentItem.initialized) {
+ return;
+ }
+
+ if (!textContentItem.vertical) {
+ textContentItem.width *= textContentItem.textAdvanceScale;
+ } else {
+ textContentItem.height *= textContentItem.textAdvanceScale;
+ }
+
+ textContent.items.push(runBidiTransform(textContentItem));
+ textContentItem.initialized = false;
+ textContentItem.str.length = 0;
+ }
+
+ function enqueueChunk() {
+ const length = textContent.items.length;
+
+ if (length > 0) {
+ sink.enqueue(textContent, length);
+ textContent.items = [];
+ textContent.styles = Object.create(null);
+ }
+ }
+
+ var timeSlotManager = new TimeSlotManager();
+ return new Promise(function promiseBody(resolve, reject) {
+ const next = function (promise) {
+ enqueueChunk();
+ Promise.all([promise, sink.ready]).then(function () {
+ try {
+ promiseBody(resolve, reject);
+ } catch (ex) {
+ reject(ex);
+ }
+ }, reject);
+ };
+
+ task.ensureNotTerminated();
+ timeSlotManager.reset();
+ var stop,
+ operation = {},
+ args = [];
+
+ while (!(stop = timeSlotManager.check())) {
+ args.length = 0;
+ operation.args = args;
+
+ if (!preprocessor.read(operation)) {
+ break;
+ }
+
+ textState = stateManager.state;
+ var fn = operation.fn;
+ args = operation.args;
+ var advance, diff;
+
+ switch (fn | 0) {
+ case _util.OPS.setFont:
+ var fontNameArg = args[0].name,
+ fontSizeArg = args[1];
+
+ if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) {
+ break;
+ }
+
+ flushTextContentItem();
+ textState.fontName = fontNameArg;
+ textState.fontSize = fontSizeArg;
+ next(handleSetFont(fontNameArg, null));
+ return;
+
+ case _util.OPS.setTextRise:
+ flushTextContentItem();
+ textState.textRise = args[0];
+ break;
+
+ case _util.OPS.setHScale:
+ flushTextContentItem();
+ textState.textHScale = args[0] / 100;
+ break;
+
+ case _util.OPS.setLeading:
+ flushTextContentItem();
+ textState.leading = args[0];
+ break;
+
+ case _util.OPS.moveText:
+ var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0;
+ advance = args[0] - args[1];
+
+ if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) {
+ textState.translateTextLineMatrix(args[0], args[1]);
+ textContentItem.width += args[0] - textContentItem.lastAdvanceWidth;
+ textContentItem.height += args[1] - textContentItem.lastAdvanceHeight;
+ diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight);
+ addFakeSpaces(diff, textContentItem.str);
+ break;
+ }
+
+ flushTextContentItem();
+ textState.translateTextLineMatrix(args[0], args[1]);
+ textState.textMatrix = textState.textLineMatrix.slice();
+ break;
+
+ case _util.OPS.setLeadingMoveText:
+ flushTextContentItem();
+ textState.leading = -args[1];
+ textState.translateTextLineMatrix(args[0], args[1]);
+ textState.textMatrix = textState.textLineMatrix.slice();
+ break;
+
+ case _util.OPS.nextLine:
+ flushTextContentItem();
+ textState.carriageReturn();
+ break;
+
+ case _util.OPS.setTextMatrix:
+ advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]);
+
+ if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) {
+ textState.translateTextLineMatrix(advance.width, advance.height);
+ textContentItem.width += advance.width - textContentItem.lastAdvanceWidth;
+ textContentItem.height += advance.height - textContentItem.lastAdvanceHeight;
+ diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight);
+ addFakeSpaces(diff, textContentItem.str);
+ break;
+ }
+
+ flushTextContentItem();
+ textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
+ textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
+ break;
+
+ case _util.OPS.setCharSpacing:
+ textState.charSpacing = args[0];
+ break;
+
+ case _util.OPS.setWordSpacing:
+ textState.wordSpacing = args[0];
+ break;
+
+ case _util.OPS.beginText:
+ flushTextContentItem();
+ textState.textMatrix = _util.IDENTITY_MATRIX.slice();
+ textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();
+ break;
+
+ case _util.OPS.showSpacedText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ var items = args[0];
+ var offset;
+
+ for (var j = 0, jj = items.length; j < jj; j++) {
+ if (typeof items[j] === "string") {
+ buildTextContentItem(items[j]);
+ } else if ((0, _util.isNum)(items[j])) {
+ ensureTextContentItem();
+ advance = items[j] * textState.fontSize / 1000;
+ var breakTextRun = false;
+
+ if (textState.font.vertical) {
+ offset = advance;
+ textState.translateTextMatrix(0, offset);
+ breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;
+
+ if (!breakTextRun) {
+ textContentItem.height += offset;
+ }
+ } else {
+ advance = -advance;
+ offset = advance * textState.textHScale;
+ textState.translateTextMatrix(offset, 0);
+ breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;
+
+ if (!breakTextRun) {
+ textContentItem.width += offset;
+ }
+ }
+
+ if (breakTextRun) {
+ flushTextContentItem();
+ } else if (advance > 0) {
+ addFakeSpaces(advance, textContentItem.str);
+ }
+ }
+ }
+
+ break;
+
+ case _util.OPS.showText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ buildTextContentItem(args[0]);
+ break;
+
+ case _util.OPS.nextLineShowText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ flushTextContentItem();
+ textState.carriageReturn();
+ buildTextContentItem(args[0]);
+ break;
+
+ case _util.OPS.nextLineSetSpacingShowText:
+ if (!stateManager.state.font) {
+ self.ensureStateFont(stateManager.state);
+ continue;
+ }
+
+ flushTextContentItem();
+ textState.wordSpacing = args[0];
+ textState.charSpacing = args[1];
+ textState.carriageReturn();
+ buildTextContentItem(args[2]);
+ break;
+
+ case _util.OPS.paintXObject:
+ flushTextContentItem();
+
+ if (!xobjs) {
+ xobjs = resources.get("XObject") || _primitives.Dict.empty;
+ }
+
+ var name = args[0].name;
+
+ if (name && emptyXObjectCache.getByName(name)) {
+ break;
+ }
+
+ next(new Promise(function (resolveXObject, rejectXObject) {
+ if (!name) {
+ throw new _util.FormatError("XObject must be referred to by name.");
+ }
+
+ let xobj = xobjs.getRaw(name);
+
+ if (xobj instanceof _primitives.Ref) {
+ if (emptyXObjectCache.getByRef(xobj)) {
+ resolveXObject();
+ return;
+ }
+
+ xobj = xref.fetch(xobj);
+ }
+
+ if (!xobj) {
+ resolveXObject();
+ return;
+ }
+
+ if (!(0, _primitives.isStream)(xobj)) {
+ throw new _util.FormatError("XObject should be a stream");
+ }
+
+ const type = xobj.dict.get("Subtype");
+
+ if (!(0, _primitives.isName)(type)) {
+ throw new _util.FormatError("XObject should have a Name subtype");
+ }
+
+ if (type.name !== "Form") {
+ emptyXObjectCache.set(name, xobj.dict.objId, true);
+ resolveXObject();
+ return;
+ }
+
+ const currentState = stateManager.state.clone();
+ const xObjStateManager = new StateManager(currentState);
+ const matrix = xobj.dict.getArray("Matrix");
+
+ if (Array.isArray(matrix) && matrix.length === 6) {
+ xObjStateManager.transform(matrix);
+ }
+
+ enqueueChunk();
+ const sinkWrapper = {
+ enqueueInvoked: false,
+
+ enqueue(chunk, size) {
+ this.enqueueInvoked = true;
+ sink.enqueue(chunk, size);
+ },
+
+ get desiredSize() {
+ return sink.desiredSize;
+ },
+
+ get ready() {
+ return sink.ready;
+ }
+
+ };
+ self.getTextContent({
+ stream: xobj,
+ task,
+ resources: xobj.dict.get("Resources") || resources,
+ stateManager: xObjStateManager,
+ normalizeWhitespace,
+ combineTextItems,
+ sink: sinkWrapper,
+ seenStyles
+ }).then(function () {
+ if (!sinkWrapper.enqueueInvoked) {
+ emptyXObjectCache.set(name, xobj.dict.objId, true);
+ }
+
+ resolveXObject();
+ }, rejectXObject);
+ }).catch(function (reason) {
+ if (reason instanceof _util.AbortException) {
+ return;
+ }
+
+ if (self.options.ignoreErrors) {
+ (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`);
+ return;
+ }
+
+ throw reason;
+ }));
+ return;
+
+ case _util.OPS.setGState:
+ flushTextContentItem();
+ var dictName = args[0];
+ var extGState = resources.get("ExtGState");
+
+ if (!(0, _primitives.isDict)(extGState) || !(0, _primitives.isName)(dictName)) {
+ break;
+ }
+
+ var gState = extGState.get(dictName.name);
+
+ if (!(0, _primitives.isDict)(gState)) {
+ break;
+ }
+
+ var gStateFont = gState.get("Font");
+
+ if (gStateFont) {
+ textState.fontName = null;
+ textState.fontSize = gStateFont[1];
+ next(handleSetFont(null, gStateFont[0]));
+ return;
+ }
+
+ break;
+ }
+
+ if (textContent.items.length >= sink.desiredSize) {
+ stop = true;
+ break;
+ }
+ }
+
+ if (stop) {
+ next(deferred);
+ return;
+ }
+
+ flushTextContentItem();
+ enqueueChunk();
+ resolve();
+ }).catch(reason => {
+ if (reason instanceof _util.AbortException) {
+ return;
+ }
+
+ if (this.options.ignoreErrors) {
+ (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
+ flushTextContentItem();
+ enqueueChunk();
+ return;
+ }
+
+ throw reason;
+ });
+ },
+
+ extractDataStructures: function PartialEvaluator_extractDataStructures(dict, baseDict, properties) {
+ const xref = this.xref;
+ let cidToGidBytes;
+ var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
+ var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined);
+
+ if (properties.composite) {
+ var cidSystemInfo = dict.get("CIDSystemInfo");
+
+ if ((0, _primitives.isDict)(cidSystemInfo)) {
+ properties.cidSystemInfo = {
+ registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")),
+ ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")),
+ supplement: cidSystemInfo.get("Supplement")
+ };
+ }
+
+ var cidToGidMap = dict.get("CIDToGIDMap");
+
+ if ((0, _primitives.isStream)(cidToGidMap)) {
+ cidToGidBytes = cidToGidMap.getBytes();
+ }
+ }
+
+ var differences = [];
+ var baseEncodingName = null;
+ var encoding;
+
+ if (dict.has("Encoding")) {
+ encoding = dict.get("Encoding");
+
+ if ((0, _primitives.isDict)(encoding)) {
+ baseEncodingName = encoding.get("BaseEncoding");
+ baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null;
+
+ if (encoding.has("Differences")) {
+ var diffEncoding = encoding.get("Differences");
+ var index = 0;
+
+ for (var j = 0, jj = diffEncoding.length; j < jj; j++) {
+ var data = xref.fetchIfRef(diffEncoding[j]);
+
+ if ((0, _util.isNum)(data)) {
+ index = data;
+ } else if ((0, _primitives.isName)(data)) {
+ differences[index++] = data.name;
+ } else {
+ throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`);
+ }
+ }
+ }
+ } else if ((0, _primitives.isName)(encoding)) {
+ baseEncodingName = encoding.name;
+ } else {
+ throw new _util.FormatError("Encoding is not a Name nor a Dict");
+ }
+
+ if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") {
+ baseEncodingName = null;
+ }
+ }
+
+ if (baseEncodingName) {
+ properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice();
+ } else {
+ var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic);
+ var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic);
+ encoding = _encodings.StandardEncoding;
+
+ if (properties.type === "TrueType" && !isNonsymbolicFont) {
+ encoding = _encodings.WinAnsiEncoding;
+ }
+
+ if (isSymbolicFont) {
+ encoding = _encodings.MacRomanEncoding;
+
+ if (!properties.file) {
+ if (/Symbol/i.test(properties.name)) {
+ encoding = _encodings.SymbolSetEncoding;
+ } else if (/Dingbats|Wingdings/i.test(properties.name)) {
+ encoding = _encodings.ZapfDingbatsEncoding;
+ }
+ }
+ }
+
+ properties.defaultEncoding = encoding;
+ }
+
+ properties.differences = differences;
+ properties.baseEncodingName = baseEncodingName;
+ properties.hasEncoding = !!baseEncodingName || differences.length > 0;
+ properties.dict = dict;
+ return toUnicodePromise.then(readToUnicode => {
+ properties.toUnicode = readToUnicode;
+ return this.buildToUnicode(properties);
+ }).then(builtToUnicode => {
+ properties.toUnicode = builtToUnicode;
+
+ if (cidToGidBytes) {
+ properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode);
+ }
+
+ return properties;
+ });
+ },
+
+ _buildSimpleFontToUnicode(properties, forceGlyphs = false) {
+ (0, _util.assert)(!properties.composite, "Must be a simple font.");
+ const toUnicode = [];
+ const encoding = properties.defaultEncoding.slice();
+ const baseEncodingName = properties.baseEncodingName;
+ const differences = properties.differences;
+
+ for (const charcode in differences) {
+ const glyphName = differences[charcode];
+
+ if (glyphName === ".notdef") {
+ continue;
+ }
+
+ encoding[charcode] = glyphName;
+ }
+
+ const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+
+ for (const charcode in encoding) {
+ let glyphName = encoding[charcode];
+
+ if (glyphName === "") {
+ continue;
+ } else if (glyphsUnicodeMap[glyphName] === undefined) {
+ let code = 0;
+
+ switch (glyphName[0]) {
+ case "G":
+ if (glyphName.length === 3) {
+ code = parseInt(glyphName.substring(1), 16);
+ }
+
+ break;
+
+ case "g":
+ if (glyphName.length === 5) {
+ code = parseInt(glyphName.substring(1), 16);
+ }
+
+ break;
+
+ case "C":
+ case "c":
+ if (glyphName.length >= 3 && glyphName.length <= 4) {
+ const codeStr = glyphName.substring(1);
+
+ if (forceGlyphs) {
+ code = parseInt(codeStr, 16);
+ break;
+ }
+
+ code = +codeStr;
+
+ if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {
+ return this._buildSimpleFontToUnicode(properties, true);
+ }
+ }
+
+ break;
+
+ default:
+ const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ code = unicode;
+ }
+
+ }
+
+ if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {
+ if (baseEncodingName && code === +charcode) {
+ const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName);
+
+ if (baseEncoding && (glyphName = baseEncoding[charcode])) {
+ toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);
+ continue;
+ }
+ }
+
+ toUnicode[charcode] = String.fromCodePoint(code);
+ }
+
+ continue;
+ }
+
+ toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);
+ }
+
+ return new _fonts.ToUnicodeMap(toUnicode);
+ },
+
+ buildToUnicode(properties) {
+ properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0;
+
+ if (properties.hasIncludedToUnicodeMap) {
+ if (!properties.composite && properties.hasEncoding) {
+ properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties);
+ }
+
+ return Promise.resolve(properties.toUnicode);
+ }
+
+ if (!properties.composite) {
+ return Promise.resolve(this._buildSimpleFontToUnicode(properties));
+ }
+
+ if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) {
+ const registry = properties.cidSystemInfo.registry;
+ const ordering = properties.cidSystemInfo.ordering;
+
+ const ucs2CMapName = _primitives.Name.get(registry + "-" + ordering + "-UCS2");
+
+ return _cmap.CMapFactory.create({
+ encoding: ucs2CMapName,
+ fetchBuiltInCMap: this.fetchBuiltInCMap,
+ useCMap: null
+ }).then(function (ucs2CMap) {
+ const cMap = properties.cMap;
+ const toUnicode = [];
+ cMap.forEach(function (charcode, cid) {
+ if (cid > 0xffff) {
+ throw new _util.FormatError("Max size of CID is 65,535");
+ }
+
+ const ucs2 = ucs2CMap.lookup(cid);
+
+ if (ucs2) {
+ toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));
+ }
+ });
+ return new _fonts.ToUnicodeMap(toUnicode);
+ });
+ }
+
+ return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar));
+ },
+
+ readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) {
+ var cmapObj = toUnicode;
+
+ if ((0, _primitives.isName)(cmapObj)) {
+ return _cmap.CMapFactory.create({
+ encoding: cmapObj,
+ fetchBuiltInCMap: this.fetchBuiltInCMap,
+ useCMap: null
+ }).then(function (cmap) {
+ if (cmap instanceof _cmap.IdentityCMap) {
+ return new _fonts.IdentityToUnicodeMap(0, 0xffff);
+ }
+
+ return new _fonts.ToUnicodeMap(cmap.getMap());
+ });
+ } else if ((0, _primitives.isStream)(cmapObj)) {
+ return _cmap.CMapFactory.create({
+ encoding: cmapObj,
+ fetchBuiltInCMap: this.fetchBuiltInCMap,
+ useCMap: null
+ }).then(function (cmap) {
+ if (cmap instanceof _cmap.IdentityCMap) {
+ return new _fonts.IdentityToUnicodeMap(0, 0xffff);
+ }
+
+ var map = new Array(cmap.length);
+ cmap.forEach(function (charCode, token) {
+ var str = [];
+
+ for (var k = 0; k < token.length; k += 2) {
+ var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
+
+ if ((w1 & 0xf800) !== 0xd800) {
+ str.push(w1);
+ continue;
+ }
+
+ k += 2;
+ var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
+ str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
+ }
+
+ map[charCode] = String.fromCodePoint.apply(String, str);
+ });
+ return new _fonts.ToUnicodeMap(map);
+ }, reason => {
+ if (reason instanceof _util.AbortException) {
+ return null;
+ }
+
+ if (this.options.ignoreErrors) {
+ this.handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode
+ });
+ (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
+ return null;
+ }
+
+ throw reason;
+ });
+ }
+
+ return Promise.resolve(null);
+ },
+
+ readCidToGidMap(glyphsData, toUnicode) {
+ var result = [];
+
+ for (var j = 0, jj = glyphsData.length; j < jj; j++) {
+ var glyphID = glyphsData[j++] << 8 | glyphsData[j];
+ const code = j >> 1;
+
+ if (glyphID === 0 && !toUnicode.has(code)) {
+ continue;
+ }
+
+ result[code] = glyphID;
+ }
+
+ return result;
+ },
+
+ extractWidths: function PartialEvaluator_extractWidths(dict, descriptor, properties) {
+ var xref = this.xref;
+ var glyphsWidths = [];
+ var defaultWidth = 0;
+ var glyphsVMetrics = [];
+ var defaultVMetrics;
+ var i, ii, j, jj, start, code, widths;
+
+ if (properties.composite) {
+ defaultWidth = dict.has("DW") ? dict.get("DW") : 1000;
+ widths = dict.get("W");
+
+ if (widths) {
+ for (i = 0, ii = widths.length; i < ii; i++) {
+ start = xref.fetchIfRef(widths[i++]);
+ code = xref.fetchIfRef(widths[i]);
+
+ if (Array.isArray(code)) {
+ for (j = 0, jj = code.length; j < jj; j++) {
+ glyphsWidths[start++] = xref.fetchIfRef(code[j]);
+ }
+ } else {
+ var width = xref.fetchIfRef(widths[++i]);
+
+ for (j = start; j <= code; j++) {
+ glyphsWidths[j] = width;
+ }
+ }
+ }
+ }
+
+ if (properties.vertical) {
+ var vmetrics = dict.getArray("DW2") || [880, -1000];
+ defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];
+ vmetrics = dict.get("W2");
+
+ if (vmetrics) {
+ for (i = 0, ii = vmetrics.length; i < ii; i++) {
+ start = xref.fetchIfRef(vmetrics[i++]);
+ code = xref.fetchIfRef(vmetrics[i]);
+
+ if (Array.isArray(code)) {
+ for (j = 0, jj = code.length; j < jj; j++) {
+ glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];
+ }
+ } else {
+ var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];
+
+ for (j = start; j <= code; j++) {
+ glyphsVMetrics[j] = vmetric;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ var firstChar = properties.firstChar;
+ widths = dict.get("Widths");
+
+ if (widths) {
+ j = firstChar;
+
+ for (i = 0, ii = widths.length; i < ii; i++) {
+ glyphsWidths[j++] = xref.fetchIfRef(widths[i]);
+ }
+
+ defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0;
+ } else {
+ var baseFontName = dict.get("BaseFont");
+
+ if ((0, _primitives.isName)(baseFontName)) {
+ var metrics = this.getBaseFontMetrics(baseFontName.name);
+ glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);
+ defaultWidth = metrics.defaultWidth;
+ }
+ }
+ }
+
+ var isMonospace = true;
+ var firstWidth = defaultWidth;
+
+ for (var glyph in glyphsWidths) {
+ var glyphWidth = glyphsWidths[glyph];
+
+ if (!glyphWidth) {
+ continue;
+ }
+
+ if (!firstWidth) {
+ firstWidth = glyphWidth;
+ continue;
+ }
+
+ if (firstWidth !== glyphWidth) {
+ isMonospace = false;
+ break;
+ }
+ }
+
+ if (isMonospace) {
+ properties.flags |= _fonts.FontFlags.FixedPitch;
+ }
+
+ properties.defaultWidth = defaultWidth;
+ properties.widths = glyphsWidths;
+ properties.defaultVMetrics = defaultVMetrics;
+ properties.vmetrics = glyphsVMetrics;
+ },
+ isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) {
+ var fontNameWoStyle = baseFontName.split("-")[0];
+ return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1;
+ },
+ getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) {
+ var defaultWidth = 0;
+ var widths = [];
+ var monospace = false;
+ var stdFontMap = (0, _standard_fonts.getStdFontMap)();
+ var lookupName = stdFontMap[name] || name;
+ var Metrics = (0, _metrics.getMetrics)();
+
+ if (!(lookupName in Metrics)) {
+ if (this.isSerifFont(name)) {
+ lookupName = "Times-Roman";
+ } else {
+ lookupName = "Helvetica";
+ }
+ }
+
+ var glyphWidths = Metrics[lookupName];
+
+ if ((0, _util.isNum)(glyphWidths)) {
+ defaultWidth = glyphWidths;
+ monospace = true;
+ } else {
+ widths = glyphWidths();
+ }
+
+ return {
+ defaultWidth,
+ monospace,
+ widths
+ };
+ },
+ buildCharCodeToWidth: function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, properties) {
+ var widths = Object.create(null);
+ var differences = properties.differences;
+ var encoding = properties.defaultEncoding;
+
+ for (var charCode = 0; charCode < 256; charCode++) {
+ if (charCode in differences && widthsByGlyphName[differences[charCode]]) {
+ widths[charCode] = widthsByGlyphName[differences[charCode]];
+ continue;
+ }
+
+ if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {
+ widths[charCode] = widthsByGlyphName[encoding[charCode]];
+ continue;
+ }
+ }
+
+ return widths;
+ },
+ preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict) {
+ var baseDict = dict;
+ var type = dict.get("Subtype");
+
+ if (!(0, _primitives.isName)(type)) {
+ throw new _util.FormatError("invalid font Subtype");
+ }
+
+ var composite = false;
+ var uint8array;
+
+ if (type.name === "Type0") {
+ var df = dict.get("DescendantFonts");
+
+ if (!df) {
+ throw new _util.FormatError("Descendant fonts are not specified");
+ }
+
+ dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;
+ type = dict.get("Subtype");
+
+ if (!(0, _primitives.isName)(type)) {
+ throw new _util.FormatError("invalid font Subtype");
+ }
+
+ composite = true;
+ }
+
+ var descriptor = dict.get("FontDescriptor");
+
+ if (descriptor) {
+ var hash = new _murmurhash.MurmurHash3_64();
+ var encoding = baseDict.getRaw("Encoding");
+
+ if ((0, _primitives.isName)(encoding)) {
+ hash.update(encoding.name);
+ } else if ((0, _primitives.isRef)(encoding)) {
+ hash.update(encoding.toString());
+ } else if ((0, _primitives.isDict)(encoding)) {
+ var keys = encoding.getKeys();
+
+ for (var i = 0, ii = keys.length; i < ii; i++) {
+ var entry = encoding.getRaw(keys[i]);
+
+ if ((0, _primitives.isName)(entry)) {
+ hash.update(entry.name);
+ } else if ((0, _primitives.isRef)(entry)) {
+ hash.update(entry.toString());
+ } else if (Array.isArray(entry)) {
+ var diffLength = entry.length,
+ diffBuf = new Array(diffLength);
+
+ for (var j = 0; j < diffLength; j++) {
+ var diffEntry = entry[j];
+
+ if ((0, _primitives.isName)(diffEntry)) {
+ diffBuf[j] = diffEntry.name;
+ } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) {
+ diffBuf[j] = diffEntry.toString();
+ }
+ }
+
+ hash.update(diffBuf.join());
+ }
+ }
+ }
+
+ const firstChar = dict.get("FirstChar") || 0;
+ const lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff);
+ hash.update(`${firstChar}-${lastChar}`);
+ var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
+
+ if ((0, _primitives.isStream)(toUnicode)) {
+ var stream = toUnicode.str || toUnicode;
+ uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);
+ hash.update(uint8array);
+ } else if ((0, _primitives.isName)(toUnicode)) {
+ hash.update(toUnicode.name);
+ }
+
+ var widths = dict.get("Widths") || baseDict.get("Widths");
+
+ if (widths) {
+ uint8array = new Uint8Array(new Uint32Array(widths).buffer);
+ hash.update(uint8array);
+ }
+ }
+
+ return {
+ descriptor,
+ dict,
+ baseDict,
+ composite,
+ type: type.name,
+ hash: hash ? hash.hexdigest() : ""
+ };
+ },
+ translateFont: function PartialEvaluator_translateFont(preEvaluatedFont) {
+ var baseDict = preEvaluatedFont.baseDict;
+ var dict = preEvaluatedFont.dict;
+ var composite = preEvaluatedFont.composite;
+ var descriptor = preEvaluatedFont.descriptor;
+ var type = preEvaluatedFont.type;
+ var maxCharIndex = composite ? 0xffff : 0xff;
+ var properties;
+ const firstChar = dict.get("FirstChar") || 0;
+ const lastChar = dict.get("LastChar") || maxCharIndex;
+
+ if (!descriptor) {
+ if (type === "Type3") {
+ descriptor = new _primitives.Dict(null);
+ descriptor.set("FontName", _primitives.Name.get(type));
+ descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]);
+ } else {
+ var baseFontName = dict.get("BaseFont");
+
+ if (!(0, _primitives.isName)(baseFontName)) {
+ throw new _util.FormatError("Base font is not specified");
+ }
+
+ baseFontName = baseFontName.name.replace(/[,_]/g, "-");
+ var metrics = this.getBaseFontMetrics(baseFontName);
+ var fontNameWoStyle = baseFontName.split("-")[0];
+ var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic);
+ properties = {
+ type,
+ name: baseFontName,
+ widths: metrics.widths,
+ defaultWidth: metrics.defaultWidth,
+ flags,
+ firstChar,
+ lastChar
+ };
+ const widths = dict.get("Widths");
+ return this.extractDataStructures(dict, dict, properties).then(newProperties => {
+ if (widths) {
+ const glyphWidths = [];
+ let j = firstChar;
+
+ for (let i = 0, ii = widths.length; i < ii; i++) {
+ glyphWidths[j++] = this.xref.fetchIfRef(widths[i]);
+ }
+
+ newProperties.widths = glyphWidths;
+ } else {
+ newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties);
+ }
+
+ return new _fonts.Font(baseFontName, null, newProperties);
+ });
+ }
+ }
+
+ var fontName = descriptor.get("FontName");
+ var baseFont = dict.get("BaseFont");
+
+ if ((0, _util.isString)(fontName)) {
+ fontName = _primitives.Name.get(fontName);
+ }
+
+ if ((0, _util.isString)(baseFont)) {
+ baseFont = _primitives.Name.get(baseFont);
+ }
+
+ if (type !== "Type3") {
+ var fontNameStr = fontName && fontName.name;
+ var baseFontStr = baseFont && baseFont.name;
+
+ if (fontNameStr !== baseFontStr) {
+ (0, _util.info)(`The FontDescriptor\'s FontName is "${fontNameStr}" but ` + `should be the same as the Font\'s BaseFont "${baseFontStr}".`);
+
+ if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) {
+ fontName = baseFont;
+ }
+ }
+ }
+
+ fontName = fontName || baseFont;
+
+ if (!(0, _primitives.isName)(fontName)) {
+ throw new _util.FormatError("invalid font name");
+ }
+
+ var fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3");
+
+ if (fontFile) {
+ if (fontFile.dict) {
+ var subtype = fontFile.dict.get("Subtype");
+
+ if (subtype) {
+ subtype = subtype.name;
+ }
+
+ var length1 = fontFile.dict.get("Length1");
+ var length2 = fontFile.dict.get("Length2");
+ var length3 = fontFile.dict.get("Length3");
+ }
+ }
+
+ properties = {
+ type,
+ name: fontName.name,
+ subtype,
+ file: fontFile,
+ length1,
+ length2,
+ length3,
+ loadedName: baseDict.loadedName,
+ composite,
+ fixedPitch: false,
+ fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX,
+ firstChar: firstChar || 0,
+ lastChar: lastChar || maxCharIndex,
+ bbox: descriptor.getArray("FontBBox"),
+ ascent: descriptor.get("Ascent"),
+ descent: descriptor.get("Descent"),
+ xHeight: descriptor.get("XHeight"),
+ capHeight: descriptor.get("CapHeight"),
+ flags: descriptor.get("Flags"),
+ italicAngle: descriptor.get("ItalicAngle"),
+ isType3Font: false
+ };
+ var cMapPromise;
+
+ if (composite) {
+ var cidEncoding = baseDict.get("Encoding");
+
+ if ((0, _primitives.isName)(cidEncoding)) {
+ properties.cidEncoding = cidEncoding.name;
+ }
+
+ cMapPromise = _cmap.CMapFactory.create({
+ encoding: cidEncoding,
+ fetchBuiltInCMap: this.fetchBuiltInCMap,
+ useCMap: null
+ }).then(function (cMap) {
+ properties.cMap = cMap;
+ properties.vertical = properties.cMap.vertical;
+ });
+ } else {
+ cMapPromise = Promise.resolve(undefined);
+ }
+
+ return cMapPromise.then(() => {
+ return this.extractDataStructures(dict, baseDict, properties);
+ }).then(newProperties => {
+ this.extractWidths(dict, descriptor, newProperties);
+
+ if (type === "Type3") {
+ newProperties.isType3Font = true;
+ }
+
+ return new _fonts.Font(fontName.name, fontFile, newProperties);
+ });
+ }
+ };
+
+ PartialEvaluator.buildFontPaths = function (font, glyphs, handler) {
+ function buildPath(fontChar) {
+ if (font.renderer.hasBuiltPath(fontChar)) {
+ return;
+ }
+
+ handler.send("commonobj", [`${font.loadedName}_path_${fontChar}`, "FontPath", font.renderer.getPathJs(fontChar)]);
+ }
+
+ for (const glyph of glyphs) {
+ buildPath(glyph.fontChar);
+ const accent = glyph.accent;
+
+ if (accent && accent.fontChar) {
+ buildPath(accent.fontChar);
+ }
+ }
+ };
+
+ PartialEvaluator.getFallbackFontDict = function () {
+ if (this._fallbackFontDict) {
+ return this._fallbackFontDict;
+ }
+
+ const dict = new _primitives.Dict();
+ dict.set("BaseFont", _primitives.Name.get("PDFJS-FallbackFont"));
+ dict.set("Type", _primitives.Name.get("FallbackType"));
+ dict.set("Subtype", _primitives.Name.get("FallbackType"));
+ dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding"));
+ return this._fallbackFontDict = dict;
+ };
+
+ return PartialEvaluator;
+}();
+
+exports.PartialEvaluator = PartialEvaluator;
+
+class TranslatedFont {
+ constructor({
+ loadedName,
+ font,
+ dict,
+ extraProperties = false
+ }) {
+ this.loadedName = loadedName;
+ this.font = font;
+ this.dict = dict;
+ this._extraProperties = extraProperties;
+ this.type3Loaded = null;
+ this.sent = false;
+ }
+
+ send(handler) {
+ if (this.sent) {
+ return;
+ }
+
+ this.sent = true;
+ handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._extraProperties)]);
+ }
+
+ fallback(handler) {
+ if (!this.font.data) {
+ return;
+ }
+
+ this.font.disableFontFace = true;
+ const glyphs = this.font.glyphCacheValues;
+ PartialEvaluator.buildFontPaths(this.font, glyphs, handler);
+ }
+
+ loadType3Data(evaluator, resources, parentOperatorList, task) {
+ if (!this.font.isType3Font) {
+ throw new Error("Must be a Type3 font.");
+ }
+
+ if (this.type3Loaded) {
+ return this.type3Loaded;
+ }
+
+ var type3Options = Object.create(evaluator.options);
+ type3Options.ignoreErrors = false;
+ var type3Evaluator = evaluator.clone(type3Options);
+ type3Evaluator.parsingType3Font = true;
+ var translatedFont = this.font;
+ var loadCharProcsPromise = Promise.resolve();
+ var charProcs = this.dict.get("CharProcs");
+ var fontResources = this.dict.get("Resources") || resources;
+ var charProcKeys = charProcs.getKeys();
+ var charProcOperatorList = Object.create(null);
+
+ for (var i = 0, n = charProcKeys.length; i < n; ++i) {
+ const key = charProcKeys[i];
+ loadCharProcsPromise = loadCharProcsPromise.then(function () {
+ var glyphStream = charProcs.get(key);
+ var operatorList = new _operator_list.OperatorList();
+ return type3Evaluator.getOperatorList({
+ stream: glyphStream,
+ task,
+ resources: fontResources,
+ operatorList
+ }).then(function () {
+ charProcOperatorList[key] = operatorList.getIR();
+ parentOperatorList.addDependencies(operatorList.dependencies);
+ }).catch(function (reason) {
+ (0, _util.warn)(`Type3 font resource "${key}" is not available.`);
+ const dummyOperatorList = new _operator_list.OperatorList();
+ charProcOperatorList[key] = dummyOperatorList.getIR();
+ });
+ });
+ }
+
+ this.type3Loaded = loadCharProcsPromise.then(function () {
+ translatedFont.charProcOperatorList = charProcOperatorList;
+ });
+ return this.type3Loaded;
+ }
+
+}
+
+var StateManager = function StateManagerClosure() {
+ function StateManager(initialState) {
+ this.state = initialState;
+ this.stateStack = [];
+ }
+
+ StateManager.prototype = {
+ save() {
+ var old = this.state;
+ this.stateStack.push(this.state);
+ this.state = old.clone();
+ },
+
+ restore() {
+ var prev = this.stateStack.pop();
+
+ if (prev) {
+ this.state = prev;
+ }
+ },
+
+ transform(args) {
+ this.state.ctm = _util.Util.transform(this.state.ctm, args);
+ }
+
+ };
+ return StateManager;
+}();
+
+var TextState = function TextStateClosure() {
+ function TextState() {
+ this.ctm = new Float32Array(_util.IDENTITY_MATRIX);
+ this.fontName = null;
+ this.fontSize = 0;
+ this.font = null;
+ this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
+ this.textMatrix = _util.IDENTITY_MATRIX.slice();
+ this.textLineMatrix = _util.IDENTITY_MATRIX.slice();
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.leading = 0;
+ this.textHScale = 1;
+ this.textRise = 0;
+ }
+
+ TextState.prototype = {
+ setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
+ var m = this.textMatrix;
+ m[0] = a;
+ m[1] = b;
+ m[2] = c;
+ m[3] = d;
+ m[4] = e;
+ m[5] = f;
+ },
+ setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
+ var m = this.textLineMatrix;
+ m[0] = a;
+ m[1] = b;
+ m[2] = c;
+ m[3] = d;
+ m[4] = e;
+ m[5] = f;
+ },
+ translateTextMatrix: function TextState_translateTextMatrix(x, y) {
+ var m = this.textMatrix;
+ m[4] = m[0] * x + m[2] * y + m[4];
+ m[5] = m[1] * x + m[3] * y + m[5];
+ },
+ translateTextLineMatrix: function TextState_translateTextMatrix(x, y) {
+ var m = this.textLineMatrix;
+ m[4] = m[0] * x + m[2] * y + m[4];
+ m[5] = m[1] * x + m[3] * y + m[5];
+ },
+ calcTextLineMatrixAdvance: function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) {
+ var font = this.font;
+
+ if (!font) {
+ return null;
+ }
+
+ var m = this.textLineMatrix;
+
+ if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {
+ return null;
+ }
+
+ var txDiff = e - m[4],
+ tyDiff = f - m[5];
+
+ if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) {
+ return null;
+ }
+
+ var tx,
+ ty,
+ denominator = a * d - b * c;
+
+ if (font.vertical) {
+ tx = -tyDiff * c / denominator;
+ ty = tyDiff * a / denominator;
+ } else {
+ tx = txDiff * d / denominator;
+ ty = -txDiff * b / denominator;
+ }
+
+ return {
+ width: tx,
+ height: ty,
+ value: font.vertical ? ty : tx
+ };
+ },
+ calcRenderMatrix: function TextState_calcRendeMatrix(ctm) {
+ var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise];
+ return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm));
+ },
+ carriageReturn: function TextState_carriageReturn() {
+ this.translateTextLineMatrix(0, -this.leading);
+ this.textMatrix = this.textLineMatrix.slice();
+ },
+ clone: function TextState_clone() {
+ var clone = Object.create(this);
+ clone.textMatrix = this.textMatrix.slice();
+ clone.textLineMatrix = this.textLineMatrix.slice();
+ clone.fontMatrix = this.fontMatrix.slice();
+ return clone;
+ }
+ };
+ return TextState;
+}();
+
+var EvalState = function EvalStateClosure() {
+ function EvalState() {
+ this.ctm = new Float32Array(_util.IDENTITY_MATRIX);
+ this.font = null;
+ this.textRenderingMode = _util.TextRenderingMode.FILL;
+ this.fillColorSpace = _colorspace.ColorSpace.singletons.gray;
+ this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;
+ }
+
+ EvalState.prototype = {
+ clone: function CanvasExtraState_clone() {
+ return Object.create(this);
+ }
+ };
+ return EvalState;
+}();
+
+var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
+ var getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.w = {
+ id: _util.OPS.setLineWidth,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.J = {
+ id: _util.OPS.setLineCap,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.j = {
+ id: _util.OPS.setLineJoin,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.M = {
+ id: _util.OPS.setMiterLimit,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.d = {
+ id: _util.OPS.setDash,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.ri = {
+ id: _util.OPS.setRenderingIntent,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.i = {
+ id: _util.OPS.setFlatness,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.gs = {
+ id: _util.OPS.setGState,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.q = {
+ id: _util.OPS.save,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.Q = {
+ id: _util.OPS.restore,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.cm = {
+ id: _util.OPS.transform,
+ numArgs: 6,
+ variableArgs: false
+ };
+ t.m = {
+ id: _util.OPS.moveTo,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.l = {
+ id: _util.OPS.lineTo,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.c = {
+ id: _util.OPS.curveTo,
+ numArgs: 6,
+ variableArgs: false
+ };
+ t.v = {
+ id: _util.OPS.curveTo2,
+ numArgs: 4,
+ variableArgs: false
+ };
+ t.y = {
+ id: _util.OPS.curveTo3,
+ numArgs: 4,
+ variableArgs: false
+ };
+ t.h = {
+ id: _util.OPS.closePath,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.re = {
+ id: _util.OPS.rectangle,
+ numArgs: 4,
+ variableArgs: false
+ };
+ t.S = {
+ id: _util.OPS.stroke,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.s = {
+ id: _util.OPS.closeStroke,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.f = {
+ id: _util.OPS.fill,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.F = {
+ id: _util.OPS.fill,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t["f*"] = {
+ id: _util.OPS.eoFill,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.B = {
+ id: _util.OPS.fillStroke,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t["B*"] = {
+ id: _util.OPS.eoFillStroke,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.b = {
+ id: _util.OPS.closeFillStroke,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t["b*"] = {
+ id: _util.OPS.closeEOFillStroke,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.n = {
+ id: _util.OPS.endPath,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.W = {
+ id: _util.OPS.clip,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t["W*"] = {
+ id: _util.OPS.eoClip,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.BT = {
+ id: _util.OPS.beginText,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.ET = {
+ id: _util.OPS.endText,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.Tc = {
+ id: _util.OPS.setCharSpacing,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.Tw = {
+ id: _util.OPS.setWordSpacing,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.Tz = {
+ id: _util.OPS.setHScale,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.TL = {
+ id: _util.OPS.setLeading,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.Tf = {
+ id: _util.OPS.setFont,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.Tr = {
+ id: _util.OPS.setTextRenderingMode,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.Ts = {
+ id: _util.OPS.setTextRise,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.Td = {
+ id: _util.OPS.moveText,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.TD = {
+ id: _util.OPS.setLeadingMoveText,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.Tm = {
+ id: _util.OPS.setTextMatrix,
+ numArgs: 6,
+ variableArgs: false
+ };
+ t["T*"] = {
+ id: _util.OPS.nextLine,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.Tj = {
+ id: _util.OPS.showText,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.TJ = {
+ id: _util.OPS.showSpacedText,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t["'"] = {
+ id: _util.OPS.nextLineShowText,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t['"'] = {
+ id: _util.OPS.nextLineSetSpacingShowText,
+ numArgs: 3,
+ variableArgs: false
+ };
+ t.d0 = {
+ id: _util.OPS.setCharWidth,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.d1 = {
+ id: _util.OPS.setCharWidthAndBounds,
+ numArgs: 6,
+ variableArgs: false
+ };
+ t.CS = {
+ id: _util.OPS.setStrokeColorSpace,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.cs = {
+ id: _util.OPS.setFillColorSpace,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.SC = {
+ id: _util.OPS.setStrokeColor,
+ numArgs: 4,
+ variableArgs: true
+ };
+ t.SCN = {
+ id: _util.OPS.setStrokeColorN,
+ numArgs: 33,
+ variableArgs: true
+ };
+ t.sc = {
+ id: _util.OPS.setFillColor,
+ numArgs: 4,
+ variableArgs: true
+ };
+ t.scn = {
+ id: _util.OPS.setFillColorN,
+ numArgs: 33,
+ variableArgs: true
+ };
+ t.G = {
+ id: _util.OPS.setStrokeGray,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.g = {
+ id: _util.OPS.setFillGray,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.RG = {
+ id: _util.OPS.setStrokeRGBColor,
+ numArgs: 3,
+ variableArgs: false
+ };
+ t.rg = {
+ id: _util.OPS.setFillRGBColor,
+ numArgs: 3,
+ variableArgs: false
+ };
+ t.K = {
+ id: _util.OPS.setStrokeCMYKColor,
+ numArgs: 4,
+ variableArgs: false
+ };
+ t.k = {
+ id: _util.OPS.setFillCMYKColor,
+ numArgs: 4,
+ variableArgs: false
+ };
+ t.sh = {
+ id: _util.OPS.shadingFill,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.BI = {
+ id: _util.OPS.beginInlineImage,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.ID = {
+ id: _util.OPS.beginImageData,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.EI = {
+ id: _util.OPS.endInlineImage,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.Do = {
+ id: _util.OPS.paintXObject,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.MP = {
+ id: _util.OPS.markPoint,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.DP = {
+ id: _util.OPS.markPointProps,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.BMC = {
+ id: _util.OPS.beginMarkedContent,
+ numArgs: 1,
+ variableArgs: false
+ };
+ t.BDC = {
+ id: _util.OPS.beginMarkedContentProps,
+ numArgs: 2,
+ variableArgs: false
+ };
+ t.EMC = {
+ id: _util.OPS.endMarkedContent,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.BX = {
+ id: _util.OPS.beginCompat,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.EX = {
+ id: _util.OPS.endCompat,
+ numArgs: 0,
+ variableArgs: false
+ };
+ t.BM = null;
+ t.BD = null;
+ t.true = null;
+ t.fa = null;
+ t.fal = null;
+ t.fals = null;
+ t.false = null;
+ t.nu = null;
+ t.nul = null;
+ t.null = null;
+ });
+ const MAX_INVALID_PATH_OPS = 20;
+
+ function EvaluatorPreprocessor(stream, xref, stateManager) {
+ this.opMap = getOPMap();
+ this.parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream, this.opMap),
+ xref
+ });
+ this.stateManager = stateManager;
+ this.nonProcessedArgs = [];
+ this._numInvalidPathOPS = 0;
+ }
+
+ EvaluatorPreprocessor.prototype = {
+ get savedStatesDepth() {
+ return this.stateManager.stateStack.length;
+ },
+
+ read: function EvaluatorPreprocessor_read(operation) {
+ var args = operation.args;
+
+ while (true) {
+ var obj = this.parser.getObj();
+
+ if (obj instanceof _primitives.Cmd) {
+ var cmd = obj.cmd;
+ var opSpec = this.opMap[cmd];
+
+ if (!opSpec) {
+ (0, _util.warn)(`Unknown command "${cmd}".`);
+ continue;
+ }
+
+ var fn = opSpec.id;
+ var numArgs = opSpec.numArgs;
+ var argsLength = args !== null ? args.length : 0;
+
+ if (!opSpec.variableArgs) {
+ if (argsLength !== numArgs) {
+ var nonProcessedArgs = this.nonProcessedArgs;
+
+ while (argsLength > numArgs) {
+ nonProcessedArgs.push(args.shift());
+ argsLength--;
+ }
+
+ while (argsLength < numArgs && nonProcessedArgs.length !== 0) {
+ if (args === null) {
+ args = [];
+ }
+
+ args.unshift(nonProcessedArgs.pop());
+ argsLength++;
+ }
+ }
+
+ if (argsLength < numArgs) {
+ const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`;
+
+ if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > MAX_INVALID_PATH_OPS) {
+ throw new _util.FormatError(`Invalid ${partialMsg}`);
+ }
+
+ (0, _util.warn)(`Skipping ${partialMsg}`);
+
+ if (args !== null) {
+ args.length = 0;
+ }
+
+ continue;
+ }
+ } else if (argsLength > numArgs) {
+ (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`);
+ }
+
+ this.preprocessCommand(fn, args);
+ operation.fn = fn;
+ operation.args = args;
+ return true;
+ }
+
+ if (obj === _primitives.EOF) {
+ return false;
+ }
+
+ if (obj !== null) {
+ if (args === null) {
+ args = [];
+ }
+
+ args.push(obj);
+
+ if (args.length > 33) {
+ throw new _util.FormatError("Too many arguments");
+ }
+ }
+ }
+ },
+ preprocessCommand: function EvaluatorPreprocessor_preprocessCommand(fn, args) {
+ switch (fn | 0) {
+ case _util.OPS.save:
+ this.stateManager.save();
+ break;
+
+ case _util.OPS.restore:
+ this.stateManager.restore();
+ break;
+
+ case _util.OPS.transform:
+ this.stateManager.transform(args);
+ break;
+ }
+ }
+ };
+ return EvaluatorPreprocessor;
+}();
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _parser = __w_pdfjs_require__(11);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _stream = __w_pdfjs_require__(12);
+
+var BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"];
+const MAX_MAP_RANGE = 2 ** 24 - 1;
+
+class CMap {
+ constructor(builtInCMap = false) {
+ this.codespaceRanges = [[], [], [], []];
+ this.numCodespaceRanges = 0;
+ this._map = [];
+ this.name = "";
+ this.vertical = false;
+ this.useCMap = null;
+ this.builtInCMap = builtInCMap;
+ }
+
+ addCodespaceRange(n, low, high) {
+ this.codespaceRanges[n - 1].push(low, high);
+ this.numCodespaceRanges++;
+ }
+
+ mapCidRange(low, high, dstLow) {
+ if (high - low > MAX_MAP_RANGE) {
+ throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");
+ }
+
+ while (low <= high) {
+ this._map[low++] = dstLow++;
+ }
+ }
+
+ mapBfRange(low, high, dstLow) {
+ if (high - low > MAX_MAP_RANGE) {
+ throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");
+ }
+
+ var lastByte = dstLow.length - 1;
+
+ while (low <= high) {
+ this._map[low++] = dstLow;
+ dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);
+ }
+ }
+
+ mapBfRangeToArray(low, high, array) {
+ if (high - low > MAX_MAP_RANGE) {
+ throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");
+ }
+
+ const ii = array.length;
+ let i = 0;
+
+ while (low <= high && i < ii) {
+ this._map[low] = array[i++];
+ ++low;
+ }
+ }
+
+ mapOne(src, dst) {
+ this._map[src] = dst;
+ }
+
+ lookup(code) {
+ return this._map[code];
+ }
+
+ contains(code) {
+ return this._map[code] !== undefined;
+ }
+
+ forEach(callback) {
+ const map = this._map;
+ const length = map.length;
+
+ if (length <= 0x10000) {
+ for (let i = 0; i < length; i++) {
+ if (map[i] !== undefined) {
+ callback(i, map[i]);
+ }
+ }
+ } else {
+ for (const i in map) {
+ callback(i, map[i]);
+ }
+ }
+ }
+
+ charCodeOf(value) {
+ const map = this._map;
+
+ if (map.length <= 0x10000) {
+ return map.indexOf(value);
+ }
+
+ for (const charCode in map) {
+ if (map[charCode] === value) {
+ return charCode | 0;
+ }
+ }
+
+ return -1;
+ }
+
+ getMap() {
+ return this._map;
+ }
+
+ readCharCode(str, offset, out) {
+ let c = 0;
+ const codespaceRanges = this.codespaceRanges;
+
+ for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
+ c = (c << 8 | str.charCodeAt(offset + n)) >>> 0;
+ const codespaceRange = codespaceRanges[n];
+
+ for (let k = 0, kk = codespaceRange.length; k < kk;) {
+ const low = codespaceRange[k++];
+ const high = codespaceRange[k++];
+
+ if (c >= low && c <= high) {
+ out.charcode = c;
+ out.length = n + 1;
+ return;
+ }
+ }
+ }
+
+ out.charcode = 0;
+ out.length = 1;
+ }
+
+ get length() {
+ return this._map.length;
+ }
+
+ get isIdentityCMap() {
+ if (!(this.name === "Identity-H" || this.name === "Identity-V")) {
+ return false;
+ }
+
+ if (this._map.length !== 0x10000) {
+ return false;
+ }
+
+ for (let i = 0; i < 0x10000; i++) {
+ if (this._map[i] !== i) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+}
+
+exports.CMap = CMap;
+
+class IdentityCMap extends CMap {
+ constructor(vertical, n) {
+ super();
+ this.vertical = vertical;
+ this.addCodespaceRange(n, 0, 0xffff);
+ }
+
+ mapCidRange(low, high, dstLow) {
+ (0, _util.unreachable)("should not call mapCidRange");
+ }
+
+ mapBfRange(low, high, dstLow) {
+ (0, _util.unreachable)("should not call mapBfRange");
+ }
+
+ mapBfRangeToArray(low, high, array) {
+ (0, _util.unreachable)("should not call mapBfRangeToArray");
+ }
+
+ mapOne(src, dst) {
+ (0, _util.unreachable)("should not call mapCidOne");
+ }
+
+ lookup(code) {
+ return Number.isInteger(code) && code <= 0xffff ? code : undefined;
+ }
+
+ contains(code) {
+ return Number.isInteger(code) && code <= 0xffff;
+ }
+
+ forEach(callback) {
+ for (let i = 0; i <= 0xffff; i++) {
+ callback(i, i);
+ }
+ }
+
+ charCodeOf(value) {
+ return Number.isInteger(value) && value <= 0xffff ? value : -1;
+ }
+
+ getMap() {
+ const map = new Array(0x10000);
+
+ for (let i = 0; i <= 0xffff; i++) {
+ map[i] = i;
+ }
+
+ return map;
+ }
+
+ get length() {
+ return 0x10000;
+ }
+
+ get isIdentityCMap() {
+ (0, _util.unreachable)("should not access .isIdentityCMap");
+ }
+
+}
+
+exports.IdentityCMap = IdentityCMap;
+
+var BinaryCMapReader = function BinaryCMapReaderClosure() {
+ function hexToInt(a, size) {
+ var n = 0;
+
+ for (var i = 0; i <= size; i++) {
+ n = n << 8 | a[i];
+ }
+
+ return n >>> 0;
+ }
+
+ function hexToStr(a, size) {
+ if (size === 1) {
+ return String.fromCharCode(a[0], a[1]);
+ }
+
+ if (size === 3) {
+ return String.fromCharCode(a[0], a[1], a[2], a[3]);
+ }
+
+ return String.fromCharCode.apply(null, a.subarray(0, size + 1));
+ }
+
+ function addHex(a, b, size) {
+ var c = 0;
+
+ for (var i = size; i >= 0; i--) {
+ c += a[i] + b[i];
+ a[i] = c & 255;
+ c >>= 8;
+ }
+ }
+
+ function incHex(a, size) {
+ var c = 1;
+
+ for (var i = size; i >= 0 && c > 0; i--) {
+ c += a[i];
+ a[i] = c & 255;
+ c >>= 8;
+ }
+ }
+
+ var MAX_NUM_SIZE = 16;
+ var MAX_ENCODED_NUM_SIZE = 19;
+
+ function BinaryCMapStream(data) {
+ this.buffer = data;
+ this.pos = 0;
+ this.end = data.length;
+ this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
+ }
+
+ BinaryCMapStream.prototype = {
+ readByte() {
+ if (this.pos >= this.end) {
+ return -1;
+ }
+
+ return this.buffer[this.pos++];
+ },
+
+ readNumber() {
+ var n = 0;
+ var last;
+
+ do {
+ var b = this.readByte();
+
+ if (b < 0) {
+ throw new _util.FormatError("unexpected EOF in bcmap");
+ }
+
+ last = !(b & 0x80);
+ n = n << 7 | b & 0x7f;
+ } while (!last);
+
+ return n;
+ },
+
+ readSigned() {
+ var n = this.readNumber();
+ return n & 1 ? ~(n >>> 1) : n >>> 1;
+ },
+
+ readHex(num, size) {
+ num.set(this.buffer.subarray(this.pos, this.pos + size + 1));
+ this.pos += size + 1;
+ },
+
+ readHexNumber(num, size) {
+ var last;
+ var stack = this.tmpBuf,
+ sp = 0;
+
+ do {
+ var b = this.readByte();
+
+ if (b < 0) {
+ throw new _util.FormatError("unexpected EOF in bcmap");
+ }
+
+ last = !(b & 0x80);
+ stack[sp++] = b & 0x7f;
+ } while (!last);
+
+ var i = size,
+ buffer = 0,
+ bufferSize = 0;
+
+ while (i >= 0) {
+ while (bufferSize < 8 && stack.length > 0) {
+ buffer = stack[--sp] << bufferSize | buffer;
+ bufferSize += 7;
+ }
+
+ num[i] = buffer & 255;
+ i--;
+ buffer >>= 8;
+ bufferSize -= 8;
+ }
+ },
+
+ readHexSigned(num, size) {
+ this.readHexNumber(num, size);
+ var sign = num[size] & 1 ? 255 : 0;
+ var c = 0;
+
+ for (var i = 0; i <= size; i++) {
+ c = (c & 1) << 8 | num[i];
+ num[i] = c >> 1 ^ sign;
+ }
+ },
+
+ readString() {
+ var len = this.readNumber();
+ var s = "";
+
+ for (var i = 0; i < len; i++) {
+ s += String.fromCharCode(this.readNumber());
+ }
+
+ return s;
+ }
+
+ };
+
+ function processBinaryCMap(data, cMap, extend) {
+ return new Promise(function (resolve, reject) {
+ var stream = new BinaryCMapStream(data);
+ var header = stream.readByte();
+ cMap.vertical = !!(header & 1);
+ var useCMap = null;
+ var start = new Uint8Array(MAX_NUM_SIZE);
+ var end = new Uint8Array(MAX_NUM_SIZE);
+ var char = new Uint8Array(MAX_NUM_SIZE);
+ var charCode = new Uint8Array(MAX_NUM_SIZE);
+ var tmp = new Uint8Array(MAX_NUM_SIZE);
+ var code;
+ var b;
+
+ while ((b = stream.readByte()) >= 0) {
+ var type = b >> 5;
+
+ if (type === 7) {
+ switch (b & 0x1f) {
+ case 0:
+ stream.readString();
+ break;
+
+ case 1:
+ useCMap = stream.readString();
+ break;
+ }
+
+ continue;
+ }
+
+ var sequence = !!(b & 0x10);
+ var dataSize = b & 15;
+
+ if (dataSize + 1 > MAX_NUM_SIZE) {
+ throw new Error("processBinaryCMap: Invalid dataSize.");
+ }
+
+ var ucs2DataSize = 1;
+ var subitemsCount = stream.readNumber();
+ var i;
+
+ switch (type) {
+ case 0:
+ stream.readHex(start, dataSize);
+ stream.readHexNumber(end, dataSize);
+ addHex(end, start, dataSize);
+ cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));
+
+ for (i = 1; i < subitemsCount; i++) {
+ incHex(end, dataSize);
+ stream.readHexNumber(start, dataSize);
+ addHex(start, end, dataSize);
+ stream.readHexNumber(end, dataSize);
+ addHex(end, start, dataSize);
+ cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));
+ }
+
+ break;
+
+ case 1:
+ stream.readHex(start, dataSize);
+ stream.readHexNumber(end, dataSize);
+ addHex(end, start, dataSize);
+ stream.readNumber();
+
+ for (i = 1; i < subitemsCount; i++) {
+ incHex(end, dataSize);
+ stream.readHexNumber(start, dataSize);
+ addHex(start, end, dataSize);
+ stream.readHexNumber(end, dataSize);
+ addHex(end, start, dataSize);
+ stream.readNumber();
+ }
+
+ break;
+
+ case 2:
+ stream.readHex(char, dataSize);
+ code = stream.readNumber();
+ cMap.mapOne(hexToInt(char, dataSize), code);
+
+ for (i = 1; i < subitemsCount; i++) {
+ incHex(char, dataSize);
+
+ if (!sequence) {
+ stream.readHexNumber(tmp, dataSize);
+ addHex(char, tmp, dataSize);
+ }
+
+ code = stream.readSigned() + (code + 1);
+ cMap.mapOne(hexToInt(char, dataSize), code);
+ }
+
+ break;
+
+ case 3:
+ stream.readHex(start, dataSize);
+ stream.readHexNumber(end, dataSize);
+ addHex(end, start, dataSize);
+ code = stream.readNumber();
+ cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);
+
+ for (i = 1; i < subitemsCount; i++) {
+ incHex(end, dataSize);
+
+ if (!sequence) {
+ stream.readHexNumber(start, dataSize);
+ addHex(start, end, dataSize);
+ } else {
+ start.set(end);
+ }
+
+ stream.readHexNumber(end, dataSize);
+ addHex(end, start, dataSize);
+ code = stream.readNumber();
+ cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);
+ }
+
+ break;
+
+ case 4:
+ stream.readHex(char, ucs2DataSize);
+ stream.readHex(charCode, dataSize);
+ cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));
+
+ for (i = 1; i < subitemsCount; i++) {
+ incHex(char, ucs2DataSize);
+
+ if (!sequence) {
+ stream.readHexNumber(tmp, ucs2DataSize);
+ addHex(char, tmp, ucs2DataSize);
+ }
+
+ incHex(charCode, dataSize);
+ stream.readHexSigned(tmp, dataSize);
+ addHex(charCode, tmp, dataSize);
+ cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));
+ }
+
+ break;
+
+ case 5:
+ stream.readHex(start, ucs2DataSize);
+ stream.readHexNumber(end, ucs2DataSize);
+ addHex(end, start, ucs2DataSize);
+ stream.readHex(charCode, dataSize);
+ cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));
+
+ for (i = 1; i < subitemsCount; i++) {
+ incHex(end, ucs2DataSize);
+
+ if (!sequence) {
+ stream.readHexNumber(start, ucs2DataSize);
+ addHex(start, end, ucs2DataSize);
+ } else {
+ start.set(end);
+ }
+
+ stream.readHexNumber(end, ucs2DataSize);
+ addHex(end, start, ucs2DataSize);
+ stream.readHex(charCode, dataSize);
+ cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));
+ }
+
+ break;
+
+ default:
+ reject(new Error("processBinaryCMap: Unknown type: " + type));
+ return;
+ }
+ }
+
+ if (useCMap) {
+ resolve(extend(useCMap));
+ return;
+ }
+
+ resolve(cMap);
+ });
+ }
+
+ function BinaryCMapReader() {}
+
+ BinaryCMapReader.prototype = {
+ process: processBinaryCMap
+ };
+ return BinaryCMapReader;
+}();
+
+var CMapFactory = function CMapFactoryClosure() {
+ function strToInt(str) {
+ var a = 0;
+
+ for (var i = 0; i < str.length; i++) {
+ a = a << 8 | str.charCodeAt(i);
+ }
+
+ return a >>> 0;
+ }
+
+ function expectString(obj) {
+ if (!(0, _util.isString)(obj)) {
+ throw new _util.FormatError("Malformed CMap: expected string.");
+ }
+ }
+
+ function expectInt(obj) {
+ if (!Number.isInteger(obj)) {
+ throw new _util.FormatError("Malformed CMap: expected int.");
+ }
+ }
+
+ function parseBfChar(cMap, lexer) {
+ while (true) {
+ var obj = lexer.getObj();
+
+ if ((0, _primitives.isEOF)(obj)) {
+ break;
+ }
+
+ if ((0, _primitives.isCmd)(obj, "endbfchar")) {
+ return;
+ }
+
+ expectString(obj);
+ var src = strToInt(obj);
+ obj = lexer.getObj();
+ expectString(obj);
+ var dst = obj;
+ cMap.mapOne(src, dst);
+ }
+ }
+
+ function parseBfRange(cMap, lexer) {
+ while (true) {
+ var obj = lexer.getObj();
+
+ if ((0, _primitives.isEOF)(obj)) {
+ break;
+ }
+
+ if ((0, _primitives.isCmd)(obj, "endbfrange")) {
+ return;
+ }
+
+ expectString(obj);
+ var low = strToInt(obj);
+ obj = lexer.getObj();
+ expectString(obj);
+ var high = strToInt(obj);
+ obj = lexer.getObj();
+
+ if (Number.isInteger(obj) || (0, _util.isString)(obj)) {
+ var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;
+ cMap.mapBfRange(low, high, dstLow);
+ } else if ((0, _primitives.isCmd)(obj, "[")) {
+ obj = lexer.getObj();
+ var array = [];
+
+ while (!(0, _primitives.isCmd)(obj, "]") && !(0, _primitives.isEOF)(obj)) {
+ array.push(obj);
+ obj = lexer.getObj();
+ }
+
+ cMap.mapBfRangeToArray(low, high, array);
+ } else {
+ break;
+ }
+ }
+
+ throw new _util.FormatError("Invalid bf range.");
+ }
+
+ function parseCidChar(cMap, lexer) {
+ while (true) {
+ var obj = lexer.getObj();
+
+ if ((0, _primitives.isEOF)(obj)) {
+ break;
+ }
+
+ if ((0, _primitives.isCmd)(obj, "endcidchar")) {
+ return;
+ }
+
+ expectString(obj);
+ var src = strToInt(obj);
+ obj = lexer.getObj();
+ expectInt(obj);
+ var dst = obj;
+ cMap.mapOne(src, dst);
+ }
+ }
+
+ function parseCidRange(cMap, lexer) {
+ while (true) {
+ var obj = lexer.getObj();
+
+ if ((0, _primitives.isEOF)(obj)) {
+ break;
+ }
+
+ if ((0, _primitives.isCmd)(obj, "endcidrange")) {
+ return;
+ }
+
+ expectString(obj);
+ var low = strToInt(obj);
+ obj = lexer.getObj();
+ expectString(obj);
+ var high = strToInt(obj);
+ obj = lexer.getObj();
+ expectInt(obj);
+ var dstLow = obj;
+ cMap.mapCidRange(low, high, dstLow);
+ }
+ }
+
+ function parseCodespaceRange(cMap, lexer) {
+ while (true) {
+ var obj = lexer.getObj();
+
+ if ((0, _primitives.isEOF)(obj)) {
+ break;
+ }
+
+ if ((0, _primitives.isCmd)(obj, "endcodespacerange")) {
+ return;
+ }
+
+ if (!(0, _util.isString)(obj)) {
+ break;
+ }
+
+ var low = strToInt(obj);
+ obj = lexer.getObj();
+
+ if (!(0, _util.isString)(obj)) {
+ break;
+ }
+
+ var high = strToInt(obj);
+ cMap.addCodespaceRange(obj.length, low, high);
+ }
+
+ throw new _util.FormatError("Invalid codespace range.");
+ }
+
+ function parseWMode(cMap, lexer) {
+ var obj = lexer.getObj();
+
+ if (Number.isInteger(obj)) {
+ cMap.vertical = !!obj;
+ }
+ }
+
+ function parseCMapName(cMap, lexer) {
+ var obj = lexer.getObj();
+
+ if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) {
+ cMap.name = obj.name;
+ }
+ }
+
+ function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {
+ var previous;
+ var embeddedUseCMap;
+
+ objLoop: while (true) {
+ try {
+ var obj = lexer.getObj();
+
+ if ((0, _primitives.isEOF)(obj)) {
+ break;
+ } else if ((0, _primitives.isName)(obj)) {
+ if (obj.name === "WMode") {
+ parseWMode(cMap, lexer);
+ } else if (obj.name === "CMapName") {
+ parseCMapName(cMap, lexer);
+ }
+
+ previous = obj;
+ } else if ((0, _primitives.isCmd)(obj)) {
+ switch (obj.cmd) {
+ case "endcmap":
+ break objLoop;
+
+ case "usecmap":
+ if ((0, _primitives.isName)(previous)) {
+ embeddedUseCMap = previous.name;
+ }
+
+ break;
+
+ case "begincodespacerange":
+ parseCodespaceRange(cMap, lexer);
+ break;
+
+ case "beginbfchar":
+ parseBfChar(cMap, lexer);
+ break;
+
+ case "begincidchar":
+ parseCidChar(cMap, lexer);
+ break;
+
+ case "beginbfrange":
+ parseBfRange(cMap, lexer);
+ break;
+
+ case "begincidrange":
+ parseCidRange(cMap, lexer);
+ break;
+ }
+ }
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Invalid cMap data: " + ex);
+ continue;
+ }
+ }
+
+ if (!useCMap && embeddedUseCMap) {
+ useCMap = embeddedUseCMap;
+ }
+
+ if (useCMap) {
+ return extendCMap(cMap, fetchBuiltInCMap, useCMap);
+ }
+
+ return Promise.resolve(cMap);
+ }
+
+ function extendCMap(cMap, fetchBuiltInCMap, useCMap) {
+ return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) {
+ cMap.useCMap = newCMap;
+
+ if (cMap.numCodespaceRanges === 0) {
+ var useCodespaceRanges = cMap.useCMap.codespaceRanges;
+
+ for (var i = 0; i < useCodespaceRanges.length; i++) {
+ cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
+ }
+
+ cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
+ }
+
+ cMap.useCMap.forEach(function (key, value) {
+ if (!cMap.contains(key)) {
+ cMap.mapOne(key, cMap.useCMap.lookup(key));
+ }
+ });
+ return cMap;
+ });
+ }
+
+ function createBuiltInCMap(name, fetchBuiltInCMap) {
+ if (name === "Identity-H") {
+ return Promise.resolve(new IdentityCMap(false, 2));
+ } else if (name === "Identity-V") {
+ return Promise.resolve(new IdentityCMap(true, 2));
+ }
+
+ if (!BUILT_IN_CMAPS.includes(name)) {
+ return Promise.reject(new Error("Unknown CMap name: " + name));
+ }
+
+ if (!fetchBuiltInCMap) {
+ return Promise.reject(new Error("Built-in CMap parameters are not provided."));
+ }
+
+ return fetchBuiltInCMap(name).then(function (data) {
+ var cMapData = data.cMapData,
+ compressionType = data.compressionType;
+ var cMap = new CMap(true);
+
+ if (compressionType === _util.CMapCompressionType.BINARY) {
+ return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) {
+ return extendCMap(cMap, fetchBuiltInCMap, useCMap);
+ });
+ }
+
+ if (compressionType === _util.CMapCompressionType.NONE) {
+ var lexer = new _parser.Lexer(new _stream.Stream(cMapData));
+ return parseCMap(cMap, lexer, fetchBuiltInCMap, null);
+ }
+
+ return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported."));
+ });
+ }
+
+ return {
+ async create(params) {
+ var encoding = params.encoding;
+ var fetchBuiltInCMap = params.fetchBuiltInCMap;
+ var useCMap = params.useCMap;
+
+ if ((0, _primitives.isName)(encoding)) {
+ return createBuiltInCMap(encoding.name, fetchBuiltInCMap);
+ } else if ((0, _primitives.isStream)(encoding)) {
+ var cMap = new CMap();
+ var lexer = new _parser.Lexer(encoding);
+ return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) {
+ if (parsedCMap.isIdentityCMap) {
+ return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);
+ }
+
+ return parsedCMap;
+ });
+ }
+
+ throw new Error("Encoding required.");
+ }
+
+ };
+}();
+
+exports.CMapFactory = CMapFactory;
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getFontType = getFontType;
+exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.SEAC_ANALYSIS_ENABLED = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _cff_parser = __w_pdfjs_require__(30);
+
+var _glyphlist = __w_pdfjs_require__(33);
+
+var _encodings = __w_pdfjs_require__(32);
+
+var _standard_fonts = __w_pdfjs_require__(34);
+
+var _unicode = __w_pdfjs_require__(35);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _font_renderer = __w_pdfjs_require__(36);
+
+var _cmap = __w_pdfjs_require__(28);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _type1_parser = __w_pdfjs_require__(37);
+
+const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
+var PDF_GLYPH_SPACE_UNITS = 1000;
+var SEAC_ANALYSIS_ENABLED = true;
+exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;
+const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isMonospace", "isSerifFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"];
+const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"];
+var FontFlags = {
+ FixedPitch: 1,
+ Serif: 2,
+ Symbolic: 4,
+ Script: 8,
+ Nonsymbolic: 32,
+ Italic: 64,
+ AllCap: 65536,
+ SmallCap: 131072,
+ ForceBold: 262144
+};
+exports.FontFlags = FontFlags;
+var MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"];
+
+function adjustWidths(properties) {
+ if (!properties.fontMatrix) {
+ return;
+ }
+
+ if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {
+ return;
+ }
+
+ var scale = 0.001 / properties.fontMatrix[0];
+ var glyphsWidths = properties.widths;
+
+ for (var glyph in glyphsWidths) {
+ glyphsWidths[glyph] *= scale;
+ }
+
+ properties.defaultWidth *= scale;
+}
+
+function adjustToUnicode(properties, builtInEncoding) {
+ if (properties.hasIncludedToUnicodeMap) {
+ return;
+ }
+
+ if (properties.hasEncoding) {
+ return;
+ }
+
+ if (builtInEncoding === properties.defaultEncoding) {
+ return;
+ }
+
+ if (properties.toUnicode instanceof IdentityToUnicodeMap) {
+ return;
+ }
+
+ var toUnicode = [],
+ glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+
+ for (var charCode in builtInEncoding) {
+ var glyphName = builtInEncoding[charCode];
+ var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ toUnicode[charCode] = String.fromCharCode(unicode);
+ }
+ }
+
+ properties.toUnicode.amend(toUnicode);
+}
+
+function getFontType(type, subtype) {
+ switch (type) {
+ case "Type1":
+ return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1;
+
+ case "CIDFontType0":
+ return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0;
+
+ case "OpenType":
+ return _util.FontType.OPENTYPE;
+
+ case "TrueType":
+ return _util.FontType.TRUETYPE;
+
+ case "CIDFontType2":
+ return _util.FontType.CIDFONTTYPE2;
+
+ case "MMType1":
+ return _util.FontType.MMTYPE1;
+
+ case "Type0":
+ return _util.FontType.TYPE0;
+
+ default:
+ return _util.FontType.UNKNOWN;
+ }
+}
+
+function recoverGlyphName(name, glyphsUnicodeMap) {
+ if (glyphsUnicodeMap[name] !== undefined) {
+ return name;
+ }
+
+ var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ for (var key in glyphsUnicodeMap) {
+ if (glyphsUnicodeMap[key] === unicode) {
+ return key;
+ }
+ }
+ }
+
+ (0, _util.info)("Unable to recover a standard glyph name for: " + name);
+ return name;
+}
+
+var Glyph = function GlyphClosure() {
+ function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
+ this.fontChar = fontChar;
+ this.unicode = unicode;
+ this.accent = accent;
+ this.width = width;
+ this.vmetric = vmetric;
+ this.operatorListId = operatorListId;
+ this.isSpace = isSpace;
+ this.isInFont = isInFont;
+ }
+
+ Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
+ return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont;
+ };
+
+ return Glyph;
+}();
+
+var ToUnicodeMap = function ToUnicodeMapClosure() {
+ function ToUnicodeMap(cmap = []) {
+ this._map = cmap;
+ }
+
+ ToUnicodeMap.prototype = {
+ get length() {
+ return this._map.length;
+ },
+
+ forEach(callback) {
+ for (var charCode in this._map) {
+ callback(charCode, this._map[charCode].charCodeAt(0));
+ }
+ },
+
+ has(i) {
+ return this._map[i] !== undefined;
+ },
+
+ get(i) {
+ return this._map[i];
+ },
+
+ charCodeOf(value) {
+ const map = this._map;
+
+ if (map.length <= 0x10000) {
+ return map.indexOf(value);
+ }
+
+ for (const charCode in map) {
+ if (map[charCode] === value) {
+ return charCode | 0;
+ }
+ }
+
+ return -1;
+ },
+
+ amend(map) {
+ for (var charCode in map) {
+ this._map[charCode] = map[charCode];
+ }
+ }
+
+ };
+ return ToUnicodeMap;
+}();
+
+exports.ToUnicodeMap = ToUnicodeMap;
+
+var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() {
+ function IdentityToUnicodeMap(firstChar, lastChar) {
+ this.firstChar = firstChar;
+ this.lastChar = lastChar;
+ }
+
+ IdentityToUnicodeMap.prototype = {
+ get length() {
+ return this.lastChar + 1 - this.firstChar;
+ },
+
+ forEach(callback) {
+ for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
+ callback(i, i);
+ }
+ },
+
+ has(i) {
+ return this.firstChar <= i && i <= this.lastChar;
+ },
+
+ get(i) {
+ if (this.firstChar <= i && i <= this.lastChar) {
+ return String.fromCharCode(i);
+ }
+
+ return undefined;
+ },
+
+ charCodeOf(v) {
+ return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;
+ },
+
+ amend(map) {
+ (0, _util.unreachable)("Should not call amend()");
+ }
+
+ };
+ return IdentityToUnicodeMap;
+}();
+
+exports.IdentityToUnicodeMap = IdentityToUnicodeMap;
+
+var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() {
+ function writeInt16(dest, offset, num) {
+ dest[offset] = num >> 8 & 0xff;
+ dest[offset + 1] = num & 0xff;
+ }
+
+ function writeInt32(dest, offset, num) {
+ dest[offset] = num >> 24 & 0xff;
+ dest[offset + 1] = num >> 16 & 0xff;
+ dest[offset + 2] = num >> 8 & 0xff;
+ dest[offset + 3] = num & 0xff;
+ }
+
+ function writeData(dest, offset, data) {
+ var i, ii;
+
+ if (data instanceof Uint8Array) {
+ dest.set(data, offset);
+ } else if (typeof data === "string") {
+ for (i = 0, ii = data.length; i < ii; i++) {
+ dest[offset++] = data.charCodeAt(i) & 0xff;
+ }
+ } else {
+ for (i = 0, ii = data.length; i < ii; i++) {
+ dest[offset++] = data[i] & 0xff;
+ }
+ }
+ }
+
+ function OpenTypeFileBuilder(sfnt) {
+ this.sfnt = sfnt;
+ this.tables = Object.create(null);
+ }
+
+ OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {
+ var maxPower2 = 1,
+ log2 = 0;
+
+ while ((maxPower2 ^ entriesCount) > maxPower2) {
+ maxPower2 <<= 1;
+ log2++;
+ }
+
+ var searchRange = maxPower2 * entrySize;
+ return {
+ range: searchRange,
+ entry: log2,
+ rangeShift: entrySize * entriesCount - searchRange
+ };
+ };
+
+ var OTF_HEADER_SIZE = 12;
+ var OTF_TABLE_ENTRY_SIZE = 16;
+ OpenTypeFileBuilder.prototype = {
+ toArray: function OpenTypeFileBuilder_toArray() {
+ var sfnt = this.sfnt;
+ var tables = this.tables;
+ var tablesNames = Object.keys(tables);
+ tablesNames.sort();
+ var numTables = tablesNames.length;
+ var i, j, jj, table, tableName;
+ var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
+ var tableOffsets = [offset];
+
+ for (i = 0; i < numTables; i++) {
+ table = tables[tablesNames[i]];
+ var paddedLength = (table.length + 3 & ~3) >>> 0;
+ offset += paddedLength;
+ tableOffsets.push(offset);
+ }
+
+ var file = new Uint8Array(offset);
+
+ for (i = 0; i < numTables; i++) {
+ table = tables[tablesNames[i]];
+ writeData(file, tableOffsets[i], table);
+ }
+
+ if (sfnt === "true") {
+ sfnt = (0, _util.string32)(0x00010000);
+ }
+
+ file[0] = sfnt.charCodeAt(0) & 0xff;
+ file[1] = sfnt.charCodeAt(1) & 0xff;
+ file[2] = sfnt.charCodeAt(2) & 0xff;
+ file[3] = sfnt.charCodeAt(3) & 0xff;
+ writeInt16(file, 4, numTables);
+ var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
+ writeInt16(file, 6, searchParams.range);
+ writeInt16(file, 8, searchParams.entry);
+ writeInt16(file, 10, searchParams.rangeShift);
+ offset = OTF_HEADER_SIZE;
+
+ for (i = 0; i < numTables; i++) {
+ tableName = tablesNames[i];
+ file[offset] = tableName.charCodeAt(0) & 0xff;
+ file[offset + 1] = tableName.charCodeAt(1) & 0xff;
+ file[offset + 2] = tableName.charCodeAt(2) & 0xff;
+ file[offset + 3] = tableName.charCodeAt(3) & 0xff;
+ var checksum = 0;
+
+ for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
+ var quad = (0, _core_utils.readUint32)(file, j);
+ checksum = checksum + quad >>> 0;
+ }
+
+ writeInt32(file, offset + 4, checksum);
+ writeInt32(file, offset + 8, tableOffsets[i]);
+ writeInt32(file, offset + 12, tables[tableName].length);
+ offset += OTF_TABLE_ENTRY_SIZE;
+ }
+
+ return file;
+ },
+ addTable: function OpenTypeFileBuilder_addTable(tag, data) {
+ if (tag in this.tables) {
+ throw new Error("Table " + tag + " already exists");
+ }
+
+ this.tables[tag] = data;
+ }
+ };
+ return OpenTypeFileBuilder;
+}();
+
+var Font = function FontClosure() {
+ function Font(name, file, properties) {
+ var charCode;
+ this.name = name;
+ this.loadedName = properties.loadedName;
+ this.isType3Font = properties.isType3Font;
+ this.missingFile = false;
+ this.glyphCache = Object.create(null);
+ this.isSerifFont = !!(properties.flags & FontFlags.Serif);
+ this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
+ this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);
+ var type = properties.type;
+ var subtype = properties.subtype;
+ this.type = type;
+ this.subtype = subtype;
+ let fallbackName = "sans-serif";
+
+ if (this.isMonospace) {
+ fallbackName = "monospace";
+ } else if (this.isSerifFont) {
+ fallbackName = "serif";
+ }
+
+ this.fallbackName = fallbackName;
+ this.differences = properties.differences;
+ this.widths = properties.widths;
+ this.defaultWidth = properties.defaultWidth;
+ this.composite = properties.composite;
+ this.cMap = properties.cMap;
+ this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
+ this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
+ this.fontMatrix = properties.fontMatrix;
+ this.bbox = properties.bbox;
+ this.defaultEncoding = properties.defaultEncoding;
+ this.toUnicode = properties.toUnicode;
+ this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap();
+ this.toFontChar = [];
+
+ if (properties.type === "Type3") {
+ for (charCode = 0; charCode < 256; charCode++) {
+ this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];
+ }
+
+ this.fontType = _util.FontType.TYPE3;
+ return;
+ }
+
+ this.cidEncoding = properties.cidEncoding;
+ this.vertical = !!properties.vertical;
+
+ if (this.vertical) {
+ this.vmetrics = properties.vmetrics;
+ this.defaultVMetrics = properties.defaultVMetrics;
+ }
+
+ if (!file || file.isEmpty) {
+ if (file) {
+ (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")");
+ }
+
+ this.fallbackToSystemFont();
+ return;
+ }
+
+ [type, subtype] = getFontFileType(file, properties);
+
+ if (type !== this.type || subtype !== this.subtype) {
+ (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`);
+ }
+
+ try {
+ var data;
+
+ switch (type) {
+ case "MMType1":
+ (0, _util.info)("MMType1 font (" + name + "), falling back to Type1.");
+
+ case "Type1":
+ case "CIDFontType0":
+ this.mimetype = "font/opentype";
+ var cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new CFFFont(file, properties) : new Type1Font(name, file, properties);
+ adjustWidths(properties);
+ data = this.convert(name, cff, properties);
+ break;
+
+ case "OpenType":
+ case "TrueType":
+ case "CIDFontType2":
+ this.mimetype = "font/opentype";
+ data = this.checkAndRepair(name, file, properties);
+
+ if (this.isOpenType) {
+ adjustWidths(properties);
+ type = "OpenType";
+ }
+
+ break;
+
+ default:
+ throw new _util.FormatError(`Font ${type} is not supported`);
+ }
+ } catch (e) {
+ (0, _util.warn)(e);
+ this.fallbackToSystemFont();
+ return;
+ }
+
+ this.data = data;
+ this.fontType = getFontType(type, subtype);
+ this.fontMatrix = properties.fontMatrix;
+ this.widths = properties.widths;
+ this.defaultWidth = properties.defaultWidth;
+ this.toUnicode = properties.toUnicode;
+ this.seacMap = properties.seacMap;
+ }
+
+ Font.getFontID = function () {
+ var ID = 1;
+ return function Font_getFontID() {
+ return String(ID++);
+ };
+ }();
+
+ function int16(b0, b1) {
+ return (b0 << 8) + b1;
+ }
+
+ function writeSignedInt16(bytes, index, value) {
+ bytes[index + 1] = value;
+ bytes[index] = value >>> 8;
+ }
+
+ function signedInt16(b0, b1) {
+ var value = (b0 << 8) + b1;
+ return value & 1 << 15 ? value - 0x10000 : value;
+ }
+
+ function int32(b0, b1, b2, b3) {
+ return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+ }
+
+ function string16(value) {
+ return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
+ }
+
+ function safeString16(value) {
+ if (value > 0x7fff) {
+ value = 0x7fff;
+ } else if (value < -0x8000) {
+ value = -0x8000;
+ }
+
+ return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
+ }
+
+ function isTrueTypeFile(file) {
+ var header = file.peekBytes(4);
+ return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true";
+ }
+
+ function isTrueTypeCollectionFile(file) {
+ const header = file.peekBytes(4);
+ return (0, _util.bytesToString)(header) === "ttcf";
+ }
+
+ function isOpenTypeFile(file) {
+ var header = file.peekBytes(4);
+ return (0, _util.bytesToString)(header) === "OTTO";
+ }
+
+ function isType1File(file) {
+ var header = file.peekBytes(2);
+
+ if (header[0] === 0x25 && header[1] === 0x21) {
+ return true;
+ }
+
+ if (header[0] === 0x80 && header[1] === 0x01) {
+ return true;
+ }
+
+ return false;
+ }
+
+ function isCFFFile(file) {
+ const header = file.peekBytes(4);
+
+ if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {
+ return true;
+ }
+
+ return false;
+ }
+
+ function getFontFileType(file, {
+ type,
+ subtype,
+ composite
+ }) {
+ let fileType, fileSubtype;
+
+ if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {
+ if (composite) {
+ fileType = "CIDFontType2";
+ } else {
+ fileType = "TrueType";
+ }
+ } else if (isOpenTypeFile(file)) {
+ if (composite) {
+ fileType = "CIDFontType2";
+ } else {
+ fileType = "OpenType";
+ }
+ } else if (isType1File(file)) {
+ if (composite) {
+ fileType = "CIDFontType0";
+ } else {
+ fileType = type === "MMType1" ? "MMType1" : "Type1";
+ }
+ } else if (isCFFFile(file)) {
+ if (composite) {
+ fileType = "CIDFontType0";
+ fileSubtype = "CIDFontType0C";
+ } else {
+ fileType = type === "MMType1" ? "MMType1" : "Type1";
+ fileSubtype = "Type1C";
+ }
+ } else {
+ (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype.");
+ fileType = type;
+ fileSubtype = subtype;
+ }
+
+ return [fileType, fileSubtype];
+ }
+
+ function buildToFontChar(encoding, glyphsUnicodeMap, differences) {
+ var toFontChar = [],
+ unicode;
+
+ for (var i = 0, ii = encoding.length; i < ii; i++) {
+ unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ toFontChar[i] = unicode;
+ }
+ }
+
+ for (var charCode in differences) {
+ unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ toFontChar[+charCode] = unicode;
+ }
+ }
+
+ return toFontChar;
+ }
+
+ function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) {
+ var newMap = Object.create(null);
+ var toFontChar = [];
+ var privateUseAreaIndex = 0;
+ var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
+ var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
+
+ for (var originalCharCode in charCodeToGlyphId) {
+ originalCharCode |= 0;
+ var glyphId = charCodeToGlyphId[originalCharCode];
+
+ if (!hasGlyph(glyphId)) {
+ continue;
+ }
+
+ if (nextAvailableFontCharCode > privateUseOffetEnd) {
+ privateUseAreaIndex++;
+
+ if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {
+ (0, _util.warn)("Ran out of space in font private use area.");
+ break;
+ }
+
+ nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
+ privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
+ }
+
+ var fontCharCode = nextAvailableFontCharCode++;
+
+ if (glyphId === 0) {
+ glyphId = newGlyphZeroId;
+ }
+
+ newMap[fontCharCode] = glyphId;
+ toFontChar[originalCharCode] = fontCharCode;
+ }
+
+ return {
+ toFontChar,
+ charCodeToGlyphId: newMap,
+ nextAvailableFontCharCode
+ };
+ }
+
+ function getRanges(glyphs, numGlyphs) {
+ var codes = [];
+
+ for (var charCode in glyphs) {
+ if (glyphs[charCode] >= numGlyphs) {
+ continue;
+ }
+
+ codes.push({
+ fontCharCode: charCode | 0,
+ glyphId: glyphs[charCode]
+ });
+ }
+
+ if (codes.length === 0) {
+ codes.push({
+ fontCharCode: 0,
+ glyphId: 0
+ });
+ }
+
+ codes.sort(function fontGetRangesSort(a, b) {
+ return a.fontCharCode - b.fontCharCode;
+ });
+ var ranges = [];
+ var length = codes.length;
+
+ for (var n = 0; n < length;) {
+ var start = codes[n].fontCharCode;
+ var codeIndices = [codes[n].glyphId];
+ ++n;
+ var end = start;
+
+ while (n < length && end + 1 === codes[n].fontCharCode) {
+ codeIndices.push(codes[n].glyphId);
+ ++end;
+ ++n;
+
+ if (end === 0xffff) {
+ break;
+ }
+ }
+
+ ranges.push([start, end, codeIndices]);
+ }
+
+ return ranges;
+ }
+
+ function createCmapTable(glyphs, numGlyphs) {
+ var ranges = getRanges(glyphs, numGlyphs);
+ var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1;
+ var cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8);
+ var i, ii, j, jj;
+
+ for (i = ranges.length - 1; i >= 0; --i) {
+ if (ranges[i][0] <= 0xffff) {
+ break;
+ }
+ }
+
+ var bmpLength = i + 1;
+
+ if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {
+ ranges[i][1] = 0xfffe;
+ }
+
+ var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;
+ var segCount = bmpLength + trailingRangesCount;
+ var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);
+ var startCount = "";
+ var endCount = "";
+ var idDeltas = "";
+ var idRangeOffsets = "";
+ var glyphsIds = "";
+ var bias = 0;
+ var range, start, end, codes;
+
+ for (i = 0, ii = bmpLength; i < ii; i++) {
+ range = ranges[i];
+ start = range[0];
+ end = range[1];
+ startCount += string16(start);
+ endCount += string16(end);
+ codes = range[2];
+ var contiguous = true;
+
+ for (j = 1, jj = codes.length; j < jj; ++j) {
+ if (codes[j] !== codes[j - 1] + 1) {
+ contiguous = false;
+ break;
+ }
+ }
+
+ if (!contiguous) {
+ var offset = (segCount - i) * 2 + bias * 2;
+ bias += end - start + 1;
+ idDeltas += string16(0);
+ idRangeOffsets += string16(offset);
+
+ for (j = 0, jj = codes.length; j < jj; ++j) {
+ glyphsIds += string16(codes[j]);
+ }
+ } else {
+ var startCode = codes[0];
+ idDeltas += string16(startCode - start & 0xffff);
+ idRangeOffsets += string16(0);
+ }
+ }
+
+ if (trailingRangesCount > 0) {
+ endCount += "\xFF\xFF";
+ startCount += "\xFF\xFF";
+ idDeltas += "\x00\x01";
+ idRangeOffsets += "\x00\x00";
+ }
+
+ var format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds;
+ var format31012 = "";
+ var header31012 = "";
+
+ if (numTables > 1) {
+ cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length);
+ format31012 = "";
+
+ for (i = 0, ii = ranges.length; i < ii; i++) {
+ range = ranges[i];
+ start = range[0];
+ codes = range[2];
+ var code = codes[0];
+
+ for (j = 1, jj = codes.length; j < jj; ++j) {
+ if (codes[j] !== codes[j - 1] + 1) {
+ end = range[0] + j - 1;
+ format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);
+ start = end + 1;
+ code = codes[j];
+ }
+ }
+
+ format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);
+ }
+
+ header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12);
+ }
+
+ return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012;
+ }
+
+ function validateOS2Table(os2, file) {
+ file.pos = (file.start || 0) + os2.offset;
+ var version = file.getUint16();
+ file.skip(60);
+ var selection = file.getUint16();
+
+ if (version < 4 && selection & 0x0300) {
+ return false;
+ }
+
+ var firstChar = file.getUint16();
+ var lastChar = file.getUint16();
+
+ if (firstChar > lastChar) {
+ return false;
+ }
+
+ file.skip(6);
+ var usWinAscent = file.getUint16();
+
+ if (usWinAscent === 0) {
+ return false;
+ }
+
+ os2.data[8] = os2.data[9] = 0;
+ return true;
+ }
+
+ function createOS2Table(properties, charstrings, override) {
+ override = override || {
+ unitsPerEm: 0,
+ yMax: 0,
+ yMin: 0,
+ ascent: 0,
+ descent: 0
+ };
+ var ulUnicodeRange1 = 0;
+ var ulUnicodeRange2 = 0;
+ var ulUnicodeRange3 = 0;
+ var ulUnicodeRange4 = 0;
+ var firstCharIndex = null;
+ var lastCharIndex = 0;
+
+ if (charstrings) {
+ for (var code in charstrings) {
+ code |= 0;
+
+ if (firstCharIndex > code || !firstCharIndex) {
+ firstCharIndex = code;
+ }
+
+ if (lastCharIndex < code) {
+ lastCharIndex = code;
+ }
+
+ var position = (0, _unicode.getUnicodeRangeFor)(code);
+
+ if (position < 32) {
+ ulUnicodeRange1 |= 1 << position;
+ } else if (position < 64) {
+ ulUnicodeRange2 |= 1 << position - 32;
+ } else if (position < 96) {
+ ulUnicodeRange3 |= 1 << position - 64;
+ } else if (position < 123) {
+ ulUnicodeRange4 |= 1 << position - 96;
+ } else {
+ throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage");
+ }
+ }
+
+ if (lastCharIndex > 0xffff) {
+ lastCharIndex = 0xffff;
+ }
+ } else {
+ firstCharIndex = 0;
+ lastCharIndex = 255;
+ }
+
+ var bbox = properties.bbox || [0, 0, 0, 0];
+ var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
+ var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;
+ var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));
+ var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));
+
+ if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
+ typoDescent = -typoDescent;
+ }
+
+ var winAscent = override.yMax || typoAscent;
+ var winDescent = -override.yMin || -typoDescent;
+ return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03";
+ }
+
+ function createPostTable(properties) {
+ var angle = Math.floor(properties.italicAngle * 2 ** 16);
+ return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00";
+ }
+
+ function createNameTable(name, proto) {
+ if (!proto) {
+ proto = [[], []];
+ }
+
+ var strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || "", proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"];
+ var stringsUnicode = [];
+ var i, ii, j, jj, str;
+
+ for (i = 0, ii = strings.length; i < ii; i++) {
+ str = proto[1][i] || strings[i];
+ var strBufUnicode = [];
+
+ for (j = 0, jj = str.length; j < jj; j++) {
+ strBufUnicode.push(string16(str.charCodeAt(j)));
+ }
+
+ stringsUnicode.push(strBufUnicode.join(""));
+ }
+
+ var names = [strings, stringsUnicode];
+ var platforms = ["\x00\x01", "\x00\x03"];
+ var encodings = ["\x00\x00", "\x00\x01"];
+ var languages = ["\x00\x00", "\x04\x09"];
+ var namesRecordCount = strings.length * platforms.length;
+ var nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);
+ var strOffset = 0;
+
+ for (i = 0, ii = platforms.length; i < ii; i++) {
+ var strs = names[i];
+
+ for (j = 0, jj = strs.length; j < jj; j++) {
+ str = strs[j];
+ var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);
+ nameTable += nameRecord;
+ strOffset += str.length;
+ }
+ }
+
+ nameTable += strings.join("") + stringsUnicode.join("");
+ return nameTable;
+ }
+
+ Font.prototype = {
+ name: null,
+ font: null,
+ mimetype: null,
+ disableFontFace: false,
+
+ get renderer() {
+ var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);
+
+ return (0, _util.shadow)(this, "renderer", renderer);
+ },
+
+ exportData(extraProperties = false) {
+ const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;
+ const data = Object.create(null);
+ let property, value;
+
+ for (property of exportDataProperties) {
+ value = this[property];
+
+ if (value !== undefined) {
+ data[property] = value;
+ }
+ }
+
+ return data;
+ },
+
+ fallbackToSystemFont: function Font_fallbackToSystemFont() {
+ this.missingFile = true;
+ var name = this.name;
+ var type = this.type;
+ var subtype = this.subtype;
+ let fontName = name.replace(/[,_]/g, "-").replace(/\s/g, "");
+ var stdFontMap = (0, _standard_fonts.getStdFontMap)(),
+ nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();
+ var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
+ fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
+ this.bold = fontName.search(/bold/gi) !== -1;
+ this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1;
+ this.black = name.search(/Black/g) !== -1;
+ this.remeasure = Object.keys(this.widths).length > 0;
+
+ if (isStandardFont && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) {
+ const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
+ const map = [];
+
+ for (const charCode in GlyphMapForStandardFonts) {
+ map[+charCode] = GlyphMapForStandardFonts[charCode];
+ }
+
+ if (/Arial-?Black/i.test(name)) {
+ var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();
+
+ for (const charCode in SupplementalGlyphMapForArialBlack) {
+ map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];
+ }
+ } else if (/Calibri/i.test(name)) {
+ const SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();
+
+ for (const charCode in SupplementalGlyphMapForCalibri) {
+ map[+charCode] = SupplementalGlyphMapForCalibri[charCode];
+ }
+ }
+
+ var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;
+
+ if (!isIdentityUnicode) {
+ this.toUnicode.forEach(function (charCode, unicodeCharCode) {
+ map[+charCode] = unicodeCharCode;
+ });
+ }
+
+ this.toFontChar = map;
+ this.toUnicode = new ToUnicodeMap(map);
+ } else if (/Symbol/i.test(fontName)) {
+ this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
+ } else if (/Dingbats/i.test(fontName)) {
+ if (/Wingdings/i.test(name)) {
+ (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats.");
+ }
+
+ this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);
+ } else if (isStandardFont) {
+ this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
+ } else {
+ const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ const map = [];
+ this.toUnicode.forEach((charCode, unicodeCharCode) => {
+ if (!this.composite) {
+ var glyphName = this.differences[charCode] || this.defaultEncoding[charCode];
+ const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ unicodeCharCode = unicode;
+ }
+ }
+
+ map[+charCode] = unicodeCharCode;
+ });
+
+ if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {
+ if (/Verdana/i.test(name)) {
+ const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
+
+ for (const charCode in GlyphMapForStandardFonts) {
+ map[+charCode] = GlyphMapForStandardFonts[charCode];
+ }
+ }
+ }
+
+ this.toFontChar = map;
+ }
+
+ this.loadedName = fontName.split("-")[0];
+ this.fontType = getFontType(type, subtype);
+ },
+ checkAndRepair: function Font_checkAndRepair(name, font, properties) {
+ const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "];
+
+ function readTables(file, numTables) {
+ const tables = Object.create(null);
+ tables["OS/2"] = null;
+ tables.cmap = null;
+ tables.head = null;
+ tables.hhea = null;
+ tables.hmtx = null;
+ tables.maxp = null;
+ tables.name = null;
+ tables.post = null;
+
+ for (let i = 0; i < numTables; i++) {
+ const table = readTableEntry(file);
+
+ if (!VALID_TABLES.includes(table.tag)) {
+ continue;
+ }
+
+ if (table.length === 0) {
+ continue;
+ }
+
+ tables[table.tag] = table;
+ }
+
+ return tables;
+ }
+
+ function readTableEntry(file) {
+ var tag = (0, _util.bytesToString)(file.getBytes(4));
+ var checksum = file.getInt32() >>> 0;
+ var offset = file.getInt32() >>> 0;
+ var length = file.getInt32() >>> 0;
+ var previousPosition = file.pos;
+ file.pos = file.start ? file.start : 0;
+ file.skip(offset);
+ var data = file.getBytes(length);
+ file.pos = previousPosition;
+
+ if (tag === "head") {
+ data[8] = data[9] = data[10] = data[11] = 0;
+ data[17] |= 0x20;
+ }
+
+ return {
+ tag,
+ checksum,
+ length,
+ offset,
+ data
+ };
+ }
+
+ function readOpenTypeHeader(ttf) {
+ return {
+ version: (0, _util.bytesToString)(ttf.getBytes(4)),
+ numTables: ttf.getUint16(),
+ searchRange: ttf.getUint16(),
+ entrySelector: ttf.getUint16(),
+ rangeShift: ttf.getUint16()
+ };
+ }
+
+ function readTrueTypeCollectionHeader(ttc) {
+ const ttcTag = (0, _util.bytesToString)(ttc.getBytes(4));
+ (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font.");
+ const majorVersion = ttc.getUint16();
+ const minorVersion = ttc.getUint16();
+ const numFonts = ttc.getInt32() >>> 0;
+ const offsetTable = [];
+
+ for (let i = 0; i < numFonts; i++) {
+ offsetTable.push(ttc.getInt32() >>> 0);
+ }
+
+ const header = {
+ ttcTag,
+ majorVersion,
+ minorVersion,
+ numFonts,
+ offsetTable
+ };
+
+ switch (majorVersion) {
+ case 1:
+ return header;
+
+ case 2:
+ header.dsigTag = ttc.getInt32() >>> 0;
+ header.dsigLength = ttc.getInt32() >>> 0;
+ header.dsigOffset = ttc.getInt32() >>> 0;
+ return header;
+ }
+
+ throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`);
+ }
+
+ function readTrueTypeCollectionData(ttc, fontName) {
+ const {
+ numFonts,
+ offsetTable
+ } = readTrueTypeCollectionHeader(ttc);
+
+ for (let i = 0; i < numFonts; i++) {
+ ttc.pos = (ttc.start || 0) + offsetTable[i];
+ const potentialHeader = readOpenTypeHeader(ttc);
+ const potentialTables = readTables(ttc, potentialHeader.numTables);
+
+ if (!potentialTables.name) {
+ throw new _util.FormatError('TrueType Collection font must contain a "name" table.');
+ }
+
+ const nameTable = readNameTable(potentialTables.name);
+
+ for (let j = 0, jj = nameTable.length; j < jj; j++) {
+ for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
+ const nameEntry = nameTable[j][k];
+
+ if (nameEntry && nameEntry.replace(/\s/g, "") === fontName) {
+ return {
+ header: potentialHeader,
+ tables: potentialTables
+ };
+ }
+ }
+ }
+ }
+
+ throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`);
+ }
+
+ function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {
+ if (!cmap) {
+ (0, _util.warn)("No cmap table available.");
+ return {
+ platformId: -1,
+ encodingId: -1,
+ mappings: [],
+ hasShortCmap: false
+ };
+ }
+
+ var segment;
+ var start = (file.start ? file.start : 0) + cmap.offset;
+ file.pos = start;
+ file.skip(2);
+ var numTables = file.getUint16();
+ var potentialTable;
+ var canBreak = false;
+
+ for (var i = 0; i < numTables; i++) {
+ var platformId = file.getUint16();
+ var encodingId = file.getUint16();
+ var offset = file.getInt32() >>> 0;
+ var useTable = false;
+
+ if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {
+ continue;
+ }
+
+ if (platformId === 0 && encodingId === 0) {
+ useTable = true;
+ } else if (platformId === 1 && encodingId === 0) {
+ useTable = true;
+ } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {
+ useTable = true;
+
+ if (!isSymbolicFont) {
+ canBreak = true;
+ }
+ } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {
+ useTable = true;
+ canBreak = true;
+ }
+
+ if (useTable) {
+ potentialTable = {
+ platformId,
+ encodingId,
+ offset
+ };
+ }
+
+ if (canBreak) {
+ break;
+ }
+ }
+
+ if (potentialTable) {
+ file.pos = start + potentialTable.offset;
+ }
+
+ if (!potentialTable || file.peekByte() === -1) {
+ (0, _util.warn)("Could not find a preferred cmap table.");
+ return {
+ platformId: -1,
+ encodingId: -1,
+ mappings: [],
+ hasShortCmap: false
+ };
+ }
+
+ var format = file.getUint16();
+ file.skip(2 + 2);
+ var hasShortCmap = false;
+ var mappings = [];
+ var j, glyphId;
+
+ if (format === 0) {
+ for (j = 0; j < 256; j++) {
+ var index = file.getByte();
+
+ if (!index) {
+ continue;
+ }
+
+ mappings.push({
+ charCode: j,
+ glyphId: index
+ });
+ }
+
+ hasShortCmap = true;
+ } else if (format === 4) {
+ var segCount = file.getUint16() >> 1;
+ file.skip(6);
+ var segIndex,
+ segments = [];
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segments.push({
+ end: file.getUint16()
+ });
+ }
+
+ file.skip(2);
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segments[segIndex].start = file.getUint16();
+ }
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segments[segIndex].delta = file.getUint16();
+ }
+
+ var offsetsCount = 0;
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segment = segments[segIndex];
+ var rangeOffset = file.getUint16();
+
+ if (!rangeOffset) {
+ segment.offsetIndex = -1;
+ continue;
+ }
+
+ var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
+ segment.offsetIndex = offsetIndex;
+ offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);
+ }
+
+ var offsets = [];
+
+ for (j = 0; j < offsetsCount; j++) {
+ offsets.push(file.getUint16());
+ }
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segment = segments[segIndex];
+ start = segment.start;
+ var end = segment.end;
+ var delta = segment.delta;
+ offsetIndex = segment.offsetIndex;
+
+ for (j = start; j <= end; j++) {
+ if (j === 0xffff) {
+ continue;
+ }
+
+ glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];
+ glyphId = glyphId + delta & 0xffff;
+ mappings.push({
+ charCode: j,
+ glyphId
+ });
+ }
+ }
+ } else if (format === 6) {
+ var firstCode = file.getUint16();
+ var entryCount = file.getUint16();
+
+ for (j = 0; j < entryCount; j++) {
+ glyphId = file.getUint16();
+ var charCode = firstCode + j;
+ mappings.push({
+ charCode,
+ glyphId
+ });
+ }
+ } else {
+ (0, _util.warn)("cmap table has unsupported format: " + format);
+ return {
+ platformId: -1,
+ encodingId: -1,
+ mappings: [],
+ hasShortCmap: false
+ };
+ }
+
+ mappings.sort(function (a, b) {
+ return a.charCode - b.charCode;
+ });
+
+ for (i = 1; i < mappings.length; i++) {
+ if (mappings[i - 1].charCode === mappings[i].charCode) {
+ mappings.splice(i, 1);
+ i--;
+ }
+ }
+
+ return {
+ platformId: potentialTable.platformId,
+ encodingId: potentialTable.encodingId,
+ mappings,
+ hasShortCmap
+ };
+ }
+
+ function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) {
+ if (!header) {
+ if (metrics) {
+ metrics.data = null;
+ }
+
+ return;
+ }
+
+ file.pos = (file.start ? file.start : 0) + header.offset;
+ file.pos += 4;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 8;
+ file.pos += 2;
+ var numOfMetrics = file.getUint16();
+
+ if (numOfMetrics > numGlyphs) {
+ (0, _util.info)("The numOfMetrics (" + numOfMetrics + ") should not be " + "greater than the numGlyphs (" + numGlyphs + ")");
+ numOfMetrics = numGlyphs;
+ header.data[34] = (numOfMetrics & 0xff00) >> 8;
+ header.data[35] = numOfMetrics & 0x00ff;
+ }
+
+ var numOfSidebearings = numGlyphs - numOfMetrics;
+ var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);
+
+ if (numMissing > 0) {
+ var entries = new Uint8Array(metrics.length + numMissing * 2);
+ entries.set(metrics.data);
+
+ if (dupFirstEntry) {
+ entries[metrics.length] = metrics.data[2];
+ entries[metrics.length + 1] = metrics.data[3];
+ }
+
+ metrics.data = entries;
+ }
+ }
+
+ function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {
+ var glyphProfile = {
+ length: 0,
+ sizeOfInstructions: 0
+ };
+
+ if (sourceEnd - sourceStart <= 12) {
+ return glyphProfile;
+ }
+
+ var glyf = source.subarray(sourceStart, sourceEnd);
+ var contoursCount = signedInt16(glyf[0], glyf[1]);
+
+ if (contoursCount < 0) {
+ contoursCount = -1;
+ writeSignedInt16(glyf, 0, contoursCount);
+ dest.set(glyf, destStart);
+ glyphProfile.length = glyf.length;
+ return glyphProfile;
+ }
+
+ var i,
+ j = 10,
+ flagsCount = 0;
+
+ for (i = 0; i < contoursCount; i++) {
+ var endPoint = glyf[j] << 8 | glyf[j + 1];
+ flagsCount = endPoint + 1;
+ j += 2;
+ }
+
+ var instructionsStart = j;
+ var instructionsLength = glyf[j] << 8 | glyf[j + 1];
+ glyphProfile.sizeOfInstructions = instructionsLength;
+ j += 2 + instructionsLength;
+ var instructionsEnd = j;
+ var coordinatesLength = 0;
+
+ for (i = 0; i < flagsCount; i++) {
+ var flag = glyf[j++];
+
+ if (flag & 0xc0) {
+ glyf[j - 1] = flag & 0x3f;
+ }
+
+ let xLength = 2;
+
+ if (flag & 2) {
+ xLength = 1;
+ } else if (flag & 16) {
+ xLength = 0;
+ }
+
+ let yLength = 2;
+
+ if (flag & 4) {
+ yLength = 1;
+ } else if (flag & 32) {
+ yLength = 0;
+ }
+
+ const xyLength = xLength + yLength;
+ coordinatesLength += xyLength;
+
+ if (flag & 8) {
+ var repeat = glyf[j++];
+ i += repeat;
+ coordinatesLength += repeat * xyLength;
+ }
+ }
+
+ if (coordinatesLength === 0) {
+ return glyphProfile;
+ }
+
+ var glyphDataLength = j + coordinatesLength;
+
+ if (glyphDataLength > glyf.length) {
+ return glyphProfile;
+ }
+
+ if (!hintsValid && instructionsLength > 0) {
+ dest.set(glyf.subarray(0, instructionsStart), destStart);
+ dest.set([0, 0], destStart + instructionsStart);
+ dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);
+ glyphDataLength -= instructionsLength;
+
+ if (glyf.length - glyphDataLength > 3) {
+ glyphDataLength = glyphDataLength + 3 & ~3;
+ }
+
+ glyphProfile.length = glyphDataLength;
+ return glyphProfile;
+ }
+
+ if (glyf.length - glyphDataLength > 3) {
+ glyphDataLength = glyphDataLength + 3 & ~3;
+ dest.set(glyf.subarray(0, glyphDataLength), destStart);
+ glyphProfile.length = glyphDataLength;
+ return glyphProfile;
+ }
+
+ dest.set(glyf, destStart);
+ glyphProfile.length = glyf.length;
+ return glyphProfile;
+ }
+
+ function sanitizeHead(head, numGlyphs, locaLength) {
+ var data = head.data;
+ var version = int32(data[0], data[1], data[2], data[3]);
+
+ if (version >> 16 !== 1) {
+ (0, _util.info)("Attempting to fix invalid version in head table: " + version);
+ data[0] = 0;
+ data[1] = 1;
+ data[2] = 0;
+ data[3] = 0;
+ }
+
+ var indexToLocFormat = int16(data[50], data[51]);
+
+ if (indexToLocFormat < 0 || indexToLocFormat > 1) {
+ (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat);
+ var numGlyphsPlusOne = numGlyphs + 1;
+
+ if (locaLength === numGlyphsPlusOne << 1) {
+ data[50] = 0;
+ data[51] = 0;
+ } else if (locaLength === numGlyphsPlusOne << 2) {
+ data[50] = 0;
+ data[51] = 1;
+ } else {
+ throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat);
+ }
+ }
+ }
+
+ function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {
+ var itemSize, itemDecode, itemEncode;
+
+ if (isGlyphLocationsLong) {
+ itemSize = 4;
+
+ itemDecode = function fontItemDecodeLong(data, offset) {
+ return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
+ };
+
+ itemEncode = function fontItemEncodeLong(data, offset, value) {
+ data[offset] = value >>> 24 & 0xff;
+ data[offset + 1] = value >> 16 & 0xff;
+ data[offset + 2] = value >> 8 & 0xff;
+ data[offset + 3] = value & 0xff;
+ };
+ } else {
+ itemSize = 2;
+
+ itemDecode = function fontItemDecode(data, offset) {
+ return data[offset] << 9 | data[offset + 1] << 1;
+ };
+
+ itemEncode = function fontItemEncode(data, offset, value) {
+ data[offset] = value >> 9 & 0xff;
+ data[offset + 1] = value >> 1 & 0xff;
+ };
+ }
+
+ var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;
+ var locaDataSize = itemSize * (1 + numGlyphsOut);
+ var locaData = new Uint8Array(locaDataSize);
+ locaData.set(loca.data.subarray(0, locaDataSize));
+ loca.data = locaData;
+ var oldGlyfData = glyf.data;
+ var oldGlyfDataLength = oldGlyfData.length;
+ var newGlyfData = new Uint8Array(oldGlyfDataLength);
+ var startOffset = itemDecode(locaData, 0);
+ var writeOffset = 0;
+ var missingGlyphs = Object.create(null);
+ itemEncode(locaData, 0, writeOffset);
+ var i, j;
+
+ for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
+ var endOffset = itemDecode(locaData, j);
+
+ if (endOffset === 0) {
+ endOffset = startOffset;
+ }
+
+ if (endOffset > oldGlyfDataLength && (oldGlyfDataLength + 3 & ~3) === endOffset) {
+ endOffset = oldGlyfDataLength;
+ }
+
+ if (endOffset > oldGlyfDataLength) {
+ startOffset = endOffset;
+ }
+
+ var glyphProfile = sanitizeGlyph(oldGlyfData, startOffset, endOffset, newGlyfData, writeOffset, hintsValid);
+ var newLength = glyphProfile.length;
+
+ if (newLength === 0) {
+ missingGlyphs[i] = true;
+ }
+
+ if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {
+ maxSizeOfInstructions = glyphProfile.sizeOfInstructions;
+ }
+
+ writeOffset += newLength;
+ itemEncode(locaData, j, writeOffset);
+ startOffset = endOffset;
+ }
+
+ if (writeOffset === 0) {
+ var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);
+
+ for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {
+ itemEncode(locaData, j, simpleGlyph.length);
+ }
+
+ glyf.data = simpleGlyph;
+ } else if (dupFirstEntry) {
+ var firstEntryLength = itemDecode(locaData, itemSize);
+
+ if (newGlyfData.length > firstEntryLength + writeOffset) {
+ glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
+ } else {
+ glyf.data = new Uint8Array(firstEntryLength + writeOffset);
+ glyf.data.set(newGlyfData.subarray(0, writeOffset));
+ }
+
+ glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
+ itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);
+ } else {
+ glyf.data = newGlyfData.subarray(0, writeOffset);
+ }
+
+ return {
+ missingGlyphs,
+ maxSizeOfInstructions
+ };
+ }
+
+ function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {
+ var start = (font.start ? font.start : 0) + post.offset;
+ font.pos = start;
+ var length = post.length,
+ end = start + length;
+ var version = font.getInt32();
+ font.skip(28);
+ var glyphNames;
+ var valid = true;
+ var i;
+
+ switch (version) {
+ case 0x00010000:
+ glyphNames = MacStandardGlyphOrdering;
+ break;
+
+ case 0x00020000:
+ var numGlyphs = font.getUint16();
+
+ if (numGlyphs !== maxpNumGlyphs) {
+ valid = false;
+ break;
+ }
+
+ var glyphNameIndexes = [];
+
+ for (i = 0; i < numGlyphs; ++i) {
+ var index = font.getUint16();
+
+ if (index >= 32768) {
+ valid = false;
+ break;
+ }
+
+ glyphNameIndexes.push(index);
+ }
+
+ if (!valid) {
+ break;
+ }
+
+ var customNames = [];
+ var strBuf = [];
+
+ while (font.pos < end) {
+ var stringLength = font.getByte();
+ strBuf.length = stringLength;
+
+ for (i = 0; i < stringLength; ++i) {
+ strBuf[i] = String.fromCharCode(font.getByte());
+ }
+
+ customNames.push(strBuf.join(""));
+ }
+
+ glyphNames = [];
+
+ for (i = 0; i < numGlyphs; ++i) {
+ var j = glyphNameIndexes[i];
+
+ if (j < 258) {
+ glyphNames.push(MacStandardGlyphOrdering[j]);
+ continue;
+ }
+
+ glyphNames.push(customNames[j - 258]);
+ }
+
+ break;
+
+ case 0x00030000:
+ break;
+
+ default:
+ (0, _util.warn)("Unknown/unsupported post table version " + version);
+ valid = false;
+
+ if (propertiesObj.defaultEncoding) {
+ glyphNames = propertiesObj.defaultEncoding;
+ }
+
+ break;
+ }
+
+ propertiesObj.glyphNames = glyphNames;
+ return valid;
+ }
+
+ function readNameTable(nameTable) {
+ var start = (font.start ? font.start : 0) + nameTable.offset;
+ font.pos = start;
+ var names = [[], []];
+ var length = nameTable.length,
+ end = start + length;
+ var format = font.getUint16();
+ var FORMAT_0_HEADER_LENGTH = 6;
+
+ if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
+ return names;
+ }
+
+ var numRecords = font.getUint16();
+ var stringsStart = font.getUint16();
+ var records = [];
+ var NAME_RECORD_LENGTH = 12;
+ var i, ii;
+
+ for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {
+ var r = {
+ platform: font.getUint16(),
+ encoding: font.getUint16(),
+ language: font.getUint16(),
+ name: font.getUint16(),
+ length: font.getUint16(),
+ offset: font.getUint16()
+ };
+
+ if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) {
+ records.push(r);
+ }
+ }
+
+ for (i = 0, ii = records.length; i < ii; i++) {
+ var record = records[i];
+
+ if (record.length <= 0) {
+ continue;
+ }
+
+ var pos = start + stringsStart + record.offset;
+
+ if (pos + record.length > end) {
+ continue;
+ }
+
+ font.pos = pos;
+ var nameIndex = record.name;
+
+ if (record.encoding) {
+ var str = "";
+
+ for (var j = 0, jj = record.length; j < jj; j += 2) {
+ str += String.fromCharCode(font.getUint16());
+ }
+
+ names[1][nameIndex] = str;
+ } else {
+ names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length));
+ }
+ }
+
+ return names;
+ }
+
+ var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
+
+ function sanitizeTTProgram(table, ttContext) {
+ var data = table.data;
+ var i = 0,
+ j,
+ n,
+ b,
+ funcId,
+ pc,
+ lastEndf = 0,
+ lastDeff = 0;
+ var stack = [];
+ var callstack = [];
+ var functionsCalled = [];
+ var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;
+ var inFDEF = false,
+ ifLevel = 0,
+ inELSE = 0;
+
+ for (var ii = data.length; i < ii;) {
+ var op = data[i++];
+
+ if (op === 0x40) {
+ n = data[i++];
+
+ if (inFDEF || inELSE) {
+ i += n;
+ } else {
+ for (j = 0; j < n; j++) {
+ stack.push(data[i++]);
+ }
+ }
+ } else if (op === 0x41) {
+ n = data[i++];
+
+ if (inFDEF || inELSE) {
+ i += n * 2;
+ } else {
+ for (j = 0; j < n; j++) {
+ b = data[i++];
+ stack.push(b << 8 | data[i++]);
+ }
+ }
+ } else if ((op & 0xf8) === 0xb0) {
+ n = op - 0xb0 + 1;
+
+ if (inFDEF || inELSE) {
+ i += n;
+ } else {
+ for (j = 0; j < n; j++) {
+ stack.push(data[i++]);
+ }
+ }
+ } else if ((op & 0xf8) === 0xb8) {
+ n = op - 0xb8 + 1;
+
+ if (inFDEF || inELSE) {
+ i += n * 2;
+ } else {
+ for (j = 0; j < n; j++) {
+ b = data[i++];
+ stack.push(b << 8 | data[i++]);
+ }
+ }
+ } else if (op === 0x2b && !tooComplexToFollowFunctions) {
+ if (!inFDEF && !inELSE) {
+ funcId = stack[stack.length - 1];
+
+ if (isNaN(funcId)) {
+ (0, _util.info)("TT: CALL empty stack (or invalid entry).");
+ } else {
+ ttContext.functionsUsed[funcId] = true;
+
+ if (funcId in ttContext.functionsStackDeltas) {
+ const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];
+
+ if (newStackLength < 0) {
+ (0, _util.warn)("TT: CALL invalid functions stack delta.");
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ stack.length = newStackLength;
+ } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {
+ callstack.push({
+ data,
+ i,
+ stackTop: stack.length - 1
+ });
+ functionsCalled.push(funcId);
+ pc = ttContext.functionsDefined[funcId];
+
+ if (!pc) {
+ (0, _util.warn)("TT: CALL non-existent function");
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ data = pc.data;
+ i = pc.i;
+ }
+ }
+ }
+ } else if (op === 0x2c && !tooComplexToFollowFunctions) {
+ if (inFDEF || inELSE) {
+ (0, _util.warn)("TT: nested FDEFs not allowed");
+ tooComplexToFollowFunctions = true;
+ }
+
+ inFDEF = true;
+ lastDeff = i;
+ funcId = stack.pop();
+ ttContext.functionsDefined[funcId] = {
+ data,
+ i
+ };
+ } else if (op === 0x2d) {
+ if (inFDEF) {
+ inFDEF = false;
+ lastEndf = i;
+ } else {
+ pc = callstack.pop();
+
+ if (!pc) {
+ (0, _util.warn)("TT: ENDF bad stack");
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ funcId = functionsCalled.pop();
+ data = pc.data;
+ i = pc.i;
+ ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;
+ }
+ } else if (op === 0x89) {
+ if (inFDEF || inELSE) {
+ (0, _util.warn)("TT: nested IDEFs not allowed");
+ tooComplexToFollowFunctions = true;
+ }
+
+ inFDEF = true;
+ lastDeff = i;
+ } else if (op === 0x58) {
+ ++ifLevel;
+ } else if (op === 0x1b) {
+ inELSE = ifLevel;
+ } else if (op === 0x59) {
+ if (inELSE === ifLevel) {
+ inELSE = 0;
+ }
+
+ --ifLevel;
+ } else if (op === 0x1c) {
+ if (!inFDEF && !inELSE) {
+ var offset = stack[stack.length - 1];
+
+ if (offset > 0) {
+ i += offset - 1;
+ }
+ }
+ }
+
+ if (!inFDEF && !inELSE) {
+ let stackDelta = 0;
+
+ if (op <= 0x8e) {
+ stackDelta = TTOpsStackDeltas[op];
+ } else if (op >= 0xc0 && op <= 0xdf) {
+ stackDelta = -1;
+ } else if (op >= 0xe0) {
+ stackDelta = -2;
+ }
+
+ if (op >= 0x71 && op <= 0x75) {
+ n = stack.pop();
+
+ if (!isNaN(n)) {
+ stackDelta = -n * 2;
+ }
+ }
+
+ while (stackDelta < 0 && stack.length > 0) {
+ stack.pop();
+ stackDelta++;
+ }
+
+ while (stackDelta > 0) {
+ stack.push(NaN);
+ stackDelta--;
+ }
+ }
+ }
+
+ ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
+ var content = [data];
+
+ if (i > data.length) {
+ content.push(new Uint8Array(i - data.length));
+ }
+
+ if (lastDeff > lastEndf) {
+ (0, _util.warn)("TT: complementing a missing function tail");
+ content.push(new Uint8Array([0x22, 0x2d]));
+ }
+
+ foldTTTable(table, content);
+ }
+
+ function checkInvalidFunctions(ttContext, maxFunctionDefs) {
+ if (ttContext.tooComplexToFollowFunctions) {
+ return;
+ }
+
+ if (ttContext.functionsDefined.length > maxFunctionDefs) {
+ (0, _util.warn)("TT: more functions defined than expected");
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
+ if (j > maxFunctionDefs) {
+ (0, _util.warn)("TT: invalid function id: " + j);
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
+ (0, _util.warn)("TT: undefined function: " + j);
+ ttContext.hintsValid = false;
+ return;
+ }
+ }
+ }
+
+ function foldTTTable(table, content) {
+ if (content.length > 1) {
+ var newLength = 0;
+ var j, jj;
+
+ for (j = 0, jj = content.length; j < jj; j++) {
+ newLength += content[j].length;
+ }
+
+ newLength = newLength + 3 & ~3;
+ var result = new Uint8Array(newLength);
+ var pos = 0;
+
+ for (j = 0, jj = content.length; j < jj; j++) {
+ result.set(content[j], pos);
+ pos += content[j].length;
+ }
+
+ table.data = result;
+ table.length = newLength;
+ }
+ }
+
+ function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {
+ var ttContext = {
+ functionsDefined: [],
+ functionsUsed: [],
+ functionsStackDeltas: [],
+ tooComplexToFollowFunctions: false,
+ hintsValid: true
+ };
+
+ if (fpgm) {
+ sanitizeTTProgram(fpgm, ttContext);
+ }
+
+ if (prep) {
+ sanitizeTTProgram(prep, ttContext);
+ }
+
+ if (fpgm) {
+ checkInvalidFunctions(ttContext, maxFunctionDefs);
+ }
+
+ if (cvt && cvt.length & 1) {
+ var cvtData = new Uint8Array(cvt.length + 1);
+ cvtData.set(cvt.data);
+ cvt.data = cvtData;
+ }
+
+ return ttContext.hintsValid;
+ }
+
+ font = new _stream.Stream(new Uint8Array(font.getBytes()));
+ let header, tables;
+
+ if (isTrueTypeCollectionFile(font)) {
+ const ttcData = readTrueTypeCollectionData(font, this.name);
+ header = ttcData.header;
+ tables = ttcData.tables;
+ } else {
+ header = readOpenTypeHeader(font);
+ tables = readTables(font, header.numTables);
+ }
+
+ let cff, cffFile;
+ var isTrueType = !tables["CFF "];
+
+ if (!isTrueType) {
+ const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));
+
+ if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {
+ cffFile = new _stream.Stream(tables["CFF "].data);
+ cff = new CFFFont(cffFile, properties);
+ adjustWidths(properties);
+ return this.convert(name, cff, properties);
+ }
+
+ delete tables.glyf;
+ delete tables.loca;
+ delete tables.fpgm;
+ delete tables.prep;
+ delete tables["cvt "];
+ this.isOpenType = true;
+ } else {
+ if (!tables.loca) {
+ throw new _util.FormatError('Required "loca" table is not found');
+ }
+
+ if (!tables.glyf) {
+ (0, _util.warn)('Required "glyf" table is not found -- trying to recover.');
+ tables.glyf = {
+ tag: "glyf",
+ data: new Uint8Array(0)
+ };
+ }
+
+ this.isOpenType = false;
+ }
+
+ if (!tables.maxp) {
+ throw new _util.FormatError('Required "maxp" table is not found');
+ }
+
+ font.pos = (font.start || 0) + tables.maxp.offset;
+ var version = font.getInt32();
+ const numGlyphs = font.getUint16();
+ let numGlyphsOut = numGlyphs + 1;
+ let dupFirstEntry = true;
+
+ if (numGlyphsOut > 0xffff) {
+ dupFirstEntry = false;
+ numGlyphsOut = numGlyphs;
+ (0, _util.warn)("Not enough space in glyfs to duplicate first glyph.");
+ }
+
+ var maxFunctionDefs = 0;
+ var maxSizeOfInstructions = 0;
+
+ if (version >= 0x00010000 && tables.maxp.length >= 22) {
+ font.pos += 8;
+ var maxZones = font.getUint16();
+
+ if (maxZones > 2) {
+ tables.maxp.data[14] = 0;
+ tables.maxp.data[15] = 2;
+ }
+
+ font.pos += 4;
+ maxFunctionDefs = font.getUint16();
+ font.pos += 4;
+ maxSizeOfInstructions = font.getUint16();
+ }
+
+ tables.maxp.data[4] = numGlyphsOut >> 8;
+ tables.maxp.data[5] = numGlyphsOut & 255;
+ var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs);
+
+ if (!hintsValid) {
+ delete tables.fpgm;
+ delete tables.prep;
+ delete tables["cvt "];
+ }
+
+ sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry);
+
+ if (!tables.head) {
+ throw new _util.FormatError('Required "head" table is not found');
+ }
+
+ sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
+ var missingGlyphs = Object.create(null);
+
+ if (isTrueType) {
+ var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
+ var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);
+ missingGlyphs = glyphsInfo.missingGlyphs;
+
+ if (version >= 0x00010000 && tables.maxp.length >= 22) {
+ tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
+ tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;
+ }
+ }
+
+ if (!tables.hhea) {
+ throw new _util.FormatError('Required "hhea" table is not found');
+ }
+
+ if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
+ tables.hhea.data[10] = 0xff;
+ tables.hhea.data[11] = 0xff;
+ }
+
+ var metricsOverride = {
+ unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),
+ yMax: int16(tables.head.data[42], tables.head.data[43]),
+ yMin: signedInt16(tables.head.data[38], tables.head.data[39]),
+ ascent: int16(tables.hhea.data[4], tables.hhea.data[5]),
+ descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7])
+ };
+ this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;
+ this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;
+
+ if (tables.post) {
+ readPostScriptTable(tables.post, properties, numGlyphs);
+ }
+
+ tables.post = {
+ tag: "post",
+ data: createPostTable(properties)
+ };
+ const charCodeToGlyphId = [];
+
+ function hasGlyph(glyphId) {
+ return !missingGlyphs[glyphId];
+ }
+
+ if (properties.composite) {
+ var cidToGidMap = properties.cidToGidMap || [];
+ var isCidToGidMapEmpty = cidToGidMap.length === 0;
+ properties.cMap.forEach(function (charCode, cid) {
+ if (cid > 0xffff) {
+ throw new _util.FormatError("Max size of CID is 65,535");
+ }
+
+ var glyphId = -1;
+
+ if (isCidToGidMapEmpty) {
+ glyphId = cid;
+ } else if (cidToGidMap[cid] !== undefined) {
+ glyphId = cidToGidMap[cid];
+ }
+
+ if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {
+ charCodeToGlyphId[charCode] = glyphId;
+ }
+ });
+ } else {
+ var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);
+ var cmapPlatformId = cmapTable.platformId;
+ var cmapEncodingId = cmapTable.encodingId;
+ var cmapMappings = cmapTable.mappings;
+ var cmapMappingsLength = cmapMappings.length;
+
+ if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || cmapPlatformId === -1 && cmapEncodingId === -1 && !!(0, _encodings.getEncoding)(properties.baseEncodingName)) {
+ var baseEncoding = [];
+
+ if (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding") {
+ baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
+ }
+
+ var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+
+ for (let charCode = 0; charCode < 256; charCode++) {
+ var glyphName, standardGlyphName;
+
+ if (this.differences && charCode in this.differences) {
+ glyphName = this.differences[charCode];
+ } else if (charCode in baseEncoding && baseEncoding[charCode] !== "") {
+ glyphName = baseEncoding[charCode];
+ } else {
+ glyphName = _encodings.StandardEncoding[charCode];
+ }
+
+ if (!glyphName) {
+ continue;
+ }
+
+ standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
+ var unicodeOrCharCode;
+
+ if (cmapPlatformId === 3 && cmapEncodingId === 1) {
+ unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];
+ } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {
+ unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName);
+ }
+
+ var found = false;
+
+ for (let i = 0; i < cmapMappingsLength; ++i) {
+ if (cmapMappings[i].charCode !== unicodeOrCharCode) {
+ continue;
+ }
+
+ charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
+ found = true;
+ break;
+ }
+
+ if (!found && properties.glyphNames) {
+ var glyphId = properties.glyphNames.indexOf(glyphName);
+
+ if (glyphId === -1 && standardGlyphName !== glyphName) {
+ glyphId = properties.glyphNames.indexOf(standardGlyphName);
+ }
+
+ if (glyphId > 0 && hasGlyph(glyphId)) {
+ charCodeToGlyphId[charCode] = glyphId;
+ }
+ }
+ }
+ } else if (cmapPlatformId === 0 && cmapEncodingId === 0) {
+ for (let i = 0; i < cmapMappingsLength; ++i) {
+ charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId;
+ }
+ } else {
+ for (let i = 0; i < cmapMappingsLength; ++i) {
+ let charCode = cmapMappings[i].charCode;
+
+ if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) {
+ charCode &= 0xff;
+ }
+
+ charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
+ }
+ }
+ }
+
+ if (charCodeToGlyphId.length === 0) {
+ charCodeToGlyphId[0] = 0;
+ }
+
+ let glyphZeroId = numGlyphsOut - 1;
+
+ if (!dupFirstEntry) {
+ glyphZeroId = 0;
+ }
+
+ var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);
+ this.toFontChar = newMapping.toFontChar;
+ tables.cmap = {
+ tag: "cmap",
+ data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut)
+ };
+
+ if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) {
+ tables["OS/2"] = {
+ tag: "OS/2",
+ data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)
+ };
+ }
+
+ if (!isTrueType) {
+ try {
+ cffFile = new _stream.Stream(tables["CFF "].data);
+ var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED);
+ cff = parser.parse();
+ cff.duplicateFirstGlyph();
+ var compiler = new _cff_parser.CFFCompiler(cff);
+ tables["CFF "].data = compiler.compile();
+ } catch (e) {
+ (0, _util.warn)("Failed to compile font " + properties.loadedName);
+ }
+ }
+
+ if (!tables.name) {
+ tables.name = {
+ tag: "name",
+ data: createNameTable(this.name)
+ };
+ } else {
+ var namePrototype = readNameTable(tables.name);
+ tables.name.data = createNameTable(name, namePrototype);
+ }
+
+ var builder = new OpenTypeFileBuilder(header.version);
+
+ for (var tableTag in tables) {
+ builder.addTable(tableTag, tables[tableTag].data);
+ }
+
+ return builder.toArray();
+ },
+ convert: function Font_convert(fontName, font, properties) {
+ properties.fixedPitch = false;
+
+ if (properties.builtInEncoding) {
+ adjustToUnicode(properties, properties.builtInEncoding);
+ }
+
+ let glyphZeroId = 1;
+
+ if (font instanceof CFFFont) {
+ glyphZeroId = font.numGlyphs - 1;
+ }
+
+ var mapping = font.getGlyphMapping(properties);
+ var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId);
+ this.toFontChar = newMapping.toFontChar;
+ var numGlyphs = font.numGlyphs;
+
+ function getCharCodes(charCodeToGlyphId, glyphId) {
+ var charCodes = null;
+
+ for (var charCode in charCodeToGlyphId) {
+ if (glyphId === charCodeToGlyphId[charCode]) {
+ if (!charCodes) {
+ charCodes = [];
+ }
+
+ charCodes.push(charCode | 0);
+ }
+ }
+
+ return charCodes;
+ }
+
+ function createCharCode(charCodeToGlyphId, glyphId) {
+ for (var charCode in charCodeToGlyphId) {
+ if (glyphId === charCodeToGlyphId[charCode]) {
+ return charCode | 0;
+ }
+ }
+
+ newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;
+ return newMapping.nextAvailableFontCharCode++;
+ }
+
+ var seacs = font.seacs;
+
+ if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {
+ var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ var charset = font.getCharset();
+ var seacMap = Object.create(null);
+
+ for (var glyphId in seacs) {
+ glyphId |= 0;
+ var seac = seacs[glyphId];
+ var baseGlyphName = _encodings.StandardEncoding[seac[2]];
+ var accentGlyphName = _encodings.StandardEncoding[seac[3]];
+ var baseGlyphId = charset.indexOf(baseGlyphName);
+ var accentGlyphId = charset.indexOf(accentGlyphName);
+
+ if (baseGlyphId < 0 || accentGlyphId < 0) {
+ continue;
+ }
+
+ var accentOffset = {
+ x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
+ y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
+ };
+ var charCodes = getCharCodes(mapping, glyphId);
+
+ if (!charCodes) {
+ continue;
+ }
+
+ for (let i = 0, ii = charCodes.length; i < ii; i++) {
+ var charCode = charCodes[i];
+ var charCodeToGlyphId = newMapping.charCodeToGlyphId;
+ var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);
+ var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);
+ seacMap[charCode] = {
+ baseFontCharCode,
+ accentFontCharCode,
+ accentOffset
+ };
+ }
+ }
+
+ properties.seacMap = seacMap;
+ }
+
+ var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
+ var builder = new OpenTypeFileBuilder("\x4F\x54\x54\x4F");
+ builder.addTable("CFF ", font.data);
+ builder.addTable("OS/2", createOS2Table(properties, newMapping.charCodeToGlyphId));
+ builder.addTable("cmap", createCmapTable(newMapping.charCodeToGlyphId, numGlyphs));
+ builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00");
+ builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs));
+ builder.addTable("hmtx", function fontFieldsHmtx() {
+ var charstrings = font.charstrings;
+ var cffWidths = font.cff ? font.cff.widths : null;
+ var hmtx = "\x00\x00\x00\x00";
+
+ for (let i = 1, ii = numGlyphs; i < ii; i++) {
+ var width = 0;
+
+ if (charstrings) {
+ var charstring = charstrings[i - 1];
+ width = "width" in charstring ? charstring.width : 0;
+ } else if (cffWidths) {
+ width = Math.ceil(cffWidths[i] || 0);
+ }
+
+ hmtx += string16(width) + string16(0);
+ }
+
+ return hmtx;
+ }());
+ builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs));
+ builder.addTable("name", createNameTable(fontName));
+ builder.addTable("post", createPostTable(properties));
+ return builder.toArray();
+ },
+
+ get spaceWidth() {
+ var possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
+ var width;
+
+ for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {
+ var glyphName = possibleSpaceReplacements[i];
+
+ if (glyphName in this.widths) {
+ width = this.widths[glyphName];
+ break;
+ }
+
+ var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ var glyphUnicode = glyphsUnicodeMap[glyphName];
+ var charcode = 0;
+
+ if (this.composite && this.cMap.contains(glyphUnicode)) {
+ charcode = this.cMap.lookup(glyphUnicode);
+ }
+
+ if (!charcode && this.toUnicode) {
+ charcode = this.toUnicode.charCodeOf(glyphUnicode);
+ }
+
+ if (charcode <= 0) {
+ charcode = glyphUnicode;
+ }
+
+ width = this.widths[charcode];
+
+ if (width) {
+ break;
+ }
+ }
+
+ width = width || this.defaultWidth;
+ return (0, _util.shadow)(this, "spaceWidth", width);
+ },
+
+ charToGlyph: function Font_charToGlyph(charcode, isSpace) {
+ var fontCharCode, width, operatorListId;
+ var widthCode = charcode;
+
+ if (this.cMap && this.cMap.contains(charcode)) {
+ widthCode = this.cMap.lookup(charcode);
+ }
+
+ width = this.widths[widthCode];
+ width = (0, _util.isNum)(width) ? width : this.defaultWidth;
+ var vmetric = this.vmetrics && this.vmetrics[widthCode];
+ let unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode;
+
+ if (typeof unicode === "number") {
+ unicode = String.fromCharCode(unicode);
+ }
+
+ var isInFont = (charcode in this.toFontChar);
+ fontCharCode = this.toFontChar[charcode] || charcode;
+
+ if (this.missingFile) {
+ const glyphName = this.differences[charcode] || this.defaultEncoding[charcode];
+
+ if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") {
+ fontCharCode = 0x20;
+ }
+
+ fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode);
+ }
+
+ if (this.isType3Font) {
+ operatorListId = fontCharCode;
+ }
+
+ var accent = null;
+
+ if (this.seacMap && this.seacMap[charcode]) {
+ isInFont = true;
+ var seac = this.seacMap[charcode];
+ fontCharCode = seac.baseFontCharCode;
+ accent = {
+ fontChar: String.fromCodePoint(seac.accentFontCharCode),
+ offset: seac.accentOffset
+ };
+ }
+
+ let fontChar = "";
+
+ if (typeof fontCharCode === "number") {
+ if (fontCharCode <= 0x10ffff) {
+ fontChar = String.fromCodePoint(fontCharCode);
+ } else {
+ (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);
+ }
+ }
+
+ var glyph = this.glyphCache[charcode];
+
+ if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) {
+ glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);
+ this.glyphCache[charcode] = glyph;
+ }
+
+ return glyph;
+ },
+ charsToGlyphs: function Font_charsToGlyphs(chars) {
+ var charsCache = this.charsCache;
+ var glyphs, glyph, charcode;
+
+ if (charsCache) {
+ glyphs = charsCache[chars];
+
+ if (glyphs) {
+ return glyphs;
+ }
+ }
+
+ if (!charsCache) {
+ charsCache = this.charsCache = Object.create(null);
+ }
+
+ glyphs = [];
+ var charsCacheKey = chars;
+ var i = 0,
+ ii;
+
+ if (this.cMap) {
+ var c = Object.create(null);
+
+ while (i < chars.length) {
+ this.cMap.readCharCode(chars, i, c);
+ charcode = c.charcode;
+ var length = c.length;
+ i += length;
+ var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20;
+ glyph = this.charToGlyph(charcode, isSpace);
+ glyphs.push(glyph);
+ }
+ } else {
+ for (i = 0, ii = chars.length; i < ii; ++i) {
+ charcode = chars.charCodeAt(i);
+ glyph = this.charToGlyph(charcode, charcode === 0x20);
+ glyphs.push(glyph);
+ }
+ }
+
+ return charsCache[charsCacheKey] = glyphs;
+ },
+
+ get glyphCacheValues() {
+ return Object.values(this.glyphCache);
+ }
+
+ };
+ return Font;
+}();
+
+exports.Font = Font;
+
+var ErrorFont = function ErrorFontClosure() {
+ function ErrorFont(error) {
+ this.error = error;
+ this.loadedName = "g_font_error";
+ this.missingFile = true;
+ }
+
+ ErrorFont.prototype = {
+ charsToGlyphs: function ErrorFont_charsToGlyphs() {
+ return [];
+ },
+
+ exportData(extraProperties = false) {
+ return {
+ error: this.error
+ };
+ }
+
+ };
+ return ErrorFont;
+}();
+
+exports.ErrorFont = ErrorFont;
+
+function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
+ var charCodeToGlyphId = Object.create(null);
+ var glyphId, charCode, baseEncoding;
+ var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
+
+ if (properties.baseEncodingName) {
+ baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
+
+ for (charCode = 0; charCode < baseEncoding.length; charCode++) {
+ glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+
+ if (glyphId >= 0) {
+ charCodeToGlyphId[charCode] = glyphId;
+ } else {
+ charCodeToGlyphId[charCode] = 0;
+ }
+ }
+ } else if (isSymbolicFont) {
+ for (charCode in builtInEncoding) {
+ charCodeToGlyphId[charCode] = builtInEncoding[charCode];
+ }
+ } else {
+ baseEncoding = _encodings.StandardEncoding;
+
+ for (charCode = 0; charCode < baseEncoding.length; charCode++) {
+ glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+
+ if (glyphId >= 0) {
+ charCodeToGlyphId[charCode] = glyphId;
+ } else {
+ charCodeToGlyphId[charCode] = 0;
+ }
+ }
+ }
+
+ var differences = properties.differences,
+ glyphsUnicodeMap;
+
+ if (differences) {
+ for (charCode in differences) {
+ var glyphName = differences[charCode];
+ glyphId = glyphNames.indexOf(glyphName);
+
+ if (glyphId === -1) {
+ if (!glyphsUnicodeMap) {
+ glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ }
+
+ var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
+
+ if (standardGlyphName !== glyphName) {
+ glyphId = glyphNames.indexOf(standardGlyphName);
+ }
+ }
+
+ if (glyphId >= 0) {
+ charCodeToGlyphId[charCode] = glyphId;
+ } else {
+ charCodeToGlyphId[charCode] = 0;
+ }
+ }
+ }
+
+ return charCodeToGlyphId;
+}
+
+var Type1Font = function Type1FontClosure() {
+ function findBlock(streamBytes, signature, startIndex) {
+ var streamBytesLength = streamBytes.length;
+ var signatureLength = signature.length;
+ var scanLength = streamBytesLength - signatureLength;
+ var i = startIndex,
+ j,
+ found = false;
+
+ while (i < scanLength) {
+ j = 0;
+
+ while (j < signatureLength && streamBytes[i + j] === signature[j]) {
+ j++;
+ }
+
+ if (j >= signatureLength) {
+ i += j;
+
+ while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) {
+ i++;
+ }
+
+ found = true;
+ break;
+ }
+
+ i++;
+ }
+
+ return {
+ found,
+ length: i
+ };
+ }
+
+ function getHeaderBlock(stream, suggestedLength) {
+ var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];
+ var streamStartPos = stream.pos;
+ var headerBytes, headerBytesLength, block;
+
+ try {
+ headerBytes = stream.getBytes(suggestedLength);
+ headerBytesLength = headerBytes.length;
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+ }
+
+ if (headerBytesLength === suggestedLength) {
+ block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);
+
+ if (block.found && block.length === suggestedLength) {
+ return {
+ stream: new _stream.Stream(headerBytes),
+ length: suggestedLength
+ };
+ }
+ }
+
+ (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.');
+ stream.pos = streamStartPos;
+ var SCAN_BLOCK_LENGTH = 2048;
+ var actualLength;
+
+ while (true) {
+ var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
+ block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);
+
+ if (block.length === 0) {
+ break;
+ }
+
+ stream.pos += block.length;
+
+ if (block.found) {
+ actualLength = stream.pos - streamStartPos;
+ break;
+ }
+ }
+
+ stream.pos = streamStartPos;
+
+ if (actualLength) {
+ return {
+ stream: new _stream.Stream(stream.getBytes(actualLength)),
+ length: actualLength
+ };
+ }
+
+ (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.');
+ return {
+ stream: new _stream.Stream(stream.getBytes(suggestedLength)),
+ length: suggestedLength
+ };
+ }
+
+ function getEexecBlock(stream, suggestedLength) {
+ var eexecBytes = stream.getBytes();
+ return {
+ stream: new _stream.Stream(eexecBytes),
+ length: eexecBytes.length
+ };
+ }
+
+ function Type1Font(name, file, properties) {
+ var PFB_HEADER_SIZE = 6;
+ var headerBlockLength = properties.length1;
+ var eexecBlockLength = properties.length2;
+ var pfbHeader = file.peekBytes(PFB_HEADER_SIZE);
+ var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;
+
+ if (pfbHeaderPresent) {
+ file.skip(PFB_HEADER_SIZE);
+ headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
+ }
+
+ var headerBlock = getHeaderBlock(file, headerBlockLength);
+ var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED);
+ headerBlockParser.extractFontHeader(properties);
+
+ if (pfbHeaderPresent) {
+ pfbHeader = file.getBytes(PFB_HEADER_SIZE);
+ eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
+ }
+
+ var eexecBlock = getEexecBlock(file, eexecBlockLength);
+ var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED);
+ var data = eexecBlockParser.extractFontProgram(properties);
+
+ for (const key in data.properties) {
+ properties[key] = data.properties[key];
+ }
+
+ var charstrings = data.charstrings;
+ var type2Charstrings = this.getType2Charstrings(charstrings);
+ var subrs = this.getType2Subrs(data.subrs);
+ this.charstrings = charstrings;
+ this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);
+ this.seacs = this.getSeacs(data.charstrings);
+ }
+
+ Type1Font.prototype = {
+ get numGlyphs() {
+ return this.charstrings.length + 1;
+ },
+
+ getCharset: function Type1Font_getCharset() {
+ var charset = [".notdef"];
+ var charstrings = this.charstrings;
+
+ for (var glyphId = 0; glyphId < charstrings.length; glyphId++) {
+ charset.push(charstrings[glyphId].glyphName);
+ }
+
+ return charset;
+ },
+ getGlyphMapping: function Type1Font_getGlyphMapping(properties) {
+ var charstrings = this.charstrings;
+
+ if (properties.composite) {
+ const charCodeToGlyphId = Object.create(null);
+
+ for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {
+ const charCode = properties.cMap.charCodeOf(glyphId);
+ charCodeToGlyphId[charCode] = glyphId + 1;
+ }
+
+ return charCodeToGlyphId;
+ }
+
+ var glyphNames = [".notdef"],
+ glyphId;
+
+ for (glyphId = 0; glyphId < charstrings.length; glyphId++) {
+ glyphNames.push(charstrings[glyphId].glyphName);
+ }
+
+ var encoding = properties.builtInEncoding;
+
+ if (encoding) {
+ var builtInEncoding = Object.create(null);
+
+ for (var charCode in encoding) {
+ glyphId = glyphNames.indexOf(encoding[charCode]);
+
+ if (glyphId >= 0) {
+ builtInEncoding[charCode] = glyphId;
+ }
+ }
+ }
+
+ return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);
+ },
+ hasGlyphId: function Type1Font_hasGlyphID(id) {
+ if (id < 0 || id >= this.numGlyphs) {
+ return false;
+ }
+
+ if (id === 0) {
+ return true;
+ }
+
+ var glyph = this.charstrings[id - 1];
+ return glyph.charstring.length > 0;
+ },
+ getSeacs: function Type1Font_getSeacs(charstrings) {
+ var i, ii;
+ var seacMap = [];
+
+ for (i = 0, ii = charstrings.length; i < ii; i++) {
+ var charstring = charstrings[i];
+
+ if (charstring.seac) {
+ seacMap[i + 1] = charstring.seac;
+ }
+ }
+
+ return seacMap;
+ },
+ getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) {
+ var type2Charstrings = [];
+
+ for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {
+ type2Charstrings.push(type1Charstrings[i].charstring);
+ }
+
+ return type2Charstrings;
+ },
+ getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {
+ var bias = 0;
+ var count = type1Subrs.length;
+
+ if (count < 1133) {
+ bias = 107;
+ } else if (count < 33769) {
+ bias = 1131;
+ } else {
+ bias = 32768;
+ }
+
+ var type2Subrs = [];
+ var i;
+
+ for (i = 0; i < bias; i++) {
+ type2Subrs.push([0x0b]);
+ }
+
+ for (i = 0; i < count; i++) {
+ type2Subrs.push(type1Subrs[i]);
+ }
+
+ return type2Subrs;
+ },
+ wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) {
+ var cff = new _cff_parser.CFF();
+ cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4);
+ cff.names = [name];
+ var topDict = new _cff_parser.CFFTopDict();
+ topDict.setByName("version", 391);
+ topDict.setByName("Notice", 392);
+ topDict.setByName("FullName", 393);
+ topDict.setByName("FamilyName", 394);
+ topDict.setByName("Weight", 395);
+ topDict.setByName("Encoding", null);
+ topDict.setByName("FontMatrix", properties.fontMatrix);
+ topDict.setByName("FontBBox", properties.bbox);
+ topDict.setByName("charset", null);
+ topDict.setByName("CharStrings", null);
+ topDict.setByName("Private", null);
+ cff.topDict = topDict;
+ var strings = new _cff_parser.CFFStrings();
+ strings.add("Version 0.11");
+ strings.add("See original notice");
+ strings.add(name);
+ strings.add(name);
+ strings.add("Medium");
+ cff.strings = strings;
+ cff.globalSubrIndex = new _cff_parser.CFFIndex();
+ var count = glyphs.length;
+ var charsetArray = [".notdef"];
+ var i, ii;
+
+ for (i = 0; i < count; i++) {
+ const glyphName = charstrings[i].glyphName;
+
+ const index = _cff_parser.CFFStandardStrings.indexOf(glyphName);
+
+ if (index === -1) {
+ strings.add(glyphName);
+ }
+
+ charsetArray.push(glyphName);
+ }
+
+ cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray);
+ var charStringsIndex = new _cff_parser.CFFIndex();
+ charStringsIndex.add([0x8b, 0x0e]);
+
+ for (i = 0; i < count; i++) {
+ charStringsIndex.add(glyphs[i]);
+ }
+
+ cff.charStrings = charStringsIndex;
+ var privateDict = new _cff_parser.CFFPrivateDict();
+ privateDict.setByName("Subrs", null);
+ var fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"];
+
+ for (i = 0, ii = fields.length; i < ii; i++) {
+ var field = fields[i];
+
+ if (!(field in properties.privateData)) {
+ continue;
+ }
+
+ var value = properties.privateData[field];
+
+ if (Array.isArray(value)) {
+ for (var j = value.length - 1; j > 0; j--) {
+ value[j] -= value[j - 1];
+ }
+ }
+
+ privateDict.setByName(field, value);
+ }
+
+ cff.topDict.privateDict = privateDict;
+ var subrIndex = new _cff_parser.CFFIndex();
+
+ for (i = 0, ii = subrs.length; i < ii; i++) {
+ subrIndex.add(subrs[i]);
+ }
+
+ privateDict.subrsIndex = subrIndex;
+ var compiler = new _cff_parser.CFFCompiler(cff);
+ return compiler.compile();
+ }
+ };
+ return Type1Font;
+}();
+
+var CFFFont = function CFFFontClosure() {
+ function CFFFont(file, properties) {
+ this.properties = properties;
+ var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);
+ this.cff = parser.parse();
+ this.cff.duplicateFirstGlyph();
+ var compiler = new _cff_parser.CFFCompiler(this.cff);
+ this.seacs = this.cff.seacs;
+
+ try {
+ this.data = compiler.compile();
+ } catch (e) {
+ (0, _util.warn)("Failed to compile font " + properties.loadedName);
+ this.data = file;
+ }
+ }
+
+ CFFFont.prototype = {
+ get numGlyphs() {
+ return this.cff.charStrings.count;
+ },
+
+ getCharset: function CFFFont_getCharset() {
+ return this.cff.charset.charset;
+ },
+ getGlyphMapping: function CFFFont_getGlyphMapping() {
+ var cff = this.cff;
+ var properties = this.properties;
+ var charsets = cff.charset.charset;
+ var charCodeToGlyphId;
+ var glyphId;
+
+ if (properties.composite) {
+ charCodeToGlyphId = Object.create(null);
+ let charCode;
+
+ if (cff.isCIDFont) {
+ for (glyphId = 0; glyphId < charsets.length; glyphId++) {
+ var cid = charsets[glyphId];
+ charCode = properties.cMap.charCodeOf(cid);
+ charCodeToGlyphId[charCode] = glyphId;
+ }
+ } else {
+ for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {
+ charCode = properties.cMap.charCodeOf(glyphId);
+ charCodeToGlyphId[charCode] = glyphId;
+ }
+ }
+
+ return charCodeToGlyphId;
+ }
+
+ var encoding = cff.encoding ? cff.encoding.encoding : null;
+ charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);
+ return charCodeToGlyphId;
+ },
+ hasGlyphId: function CFFFont_hasGlyphID(id) {
+ return this.cff.hasGlyphId(id);
+ }
+ };
+ return CFFFont;
+}();
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _charsets = __w_pdfjs_require__(31);
+
+var _encodings = __w_pdfjs_require__(32);
+
+var MAX_SUBR_NESTING = 10;
+var CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"];
+exports.CFFStandardStrings = CFFStandardStrings;
+const NUM_STANDARD_CFF_STRINGS = 391;
+
+var CFFParser = function CFFParserClosure() {
+ var CharstringValidationData = [null, {
+ id: "hstem",
+ min: 2,
+ stackClearing: true,
+ stem: true
+ }, null, {
+ id: "vstem",
+ min: 2,
+ stackClearing: true,
+ stem: true
+ }, {
+ id: "vmoveto",
+ min: 1,
+ stackClearing: true
+ }, {
+ id: "rlineto",
+ min: 2,
+ resetStack: true
+ }, {
+ id: "hlineto",
+ min: 1,
+ resetStack: true
+ }, {
+ id: "vlineto",
+ min: 1,
+ resetStack: true
+ }, {
+ id: "rrcurveto",
+ min: 6,
+ resetStack: true
+ }, null, {
+ id: "callsubr",
+ min: 1,
+ undefStack: true
+ }, {
+ id: "return",
+ min: 0,
+ undefStack: true
+ }, null, null, {
+ id: "endchar",
+ min: 0,
+ stackClearing: true
+ }, null, null, null, {
+ id: "hstemhm",
+ min: 2,
+ stackClearing: true,
+ stem: true
+ }, {
+ id: "hintmask",
+ min: 0,
+ stackClearing: true
+ }, {
+ id: "cntrmask",
+ min: 0,
+ stackClearing: true
+ }, {
+ id: "rmoveto",
+ min: 2,
+ stackClearing: true
+ }, {
+ id: "hmoveto",
+ min: 1,
+ stackClearing: true
+ }, {
+ id: "vstemhm",
+ min: 2,
+ stackClearing: true,
+ stem: true
+ }, {
+ id: "rcurveline",
+ min: 8,
+ resetStack: true
+ }, {
+ id: "rlinecurve",
+ min: 8,
+ resetStack: true
+ }, {
+ id: "vvcurveto",
+ min: 4,
+ resetStack: true
+ }, {
+ id: "hhcurveto",
+ min: 4,
+ resetStack: true
+ }, null, {
+ id: "callgsubr",
+ min: 1,
+ undefStack: true
+ }, {
+ id: "vhcurveto",
+ min: 4,
+ resetStack: true
+ }, {
+ id: "hvcurveto",
+ min: 4,
+ resetStack: true
+ }];
+ var CharstringValidationData12 = [null, null, null, {
+ id: "and",
+ min: 2,
+ stackDelta: -1
+ }, {
+ id: "or",
+ min: 2,
+ stackDelta: -1
+ }, {
+ id: "not",
+ min: 1,
+ stackDelta: 0
+ }, null, null, null, {
+ id: "abs",
+ min: 1,
+ stackDelta: 0
+ }, {
+ id: "add",
+ min: 2,
+ stackDelta: -1,
+ stackFn: function stack_div(stack, index) {
+ stack[index - 2] = stack[index - 2] + stack[index - 1];
+ }
+ }, {
+ id: "sub",
+ min: 2,
+ stackDelta: -1,
+ stackFn: function stack_div(stack, index) {
+ stack[index - 2] = stack[index - 2] - stack[index - 1];
+ }
+ }, {
+ id: "div",
+ min: 2,
+ stackDelta: -1,
+ stackFn: function stack_div(stack, index) {
+ stack[index - 2] = stack[index - 2] / stack[index - 1];
+ }
+ }, null, {
+ id: "neg",
+ min: 1,
+ stackDelta: 0,
+ stackFn: function stack_div(stack, index) {
+ stack[index - 1] = -stack[index - 1];
+ }
+ }, {
+ id: "eq",
+ min: 2,
+ stackDelta: -1
+ }, null, null, {
+ id: "drop",
+ min: 1,
+ stackDelta: -1
+ }, null, {
+ id: "put",
+ min: 2,
+ stackDelta: -2
+ }, {
+ id: "get",
+ min: 1,
+ stackDelta: 0
+ }, {
+ id: "ifelse",
+ min: 4,
+ stackDelta: -3
+ }, {
+ id: "random",
+ min: 0,
+ stackDelta: 1
+ }, {
+ id: "mul",
+ min: 2,
+ stackDelta: -1,
+ stackFn: function stack_div(stack, index) {
+ stack[index - 2] = stack[index - 2] * stack[index - 1];
+ }
+ }, null, {
+ id: "sqrt",
+ min: 1,
+ stackDelta: 0
+ }, {
+ id: "dup",
+ min: 1,
+ stackDelta: 1
+ }, {
+ id: "exch",
+ min: 2,
+ stackDelta: 0
+ }, {
+ id: "index",
+ min: 2,
+ stackDelta: 0
+ }, {
+ id: "roll",
+ min: 3,
+ stackDelta: -2
+ }, null, null, null, {
+ id: "hflex",
+ min: 7,
+ resetStack: true
+ }, {
+ id: "flex",
+ min: 13,
+ resetStack: true
+ }, {
+ id: "hflex1",
+ min: 9,
+ resetStack: true
+ }, {
+ id: "flex1",
+ min: 11,
+ resetStack: true
+ }];
+
+ function CFFParser(file, properties, seacAnalysisEnabled) {
+ this.bytes = file.getBytes();
+ this.properties = properties;
+ this.seacAnalysisEnabled = !!seacAnalysisEnabled;
+ }
+
+ CFFParser.prototype = {
+ parse: function CFFParser_parse() {
+ var properties = this.properties;
+ var cff = new CFF();
+ this.cff = cff;
+ var header = this.parseHeader();
+ var nameIndex = this.parseIndex(header.endPos);
+ var topDictIndex = this.parseIndex(nameIndex.endPos);
+ var stringIndex = this.parseIndex(topDictIndex.endPos);
+ var globalSubrIndex = this.parseIndex(stringIndex.endPos);
+ var topDictParsed = this.parseDict(topDictIndex.obj.get(0));
+ var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
+ cff.header = header.obj;
+ cff.names = this.parseNameIndex(nameIndex.obj);
+ cff.strings = this.parseStringIndex(stringIndex.obj);
+ cff.topDict = topDict;
+ cff.globalSubrIndex = globalSubrIndex.obj;
+ this.parsePrivateDict(cff.topDict);
+ cff.isCIDFont = topDict.hasName("ROS");
+ var charStringOffset = topDict.getByName("CharStrings");
+ var charStringIndex = this.parseIndex(charStringOffset).obj;
+ var fontMatrix = topDict.getByName("FontMatrix");
+
+ if (fontMatrix) {
+ properties.fontMatrix = fontMatrix;
+ }
+
+ var fontBBox = topDict.getByName("FontBBox");
+
+ if (fontBBox) {
+ properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
+ properties.descent = Math.min(fontBBox[1], fontBBox[3]);
+ properties.ascentScaled = true;
+ }
+
+ var charset, encoding;
+
+ if (cff.isCIDFont) {
+ var fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj;
+
+ for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
+ var dictRaw = fdArrayIndex.get(i);
+ var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);
+ this.parsePrivateDict(fontDict);
+ cff.fdArray.push(fontDict);
+ }
+
+ encoding = null;
+ charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true);
+ cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count);
+ } else {
+ charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false);
+ encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset);
+ }
+
+ cff.charset = charset;
+ cff.encoding = encoding;
+ var charStringsAndSeacs = this.parseCharStrings({
+ charStrings: charStringIndex,
+ localSubrIndex: topDict.privateDict.subrsIndex,
+ globalSubrIndex: globalSubrIndex.obj,
+ fdSelect: cff.fdSelect,
+ fdArray: cff.fdArray,
+ privateDict: topDict.privateDict
+ });
+ cff.charStrings = charStringsAndSeacs.charStrings;
+ cff.seacs = charStringsAndSeacs.seacs;
+ cff.widths = charStringsAndSeacs.widths;
+ return cff;
+ },
+ parseHeader: function CFFParser_parseHeader() {
+ var bytes = this.bytes;
+ var bytesLength = bytes.length;
+ var offset = 0;
+
+ while (offset < bytesLength && bytes[offset] !== 1) {
+ ++offset;
+ }
+
+ if (offset >= bytesLength) {
+ throw new _util.FormatError("Invalid CFF header");
+ }
+
+ if (offset !== 0) {
+ (0, _util.info)("cff data is shifted");
+ bytes = bytes.subarray(offset);
+ this.bytes = bytes;
+ }
+
+ var major = bytes[0];
+ var minor = bytes[1];
+ var hdrSize = bytes[2];
+ var offSize = bytes[3];
+ var header = new CFFHeader(major, minor, hdrSize, offSize);
+ return {
+ obj: header,
+ endPos: hdrSize
+ };
+ },
+ parseDict: function CFFParser_parseDict(dict) {
+ var pos = 0;
+
+ function parseOperand() {
+ var value = dict[pos++];
+
+ if (value === 30) {
+ return parseFloatOperand();
+ } else if (value === 28) {
+ value = dict[pos++];
+ value = (value << 24 | dict[pos++] << 16) >> 16;
+ return value;
+ } else if (value === 29) {
+ value = dict[pos++];
+ value = value << 8 | dict[pos++];
+ value = value << 8 | dict[pos++];
+ value = value << 8 | dict[pos++];
+ return value;
+ } else if (value >= 32 && value <= 246) {
+ return value - 139;
+ } else if (value >= 247 && value <= 250) {
+ return (value - 247) * 256 + dict[pos++] + 108;
+ } else if (value >= 251 && value <= 254) {
+ return -((value - 251) * 256) - dict[pos++] - 108;
+ }
+
+ (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.');
+ return NaN;
+ }
+
+ function parseFloatOperand() {
+ var str = "";
+ var eof = 15;
+ const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"];
+ var length = dict.length;
+
+ while (pos < length) {
+ var b = dict[pos++];
+ var b1 = b >> 4;
+ var b2 = b & 15;
+
+ if (b1 === eof) {
+ break;
+ }
+
+ str += lookup[b1];
+
+ if (b2 === eof) {
+ break;
+ }
+
+ str += lookup[b2];
+ }
+
+ return parseFloat(str);
+ }
+
+ var operands = [];
+ var entries = [];
+ pos = 0;
+ var end = dict.length;
+
+ while (pos < end) {
+ var b = dict[pos];
+
+ if (b <= 21) {
+ if (b === 12) {
+ b = b << 8 | dict[++pos];
+ }
+
+ entries.push([b, operands]);
+ operands = [];
+ ++pos;
+ } else {
+ operands.push(parseOperand());
+ }
+ }
+
+ return entries;
+ },
+ parseIndex: function CFFParser_parseIndex(pos) {
+ var cffIndex = new CFFIndex();
+ var bytes = this.bytes;
+ var count = bytes[pos++] << 8 | bytes[pos++];
+ var offsets = [];
+ var end = pos;
+ var i, ii;
+
+ if (count !== 0) {
+ var offsetSize = bytes[pos++];
+ var startPos = pos + (count + 1) * offsetSize - 1;
+
+ for (i = 0, ii = count + 1; i < ii; ++i) {
+ var offset = 0;
+
+ for (var j = 0; j < offsetSize; ++j) {
+ offset <<= 8;
+ offset += bytes[pos++];
+ }
+
+ offsets.push(startPos + offset);
+ }
+
+ end = offsets[count];
+ }
+
+ for (i = 0, ii = offsets.length - 1; i < ii; ++i) {
+ var offsetStart = offsets[i];
+ var offsetEnd = offsets[i + 1];
+ cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
+ }
+
+ return {
+ obj: cffIndex,
+ endPos: end
+ };
+ },
+ parseNameIndex: function CFFParser_parseNameIndex(index) {
+ var names = [];
+
+ for (var i = 0, ii = index.count; i < ii; ++i) {
+ var name = index.get(i);
+ names.push((0, _util.bytesToString)(name));
+ }
+
+ return names;
+ },
+ parseStringIndex: function CFFParser_parseStringIndex(index) {
+ var strings = new CFFStrings();
+
+ for (var i = 0, ii = index.count; i < ii; ++i) {
+ var data = index.get(i);
+ strings.add((0, _util.bytesToString)(data));
+ }
+
+ return strings;
+ },
+ createDict: function CFFParser_createDict(Type, dict, strings) {
+ var cffDict = new Type(strings);
+
+ for (var i = 0, ii = dict.length; i < ii; ++i) {
+ var pair = dict[i];
+ var key = pair[0];
+ var value = pair[1];
+ cffDict.setByKey(key, value);
+ }
+
+ return cffDict;
+ },
+ parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) {
+ if (!data || state.callDepth > MAX_SUBR_NESTING) {
+ return false;
+ }
+
+ var stackSize = state.stackSize;
+ var stack = state.stack;
+ var length = data.length;
+
+ for (var j = 0; j < length;) {
+ var value = data[j++];
+ var validationCommand = null;
+
+ if (value === 12) {
+ var q = data[j++];
+
+ if (q === 0) {
+ data[j - 2] = 139;
+ data[j - 1] = 22;
+ stackSize = 0;
+ } else {
+ validationCommand = CharstringValidationData12[q];
+ }
+ } else if (value === 28) {
+ stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16;
+ j += 2;
+ stackSize++;
+ } else if (value === 14) {
+ if (stackSize >= 4) {
+ stackSize -= 4;
+
+ if (this.seacAnalysisEnabled) {
+ state.seac = stack.slice(stackSize, stackSize + 4);
+ return false;
+ }
+ }
+
+ validationCommand = CharstringValidationData[value];
+ } else if (value >= 32 && value <= 246) {
+ stack[stackSize] = value - 139;
+ stackSize++;
+ } else if (value >= 247 && value <= 254) {
+ stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108;
+ j++;
+ stackSize++;
+ } else if (value === 255) {
+ stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536;
+ j += 4;
+ stackSize++;
+ } else if (value === 19 || value === 20) {
+ state.hints += stackSize >> 1;
+ j += state.hints + 7 >> 3;
+ stackSize %= 2;
+ validationCommand = CharstringValidationData[value];
+ } else if (value === 10 || value === 29) {
+ var subrsIndex;
+
+ if (value === 10) {
+ subrsIndex = localSubrIndex;
+ } else {
+ subrsIndex = globalSubrIndex;
+ }
+
+ if (!subrsIndex) {
+ validationCommand = CharstringValidationData[value];
+ (0, _util.warn)("Missing subrsIndex for " + validationCommand.id);
+ return false;
+ }
+
+ var bias = 32768;
+
+ if (subrsIndex.count < 1240) {
+ bias = 107;
+ } else if (subrsIndex.count < 33900) {
+ bias = 1131;
+ }
+
+ var subrNumber = stack[--stackSize] + bias;
+
+ if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {
+ validationCommand = CharstringValidationData[value];
+ (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id);
+ return false;
+ }
+
+ state.stackSize = stackSize;
+ state.callDepth++;
+ var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);
+
+ if (!valid) {
+ return false;
+ }
+
+ state.callDepth--;
+ stackSize = state.stackSize;
+ continue;
+ } else if (value === 11) {
+ state.stackSize = stackSize;
+ return true;
+ } else {
+ validationCommand = CharstringValidationData[value];
+ }
+
+ if (validationCommand) {
+ if (validationCommand.stem) {
+ state.hints += stackSize >> 1;
+
+ if (value === 3 || value === 23) {
+ state.hasVStems = true;
+ } else if (state.hasVStems && (value === 1 || value === 18)) {
+ (0, _util.warn)("CFF stem hints are in wrong order");
+ data[j - 1] = value === 1 ? 3 : 23;
+ }
+ }
+
+ if ("min" in validationCommand) {
+ if (!state.undefStack && stackSize < validationCommand.min) {
+ (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min);
+ return false;
+ }
+ }
+
+ if (state.firstStackClearing && validationCommand.stackClearing) {
+ state.firstStackClearing = false;
+ stackSize -= validationCommand.min;
+
+ if (stackSize >= 2 && validationCommand.stem) {
+ stackSize %= 2;
+ } else if (stackSize > 1) {
+ (0, _util.warn)("Found too many parameters for stack-clearing command");
+ }
+
+ if (stackSize > 0 && stack[stackSize - 1] >= 0) {
+ state.width = stack[stackSize - 1];
+ }
+ }
+
+ if ("stackDelta" in validationCommand) {
+ if ("stackFn" in validationCommand) {
+ validationCommand.stackFn(stack, stackSize);
+ }
+
+ stackSize += validationCommand.stackDelta;
+ } else if (validationCommand.stackClearing) {
+ stackSize = 0;
+ } else if (validationCommand.resetStack) {
+ stackSize = 0;
+ state.undefStack = false;
+ } else if (validationCommand.undefStack) {
+ stackSize = 0;
+ state.undefStack = true;
+ state.firstStackClearing = false;
+ }
+ }
+ }
+
+ state.stackSize = stackSize;
+ return true;
+ },
+
+ parseCharStrings({
+ charStrings,
+ localSubrIndex,
+ globalSubrIndex,
+ fdSelect,
+ fdArray,
+ privateDict
+ }) {
+ var seacs = [];
+ var widths = [];
+ var count = charStrings.count;
+
+ for (var i = 0; i < count; i++) {
+ var charstring = charStrings.get(i);
+ var state = {
+ callDepth: 0,
+ stackSize: 0,
+ stack: [],
+ undefStack: true,
+ hints: 0,
+ firstStackClearing: true,
+ seac: null,
+ width: null,
+ hasVStems: false
+ };
+ var valid = true;
+ var localSubrToUse = null;
+ var privateDictToUse = privateDict;
+
+ if (fdSelect && fdArray.length) {
+ var fdIndex = fdSelect.getFDIndex(i);
+
+ if (fdIndex === -1) {
+ (0, _util.warn)("Glyph index is not in fd select.");
+ valid = false;
+ }
+
+ if (fdIndex >= fdArray.length) {
+ (0, _util.warn)("Invalid fd index for glyph index.");
+ valid = false;
+ }
+
+ if (valid) {
+ privateDictToUse = fdArray[fdIndex].privateDict;
+ localSubrToUse = privateDictToUse.subrsIndex;
+ }
+ } else if (localSubrIndex) {
+ localSubrToUse = localSubrIndex;
+ }
+
+ if (valid) {
+ valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex);
+ }
+
+ if (state.width !== null) {
+ const nominalWidth = privateDictToUse.getByName("nominalWidthX");
+ widths[i] = nominalWidth + state.width;
+ } else {
+ const defaultWidth = privateDictToUse.getByName("defaultWidthX");
+ widths[i] = defaultWidth;
+ }
+
+ if (state.seac !== null) {
+ seacs[i] = state.seac;
+ }
+
+ if (!valid) {
+ charStrings.set(i, new Uint8Array([14]));
+ }
+ }
+
+ return {
+ charStrings,
+ seacs,
+ widths
+ };
+ },
+
+ emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) {
+ var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
+ parentDict.setByKey(18, [0, 0]);
+ parentDict.privateDict = privateDict;
+ },
+ parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) {
+ if (!parentDict.hasName("Private")) {
+ this.emptyPrivateDictionary(parentDict);
+ return;
+ }
+
+ var privateOffset = parentDict.getByName("Private");
+
+ if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {
+ parentDict.removeByName("Private");
+ return;
+ }
+
+ var size = privateOffset[0];
+ var offset = privateOffset[1];
+
+ if (size === 0 || offset >= this.bytes.length) {
+ this.emptyPrivateDictionary(parentDict);
+ return;
+ }
+
+ var privateDictEnd = offset + size;
+ var dictData = this.bytes.subarray(offset, privateDictEnd);
+ var dict = this.parseDict(dictData);
+ var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);
+ parentDict.privateDict = privateDict;
+
+ if (!privateDict.getByName("Subrs")) {
+ return;
+ }
+
+ var subrsOffset = privateDict.getByName("Subrs");
+ var relativeOffset = offset + subrsOffset;
+
+ if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
+ this.emptyPrivateDictionary(parentDict);
+ return;
+ }
+
+ var subrsIndex = this.parseIndex(relativeOffset);
+ privateDict.subrsIndex = subrsIndex.obj;
+ },
+ parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) {
+ if (pos === 0) {
+ return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset);
+ } else if (pos === 1) {
+ return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset);
+ } else if (pos === 2) {
+ return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);
+ }
+
+ var bytes = this.bytes;
+ var start = pos;
+ var format = bytes[pos++];
+ const charset = [cid ? 0 : ".notdef"];
+ var id, count, i;
+ length -= 1;
+
+ switch (format) {
+ case 0:
+ for (i = 0; i < length; i++) {
+ id = bytes[pos++] << 8 | bytes[pos++];
+ charset.push(cid ? id : strings.get(id));
+ }
+
+ break;
+
+ case 1:
+ while (charset.length <= length) {
+ id = bytes[pos++] << 8 | bytes[pos++];
+ count = bytes[pos++];
+
+ for (i = 0; i <= count; i++) {
+ charset.push(cid ? id++ : strings.get(id++));
+ }
+ }
+
+ break;
+
+ case 2:
+ while (charset.length <= length) {
+ id = bytes[pos++] << 8 | bytes[pos++];
+ count = bytes[pos++] << 8 | bytes[pos++];
+
+ for (i = 0; i <= count; i++) {
+ charset.push(cid ? id++ : strings.get(id++));
+ }
+ }
+
+ break;
+
+ default:
+ throw new _util.FormatError("Unknown charset format");
+ }
+
+ var end = pos;
+ var raw = bytes.subarray(start, end);
+ return new CFFCharset(false, format, charset, raw);
+ },
+ parseEncoding: function CFFParser_parseEncoding(pos, properties, strings, charset) {
+ var encoding = Object.create(null);
+ var bytes = this.bytes;
+ var predefined = false;
+ var format, i, ii;
+ var raw = null;
+
+ function readSupplement() {
+ var supplementsCount = bytes[pos++];
+
+ for (i = 0; i < supplementsCount; i++) {
+ var code = bytes[pos++];
+ var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
+ encoding[code] = charset.indexOf(strings.get(sid));
+ }
+ }
+
+ if (pos === 0 || pos === 1) {
+ predefined = true;
+ format = pos;
+ var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
+
+ for (i = 0, ii = charset.length; i < ii; i++) {
+ var index = baseEncoding.indexOf(charset[i]);
+
+ if (index !== -1) {
+ encoding[index] = i;
+ }
+ }
+ } else {
+ var dataStart = pos;
+ format = bytes[pos++];
+
+ switch (format & 0x7f) {
+ case 0:
+ var glyphsCount = bytes[pos++];
+
+ for (i = 1; i <= glyphsCount; i++) {
+ encoding[bytes[pos++]] = i;
+ }
+
+ break;
+
+ case 1:
+ var rangesCount = bytes[pos++];
+ var gid = 1;
+
+ for (i = 0; i < rangesCount; i++) {
+ var start = bytes[pos++];
+ var left = bytes[pos++];
+
+ for (var j = start; j <= start + left; j++) {
+ encoding[j] = gid++;
+ }
+ }
+
+ break;
+
+ default:
+ throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`);
+ }
+
+ var dataEnd = pos;
+
+ if (format & 0x80) {
+ bytes[dataStart] &= 0x7f;
+ readSupplement();
+ }
+
+ raw = bytes.subarray(dataStart, dataEnd);
+ }
+
+ format = format & 0x7f;
+ return new CFFEncoding(predefined, format, encoding, raw);
+ },
+ parseFDSelect: function CFFParser_parseFDSelect(pos, length) {
+ var bytes = this.bytes;
+ var format = bytes[pos++];
+ var fdSelect = [];
+ var i;
+
+ switch (format) {
+ case 0:
+ for (i = 0; i < length; ++i) {
+ var id = bytes[pos++];
+ fdSelect.push(id);
+ }
+
+ break;
+
+ case 3:
+ var rangesCount = bytes[pos++] << 8 | bytes[pos++];
+
+ for (i = 0; i < rangesCount; ++i) {
+ var first = bytes[pos++] << 8 | bytes[pos++];
+
+ if (i === 0 && first !== 0) {
+ (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover.");
+ first = 0;
+ }
+
+ var fdIndex = bytes[pos++];
+ var next = bytes[pos] << 8 | bytes[pos + 1];
+
+ for (var j = first; j < next; ++j) {
+ fdSelect.push(fdIndex);
+ }
+ }
+
+ pos += 2;
+ break;
+
+ default:
+ throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`);
+ }
+
+ if (fdSelect.length !== length) {
+ throw new _util.FormatError("parseFDSelect: Invalid font data.");
+ }
+
+ return new CFFFDSelect(format, fdSelect);
+ }
+ };
+ return CFFParser;
+}();
+
+exports.CFFParser = CFFParser;
+
+var CFF = function CFFClosure() {
+ function CFF() {
+ this.header = null;
+ this.names = [];
+ this.topDict = null;
+ this.strings = new CFFStrings();
+ this.globalSubrIndex = null;
+ this.encoding = null;
+ this.charset = null;
+ this.charStrings = null;
+ this.fdArray = [];
+ this.fdSelect = null;
+ this.isCIDFont = false;
+ }
+
+ CFF.prototype = {
+ duplicateFirstGlyph: function CFF_duplicateFirstGlyph() {
+ if (this.charStrings.count >= 65535) {
+ (0, _util.warn)("Not enough space in charstrings to duplicate first glyph.");
+ return;
+ }
+
+ var glyphZero = this.charStrings.get(0);
+ this.charStrings.add(glyphZero);
+
+ if (this.isCIDFont) {
+ this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);
+ }
+ },
+ hasGlyphId: function CFF_hasGlyphID(id) {
+ if (id < 0 || id >= this.charStrings.count) {
+ return false;
+ }
+
+ var glyph = this.charStrings.get(id);
+ return glyph.length > 0;
+ }
+ };
+ return CFF;
+}();
+
+exports.CFF = CFF;
+
+var CFFHeader = function CFFHeaderClosure() {
+ function CFFHeader(major, minor, hdrSize, offSize) {
+ this.major = major;
+ this.minor = minor;
+ this.hdrSize = hdrSize;
+ this.offSize = offSize;
+ }
+
+ return CFFHeader;
+}();
+
+exports.CFFHeader = CFFHeader;
+
+var CFFStrings = function CFFStringsClosure() {
+ function CFFStrings() {
+ this.strings = [];
+ }
+
+ CFFStrings.prototype = {
+ get: function CFFStrings_get(index) {
+ if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {
+ return CFFStandardStrings[index];
+ }
+
+ if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {
+ return this.strings[index - NUM_STANDARD_CFF_STRINGS];
+ }
+
+ return CFFStandardStrings[0];
+ },
+ getSID: function CFFStrings_getSID(str) {
+ let index = CFFStandardStrings.indexOf(str);
+
+ if (index !== -1) {
+ return index;
+ }
+
+ index = this.strings.indexOf(str);
+
+ if (index !== -1) {
+ return index + NUM_STANDARD_CFF_STRINGS;
+ }
+
+ return -1;
+ },
+ add: function CFFStrings_add(value) {
+ this.strings.push(value);
+ },
+
+ get count() {
+ return this.strings.length;
+ }
+
+ };
+ return CFFStrings;
+}();
+
+exports.CFFStrings = CFFStrings;
+
+var CFFIndex = function CFFIndexClosure() {
+ function CFFIndex() {
+ this.objects = [];
+ this.length = 0;
+ }
+
+ CFFIndex.prototype = {
+ add: function CFFIndex_add(data) {
+ this.length += data.length;
+ this.objects.push(data);
+ },
+ set: function CFFIndex_set(index, data) {
+ this.length += data.length - this.objects[index].length;
+ this.objects[index] = data;
+ },
+ get: function CFFIndex_get(index) {
+ return this.objects[index];
+ },
+
+ get count() {
+ return this.objects.length;
+ }
+
+ };
+ return CFFIndex;
+}();
+
+exports.CFFIndex = CFFIndex;
+
+var CFFDict = function CFFDictClosure() {
+ function CFFDict(tables, strings) {
+ this.keyToNameMap = tables.keyToNameMap;
+ this.nameToKeyMap = tables.nameToKeyMap;
+ this.defaults = tables.defaults;
+ this.types = tables.types;
+ this.opcodes = tables.opcodes;
+ this.order = tables.order;
+ this.strings = strings;
+ this.values = Object.create(null);
+ }
+
+ CFFDict.prototype = {
+ setByKey: function CFFDict_setByKey(key, value) {
+ if (!(key in this.keyToNameMap)) {
+ return false;
+ }
+
+ var valueLength = value.length;
+
+ if (valueLength === 0) {
+ return true;
+ }
+
+ for (var i = 0; i < valueLength; i++) {
+ if (isNaN(value[i])) {
+ (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".');
+ return true;
+ }
+ }
+
+ var type = this.types[key];
+
+ if (type === "num" || type === "sid" || type === "offset") {
+ value = value[0];
+ }
+
+ this.values[key] = value;
+ return true;
+ },
+ setByName: function CFFDict_setByName(name, value) {
+ if (!(name in this.nameToKeyMap)) {
+ throw new _util.FormatError(`Invalid dictionary name "${name}"`);
+ }
+
+ this.values[this.nameToKeyMap[name]] = value;
+ },
+ hasName: function CFFDict_hasName(name) {
+ return this.nameToKeyMap[name] in this.values;
+ },
+ getByName: function CFFDict_getByName(name) {
+ if (!(name in this.nameToKeyMap)) {
+ throw new _util.FormatError(`Invalid dictionary name ${name}"`);
+ }
+
+ var key = this.nameToKeyMap[name];
+
+ if (!(key in this.values)) {
+ return this.defaults[key];
+ }
+
+ return this.values[key];
+ },
+ removeByName: function CFFDict_removeByName(name) {
+ delete this.values[this.nameToKeyMap[name]];
+ }
+ };
+
+ CFFDict.createTables = function CFFDict_createTables(layout) {
+ var tables = {
+ keyToNameMap: {},
+ nameToKeyMap: {},
+ defaults: {},
+ types: {},
+ opcodes: {},
+ order: []
+ };
+
+ for (var i = 0, ii = layout.length; i < ii; ++i) {
+ var entry = layout[i];
+ var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
+ tables.keyToNameMap[key] = entry[1];
+ tables.nameToKeyMap[entry[1]] = key;
+ tables.types[key] = entry[2];
+ tables.defaults[key] = entry[3];
+ tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];
+ tables.order.push(key);
+ }
+
+ return tables;
+ };
+
+ return CFFDict;
+}();
+
+var CFFTopDict = function CFFTopDictClosure() {
+ var layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]];
+ var tables = null;
+
+ function CFFTopDict(strings) {
+ if (tables === null) {
+ tables = CFFDict.createTables(layout);
+ }
+
+ CFFDict.call(this, tables, strings);
+ this.privateDict = null;
+ }
+
+ CFFTopDict.prototype = Object.create(CFFDict.prototype);
+ return CFFTopDict;
+}();
+
+exports.CFFTopDict = CFFTopDict;
+
+var CFFPrivateDict = function CFFPrivateDictClosure() {
+ var layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]];
+ var tables = null;
+
+ function CFFPrivateDict(strings) {
+ if (tables === null) {
+ tables = CFFDict.createTables(layout);
+ }
+
+ CFFDict.call(this, tables, strings);
+ this.subrsIndex = null;
+ }
+
+ CFFPrivateDict.prototype = Object.create(CFFDict.prototype);
+ return CFFPrivateDict;
+}();
+
+exports.CFFPrivateDict = CFFPrivateDict;
+var CFFCharsetPredefinedTypes = {
+ ISO_ADOBE: 0,
+ EXPERT: 1,
+ EXPERT_SUBSET: 2
+};
+
+var CFFCharset = function CFFCharsetClosure() {
+ function CFFCharset(predefined, format, charset, raw) {
+ this.predefined = predefined;
+ this.format = format;
+ this.charset = charset;
+ this.raw = raw;
+ }
+
+ return CFFCharset;
+}();
+
+exports.CFFCharset = CFFCharset;
+
+var CFFEncoding = function CFFEncodingClosure() {
+ function CFFEncoding(predefined, format, encoding, raw) {
+ this.predefined = predefined;
+ this.format = format;
+ this.encoding = encoding;
+ this.raw = raw;
+ }
+
+ return CFFEncoding;
+}();
+
+var CFFFDSelect = function CFFFDSelectClosure() {
+ function CFFFDSelect(format, fdSelect) {
+ this.format = format;
+ this.fdSelect = fdSelect;
+ }
+
+ CFFFDSelect.prototype = {
+ getFDIndex: function CFFFDSelect_get(glyphIndex) {
+ if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
+ return -1;
+ }
+
+ return this.fdSelect[glyphIndex];
+ }
+ };
+ return CFFFDSelect;
+}();
+
+exports.CFFFDSelect = CFFFDSelect;
+
+var CFFOffsetTracker = function CFFOffsetTrackerClosure() {
+ function CFFOffsetTracker() {
+ this.offsets = Object.create(null);
+ }
+
+ CFFOffsetTracker.prototype = {
+ isTracking: function CFFOffsetTracker_isTracking(key) {
+ return key in this.offsets;
+ },
+ track: function CFFOffsetTracker_track(key, location) {
+ if (key in this.offsets) {
+ throw new _util.FormatError(`Already tracking location of ${key}`);
+ }
+
+ this.offsets[key] = location;
+ },
+ offset: function CFFOffsetTracker_offset(value) {
+ for (var key in this.offsets) {
+ this.offsets[key] += value;
+ }
+ },
+ setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) {
+ if (!(key in this.offsets)) {
+ throw new _util.FormatError(`Not tracking location of ${key}`);
+ }
+
+ var data = output.data;
+ var dataOffset = this.offsets[key];
+ var size = 5;
+
+ for (var i = 0, ii = values.length; i < ii; ++i) {
+ var offset0 = i * size + dataOffset;
+ var offset1 = offset0 + 1;
+ var offset2 = offset0 + 2;
+ var offset3 = offset0 + 3;
+ var offset4 = offset0 + 4;
+
+ if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
+ throw new _util.FormatError("writing to an offset that is not empty");
+ }
+
+ var value = values[i];
+ data[offset0] = 0x1d;
+ data[offset1] = value >> 24 & 0xff;
+ data[offset2] = value >> 16 & 0xff;
+ data[offset3] = value >> 8 & 0xff;
+ data[offset4] = value & 0xff;
+ }
+ }
+ };
+ return CFFOffsetTracker;
+}();
+
+var CFFCompiler = function CFFCompilerClosure() {
+ function CFFCompiler(cff) {
+ this.cff = cff;
+ }
+
+ CFFCompiler.prototype = {
+ compile: function CFFCompiler_compile() {
+ var cff = this.cff;
+ var output = {
+ data: [],
+ length: 0,
+ add: function CFFCompiler_add(data) {
+ this.data = this.data.concat(data);
+ this.length = this.data.length;
+ }
+ };
+ var header = this.compileHeader(cff.header);
+ output.add(header);
+ var nameIndex = this.compileNameIndex(cff.names);
+ output.add(nameIndex);
+
+ if (cff.isCIDFont) {
+ if (cff.topDict.hasName("FontMatrix")) {
+ var base = cff.topDict.getByName("FontMatrix");
+ cff.topDict.removeByName("FontMatrix");
+
+ for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
+ var subDict = cff.fdArray[i];
+ var matrix = base.slice(0);
+
+ if (subDict.hasName("FontMatrix")) {
+ matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix"));
+ }
+
+ subDict.setByName("FontMatrix", matrix);
+ }
+ }
+ }
+
+ cff.topDict.setByName("charset", 0);
+ var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
+ output.add(compiled.output);
+ var topDictTracker = compiled.trackers[0];
+ var stringIndex = this.compileStringIndex(cff.strings.strings);
+ output.add(stringIndex);
+ var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
+ output.add(globalSubrIndex);
+
+ if (cff.encoding && cff.topDict.hasName("Encoding")) {
+ if (cff.encoding.predefined) {
+ topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output);
+ } else {
+ var encoding = this.compileEncoding(cff.encoding);
+ topDictTracker.setEntryLocation("Encoding", [output.length], output);
+ output.add(encoding);
+ }
+ }
+
+ var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
+ topDictTracker.setEntryLocation("charset", [output.length], output);
+ output.add(charset);
+ var charStrings = this.compileCharStrings(cff.charStrings);
+ topDictTracker.setEntryLocation("CharStrings", [output.length], output);
+ output.add(charStrings);
+
+ if (cff.isCIDFont) {
+ topDictTracker.setEntryLocation("FDSelect", [output.length], output);
+ var fdSelect = this.compileFDSelect(cff.fdSelect);
+ output.add(fdSelect);
+ compiled = this.compileTopDicts(cff.fdArray, output.length, true);
+ topDictTracker.setEntryLocation("FDArray", [output.length], output);
+ output.add(compiled.output);
+ var fontDictTrackers = compiled.trackers;
+ this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
+ }
+
+ this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
+ output.add([0]);
+ return output.data;
+ },
+ encodeNumber: function CFFCompiler_encodeNumber(value) {
+ if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) {
+ return this.encodeInteger(value);
+ }
+
+ return this.encodeFloat(value);
+ },
+ encodeFloat: function CFFCompiler_encodeFloat(num) {
+ var value = num.toString();
+ var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
+
+ if (m) {
+ var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
+ value = (Math.round(num * epsilon) / epsilon).toString();
+ }
+
+ var nibbles = "";
+ var i, ii;
+
+ for (i = 0, ii = value.length; i < ii; ++i) {
+ var a = value[i];
+
+ if (a === "e") {
+ nibbles += value[++i] === "-" ? "c" : "b";
+ } else if (a === ".") {
+ nibbles += "a";
+ } else if (a === "-") {
+ nibbles += "e";
+ } else {
+ nibbles += a;
+ }
+ }
+
+ nibbles += nibbles.length & 1 ? "f" : "ff";
+ var out = [30];
+
+ for (i = 0, ii = nibbles.length; i < ii; i += 2) {
+ out.push(parseInt(nibbles.substring(i, i + 2), 16));
+ }
+
+ return out;
+ },
+ encodeInteger: function CFFCompiler_encodeInteger(value) {
+ var code;
+
+ if (value >= -107 && value <= 107) {
+ code = [value + 139];
+ } else if (value >= 108 && value <= 1131) {
+ value = value - 108;
+ code = [(value >> 8) + 247, value & 0xff];
+ } else if (value >= -1131 && value <= -108) {
+ value = -value - 108;
+ code = [(value >> 8) + 251, value & 0xff];
+ } else if (value >= -32768 && value <= 32767) {
+ code = [0x1c, value >> 8 & 0xff, value & 0xff];
+ } else {
+ code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];
+ }
+
+ return code;
+ },
+ compileHeader: function CFFCompiler_compileHeader(header) {
+ return [header.major, header.minor, header.hdrSize, header.offSize];
+ },
+ compileNameIndex: function CFFCompiler_compileNameIndex(names) {
+ var nameIndex = new CFFIndex();
+
+ for (var i = 0, ii = names.length; i < ii; ++i) {
+ var name = names[i];
+ var length = Math.min(name.length, 127);
+ var sanitizedName = new Array(length);
+
+ for (var j = 0; j < length; j++) {
+ var char = name[j];
+
+ if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
+ char = "_";
+ }
+
+ sanitizedName[j] = char;
+ }
+
+ sanitizedName = sanitizedName.join("");
+
+ if (sanitizedName === "") {
+ sanitizedName = "Bad_Font_Name";
+ }
+
+ nameIndex.add((0, _util.stringToBytes)(sanitizedName));
+ }
+
+ return this.compileIndex(nameIndex);
+ },
+ compileTopDicts: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) {
+ var fontDictTrackers = [];
+ var fdArrayIndex = new CFFIndex();
+
+ for (var i = 0, ii = dicts.length; i < ii; ++i) {
+ var fontDict = dicts[i];
+
+ if (removeCidKeys) {
+ fontDict.removeByName("CIDFontVersion");
+ fontDict.removeByName("CIDFontRevision");
+ fontDict.removeByName("CIDFontType");
+ fontDict.removeByName("CIDCount");
+ fontDict.removeByName("UIDBase");
+ }
+
+ var fontDictTracker = new CFFOffsetTracker();
+ var fontDictData = this.compileDict(fontDict, fontDictTracker);
+ fontDictTrackers.push(fontDictTracker);
+ fdArrayIndex.add(fontDictData);
+ fontDictTracker.offset(length);
+ }
+
+ fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
+ return {
+ trackers: fontDictTrackers,
+ output: fdArrayIndex
+ };
+ },
+ compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts, trackers, output) {
+ for (var i = 0, ii = dicts.length; i < ii; ++i) {
+ var fontDict = dicts[i];
+ var privateDict = fontDict.privateDict;
+
+ if (!privateDict || !fontDict.hasName("Private")) {
+ throw new _util.FormatError("There must be a private dictionary.");
+ }
+
+ var privateDictTracker = new CFFOffsetTracker();
+ var privateDictData = this.compileDict(privateDict, privateDictTracker);
+ var outputLength = output.length;
+ privateDictTracker.offset(outputLength);
+
+ if (!privateDictData.length) {
+ outputLength = 0;
+ }
+
+ trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output);
+ output.add(privateDictData);
+
+ if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
+ var subrs = this.compileIndex(privateDict.subrsIndex);
+ privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
+ output.add(subrs);
+ }
+ }
+ },
+ compileDict: function CFFCompiler_compileDict(dict, offsetTracker) {
+ var out = [];
+ var order = dict.order;
+
+ for (var i = 0; i < order.length; ++i) {
+ var key = order[i];
+
+ if (!(key in dict.values)) {
+ continue;
+ }
+
+ var values = dict.values[key];
+ var types = dict.types[key];
+
+ if (!Array.isArray(types)) {
+ types = [types];
+ }
+
+ if (!Array.isArray(values)) {
+ values = [values];
+ }
+
+ if (values.length === 0) {
+ continue;
+ }
+
+ for (var j = 0, jj = types.length; j < jj; ++j) {
+ var type = types[j];
+ var value = values[j];
+
+ switch (type) {
+ case "num":
+ case "sid":
+ out = out.concat(this.encodeNumber(value));
+ break;
+
+ case "offset":
+ var name = dict.keyToNameMap[key];
+
+ if (!offsetTracker.isTracking(name)) {
+ offsetTracker.track(name, out.length);
+ }
+
+ out = out.concat([0x1d, 0, 0, 0, 0]);
+ break;
+
+ case "array":
+ case "delta":
+ out = out.concat(this.encodeNumber(value));
+
+ for (var k = 1, kk = values.length; k < kk; ++k) {
+ out = out.concat(this.encodeNumber(values[k]));
+ }
+
+ break;
+
+ default:
+ throw new _util.FormatError(`Unknown data type of ${type}`);
+ }
+ }
+
+ out = out.concat(dict.opcodes[key]);
+ }
+
+ return out;
+ },
+ compileStringIndex: function CFFCompiler_compileStringIndex(strings) {
+ var stringIndex = new CFFIndex();
+
+ for (var i = 0, ii = strings.length; i < ii; ++i) {
+ stringIndex.add((0, _util.stringToBytes)(strings[i]));
+ }
+
+ return this.compileIndex(stringIndex);
+ },
+ compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() {
+ var globalSubrIndex = this.cff.globalSubrIndex;
+ this.out.writeByteArray(this.compileIndex(globalSubrIndex));
+ },
+ compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) {
+ var charStringsIndex = new CFFIndex();
+
+ for (var i = 0; i < charStrings.count; i++) {
+ var glyph = charStrings.get(i);
+
+ if (glyph.length === 0) {
+ charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
+ continue;
+ }
+
+ charStringsIndex.add(glyph);
+ }
+
+ return this.compileIndex(charStringsIndex);
+ },
+ compileCharset: function CFFCompiler_compileCharset(charset, numGlyphs, strings, isCIDFont) {
+ let out;
+ const numGlyphsLessNotDef = numGlyphs - 1;
+
+ if (isCIDFont) {
+ out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);
+ } else {
+ const length = 1 + numGlyphsLessNotDef * 2;
+ out = new Uint8Array(length);
+ out[0] = 0;
+ let charsetIndex = 0;
+ const numCharsets = charset.charset.length;
+ let warned = false;
+
+ for (let i = 1; i < out.length; i += 2) {
+ let sid = 0;
+
+ if (charsetIndex < numCharsets) {
+ const name = charset.charset[charsetIndex++];
+ sid = strings.getSID(name);
+
+ if (sid === -1) {
+ sid = 0;
+
+ if (!warned) {
+ warned = true;
+ (0, _util.warn)(`Couldn't find ${name} in CFF strings`);
+ }
+ }
+ }
+
+ out[i] = sid >> 8 & 0xff;
+ out[i + 1] = sid & 0xff;
+ }
+ }
+
+ return this.compileTypedArray(out);
+ },
+ compileEncoding: function CFFCompiler_compileEncoding(encoding) {
+ return this.compileTypedArray(encoding.raw);
+ },
+ compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) {
+ const format = fdSelect.format;
+ let out, i;
+
+ switch (format) {
+ case 0:
+ out = new Uint8Array(1 + fdSelect.fdSelect.length);
+ out[0] = format;
+
+ for (i = 0; i < fdSelect.fdSelect.length; i++) {
+ out[i + 1] = fdSelect.fdSelect[i];
+ }
+
+ break;
+
+ case 3:
+ const start = 0;
+ let lastFD = fdSelect.fdSelect[0];
+ const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];
+
+ for (i = 1; i < fdSelect.fdSelect.length; i++) {
+ const currentFD = fdSelect.fdSelect[i];
+
+ if (currentFD !== lastFD) {
+ ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);
+ lastFD = currentFD;
+ }
+ }
+
+ const numRanges = (ranges.length - 3) / 3;
+ ranges[1] = numRanges >> 8 & 0xff;
+ ranges[2] = numRanges & 0xff;
+ ranges.push(i >> 8 & 0xff, i & 0xff);
+ out = new Uint8Array(ranges);
+ break;
+ }
+
+ return this.compileTypedArray(out);
+ },
+ compileTypedArray: function CFFCompiler_compileTypedArray(data) {
+ var out = [];
+
+ for (var i = 0, ii = data.length; i < ii; ++i) {
+ out[i] = data[i];
+ }
+
+ return out;
+ },
+ compileIndex: function CFFCompiler_compileIndex(index, trackers) {
+ trackers = trackers || [];
+ var objects = index.objects;
+ var count = objects.length;
+
+ if (count === 0) {
+ return [0, 0, 0];
+ }
+
+ var data = [count >> 8 & 0xff, count & 0xff];
+ var lastOffset = 1,
+ i;
+
+ for (i = 0; i < count; ++i) {
+ lastOffset += objects[i].length;
+ }
+
+ var offsetSize;
+
+ if (lastOffset < 0x100) {
+ offsetSize = 1;
+ } else if (lastOffset < 0x10000) {
+ offsetSize = 2;
+ } else if (lastOffset < 0x1000000) {
+ offsetSize = 3;
+ } else {
+ offsetSize = 4;
+ }
+
+ data.push(offsetSize);
+ var relativeOffset = 1;
+
+ for (i = 0; i < count + 1; i++) {
+ if (offsetSize === 1) {
+ data.push(relativeOffset & 0xff);
+ } else if (offsetSize === 2) {
+ data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
+ } else if (offsetSize === 3) {
+ data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
+ } else {
+ data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);
+ }
+
+ if (objects[i]) {
+ relativeOffset += objects[i].length;
+ }
+ }
+
+ for (i = 0; i < count; i++) {
+ if (trackers[i]) {
+ trackers[i].offset(data.length);
+ }
+
+ for (var j = 0, jj = objects[i].length; j < jj; j++) {
+ data.push(objects[i][j]);
+ }
+ }
+
+ return data;
+ }
+ };
+ return CFFCompiler;
+}();
+
+exports.CFFCompiler = CFFCompiler;
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0;
+const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"];
+exports.ISOAdobeCharset = ISOAdobeCharset;
+const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
+exports.ExpertCharset = ExpertCharset;
+const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"];
+exports.ExpertSubsetCharset = ExpertSubsetCharset;
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getEncoding = getEncoding;
+exports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding = exports.StandardEncoding = exports.WinAnsiEncoding = void 0;
+const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
+exports.ExpertEncoding = ExpertEncoding;
+const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""];
+const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"];
+exports.MacRomanEncoding = MacRomanEncoding;
+const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""];
+exports.StandardEncoding = StandardEncoding;
+const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"];
+exports.WinAnsiEncoding = WinAnsiEncoding;
+const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""];
+exports.SymbolSetEncoding = SymbolSetEncoding;
+const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""];
+exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding;
+
+function getEncoding(encodingName) {
+ switch (encodingName) {
+ case "WinAnsiEncoding":
+ return WinAnsiEncoding;
+
+ case "StandardEncoding":
+ return StandardEncoding;
+
+ case "MacRomanEncoding":
+ return MacRomanEncoding;
+
+ case "SymbolSetEncoding":
+ return SymbolSetEncoding;
+
+ case "ZapfDingbatsEncoding":
+ return ZapfDingbatsEncoding;
+
+ case "ExpertEncoding":
+ return ExpertEncoding;
+
+ case "MacExpertEncoding":
+ return MacExpertEncoding;
+
+ default:
+ return null;
+ }
+}
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
+var getGlyphsUnicode = getLookupTableFactory(function (t) {
+ t.A = 0x0041;
+ t.AE = 0x00c6;
+ t.AEacute = 0x01fc;
+ t.AEmacron = 0x01e2;
+ t.AEsmall = 0xf7e6;
+ t.Aacute = 0x00c1;
+ t.Aacutesmall = 0xf7e1;
+ t.Abreve = 0x0102;
+ t.Abreveacute = 0x1eae;
+ t.Abrevecyrillic = 0x04d0;
+ t.Abrevedotbelow = 0x1eb6;
+ t.Abrevegrave = 0x1eb0;
+ t.Abrevehookabove = 0x1eb2;
+ t.Abrevetilde = 0x1eb4;
+ t.Acaron = 0x01cd;
+ t.Acircle = 0x24b6;
+ t.Acircumflex = 0x00c2;
+ t.Acircumflexacute = 0x1ea4;
+ t.Acircumflexdotbelow = 0x1eac;
+ t.Acircumflexgrave = 0x1ea6;
+ t.Acircumflexhookabove = 0x1ea8;
+ t.Acircumflexsmall = 0xf7e2;
+ t.Acircumflextilde = 0x1eaa;
+ t.Acute = 0xf6c9;
+ t.Acutesmall = 0xf7b4;
+ t.Acyrillic = 0x0410;
+ t.Adblgrave = 0x0200;
+ t.Adieresis = 0x00c4;
+ t.Adieresiscyrillic = 0x04d2;
+ t.Adieresismacron = 0x01de;
+ t.Adieresissmall = 0xf7e4;
+ t.Adotbelow = 0x1ea0;
+ t.Adotmacron = 0x01e0;
+ t.Agrave = 0x00c0;
+ t.Agravesmall = 0xf7e0;
+ t.Ahookabove = 0x1ea2;
+ t.Aiecyrillic = 0x04d4;
+ t.Ainvertedbreve = 0x0202;
+ t.Alpha = 0x0391;
+ t.Alphatonos = 0x0386;
+ t.Amacron = 0x0100;
+ t.Amonospace = 0xff21;
+ t.Aogonek = 0x0104;
+ t.Aring = 0x00c5;
+ t.Aringacute = 0x01fa;
+ t.Aringbelow = 0x1e00;
+ t.Aringsmall = 0xf7e5;
+ t.Asmall = 0xf761;
+ t.Atilde = 0x00c3;
+ t.Atildesmall = 0xf7e3;
+ t.Aybarmenian = 0x0531;
+ t.B = 0x0042;
+ t.Bcircle = 0x24b7;
+ t.Bdotaccent = 0x1e02;
+ t.Bdotbelow = 0x1e04;
+ t.Becyrillic = 0x0411;
+ t.Benarmenian = 0x0532;
+ t.Beta = 0x0392;
+ t.Bhook = 0x0181;
+ t.Blinebelow = 0x1e06;
+ t.Bmonospace = 0xff22;
+ t.Brevesmall = 0xf6f4;
+ t.Bsmall = 0xf762;
+ t.Btopbar = 0x0182;
+ t.C = 0x0043;
+ t.Caarmenian = 0x053e;
+ t.Cacute = 0x0106;
+ t.Caron = 0xf6ca;
+ t.Caronsmall = 0xf6f5;
+ t.Ccaron = 0x010c;
+ t.Ccedilla = 0x00c7;
+ t.Ccedillaacute = 0x1e08;
+ t.Ccedillasmall = 0xf7e7;
+ t.Ccircle = 0x24b8;
+ t.Ccircumflex = 0x0108;
+ t.Cdot = 0x010a;
+ t.Cdotaccent = 0x010a;
+ t.Cedillasmall = 0xf7b8;
+ t.Chaarmenian = 0x0549;
+ t.Cheabkhasiancyrillic = 0x04bc;
+ t.Checyrillic = 0x0427;
+ t.Chedescenderabkhasiancyrillic = 0x04be;
+ t.Chedescendercyrillic = 0x04b6;
+ t.Chedieresiscyrillic = 0x04f4;
+ t.Cheharmenian = 0x0543;
+ t.Chekhakassiancyrillic = 0x04cb;
+ t.Cheverticalstrokecyrillic = 0x04b8;
+ t.Chi = 0x03a7;
+ t.Chook = 0x0187;
+ t.Circumflexsmall = 0xf6f6;
+ t.Cmonospace = 0xff23;
+ t.Coarmenian = 0x0551;
+ t.Csmall = 0xf763;
+ t.D = 0x0044;
+ t.DZ = 0x01f1;
+ t.DZcaron = 0x01c4;
+ t.Daarmenian = 0x0534;
+ t.Dafrican = 0x0189;
+ t.Dcaron = 0x010e;
+ t.Dcedilla = 0x1e10;
+ t.Dcircle = 0x24b9;
+ t.Dcircumflexbelow = 0x1e12;
+ t.Dcroat = 0x0110;
+ t.Ddotaccent = 0x1e0a;
+ t.Ddotbelow = 0x1e0c;
+ t.Decyrillic = 0x0414;
+ t.Deicoptic = 0x03ee;
+ t.Delta = 0x2206;
+ t.Deltagreek = 0x0394;
+ t.Dhook = 0x018a;
+ t.Dieresis = 0xf6cb;
+ t.DieresisAcute = 0xf6cc;
+ t.DieresisGrave = 0xf6cd;
+ t.Dieresissmall = 0xf7a8;
+ t.Digammagreek = 0x03dc;
+ t.Djecyrillic = 0x0402;
+ t.Dlinebelow = 0x1e0e;
+ t.Dmonospace = 0xff24;
+ t.Dotaccentsmall = 0xf6f7;
+ t.Dslash = 0x0110;
+ t.Dsmall = 0xf764;
+ t.Dtopbar = 0x018b;
+ t.Dz = 0x01f2;
+ t.Dzcaron = 0x01c5;
+ t.Dzeabkhasiancyrillic = 0x04e0;
+ t.Dzecyrillic = 0x0405;
+ t.Dzhecyrillic = 0x040f;
+ t.E = 0x0045;
+ t.Eacute = 0x00c9;
+ t.Eacutesmall = 0xf7e9;
+ t.Ebreve = 0x0114;
+ t.Ecaron = 0x011a;
+ t.Ecedillabreve = 0x1e1c;
+ t.Echarmenian = 0x0535;
+ t.Ecircle = 0x24ba;
+ t.Ecircumflex = 0x00ca;
+ t.Ecircumflexacute = 0x1ebe;
+ t.Ecircumflexbelow = 0x1e18;
+ t.Ecircumflexdotbelow = 0x1ec6;
+ t.Ecircumflexgrave = 0x1ec0;
+ t.Ecircumflexhookabove = 0x1ec2;
+ t.Ecircumflexsmall = 0xf7ea;
+ t.Ecircumflextilde = 0x1ec4;
+ t.Ecyrillic = 0x0404;
+ t.Edblgrave = 0x0204;
+ t.Edieresis = 0x00cb;
+ t.Edieresissmall = 0xf7eb;
+ t.Edot = 0x0116;
+ t.Edotaccent = 0x0116;
+ t.Edotbelow = 0x1eb8;
+ t.Efcyrillic = 0x0424;
+ t.Egrave = 0x00c8;
+ t.Egravesmall = 0xf7e8;
+ t.Eharmenian = 0x0537;
+ t.Ehookabove = 0x1eba;
+ t.Eightroman = 0x2167;
+ t.Einvertedbreve = 0x0206;
+ t.Eiotifiedcyrillic = 0x0464;
+ t.Elcyrillic = 0x041b;
+ t.Elevenroman = 0x216a;
+ t.Emacron = 0x0112;
+ t.Emacronacute = 0x1e16;
+ t.Emacrongrave = 0x1e14;
+ t.Emcyrillic = 0x041c;
+ t.Emonospace = 0xff25;
+ t.Encyrillic = 0x041d;
+ t.Endescendercyrillic = 0x04a2;
+ t.Eng = 0x014a;
+ t.Enghecyrillic = 0x04a4;
+ t.Enhookcyrillic = 0x04c7;
+ t.Eogonek = 0x0118;
+ t.Eopen = 0x0190;
+ t.Epsilon = 0x0395;
+ t.Epsilontonos = 0x0388;
+ t.Ercyrillic = 0x0420;
+ t.Ereversed = 0x018e;
+ t.Ereversedcyrillic = 0x042d;
+ t.Escyrillic = 0x0421;
+ t.Esdescendercyrillic = 0x04aa;
+ t.Esh = 0x01a9;
+ t.Esmall = 0xf765;
+ t.Eta = 0x0397;
+ t.Etarmenian = 0x0538;
+ t.Etatonos = 0x0389;
+ t.Eth = 0x00d0;
+ t.Ethsmall = 0xf7f0;
+ t.Etilde = 0x1ebc;
+ t.Etildebelow = 0x1e1a;
+ t.Euro = 0x20ac;
+ t.Ezh = 0x01b7;
+ t.Ezhcaron = 0x01ee;
+ t.Ezhreversed = 0x01b8;
+ t.F = 0x0046;
+ t.Fcircle = 0x24bb;
+ t.Fdotaccent = 0x1e1e;
+ t.Feharmenian = 0x0556;
+ t.Feicoptic = 0x03e4;
+ t.Fhook = 0x0191;
+ t.Fitacyrillic = 0x0472;
+ t.Fiveroman = 0x2164;
+ t.Fmonospace = 0xff26;
+ t.Fourroman = 0x2163;
+ t.Fsmall = 0xf766;
+ t.G = 0x0047;
+ t.GBsquare = 0x3387;
+ t.Gacute = 0x01f4;
+ t.Gamma = 0x0393;
+ t.Gammaafrican = 0x0194;
+ t.Gangiacoptic = 0x03ea;
+ t.Gbreve = 0x011e;
+ t.Gcaron = 0x01e6;
+ t.Gcedilla = 0x0122;
+ t.Gcircle = 0x24bc;
+ t.Gcircumflex = 0x011c;
+ t.Gcommaaccent = 0x0122;
+ t.Gdot = 0x0120;
+ t.Gdotaccent = 0x0120;
+ t.Gecyrillic = 0x0413;
+ t.Ghadarmenian = 0x0542;
+ t.Ghemiddlehookcyrillic = 0x0494;
+ t.Ghestrokecyrillic = 0x0492;
+ t.Gheupturncyrillic = 0x0490;
+ t.Ghook = 0x0193;
+ t.Gimarmenian = 0x0533;
+ t.Gjecyrillic = 0x0403;
+ t.Gmacron = 0x1e20;
+ t.Gmonospace = 0xff27;
+ t.Grave = 0xf6ce;
+ t.Gravesmall = 0xf760;
+ t.Gsmall = 0xf767;
+ t.Gsmallhook = 0x029b;
+ t.Gstroke = 0x01e4;
+ t.H = 0x0048;
+ t.H18533 = 0x25cf;
+ t.H18543 = 0x25aa;
+ t.H18551 = 0x25ab;
+ t.H22073 = 0x25a1;
+ t.HPsquare = 0x33cb;
+ t.Haabkhasiancyrillic = 0x04a8;
+ t.Hadescendercyrillic = 0x04b2;
+ t.Hardsigncyrillic = 0x042a;
+ t.Hbar = 0x0126;
+ t.Hbrevebelow = 0x1e2a;
+ t.Hcedilla = 0x1e28;
+ t.Hcircle = 0x24bd;
+ t.Hcircumflex = 0x0124;
+ t.Hdieresis = 0x1e26;
+ t.Hdotaccent = 0x1e22;
+ t.Hdotbelow = 0x1e24;
+ t.Hmonospace = 0xff28;
+ t.Hoarmenian = 0x0540;
+ t.Horicoptic = 0x03e8;
+ t.Hsmall = 0xf768;
+ t.Hungarumlaut = 0xf6cf;
+ t.Hungarumlautsmall = 0xf6f8;
+ t.Hzsquare = 0x3390;
+ t.I = 0x0049;
+ t.IAcyrillic = 0x042f;
+ t.IJ = 0x0132;
+ t.IUcyrillic = 0x042e;
+ t.Iacute = 0x00cd;
+ t.Iacutesmall = 0xf7ed;
+ t.Ibreve = 0x012c;
+ t.Icaron = 0x01cf;
+ t.Icircle = 0x24be;
+ t.Icircumflex = 0x00ce;
+ t.Icircumflexsmall = 0xf7ee;
+ t.Icyrillic = 0x0406;
+ t.Idblgrave = 0x0208;
+ t.Idieresis = 0x00cf;
+ t.Idieresisacute = 0x1e2e;
+ t.Idieresiscyrillic = 0x04e4;
+ t.Idieresissmall = 0xf7ef;
+ t.Idot = 0x0130;
+ t.Idotaccent = 0x0130;
+ t.Idotbelow = 0x1eca;
+ t.Iebrevecyrillic = 0x04d6;
+ t.Iecyrillic = 0x0415;
+ t.Ifraktur = 0x2111;
+ t.Igrave = 0x00cc;
+ t.Igravesmall = 0xf7ec;
+ t.Ihookabove = 0x1ec8;
+ t.Iicyrillic = 0x0418;
+ t.Iinvertedbreve = 0x020a;
+ t.Iishortcyrillic = 0x0419;
+ t.Imacron = 0x012a;
+ t.Imacroncyrillic = 0x04e2;
+ t.Imonospace = 0xff29;
+ t.Iniarmenian = 0x053b;
+ t.Iocyrillic = 0x0401;
+ t.Iogonek = 0x012e;
+ t.Iota = 0x0399;
+ t.Iotaafrican = 0x0196;
+ t.Iotadieresis = 0x03aa;
+ t.Iotatonos = 0x038a;
+ t.Ismall = 0xf769;
+ t.Istroke = 0x0197;
+ t.Itilde = 0x0128;
+ t.Itildebelow = 0x1e2c;
+ t.Izhitsacyrillic = 0x0474;
+ t.Izhitsadblgravecyrillic = 0x0476;
+ t.J = 0x004a;
+ t.Jaarmenian = 0x0541;
+ t.Jcircle = 0x24bf;
+ t.Jcircumflex = 0x0134;
+ t.Jecyrillic = 0x0408;
+ t.Jheharmenian = 0x054b;
+ t.Jmonospace = 0xff2a;
+ t.Jsmall = 0xf76a;
+ t.K = 0x004b;
+ t.KBsquare = 0x3385;
+ t.KKsquare = 0x33cd;
+ t.Kabashkircyrillic = 0x04a0;
+ t.Kacute = 0x1e30;
+ t.Kacyrillic = 0x041a;
+ t.Kadescendercyrillic = 0x049a;
+ t.Kahookcyrillic = 0x04c3;
+ t.Kappa = 0x039a;
+ t.Kastrokecyrillic = 0x049e;
+ t.Kaverticalstrokecyrillic = 0x049c;
+ t.Kcaron = 0x01e8;
+ t.Kcedilla = 0x0136;
+ t.Kcircle = 0x24c0;
+ t.Kcommaaccent = 0x0136;
+ t.Kdotbelow = 0x1e32;
+ t.Keharmenian = 0x0554;
+ t.Kenarmenian = 0x053f;
+ t.Khacyrillic = 0x0425;
+ t.Kheicoptic = 0x03e6;
+ t.Khook = 0x0198;
+ t.Kjecyrillic = 0x040c;
+ t.Klinebelow = 0x1e34;
+ t.Kmonospace = 0xff2b;
+ t.Koppacyrillic = 0x0480;
+ t.Koppagreek = 0x03de;
+ t.Ksicyrillic = 0x046e;
+ t.Ksmall = 0xf76b;
+ t.L = 0x004c;
+ t.LJ = 0x01c7;
+ t.LL = 0xf6bf;
+ t.Lacute = 0x0139;
+ t.Lambda = 0x039b;
+ t.Lcaron = 0x013d;
+ t.Lcedilla = 0x013b;
+ t.Lcircle = 0x24c1;
+ t.Lcircumflexbelow = 0x1e3c;
+ t.Lcommaaccent = 0x013b;
+ t.Ldot = 0x013f;
+ t.Ldotaccent = 0x013f;
+ t.Ldotbelow = 0x1e36;
+ t.Ldotbelowmacron = 0x1e38;
+ t.Liwnarmenian = 0x053c;
+ t.Lj = 0x01c8;
+ t.Ljecyrillic = 0x0409;
+ t.Llinebelow = 0x1e3a;
+ t.Lmonospace = 0xff2c;
+ t.Lslash = 0x0141;
+ t.Lslashsmall = 0xf6f9;
+ t.Lsmall = 0xf76c;
+ t.M = 0x004d;
+ t.MBsquare = 0x3386;
+ t.Macron = 0xf6d0;
+ t.Macronsmall = 0xf7af;
+ t.Macute = 0x1e3e;
+ t.Mcircle = 0x24c2;
+ t.Mdotaccent = 0x1e40;
+ t.Mdotbelow = 0x1e42;
+ t.Menarmenian = 0x0544;
+ t.Mmonospace = 0xff2d;
+ t.Msmall = 0xf76d;
+ t.Mturned = 0x019c;
+ t.Mu = 0x039c;
+ t.N = 0x004e;
+ t.NJ = 0x01ca;
+ t.Nacute = 0x0143;
+ t.Ncaron = 0x0147;
+ t.Ncedilla = 0x0145;
+ t.Ncircle = 0x24c3;
+ t.Ncircumflexbelow = 0x1e4a;
+ t.Ncommaaccent = 0x0145;
+ t.Ndotaccent = 0x1e44;
+ t.Ndotbelow = 0x1e46;
+ t.Nhookleft = 0x019d;
+ t.Nineroman = 0x2168;
+ t.Nj = 0x01cb;
+ t.Njecyrillic = 0x040a;
+ t.Nlinebelow = 0x1e48;
+ t.Nmonospace = 0xff2e;
+ t.Nowarmenian = 0x0546;
+ t.Nsmall = 0xf76e;
+ t.Ntilde = 0x00d1;
+ t.Ntildesmall = 0xf7f1;
+ t.Nu = 0x039d;
+ t.O = 0x004f;
+ t.OE = 0x0152;
+ t.OEsmall = 0xf6fa;
+ t.Oacute = 0x00d3;
+ t.Oacutesmall = 0xf7f3;
+ t.Obarredcyrillic = 0x04e8;
+ t.Obarreddieresiscyrillic = 0x04ea;
+ t.Obreve = 0x014e;
+ t.Ocaron = 0x01d1;
+ t.Ocenteredtilde = 0x019f;
+ t.Ocircle = 0x24c4;
+ t.Ocircumflex = 0x00d4;
+ t.Ocircumflexacute = 0x1ed0;
+ t.Ocircumflexdotbelow = 0x1ed8;
+ t.Ocircumflexgrave = 0x1ed2;
+ t.Ocircumflexhookabove = 0x1ed4;
+ t.Ocircumflexsmall = 0xf7f4;
+ t.Ocircumflextilde = 0x1ed6;
+ t.Ocyrillic = 0x041e;
+ t.Odblacute = 0x0150;
+ t.Odblgrave = 0x020c;
+ t.Odieresis = 0x00d6;
+ t.Odieresiscyrillic = 0x04e6;
+ t.Odieresissmall = 0xf7f6;
+ t.Odotbelow = 0x1ecc;
+ t.Ogoneksmall = 0xf6fb;
+ t.Ograve = 0x00d2;
+ t.Ogravesmall = 0xf7f2;
+ t.Oharmenian = 0x0555;
+ t.Ohm = 0x2126;
+ t.Ohookabove = 0x1ece;
+ t.Ohorn = 0x01a0;
+ t.Ohornacute = 0x1eda;
+ t.Ohorndotbelow = 0x1ee2;
+ t.Ohorngrave = 0x1edc;
+ t.Ohornhookabove = 0x1ede;
+ t.Ohorntilde = 0x1ee0;
+ t.Ohungarumlaut = 0x0150;
+ t.Oi = 0x01a2;
+ t.Oinvertedbreve = 0x020e;
+ t.Omacron = 0x014c;
+ t.Omacronacute = 0x1e52;
+ t.Omacrongrave = 0x1e50;
+ t.Omega = 0x2126;
+ t.Omegacyrillic = 0x0460;
+ t.Omegagreek = 0x03a9;
+ t.Omegaroundcyrillic = 0x047a;
+ t.Omegatitlocyrillic = 0x047c;
+ t.Omegatonos = 0x038f;
+ t.Omicron = 0x039f;
+ t.Omicrontonos = 0x038c;
+ t.Omonospace = 0xff2f;
+ t.Oneroman = 0x2160;
+ t.Oogonek = 0x01ea;
+ t.Oogonekmacron = 0x01ec;
+ t.Oopen = 0x0186;
+ t.Oslash = 0x00d8;
+ t.Oslashacute = 0x01fe;
+ t.Oslashsmall = 0xf7f8;
+ t.Osmall = 0xf76f;
+ t.Ostrokeacute = 0x01fe;
+ t.Otcyrillic = 0x047e;
+ t.Otilde = 0x00d5;
+ t.Otildeacute = 0x1e4c;
+ t.Otildedieresis = 0x1e4e;
+ t.Otildesmall = 0xf7f5;
+ t.P = 0x0050;
+ t.Pacute = 0x1e54;
+ t.Pcircle = 0x24c5;
+ t.Pdotaccent = 0x1e56;
+ t.Pecyrillic = 0x041f;
+ t.Peharmenian = 0x054a;
+ t.Pemiddlehookcyrillic = 0x04a6;
+ t.Phi = 0x03a6;
+ t.Phook = 0x01a4;
+ t.Pi = 0x03a0;
+ t.Piwrarmenian = 0x0553;
+ t.Pmonospace = 0xff30;
+ t.Psi = 0x03a8;
+ t.Psicyrillic = 0x0470;
+ t.Psmall = 0xf770;
+ t.Q = 0x0051;
+ t.Qcircle = 0x24c6;
+ t.Qmonospace = 0xff31;
+ t.Qsmall = 0xf771;
+ t.R = 0x0052;
+ t.Raarmenian = 0x054c;
+ t.Racute = 0x0154;
+ t.Rcaron = 0x0158;
+ t.Rcedilla = 0x0156;
+ t.Rcircle = 0x24c7;
+ t.Rcommaaccent = 0x0156;
+ t.Rdblgrave = 0x0210;
+ t.Rdotaccent = 0x1e58;
+ t.Rdotbelow = 0x1e5a;
+ t.Rdotbelowmacron = 0x1e5c;
+ t.Reharmenian = 0x0550;
+ t.Rfraktur = 0x211c;
+ t.Rho = 0x03a1;
+ t.Ringsmall = 0xf6fc;
+ t.Rinvertedbreve = 0x0212;
+ t.Rlinebelow = 0x1e5e;
+ t.Rmonospace = 0xff32;
+ t.Rsmall = 0xf772;
+ t.Rsmallinverted = 0x0281;
+ t.Rsmallinvertedsuperior = 0x02b6;
+ t.S = 0x0053;
+ t.SF010000 = 0x250c;
+ t.SF020000 = 0x2514;
+ t.SF030000 = 0x2510;
+ t.SF040000 = 0x2518;
+ t.SF050000 = 0x253c;
+ t.SF060000 = 0x252c;
+ t.SF070000 = 0x2534;
+ t.SF080000 = 0x251c;
+ t.SF090000 = 0x2524;
+ t.SF100000 = 0x2500;
+ t.SF110000 = 0x2502;
+ t.SF190000 = 0x2561;
+ t.SF200000 = 0x2562;
+ t.SF210000 = 0x2556;
+ t.SF220000 = 0x2555;
+ t.SF230000 = 0x2563;
+ t.SF240000 = 0x2551;
+ t.SF250000 = 0x2557;
+ t.SF260000 = 0x255d;
+ t.SF270000 = 0x255c;
+ t.SF280000 = 0x255b;
+ t.SF360000 = 0x255e;
+ t.SF370000 = 0x255f;
+ t.SF380000 = 0x255a;
+ t.SF390000 = 0x2554;
+ t.SF400000 = 0x2569;
+ t.SF410000 = 0x2566;
+ t.SF420000 = 0x2560;
+ t.SF430000 = 0x2550;
+ t.SF440000 = 0x256c;
+ t.SF450000 = 0x2567;
+ t.SF460000 = 0x2568;
+ t.SF470000 = 0x2564;
+ t.SF480000 = 0x2565;
+ t.SF490000 = 0x2559;
+ t.SF500000 = 0x2558;
+ t.SF510000 = 0x2552;
+ t.SF520000 = 0x2553;
+ t.SF530000 = 0x256b;
+ t.SF540000 = 0x256a;
+ t.Sacute = 0x015a;
+ t.Sacutedotaccent = 0x1e64;
+ t.Sampigreek = 0x03e0;
+ t.Scaron = 0x0160;
+ t.Scarondotaccent = 0x1e66;
+ t.Scaronsmall = 0xf6fd;
+ t.Scedilla = 0x015e;
+ t.Schwa = 0x018f;
+ t.Schwacyrillic = 0x04d8;
+ t.Schwadieresiscyrillic = 0x04da;
+ t.Scircle = 0x24c8;
+ t.Scircumflex = 0x015c;
+ t.Scommaaccent = 0x0218;
+ t.Sdotaccent = 0x1e60;
+ t.Sdotbelow = 0x1e62;
+ t.Sdotbelowdotaccent = 0x1e68;
+ t.Seharmenian = 0x054d;
+ t.Sevenroman = 0x2166;
+ t.Shaarmenian = 0x0547;
+ t.Shacyrillic = 0x0428;
+ t.Shchacyrillic = 0x0429;
+ t.Sheicoptic = 0x03e2;
+ t.Shhacyrillic = 0x04ba;
+ t.Shimacoptic = 0x03ec;
+ t.Sigma = 0x03a3;
+ t.Sixroman = 0x2165;
+ t.Smonospace = 0xff33;
+ t.Softsigncyrillic = 0x042c;
+ t.Ssmall = 0xf773;
+ t.Stigmagreek = 0x03da;
+ t.T = 0x0054;
+ t.Tau = 0x03a4;
+ t.Tbar = 0x0166;
+ t.Tcaron = 0x0164;
+ t.Tcedilla = 0x0162;
+ t.Tcircle = 0x24c9;
+ t.Tcircumflexbelow = 0x1e70;
+ t.Tcommaaccent = 0x0162;
+ t.Tdotaccent = 0x1e6a;
+ t.Tdotbelow = 0x1e6c;
+ t.Tecyrillic = 0x0422;
+ t.Tedescendercyrillic = 0x04ac;
+ t.Tenroman = 0x2169;
+ t.Tetsecyrillic = 0x04b4;
+ t.Theta = 0x0398;
+ t.Thook = 0x01ac;
+ t.Thorn = 0x00de;
+ t.Thornsmall = 0xf7fe;
+ t.Threeroman = 0x2162;
+ t.Tildesmall = 0xf6fe;
+ t.Tiwnarmenian = 0x054f;
+ t.Tlinebelow = 0x1e6e;
+ t.Tmonospace = 0xff34;
+ t.Toarmenian = 0x0539;
+ t.Tonefive = 0x01bc;
+ t.Tonesix = 0x0184;
+ t.Tonetwo = 0x01a7;
+ t.Tretroflexhook = 0x01ae;
+ t.Tsecyrillic = 0x0426;
+ t.Tshecyrillic = 0x040b;
+ t.Tsmall = 0xf774;
+ t.Twelveroman = 0x216b;
+ t.Tworoman = 0x2161;
+ t.U = 0x0055;
+ t.Uacute = 0x00da;
+ t.Uacutesmall = 0xf7fa;
+ t.Ubreve = 0x016c;
+ t.Ucaron = 0x01d3;
+ t.Ucircle = 0x24ca;
+ t.Ucircumflex = 0x00db;
+ t.Ucircumflexbelow = 0x1e76;
+ t.Ucircumflexsmall = 0xf7fb;
+ t.Ucyrillic = 0x0423;
+ t.Udblacute = 0x0170;
+ t.Udblgrave = 0x0214;
+ t.Udieresis = 0x00dc;
+ t.Udieresisacute = 0x01d7;
+ t.Udieresisbelow = 0x1e72;
+ t.Udieresiscaron = 0x01d9;
+ t.Udieresiscyrillic = 0x04f0;
+ t.Udieresisgrave = 0x01db;
+ t.Udieresismacron = 0x01d5;
+ t.Udieresissmall = 0xf7fc;
+ t.Udotbelow = 0x1ee4;
+ t.Ugrave = 0x00d9;
+ t.Ugravesmall = 0xf7f9;
+ t.Uhookabove = 0x1ee6;
+ t.Uhorn = 0x01af;
+ t.Uhornacute = 0x1ee8;
+ t.Uhorndotbelow = 0x1ef0;
+ t.Uhorngrave = 0x1eea;
+ t.Uhornhookabove = 0x1eec;
+ t.Uhorntilde = 0x1eee;
+ t.Uhungarumlaut = 0x0170;
+ t.Uhungarumlautcyrillic = 0x04f2;
+ t.Uinvertedbreve = 0x0216;
+ t.Ukcyrillic = 0x0478;
+ t.Umacron = 0x016a;
+ t.Umacroncyrillic = 0x04ee;
+ t.Umacrondieresis = 0x1e7a;
+ t.Umonospace = 0xff35;
+ t.Uogonek = 0x0172;
+ t.Upsilon = 0x03a5;
+ t.Upsilon1 = 0x03d2;
+ t.Upsilonacutehooksymbolgreek = 0x03d3;
+ t.Upsilonafrican = 0x01b1;
+ t.Upsilondieresis = 0x03ab;
+ t.Upsilondieresishooksymbolgreek = 0x03d4;
+ t.Upsilonhooksymbol = 0x03d2;
+ t.Upsilontonos = 0x038e;
+ t.Uring = 0x016e;
+ t.Ushortcyrillic = 0x040e;
+ t.Usmall = 0xf775;
+ t.Ustraightcyrillic = 0x04ae;
+ t.Ustraightstrokecyrillic = 0x04b0;
+ t.Utilde = 0x0168;
+ t.Utildeacute = 0x1e78;
+ t.Utildebelow = 0x1e74;
+ t.V = 0x0056;
+ t.Vcircle = 0x24cb;
+ t.Vdotbelow = 0x1e7e;
+ t.Vecyrillic = 0x0412;
+ t.Vewarmenian = 0x054e;
+ t.Vhook = 0x01b2;
+ t.Vmonospace = 0xff36;
+ t.Voarmenian = 0x0548;
+ t.Vsmall = 0xf776;
+ t.Vtilde = 0x1e7c;
+ t.W = 0x0057;
+ t.Wacute = 0x1e82;
+ t.Wcircle = 0x24cc;
+ t.Wcircumflex = 0x0174;
+ t.Wdieresis = 0x1e84;
+ t.Wdotaccent = 0x1e86;
+ t.Wdotbelow = 0x1e88;
+ t.Wgrave = 0x1e80;
+ t.Wmonospace = 0xff37;
+ t.Wsmall = 0xf777;
+ t.X = 0x0058;
+ t.Xcircle = 0x24cd;
+ t.Xdieresis = 0x1e8c;
+ t.Xdotaccent = 0x1e8a;
+ t.Xeharmenian = 0x053d;
+ t.Xi = 0x039e;
+ t.Xmonospace = 0xff38;
+ t.Xsmall = 0xf778;
+ t.Y = 0x0059;
+ t.Yacute = 0x00dd;
+ t.Yacutesmall = 0xf7fd;
+ t.Yatcyrillic = 0x0462;
+ t.Ycircle = 0x24ce;
+ t.Ycircumflex = 0x0176;
+ t.Ydieresis = 0x0178;
+ t.Ydieresissmall = 0xf7ff;
+ t.Ydotaccent = 0x1e8e;
+ t.Ydotbelow = 0x1ef4;
+ t.Yericyrillic = 0x042b;
+ t.Yerudieresiscyrillic = 0x04f8;
+ t.Ygrave = 0x1ef2;
+ t.Yhook = 0x01b3;
+ t.Yhookabove = 0x1ef6;
+ t.Yiarmenian = 0x0545;
+ t.Yicyrillic = 0x0407;
+ t.Yiwnarmenian = 0x0552;
+ t.Ymonospace = 0xff39;
+ t.Ysmall = 0xf779;
+ t.Ytilde = 0x1ef8;
+ t.Yusbigcyrillic = 0x046a;
+ t.Yusbigiotifiedcyrillic = 0x046c;
+ t.Yuslittlecyrillic = 0x0466;
+ t.Yuslittleiotifiedcyrillic = 0x0468;
+ t.Z = 0x005a;
+ t.Zaarmenian = 0x0536;
+ t.Zacute = 0x0179;
+ t.Zcaron = 0x017d;
+ t.Zcaronsmall = 0xf6ff;
+ t.Zcircle = 0x24cf;
+ t.Zcircumflex = 0x1e90;
+ t.Zdot = 0x017b;
+ t.Zdotaccent = 0x017b;
+ t.Zdotbelow = 0x1e92;
+ t.Zecyrillic = 0x0417;
+ t.Zedescendercyrillic = 0x0498;
+ t.Zedieresiscyrillic = 0x04de;
+ t.Zeta = 0x0396;
+ t.Zhearmenian = 0x053a;
+ t.Zhebrevecyrillic = 0x04c1;
+ t.Zhecyrillic = 0x0416;
+ t.Zhedescendercyrillic = 0x0496;
+ t.Zhedieresiscyrillic = 0x04dc;
+ t.Zlinebelow = 0x1e94;
+ t.Zmonospace = 0xff3a;
+ t.Zsmall = 0xf77a;
+ t.Zstroke = 0x01b5;
+ t.a = 0x0061;
+ t.aabengali = 0x0986;
+ t.aacute = 0x00e1;
+ t.aadeva = 0x0906;
+ t.aagujarati = 0x0a86;
+ t.aagurmukhi = 0x0a06;
+ t.aamatragurmukhi = 0x0a3e;
+ t.aarusquare = 0x3303;
+ t.aavowelsignbengali = 0x09be;
+ t.aavowelsigndeva = 0x093e;
+ t.aavowelsigngujarati = 0x0abe;
+ t.abbreviationmarkarmenian = 0x055f;
+ t.abbreviationsigndeva = 0x0970;
+ t.abengali = 0x0985;
+ t.abopomofo = 0x311a;
+ t.abreve = 0x0103;
+ t.abreveacute = 0x1eaf;
+ t.abrevecyrillic = 0x04d1;
+ t.abrevedotbelow = 0x1eb7;
+ t.abrevegrave = 0x1eb1;
+ t.abrevehookabove = 0x1eb3;
+ t.abrevetilde = 0x1eb5;
+ t.acaron = 0x01ce;
+ t.acircle = 0x24d0;
+ t.acircumflex = 0x00e2;
+ t.acircumflexacute = 0x1ea5;
+ t.acircumflexdotbelow = 0x1ead;
+ t.acircumflexgrave = 0x1ea7;
+ t.acircumflexhookabove = 0x1ea9;
+ t.acircumflextilde = 0x1eab;
+ t.acute = 0x00b4;
+ t.acutebelowcmb = 0x0317;
+ t.acutecmb = 0x0301;
+ t.acutecomb = 0x0301;
+ t.acutedeva = 0x0954;
+ t.acutelowmod = 0x02cf;
+ t.acutetonecmb = 0x0341;
+ t.acyrillic = 0x0430;
+ t.adblgrave = 0x0201;
+ t.addakgurmukhi = 0x0a71;
+ t.adeva = 0x0905;
+ t.adieresis = 0x00e4;
+ t.adieresiscyrillic = 0x04d3;
+ t.adieresismacron = 0x01df;
+ t.adotbelow = 0x1ea1;
+ t.adotmacron = 0x01e1;
+ t.ae = 0x00e6;
+ t.aeacute = 0x01fd;
+ t.aekorean = 0x3150;
+ t.aemacron = 0x01e3;
+ t.afii00208 = 0x2015;
+ t.afii08941 = 0x20a4;
+ t.afii10017 = 0x0410;
+ t.afii10018 = 0x0411;
+ t.afii10019 = 0x0412;
+ t.afii10020 = 0x0413;
+ t.afii10021 = 0x0414;
+ t.afii10022 = 0x0415;
+ t.afii10023 = 0x0401;
+ t.afii10024 = 0x0416;
+ t.afii10025 = 0x0417;
+ t.afii10026 = 0x0418;
+ t.afii10027 = 0x0419;
+ t.afii10028 = 0x041a;
+ t.afii10029 = 0x041b;
+ t.afii10030 = 0x041c;
+ t.afii10031 = 0x041d;
+ t.afii10032 = 0x041e;
+ t.afii10033 = 0x041f;
+ t.afii10034 = 0x0420;
+ t.afii10035 = 0x0421;
+ t.afii10036 = 0x0422;
+ t.afii10037 = 0x0423;
+ t.afii10038 = 0x0424;
+ t.afii10039 = 0x0425;
+ t.afii10040 = 0x0426;
+ t.afii10041 = 0x0427;
+ t.afii10042 = 0x0428;
+ t.afii10043 = 0x0429;
+ t.afii10044 = 0x042a;
+ t.afii10045 = 0x042b;
+ t.afii10046 = 0x042c;
+ t.afii10047 = 0x042d;
+ t.afii10048 = 0x042e;
+ t.afii10049 = 0x042f;
+ t.afii10050 = 0x0490;
+ t.afii10051 = 0x0402;
+ t.afii10052 = 0x0403;
+ t.afii10053 = 0x0404;
+ t.afii10054 = 0x0405;
+ t.afii10055 = 0x0406;
+ t.afii10056 = 0x0407;
+ t.afii10057 = 0x0408;
+ t.afii10058 = 0x0409;
+ t.afii10059 = 0x040a;
+ t.afii10060 = 0x040b;
+ t.afii10061 = 0x040c;
+ t.afii10062 = 0x040e;
+ t.afii10063 = 0xf6c4;
+ t.afii10064 = 0xf6c5;
+ t.afii10065 = 0x0430;
+ t.afii10066 = 0x0431;
+ t.afii10067 = 0x0432;
+ t.afii10068 = 0x0433;
+ t.afii10069 = 0x0434;
+ t.afii10070 = 0x0435;
+ t.afii10071 = 0x0451;
+ t.afii10072 = 0x0436;
+ t.afii10073 = 0x0437;
+ t.afii10074 = 0x0438;
+ t.afii10075 = 0x0439;
+ t.afii10076 = 0x043a;
+ t.afii10077 = 0x043b;
+ t.afii10078 = 0x043c;
+ t.afii10079 = 0x043d;
+ t.afii10080 = 0x043e;
+ t.afii10081 = 0x043f;
+ t.afii10082 = 0x0440;
+ t.afii10083 = 0x0441;
+ t.afii10084 = 0x0442;
+ t.afii10085 = 0x0443;
+ t.afii10086 = 0x0444;
+ t.afii10087 = 0x0445;
+ t.afii10088 = 0x0446;
+ t.afii10089 = 0x0447;
+ t.afii10090 = 0x0448;
+ t.afii10091 = 0x0449;
+ t.afii10092 = 0x044a;
+ t.afii10093 = 0x044b;
+ t.afii10094 = 0x044c;
+ t.afii10095 = 0x044d;
+ t.afii10096 = 0x044e;
+ t.afii10097 = 0x044f;
+ t.afii10098 = 0x0491;
+ t.afii10099 = 0x0452;
+ t.afii10100 = 0x0453;
+ t.afii10101 = 0x0454;
+ t.afii10102 = 0x0455;
+ t.afii10103 = 0x0456;
+ t.afii10104 = 0x0457;
+ t.afii10105 = 0x0458;
+ t.afii10106 = 0x0459;
+ t.afii10107 = 0x045a;
+ t.afii10108 = 0x045b;
+ t.afii10109 = 0x045c;
+ t.afii10110 = 0x045e;
+ t.afii10145 = 0x040f;
+ t.afii10146 = 0x0462;
+ t.afii10147 = 0x0472;
+ t.afii10148 = 0x0474;
+ t.afii10192 = 0xf6c6;
+ t.afii10193 = 0x045f;
+ t.afii10194 = 0x0463;
+ t.afii10195 = 0x0473;
+ t.afii10196 = 0x0475;
+ t.afii10831 = 0xf6c7;
+ t.afii10832 = 0xf6c8;
+ t.afii10846 = 0x04d9;
+ t.afii299 = 0x200e;
+ t.afii300 = 0x200f;
+ t.afii301 = 0x200d;
+ t.afii57381 = 0x066a;
+ t.afii57388 = 0x060c;
+ t.afii57392 = 0x0660;
+ t.afii57393 = 0x0661;
+ t.afii57394 = 0x0662;
+ t.afii57395 = 0x0663;
+ t.afii57396 = 0x0664;
+ t.afii57397 = 0x0665;
+ t.afii57398 = 0x0666;
+ t.afii57399 = 0x0667;
+ t.afii57400 = 0x0668;
+ t.afii57401 = 0x0669;
+ t.afii57403 = 0x061b;
+ t.afii57407 = 0x061f;
+ t.afii57409 = 0x0621;
+ t.afii57410 = 0x0622;
+ t.afii57411 = 0x0623;
+ t.afii57412 = 0x0624;
+ t.afii57413 = 0x0625;
+ t.afii57414 = 0x0626;
+ t.afii57415 = 0x0627;
+ t.afii57416 = 0x0628;
+ t.afii57417 = 0x0629;
+ t.afii57418 = 0x062a;
+ t.afii57419 = 0x062b;
+ t.afii57420 = 0x062c;
+ t.afii57421 = 0x062d;
+ t.afii57422 = 0x062e;
+ t.afii57423 = 0x062f;
+ t.afii57424 = 0x0630;
+ t.afii57425 = 0x0631;
+ t.afii57426 = 0x0632;
+ t.afii57427 = 0x0633;
+ t.afii57428 = 0x0634;
+ t.afii57429 = 0x0635;
+ t.afii57430 = 0x0636;
+ t.afii57431 = 0x0637;
+ t.afii57432 = 0x0638;
+ t.afii57433 = 0x0639;
+ t.afii57434 = 0x063a;
+ t.afii57440 = 0x0640;
+ t.afii57441 = 0x0641;
+ t.afii57442 = 0x0642;
+ t.afii57443 = 0x0643;
+ t.afii57444 = 0x0644;
+ t.afii57445 = 0x0645;
+ t.afii57446 = 0x0646;
+ t.afii57448 = 0x0648;
+ t.afii57449 = 0x0649;
+ t.afii57450 = 0x064a;
+ t.afii57451 = 0x064b;
+ t.afii57452 = 0x064c;
+ t.afii57453 = 0x064d;
+ t.afii57454 = 0x064e;
+ t.afii57455 = 0x064f;
+ t.afii57456 = 0x0650;
+ t.afii57457 = 0x0651;
+ t.afii57458 = 0x0652;
+ t.afii57470 = 0x0647;
+ t.afii57505 = 0x06a4;
+ t.afii57506 = 0x067e;
+ t.afii57507 = 0x0686;
+ t.afii57508 = 0x0698;
+ t.afii57509 = 0x06af;
+ t.afii57511 = 0x0679;
+ t.afii57512 = 0x0688;
+ t.afii57513 = 0x0691;
+ t.afii57514 = 0x06ba;
+ t.afii57519 = 0x06d2;
+ t.afii57534 = 0x06d5;
+ t.afii57636 = 0x20aa;
+ t.afii57645 = 0x05be;
+ t.afii57658 = 0x05c3;
+ t.afii57664 = 0x05d0;
+ t.afii57665 = 0x05d1;
+ t.afii57666 = 0x05d2;
+ t.afii57667 = 0x05d3;
+ t.afii57668 = 0x05d4;
+ t.afii57669 = 0x05d5;
+ t.afii57670 = 0x05d6;
+ t.afii57671 = 0x05d7;
+ t.afii57672 = 0x05d8;
+ t.afii57673 = 0x05d9;
+ t.afii57674 = 0x05da;
+ t.afii57675 = 0x05db;
+ t.afii57676 = 0x05dc;
+ t.afii57677 = 0x05dd;
+ t.afii57678 = 0x05de;
+ t.afii57679 = 0x05df;
+ t.afii57680 = 0x05e0;
+ t.afii57681 = 0x05e1;
+ t.afii57682 = 0x05e2;
+ t.afii57683 = 0x05e3;
+ t.afii57684 = 0x05e4;
+ t.afii57685 = 0x05e5;
+ t.afii57686 = 0x05e6;
+ t.afii57687 = 0x05e7;
+ t.afii57688 = 0x05e8;
+ t.afii57689 = 0x05e9;
+ t.afii57690 = 0x05ea;
+ t.afii57694 = 0xfb2a;
+ t.afii57695 = 0xfb2b;
+ t.afii57700 = 0xfb4b;
+ t.afii57705 = 0xfb1f;
+ t.afii57716 = 0x05f0;
+ t.afii57717 = 0x05f1;
+ t.afii57718 = 0x05f2;
+ t.afii57723 = 0xfb35;
+ t.afii57793 = 0x05b4;
+ t.afii57794 = 0x05b5;
+ t.afii57795 = 0x05b6;
+ t.afii57796 = 0x05bb;
+ t.afii57797 = 0x05b8;
+ t.afii57798 = 0x05b7;
+ t.afii57799 = 0x05b0;
+ t.afii57800 = 0x05b2;
+ t.afii57801 = 0x05b1;
+ t.afii57802 = 0x05b3;
+ t.afii57803 = 0x05c2;
+ t.afii57804 = 0x05c1;
+ t.afii57806 = 0x05b9;
+ t.afii57807 = 0x05bc;
+ t.afii57839 = 0x05bd;
+ t.afii57841 = 0x05bf;
+ t.afii57842 = 0x05c0;
+ t.afii57929 = 0x02bc;
+ t.afii61248 = 0x2105;
+ t.afii61289 = 0x2113;
+ t.afii61352 = 0x2116;
+ t.afii61573 = 0x202c;
+ t.afii61574 = 0x202d;
+ t.afii61575 = 0x202e;
+ t.afii61664 = 0x200c;
+ t.afii63167 = 0x066d;
+ t.afii64937 = 0x02bd;
+ t.agrave = 0x00e0;
+ t.agujarati = 0x0a85;
+ t.agurmukhi = 0x0a05;
+ t.ahiragana = 0x3042;
+ t.ahookabove = 0x1ea3;
+ t.aibengali = 0x0990;
+ t.aibopomofo = 0x311e;
+ t.aideva = 0x0910;
+ t.aiecyrillic = 0x04d5;
+ t.aigujarati = 0x0a90;
+ t.aigurmukhi = 0x0a10;
+ t.aimatragurmukhi = 0x0a48;
+ t.ainarabic = 0x0639;
+ t.ainfinalarabic = 0xfeca;
+ t.aininitialarabic = 0xfecb;
+ t.ainmedialarabic = 0xfecc;
+ t.ainvertedbreve = 0x0203;
+ t.aivowelsignbengali = 0x09c8;
+ t.aivowelsigndeva = 0x0948;
+ t.aivowelsigngujarati = 0x0ac8;
+ t.akatakana = 0x30a2;
+ t.akatakanahalfwidth = 0xff71;
+ t.akorean = 0x314f;
+ t.alef = 0x05d0;
+ t.alefarabic = 0x0627;
+ t.alefdageshhebrew = 0xfb30;
+ t.aleffinalarabic = 0xfe8e;
+ t.alefhamzaabovearabic = 0x0623;
+ t.alefhamzaabovefinalarabic = 0xfe84;
+ t.alefhamzabelowarabic = 0x0625;
+ t.alefhamzabelowfinalarabic = 0xfe88;
+ t.alefhebrew = 0x05d0;
+ t.aleflamedhebrew = 0xfb4f;
+ t.alefmaddaabovearabic = 0x0622;
+ t.alefmaddaabovefinalarabic = 0xfe82;
+ t.alefmaksuraarabic = 0x0649;
+ t.alefmaksurafinalarabic = 0xfef0;
+ t.alefmaksurainitialarabic = 0xfef3;
+ t.alefmaksuramedialarabic = 0xfef4;
+ t.alefpatahhebrew = 0xfb2e;
+ t.alefqamatshebrew = 0xfb2f;
+ t.aleph = 0x2135;
+ t.allequal = 0x224c;
+ t.alpha = 0x03b1;
+ t.alphatonos = 0x03ac;
+ t.amacron = 0x0101;
+ t.amonospace = 0xff41;
+ t.ampersand = 0x0026;
+ t.ampersandmonospace = 0xff06;
+ t.ampersandsmall = 0xf726;
+ t.amsquare = 0x33c2;
+ t.anbopomofo = 0x3122;
+ t.angbopomofo = 0x3124;
+ t.angbracketleft = 0x3008;
+ t.angbracketright = 0x3009;
+ t.angkhankhuthai = 0x0e5a;
+ t.angle = 0x2220;
+ t.anglebracketleft = 0x3008;
+ t.anglebracketleftvertical = 0xfe3f;
+ t.anglebracketright = 0x3009;
+ t.anglebracketrightvertical = 0xfe40;
+ t.angleleft = 0x2329;
+ t.angleright = 0x232a;
+ t.angstrom = 0x212b;
+ t.anoteleia = 0x0387;
+ t.anudattadeva = 0x0952;
+ t.anusvarabengali = 0x0982;
+ t.anusvaradeva = 0x0902;
+ t.anusvaragujarati = 0x0a82;
+ t.aogonek = 0x0105;
+ t.apaatosquare = 0x3300;
+ t.aparen = 0x249c;
+ t.apostrophearmenian = 0x055a;
+ t.apostrophemod = 0x02bc;
+ t.apple = 0xf8ff;
+ t.approaches = 0x2250;
+ t.approxequal = 0x2248;
+ t.approxequalorimage = 0x2252;
+ t.approximatelyequal = 0x2245;
+ t.araeaekorean = 0x318e;
+ t.araeakorean = 0x318d;
+ t.arc = 0x2312;
+ t.arighthalfring = 0x1e9a;
+ t.aring = 0x00e5;
+ t.aringacute = 0x01fb;
+ t.aringbelow = 0x1e01;
+ t.arrowboth = 0x2194;
+ t.arrowdashdown = 0x21e3;
+ t.arrowdashleft = 0x21e0;
+ t.arrowdashright = 0x21e2;
+ t.arrowdashup = 0x21e1;
+ t.arrowdblboth = 0x21d4;
+ t.arrowdbldown = 0x21d3;
+ t.arrowdblleft = 0x21d0;
+ t.arrowdblright = 0x21d2;
+ t.arrowdblup = 0x21d1;
+ t.arrowdown = 0x2193;
+ t.arrowdownleft = 0x2199;
+ t.arrowdownright = 0x2198;
+ t.arrowdownwhite = 0x21e9;
+ t.arrowheaddownmod = 0x02c5;
+ t.arrowheadleftmod = 0x02c2;
+ t.arrowheadrightmod = 0x02c3;
+ t.arrowheadupmod = 0x02c4;
+ t.arrowhorizex = 0xf8e7;
+ t.arrowleft = 0x2190;
+ t.arrowleftdbl = 0x21d0;
+ t.arrowleftdblstroke = 0x21cd;
+ t.arrowleftoverright = 0x21c6;
+ t.arrowleftwhite = 0x21e6;
+ t.arrowright = 0x2192;
+ t.arrowrightdblstroke = 0x21cf;
+ t.arrowrightheavy = 0x279e;
+ t.arrowrightoverleft = 0x21c4;
+ t.arrowrightwhite = 0x21e8;
+ t.arrowtableft = 0x21e4;
+ t.arrowtabright = 0x21e5;
+ t.arrowup = 0x2191;
+ t.arrowupdn = 0x2195;
+ t.arrowupdnbse = 0x21a8;
+ t.arrowupdownbase = 0x21a8;
+ t.arrowupleft = 0x2196;
+ t.arrowupleftofdown = 0x21c5;
+ t.arrowupright = 0x2197;
+ t.arrowupwhite = 0x21e7;
+ t.arrowvertex = 0xf8e6;
+ t.asciicircum = 0x005e;
+ t.asciicircummonospace = 0xff3e;
+ t.asciitilde = 0x007e;
+ t.asciitildemonospace = 0xff5e;
+ t.ascript = 0x0251;
+ t.ascriptturned = 0x0252;
+ t.asmallhiragana = 0x3041;
+ t.asmallkatakana = 0x30a1;
+ t.asmallkatakanahalfwidth = 0xff67;
+ t.asterisk = 0x002a;
+ t.asteriskaltonearabic = 0x066d;
+ t.asteriskarabic = 0x066d;
+ t.asteriskmath = 0x2217;
+ t.asteriskmonospace = 0xff0a;
+ t.asterisksmall = 0xfe61;
+ t.asterism = 0x2042;
+ t.asuperior = 0xf6e9;
+ t.asymptoticallyequal = 0x2243;
+ t.at = 0x0040;
+ t.atilde = 0x00e3;
+ t.atmonospace = 0xff20;
+ t.atsmall = 0xfe6b;
+ t.aturned = 0x0250;
+ t.aubengali = 0x0994;
+ t.aubopomofo = 0x3120;
+ t.audeva = 0x0914;
+ t.augujarati = 0x0a94;
+ t.augurmukhi = 0x0a14;
+ t.aulengthmarkbengali = 0x09d7;
+ t.aumatragurmukhi = 0x0a4c;
+ t.auvowelsignbengali = 0x09cc;
+ t.auvowelsigndeva = 0x094c;
+ t.auvowelsigngujarati = 0x0acc;
+ t.avagrahadeva = 0x093d;
+ t.aybarmenian = 0x0561;
+ t.ayin = 0x05e2;
+ t.ayinaltonehebrew = 0xfb20;
+ t.ayinhebrew = 0x05e2;
+ t.b = 0x0062;
+ t.babengali = 0x09ac;
+ t.backslash = 0x005c;
+ t.backslashmonospace = 0xff3c;
+ t.badeva = 0x092c;
+ t.bagujarati = 0x0aac;
+ t.bagurmukhi = 0x0a2c;
+ t.bahiragana = 0x3070;
+ t.bahtthai = 0x0e3f;
+ t.bakatakana = 0x30d0;
+ t.bar = 0x007c;
+ t.barmonospace = 0xff5c;
+ t.bbopomofo = 0x3105;
+ t.bcircle = 0x24d1;
+ t.bdotaccent = 0x1e03;
+ t.bdotbelow = 0x1e05;
+ t.beamedsixteenthnotes = 0x266c;
+ t.because = 0x2235;
+ t.becyrillic = 0x0431;
+ t.beharabic = 0x0628;
+ t.behfinalarabic = 0xfe90;
+ t.behinitialarabic = 0xfe91;
+ t.behiragana = 0x3079;
+ t.behmedialarabic = 0xfe92;
+ t.behmeeminitialarabic = 0xfc9f;
+ t.behmeemisolatedarabic = 0xfc08;
+ t.behnoonfinalarabic = 0xfc6d;
+ t.bekatakana = 0x30d9;
+ t.benarmenian = 0x0562;
+ t.bet = 0x05d1;
+ t.beta = 0x03b2;
+ t.betasymbolgreek = 0x03d0;
+ t.betdagesh = 0xfb31;
+ t.betdageshhebrew = 0xfb31;
+ t.bethebrew = 0x05d1;
+ t.betrafehebrew = 0xfb4c;
+ t.bhabengali = 0x09ad;
+ t.bhadeva = 0x092d;
+ t.bhagujarati = 0x0aad;
+ t.bhagurmukhi = 0x0a2d;
+ t.bhook = 0x0253;
+ t.bihiragana = 0x3073;
+ t.bikatakana = 0x30d3;
+ t.bilabialclick = 0x0298;
+ t.bindigurmukhi = 0x0a02;
+ t.birusquare = 0x3331;
+ t.blackcircle = 0x25cf;
+ t.blackdiamond = 0x25c6;
+ t.blackdownpointingtriangle = 0x25bc;
+ t.blackleftpointingpointer = 0x25c4;
+ t.blackleftpointingtriangle = 0x25c0;
+ t.blacklenticularbracketleft = 0x3010;
+ t.blacklenticularbracketleftvertical = 0xfe3b;
+ t.blacklenticularbracketright = 0x3011;
+ t.blacklenticularbracketrightvertical = 0xfe3c;
+ t.blacklowerlefttriangle = 0x25e3;
+ t.blacklowerrighttriangle = 0x25e2;
+ t.blackrectangle = 0x25ac;
+ t.blackrightpointingpointer = 0x25ba;
+ t.blackrightpointingtriangle = 0x25b6;
+ t.blacksmallsquare = 0x25aa;
+ t.blacksmilingface = 0x263b;
+ t.blacksquare = 0x25a0;
+ t.blackstar = 0x2605;
+ t.blackupperlefttriangle = 0x25e4;
+ t.blackupperrighttriangle = 0x25e5;
+ t.blackuppointingsmalltriangle = 0x25b4;
+ t.blackuppointingtriangle = 0x25b2;
+ t.blank = 0x2423;
+ t.blinebelow = 0x1e07;
+ t.block = 0x2588;
+ t.bmonospace = 0xff42;
+ t.bobaimaithai = 0x0e1a;
+ t.bohiragana = 0x307c;
+ t.bokatakana = 0x30dc;
+ t.bparen = 0x249d;
+ t.bqsquare = 0x33c3;
+ t.braceex = 0xf8f4;
+ t.braceleft = 0x007b;
+ t.braceleftbt = 0xf8f3;
+ t.braceleftmid = 0xf8f2;
+ t.braceleftmonospace = 0xff5b;
+ t.braceleftsmall = 0xfe5b;
+ t.bracelefttp = 0xf8f1;
+ t.braceleftvertical = 0xfe37;
+ t.braceright = 0x007d;
+ t.bracerightbt = 0xf8fe;
+ t.bracerightmid = 0xf8fd;
+ t.bracerightmonospace = 0xff5d;
+ t.bracerightsmall = 0xfe5c;
+ t.bracerighttp = 0xf8fc;
+ t.bracerightvertical = 0xfe38;
+ t.bracketleft = 0x005b;
+ t.bracketleftbt = 0xf8f0;
+ t.bracketleftex = 0xf8ef;
+ t.bracketleftmonospace = 0xff3b;
+ t.bracketlefttp = 0xf8ee;
+ t.bracketright = 0x005d;
+ t.bracketrightbt = 0xf8fb;
+ t.bracketrightex = 0xf8fa;
+ t.bracketrightmonospace = 0xff3d;
+ t.bracketrighttp = 0xf8f9;
+ t.breve = 0x02d8;
+ t.brevebelowcmb = 0x032e;
+ t.brevecmb = 0x0306;
+ t.breveinvertedbelowcmb = 0x032f;
+ t.breveinvertedcmb = 0x0311;
+ t.breveinverteddoublecmb = 0x0361;
+ t.bridgebelowcmb = 0x032a;
+ t.bridgeinvertedbelowcmb = 0x033a;
+ t.brokenbar = 0x00a6;
+ t.bstroke = 0x0180;
+ t.bsuperior = 0xf6ea;
+ t.btopbar = 0x0183;
+ t.buhiragana = 0x3076;
+ t.bukatakana = 0x30d6;
+ t.bullet = 0x2022;
+ t.bulletinverse = 0x25d8;
+ t.bulletoperator = 0x2219;
+ t.bullseye = 0x25ce;
+ t.c = 0x0063;
+ t.caarmenian = 0x056e;
+ t.cabengali = 0x099a;
+ t.cacute = 0x0107;
+ t.cadeva = 0x091a;
+ t.cagujarati = 0x0a9a;
+ t.cagurmukhi = 0x0a1a;
+ t.calsquare = 0x3388;
+ t.candrabindubengali = 0x0981;
+ t.candrabinducmb = 0x0310;
+ t.candrabindudeva = 0x0901;
+ t.candrabindugujarati = 0x0a81;
+ t.capslock = 0x21ea;
+ t.careof = 0x2105;
+ t.caron = 0x02c7;
+ t.caronbelowcmb = 0x032c;
+ t.caroncmb = 0x030c;
+ t.carriagereturn = 0x21b5;
+ t.cbopomofo = 0x3118;
+ t.ccaron = 0x010d;
+ t.ccedilla = 0x00e7;
+ t.ccedillaacute = 0x1e09;
+ t.ccircle = 0x24d2;
+ t.ccircumflex = 0x0109;
+ t.ccurl = 0x0255;
+ t.cdot = 0x010b;
+ t.cdotaccent = 0x010b;
+ t.cdsquare = 0x33c5;
+ t.cedilla = 0x00b8;
+ t.cedillacmb = 0x0327;
+ t.cent = 0x00a2;
+ t.centigrade = 0x2103;
+ t.centinferior = 0xf6df;
+ t.centmonospace = 0xffe0;
+ t.centoldstyle = 0xf7a2;
+ t.centsuperior = 0xf6e0;
+ t.chaarmenian = 0x0579;
+ t.chabengali = 0x099b;
+ t.chadeva = 0x091b;
+ t.chagujarati = 0x0a9b;
+ t.chagurmukhi = 0x0a1b;
+ t.chbopomofo = 0x3114;
+ t.cheabkhasiancyrillic = 0x04bd;
+ t.checkmark = 0x2713;
+ t.checyrillic = 0x0447;
+ t.chedescenderabkhasiancyrillic = 0x04bf;
+ t.chedescendercyrillic = 0x04b7;
+ t.chedieresiscyrillic = 0x04f5;
+ t.cheharmenian = 0x0573;
+ t.chekhakassiancyrillic = 0x04cc;
+ t.cheverticalstrokecyrillic = 0x04b9;
+ t.chi = 0x03c7;
+ t.chieuchacirclekorean = 0x3277;
+ t.chieuchaparenkorean = 0x3217;
+ t.chieuchcirclekorean = 0x3269;
+ t.chieuchkorean = 0x314a;
+ t.chieuchparenkorean = 0x3209;
+ t.chochangthai = 0x0e0a;
+ t.chochanthai = 0x0e08;
+ t.chochingthai = 0x0e09;
+ t.chochoethai = 0x0e0c;
+ t.chook = 0x0188;
+ t.cieucacirclekorean = 0x3276;
+ t.cieucaparenkorean = 0x3216;
+ t.cieuccirclekorean = 0x3268;
+ t.cieuckorean = 0x3148;
+ t.cieucparenkorean = 0x3208;
+ t.cieucuparenkorean = 0x321c;
+ t.circle = 0x25cb;
+ t.circlecopyrt = 0x00a9;
+ t.circlemultiply = 0x2297;
+ t.circleot = 0x2299;
+ t.circleplus = 0x2295;
+ t.circlepostalmark = 0x3036;
+ t.circlewithlefthalfblack = 0x25d0;
+ t.circlewithrighthalfblack = 0x25d1;
+ t.circumflex = 0x02c6;
+ t.circumflexbelowcmb = 0x032d;
+ t.circumflexcmb = 0x0302;
+ t.clear = 0x2327;
+ t.clickalveolar = 0x01c2;
+ t.clickdental = 0x01c0;
+ t.clicklateral = 0x01c1;
+ t.clickretroflex = 0x01c3;
+ t.club = 0x2663;
+ t.clubsuitblack = 0x2663;
+ t.clubsuitwhite = 0x2667;
+ t.cmcubedsquare = 0x33a4;
+ t.cmonospace = 0xff43;
+ t.cmsquaredsquare = 0x33a0;
+ t.coarmenian = 0x0581;
+ t.colon = 0x003a;
+ t.colonmonetary = 0x20a1;
+ t.colonmonospace = 0xff1a;
+ t.colonsign = 0x20a1;
+ t.colonsmall = 0xfe55;
+ t.colontriangularhalfmod = 0x02d1;
+ t.colontriangularmod = 0x02d0;
+ t.comma = 0x002c;
+ t.commaabovecmb = 0x0313;
+ t.commaaboverightcmb = 0x0315;
+ t.commaaccent = 0xf6c3;
+ t.commaarabic = 0x060c;
+ t.commaarmenian = 0x055d;
+ t.commainferior = 0xf6e1;
+ t.commamonospace = 0xff0c;
+ t.commareversedabovecmb = 0x0314;
+ t.commareversedmod = 0x02bd;
+ t.commasmall = 0xfe50;
+ t.commasuperior = 0xf6e2;
+ t.commaturnedabovecmb = 0x0312;
+ t.commaturnedmod = 0x02bb;
+ t.compass = 0x263c;
+ t.congruent = 0x2245;
+ t.contourintegral = 0x222e;
+ t.control = 0x2303;
+ t.controlACK = 0x0006;
+ t.controlBEL = 0x0007;
+ t.controlBS = 0x0008;
+ t.controlCAN = 0x0018;
+ t.controlCR = 0x000d;
+ t.controlDC1 = 0x0011;
+ t.controlDC2 = 0x0012;
+ t.controlDC3 = 0x0013;
+ t.controlDC4 = 0x0014;
+ t.controlDEL = 0x007f;
+ t.controlDLE = 0x0010;
+ t.controlEM = 0x0019;
+ t.controlENQ = 0x0005;
+ t.controlEOT = 0x0004;
+ t.controlESC = 0x001b;
+ t.controlETB = 0x0017;
+ t.controlETX = 0x0003;
+ t.controlFF = 0x000c;
+ t.controlFS = 0x001c;
+ t.controlGS = 0x001d;
+ t.controlHT = 0x0009;
+ t.controlLF = 0x000a;
+ t.controlNAK = 0x0015;
+ t.controlNULL = 0x0000;
+ t.controlRS = 0x001e;
+ t.controlSI = 0x000f;
+ t.controlSO = 0x000e;
+ t.controlSOT = 0x0002;
+ t.controlSTX = 0x0001;
+ t.controlSUB = 0x001a;
+ t.controlSYN = 0x0016;
+ t.controlUS = 0x001f;
+ t.controlVT = 0x000b;
+ t.copyright = 0x00a9;
+ t.copyrightsans = 0xf8e9;
+ t.copyrightserif = 0xf6d9;
+ t.cornerbracketleft = 0x300c;
+ t.cornerbracketlefthalfwidth = 0xff62;
+ t.cornerbracketleftvertical = 0xfe41;
+ t.cornerbracketright = 0x300d;
+ t.cornerbracketrighthalfwidth = 0xff63;
+ t.cornerbracketrightvertical = 0xfe42;
+ t.corporationsquare = 0x337f;
+ t.cosquare = 0x33c7;
+ t.coverkgsquare = 0x33c6;
+ t.cparen = 0x249e;
+ t.cruzeiro = 0x20a2;
+ t.cstretched = 0x0297;
+ t.curlyand = 0x22cf;
+ t.curlyor = 0x22ce;
+ t.currency = 0x00a4;
+ t.cyrBreve = 0xf6d1;
+ t.cyrFlex = 0xf6d2;
+ t.cyrbreve = 0xf6d4;
+ t.cyrflex = 0xf6d5;
+ t.d = 0x0064;
+ t.daarmenian = 0x0564;
+ t.dabengali = 0x09a6;
+ t.dadarabic = 0x0636;
+ t.dadeva = 0x0926;
+ t.dadfinalarabic = 0xfebe;
+ t.dadinitialarabic = 0xfebf;
+ t.dadmedialarabic = 0xfec0;
+ t.dagesh = 0x05bc;
+ t.dageshhebrew = 0x05bc;
+ t.dagger = 0x2020;
+ t.daggerdbl = 0x2021;
+ t.dagujarati = 0x0aa6;
+ t.dagurmukhi = 0x0a26;
+ t.dahiragana = 0x3060;
+ t.dakatakana = 0x30c0;
+ t.dalarabic = 0x062f;
+ t.dalet = 0x05d3;
+ t.daletdagesh = 0xfb33;
+ t.daletdageshhebrew = 0xfb33;
+ t.dalethebrew = 0x05d3;
+ t.dalfinalarabic = 0xfeaa;
+ t.dammaarabic = 0x064f;
+ t.dammalowarabic = 0x064f;
+ t.dammatanaltonearabic = 0x064c;
+ t.dammatanarabic = 0x064c;
+ t.danda = 0x0964;
+ t.dargahebrew = 0x05a7;
+ t.dargalefthebrew = 0x05a7;
+ t.dasiapneumatacyrilliccmb = 0x0485;
+ t.dblGrave = 0xf6d3;
+ t.dblanglebracketleft = 0x300a;
+ t.dblanglebracketleftvertical = 0xfe3d;
+ t.dblanglebracketright = 0x300b;
+ t.dblanglebracketrightvertical = 0xfe3e;
+ t.dblarchinvertedbelowcmb = 0x032b;
+ t.dblarrowleft = 0x21d4;
+ t.dblarrowright = 0x21d2;
+ t.dbldanda = 0x0965;
+ t.dblgrave = 0xf6d6;
+ t.dblgravecmb = 0x030f;
+ t.dblintegral = 0x222c;
+ t.dbllowline = 0x2017;
+ t.dbllowlinecmb = 0x0333;
+ t.dbloverlinecmb = 0x033f;
+ t.dblprimemod = 0x02ba;
+ t.dblverticalbar = 0x2016;
+ t.dblverticallineabovecmb = 0x030e;
+ t.dbopomofo = 0x3109;
+ t.dbsquare = 0x33c8;
+ t.dcaron = 0x010f;
+ t.dcedilla = 0x1e11;
+ t.dcircle = 0x24d3;
+ t.dcircumflexbelow = 0x1e13;
+ t.dcroat = 0x0111;
+ t.ddabengali = 0x09a1;
+ t.ddadeva = 0x0921;
+ t.ddagujarati = 0x0aa1;
+ t.ddagurmukhi = 0x0a21;
+ t.ddalarabic = 0x0688;
+ t.ddalfinalarabic = 0xfb89;
+ t.dddhadeva = 0x095c;
+ t.ddhabengali = 0x09a2;
+ t.ddhadeva = 0x0922;
+ t.ddhagujarati = 0x0aa2;
+ t.ddhagurmukhi = 0x0a22;
+ t.ddotaccent = 0x1e0b;
+ t.ddotbelow = 0x1e0d;
+ t.decimalseparatorarabic = 0x066b;
+ t.decimalseparatorpersian = 0x066b;
+ t.decyrillic = 0x0434;
+ t.degree = 0x00b0;
+ t.dehihebrew = 0x05ad;
+ t.dehiragana = 0x3067;
+ t.deicoptic = 0x03ef;
+ t.dekatakana = 0x30c7;
+ t.deleteleft = 0x232b;
+ t.deleteright = 0x2326;
+ t.delta = 0x03b4;
+ t.deltaturned = 0x018d;
+ t.denominatorminusonenumeratorbengali = 0x09f8;
+ t.dezh = 0x02a4;
+ t.dhabengali = 0x09a7;
+ t.dhadeva = 0x0927;
+ t.dhagujarati = 0x0aa7;
+ t.dhagurmukhi = 0x0a27;
+ t.dhook = 0x0257;
+ t.dialytikatonos = 0x0385;
+ t.dialytikatonoscmb = 0x0344;
+ t.diamond = 0x2666;
+ t.diamondsuitwhite = 0x2662;
+ t.dieresis = 0x00a8;
+ t.dieresisacute = 0xf6d7;
+ t.dieresisbelowcmb = 0x0324;
+ t.dieresiscmb = 0x0308;
+ t.dieresisgrave = 0xf6d8;
+ t.dieresistonos = 0x0385;
+ t.dihiragana = 0x3062;
+ t.dikatakana = 0x30c2;
+ t.dittomark = 0x3003;
+ t.divide = 0x00f7;
+ t.divides = 0x2223;
+ t.divisionslash = 0x2215;
+ t.djecyrillic = 0x0452;
+ t.dkshade = 0x2593;
+ t.dlinebelow = 0x1e0f;
+ t.dlsquare = 0x3397;
+ t.dmacron = 0x0111;
+ t.dmonospace = 0xff44;
+ t.dnblock = 0x2584;
+ t.dochadathai = 0x0e0e;
+ t.dodekthai = 0x0e14;
+ t.dohiragana = 0x3069;
+ t.dokatakana = 0x30c9;
+ t.dollar = 0x0024;
+ t.dollarinferior = 0xf6e3;
+ t.dollarmonospace = 0xff04;
+ t.dollaroldstyle = 0xf724;
+ t.dollarsmall = 0xfe69;
+ t.dollarsuperior = 0xf6e4;
+ t.dong = 0x20ab;
+ t.dorusquare = 0x3326;
+ t.dotaccent = 0x02d9;
+ t.dotaccentcmb = 0x0307;
+ t.dotbelowcmb = 0x0323;
+ t.dotbelowcomb = 0x0323;
+ t.dotkatakana = 0x30fb;
+ t.dotlessi = 0x0131;
+ t.dotlessj = 0xf6be;
+ t.dotlessjstrokehook = 0x0284;
+ t.dotmath = 0x22c5;
+ t.dottedcircle = 0x25cc;
+ t.doubleyodpatah = 0xfb1f;
+ t.doubleyodpatahhebrew = 0xfb1f;
+ t.downtackbelowcmb = 0x031e;
+ t.downtackmod = 0x02d5;
+ t.dparen = 0x249f;
+ t.dsuperior = 0xf6eb;
+ t.dtail = 0x0256;
+ t.dtopbar = 0x018c;
+ t.duhiragana = 0x3065;
+ t.dukatakana = 0x30c5;
+ t.dz = 0x01f3;
+ t.dzaltone = 0x02a3;
+ t.dzcaron = 0x01c6;
+ t.dzcurl = 0x02a5;
+ t.dzeabkhasiancyrillic = 0x04e1;
+ t.dzecyrillic = 0x0455;
+ t.dzhecyrillic = 0x045f;
+ t.e = 0x0065;
+ t.eacute = 0x00e9;
+ t.earth = 0x2641;
+ t.ebengali = 0x098f;
+ t.ebopomofo = 0x311c;
+ t.ebreve = 0x0115;
+ t.ecandradeva = 0x090d;
+ t.ecandragujarati = 0x0a8d;
+ t.ecandravowelsigndeva = 0x0945;
+ t.ecandravowelsigngujarati = 0x0ac5;
+ t.ecaron = 0x011b;
+ t.ecedillabreve = 0x1e1d;
+ t.echarmenian = 0x0565;
+ t.echyiwnarmenian = 0x0587;
+ t.ecircle = 0x24d4;
+ t.ecircumflex = 0x00ea;
+ t.ecircumflexacute = 0x1ebf;
+ t.ecircumflexbelow = 0x1e19;
+ t.ecircumflexdotbelow = 0x1ec7;
+ t.ecircumflexgrave = 0x1ec1;
+ t.ecircumflexhookabove = 0x1ec3;
+ t.ecircumflextilde = 0x1ec5;
+ t.ecyrillic = 0x0454;
+ t.edblgrave = 0x0205;
+ t.edeva = 0x090f;
+ t.edieresis = 0x00eb;
+ t.edot = 0x0117;
+ t.edotaccent = 0x0117;
+ t.edotbelow = 0x1eb9;
+ t.eegurmukhi = 0x0a0f;
+ t.eematragurmukhi = 0x0a47;
+ t.efcyrillic = 0x0444;
+ t.egrave = 0x00e8;
+ t.egujarati = 0x0a8f;
+ t.eharmenian = 0x0567;
+ t.ehbopomofo = 0x311d;
+ t.ehiragana = 0x3048;
+ t.ehookabove = 0x1ebb;
+ t.eibopomofo = 0x311f;
+ t.eight = 0x0038;
+ t.eightarabic = 0x0668;
+ t.eightbengali = 0x09ee;
+ t.eightcircle = 0x2467;
+ t.eightcircleinversesansserif = 0x2791;
+ t.eightdeva = 0x096e;
+ t.eighteencircle = 0x2471;
+ t.eighteenparen = 0x2485;
+ t.eighteenperiod = 0x2499;
+ t.eightgujarati = 0x0aee;
+ t.eightgurmukhi = 0x0a6e;
+ t.eighthackarabic = 0x0668;
+ t.eighthangzhou = 0x3028;
+ t.eighthnotebeamed = 0x266b;
+ t.eightideographicparen = 0x3227;
+ t.eightinferior = 0x2088;
+ t.eightmonospace = 0xff18;
+ t.eightoldstyle = 0xf738;
+ t.eightparen = 0x247b;
+ t.eightperiod = 0x248f;
+ t.eightpersian = 0x06f8;
+ t.eightroman = 0x2177;
+ t.eightsuperior = 0x2078;
+ t.eightthai = 0x0e58;
+ t.einvertedbreve = 0x0207;
+ t.eiotifiedcyrillic = 0x0465;
+ t.ekatakana = 0x30a8;
+ t.ekatakanahalfwidth = 0xff74;
+ t.ekonkargurmukhi = 0x0a74;
+ t.ekorean = 0x3154;
+ t.elcyrillic = 0x043b;
+ t.element = 0x2208;
+ t.elevencircle = 0x246a;
+ t.elevenparen = 0x247e;
+ t.elevenperiod = 0x2492;
+ t.elevenroman = 0x217a;
+ t.ellipsis = 0x2026;
+ t.ellipsisvertical = 0x22ee;
+ t.emacron = 0x0113;
+ t.emacronacute = 0x1e17;
+ t.emacrongrave = 0x1e15;
+ t.emcyrillic = 0x043c;
+ t.emdash = 0x2014;
+ t.emdashvertical = 0xfe31;
+ t.emonospace = 0xff45;
+ t.emphasismarkarmenian = 0x055b;
+ t.emptyset = 0x2205;
+ t.enbopomofo = 0x3123;
+ t.encyrillic = 0x043d;
+ t.endash = 0x2013;
+ t.endashvertical = 0xfe32;
+ t.endescendercyrillic = 0x04a3;
+ t.eng = 0x014b;
+ t.engbopomofo = 0x3125;
+ t.enghecyrillic = 0x04a5;
+ t.enhookcyrillic = 0x04c8;
+ t.enspace = 0x2002;
+ t.eogonek = 0x0119;
+ t.eokorean = 0x3153;
+ t.eopen = 0x025b;
+ t.eopenclosed = 0x029a;
+ t.eopenreversed = 0x025c;
+ t.eopenreversedclosed = 0x025e;
+ t.eopenreversedhook = 0x025d;
+ t.eparen = 0x24a0;
+ t.epsilon = 0x03b5;
+ t.epsilontonos = 0x03ad;
+ t.equal = 0x003d;
+ t.equalmonospace = 0xff1d;
+ t.equalsmall = 0xfe66;
+ t.equalsuperior = 0x207c;
+ t.equivalence = 0x2261;
+ t.erbopomofo = 0x3126;
+ t.ercyrillic = 0x0440;
+ t.ereversed = 0x0258;
+ t.ereversedcyrillic = 0x044d;
+ t.escyrillic = 0x0441;
+ t.esdescendercyrillic = 0x04ab;
+ t.esh = 0x0283;
+ t.eshcurl = 0x0286;
+ t.eshortdeva = 0x090e;
+ t.eshortvowelsigndeva = 0x0946;
+ t.eshreversedloop = 0x01aa;
+ t.eshsquatreversed = 0x0285;
+ t.esmallhiragana = 0x3047;
+ t.esmallkatakana = 0x30a7;
+ t.esmallkatakanahalfwidth = 0xff6a;
+ t.estimated = 0x212e;
+ t.esuperior = 0xf6ec;
+ t.eta = 0x03b7;
+ t.etarmenian = 0x0568;
+ t.etatonos = 0x03ae;
+ t.eth = 0x00f0;
+ t.etilde = 0x1ebd;
+ t.etildebelow = 0x1e1b;
+ t.etnahtafoukhhebrew = 0x0591;
+ t.etnahtafoukhlefthebrew = 0x0591;
+ t.etnahtahebrew = 0x0591;
+ t.etnahtalefthebrew = 0x0591;
+ t.eturned = 0x01dd;
+ t.eukorean = 0x3161;
+ t.euro = 0x20ac;
+ t.evowelsignbengali = 0x09c7;
+ t.evowelsigndeva = 0x0947;
+ t.evowelsigngujarati = 0x0ac7;
+ t.exclam = 0x0021;
+ t.exclamarmenian = 0x055c;
+ t.exclamdbl = 0x203c;
+ t.exclamdown = 0x00a1;
+ t.exclamdownsmall = 0xf7a1;
+ t.exclammonospace = 0xff01;
+ t.exclamsmall = 0xf721;
+ t.existential = 0x2203;
+ t.ezh = 0x0292;
+ t.ezhcaron = 0x01ef;
+ t.ezhcurl = 0x0293;
+ t.ezhreversed = 0x01b9;
+ t.ezhtail = 0x01ba;
+ t.f = 0x0066;
+ t.fadeva = 0x095e;
+ t.fagurmukhi = 0x0a5e;
+ t.fahrenheit = 0x2109;
+ t.fathaarabic = 0x064e;
+ t.fathalowarabic = 0x064e;
+ t.fathatanarabic = 0x064b;
+ t.fbopomofo = 0x3108;
+ t.fcircle = 0x24d5;
+ t.fdotaccent = 0x1e1f;
+ t.feharabic = 0x0641;
+ t.feharmenian = 0x0586;
+ t.fehfinalarabic = 0xfed2;
+ t.fehinitialarabic = 0xfed3;
+ t.fehmedialarabic = 0xfed4;
+ t.feicoptic = 0x03e5;
+ t.female = 0x2640;
+ t.ff = 0xfb00;
+ t.f_f = 0xfb00;
+ t.ffi = 0xfb03;
+ t.ffl = 0xfb04;
+ t.fi = 0xfb01;
+ t.fifteencircle = 0x246e;
+ t.fifteenparen = 0x2482;
+ t.fifteenperiod = 0x2496;
+ t.figuredash = 0x2012;
+ t.filledbox = 0x25a0;
+ t.filledrect = 0x25ac;
+ t.finalkaf = 0x05da;
+ t.finalkafdagesh = 0xfb3a;
+ t.finalkafdageshhebrew = 0xfb3a;
+ t.finalkafhebrew = 0x05da;
+ t.finalmem = 0x05dd;
+ t.finalmemhebrew = 0x05dd;
+ t.finalnun = 0x05df;
+ t.finalnunhebrew = 0x05df;
+ t.finalpe = 0x05e3;
+ t.finalpehebrew = 0x05e3;
+ t.finaltsadi = 0x05e5;
+ t.finaltsadihebrew = 0x05e5;
+ t.firsttonechinese = 0x02c9;
+ t.fisheye = 0x25c9;
+ t.fitacyrillic = 0x0473;
+ t.five = 0x0035;
+ t.fivearabic = 0x0665;
+ t.fivebengali = 0x09eb;
+ t.fivecircle = 0x2464;
+ t.fivecircleinversesansserif = 0x278e;
+ t.fivedeva = 0x096b;
+ t.fiveeighths = 0x215d;
+ t.fivegujarati = 0x0aeb;
+ t.fivegurmukhi = 0x0a6b;
+ t.fivehackarabic = 0x0665;
+ t.fivehangzhou = 0x3025;
+ t.fiveideographicparen = 0x3224;
+ t.fiveinferior = 0x2085;
+ t.fivemonospace = 0xff15;
+ t.fiveoldstyle = 0xf735;
+ t.fiveparen = 0x2478;
+ t.fiveperiod = 0x248c;
+ t.fivepersian = 0x06f5;
+ t.fiveroman = 0x2174;
+ t.fivesuperior = 0x2075;
+ t.fivethai = 0x0e55;
+ t.fl = 0xfb02;
+ t.florin = 0x0192;
+ t.fmonospace = 0xff46;
+ t.fmsquare = 0x3399;
+ t.fofanthai = 0x0e1f;
+ t.fofathai = 0x0e1d;
+ t.fongmanthai = 0x0e4f;
+ t.forall = 0x2200;
+ t.four = 0x0034;
+ t.fourarabic = 0x0664;
+ t.fourbengali = 0x09ea;
+ t.fourcircle = 0x2463;
+ t.fourcircleinversesansserif = 0x278d;
+ t.fourdeva = 0x096a;
+ t.fourgujarati = 0x0aea;
+ t.fourgurmukhi = 0x0a6a;
+ t.fourhackarabic = 0x0664;
+ t.fourhangzhou = 0x3024;
+ t.fourideographicparen = 0x3223;
+ t.fourinferior = 0x2084;
+ t.fourmonospace = 0xff14;
+ t.fournumeratorbengali = 0x09f7;
+ t.fouroldstyle = 0xf734;
+ t.fourparen = 0x2477;
+ t.fourperiod = 0x248b;
+ t.fourpersian = 0x06f4;
+ t.fourroman = 0x2173;
+ t.foursuperior = 0x2074;
+ t.fourteencircle = 0x246d;
+ t.fourteenparen = 0x2481;
+ t.fourteenperiod = 0x2495;
+ t.fourthai = 0x0e54;
+ t.fourthtonechinese = 0x02cb;
+ t.fparen = 0x24a1;
+ t.fraction = 0x2044;
+ t.franc = 0x20a3;
+ t.g = 0x0067;
+ t.gabengali = 0x0997;
+ t.gacute = 0x01f5;
+ t.gadeva = 0x0917;
+ t.gafarabic = 0x06af;
+ t.gaffinalarabic = 0xfb93;
+ t.gafinitialarabic = 0xfb94;
+ t.gafmedialarabic = 0xfb95;
+ t.gagujarati = 0x0a97;
+ t.gagurmukhi = 0x0a17;
+ t.gahiragana = 0x304c;
+ t.gakatakana = 0x30ac;
+ t.gamma = 0x03b3;
+ t.gammalatinsmall = 0x0263;
+ t.gammasuperior = 0x02e0;
+ t.gangiacoptic = 0x03eb;
+ t.gbopomofo = 0x310d;
+ t.gbreve = 0x011f;
+ t.gcaron = 0x01e7;
+ t.gcedilla = 0x0123;
+ t.gcircle = 0x24d6;
+ t.gcircumflex = 0x011d;
+ t.gcommaaccent = 0x0123;
+ t.gdot = 0x0121;
+ t.gdotaccent = 0x0121;
+ t.gecyrillic = 0x0433;
+ t.gehiragana = 0x3052;
+ t.gekatakana = 0x30b2;
+ t.geometricallyequal = 0x2251;
+ t.gereshaccenthebrew = 0x059c;
+ t.gereshhebrew = 0x05f3;
+ t.gereshmuqdamhebrew = 0x059d;
+ t.germandbls = 0x00df;
+ t.gershayimaccenthebrew = 0x059e;
+ t.gershayimhebrew = 0x05f4;
+ t.getamark = 0x3013;
+ t.ghabengali = 0x0998;
+ t.ghadarmenian = 0x0572;
+ t.ghadeva = 0x0918;
+ t.ghagujarati = 0x0a98;
+ t.ghagurmukhi = 0x0a18;
+ t.ghainarabic = 0x063a;
+ t.ghainfinalarabic = 0xfece;
+ t.ghaininitialarabic = 0xfecf;
+ t.ghainmedialarabic = 0xfed0;
+ t.ghemiddlehookcyrillic = 0x0495;
+ t.ghestrokecyrillic = 0x0493;
+ t.gheupturncyrillic = 0x0491;
+ t.ghhadeva = 0x095a;
+ t.ghhagurmukhi = 0x0a5a;
+ t.ghook = 0x0260;
+ t.ghzsquare = 0x3393;
+ t.gihiragana = 0x304e;
+ t.gikatakana = 0x30ae;
+ t.gimarmenian = 0x0563;
+ t.gimel = 0x05d2;
+ t.gimeldagesh = 0xfb32;
+ t.gimeldageshhebrew = 0xfb32;
+ t.gimelhebrew = 0x05d2;
+ t.gjecyrillic = 0x0453;
+ t.glottalinvertedstroke = 0x01be;
+ t.glottalstop = 0x0294;
+ t.glottalstopinverted = 0x0296;
+ t.glottalstopmod = 0x02c0;
+ t.glottalstopreversed = 0x0295;
+ t.glottalstopreversedmod = 0x02c1;
+ t.glottalstopreversedsuperior = 0x02e4;
+ t.glottalstopstroke = 0x02a1;
+ t.glottalstopstrokereversed = 0x02a2;
+ t.gmacron = 0x1e21;
+ t.gmonospace = 0xff47;
+ t.gohiragana = 0x3054;
+ t.gokatakana = 0x30b4;
+ t.gparen = 0x24a2;
+ t.gpasquare = 0x33ac;
+ t.gradient = 0x2207;
+ t.grave = 0x0060;
+ t.gravebelowcmb = 0x0316;
+ t.gravecmb = 0x0300;
+ t.gravecomb = 0x0300;
+ t.gravedeva = 0x0953;
+ t.gravelowmod = 0x02ce;
+ t.gravemonospace = 0xff40;
+ t.gravetonecmb = 0x0340;
+ t.greater = 0x003e;
+ t.greaterequal = 0x2265;
+ t.greaterequalorless = 0x22db;
+ t.greatermonospace = 0xff1e;
+ t.greaterorequivalent = 0x2273;
+ t.greaterorless = 0x2277;
+ t.greateroverequal = 0x2267;
+ t.greatersmall = 0xfe65;
+ t.gscript = 0x0261;
+ t.gstroke = 0x01e5;
+ t.guhiragana = 0x3050;
+ t.guillemotleft = 0x00ab;
+ t.guillemotright = 0x00bb;
+ t.guilsinglleft = 0x2039;
+ t.guilsinglright = 0x203a;
+ t.gukatakana = 0x30b0;
+ t.guramusquare = 0x3318;
+ t.gysquare = 0x33c9;
+ t.h = 0x0068;
+ t.haabkhasiancyrillic = 0x04a9;
+ t.haaltonearabic = 0x06c1;
+ t.habengali = 0x09b9;
+ t.hadescendercyrillic = 0x04b3;
+ t.hadeva = 0x0939;
+ t.hagujarati = 0x0ab9;
+ t.hagurmukhi = 0x0a39;
+ t.haharabic = 0x062d;
+ t.hahfinalarabic = 0xfea2;
+ t.hahinitialarabic = 0xfea3;
+ t.hahiragana = 0x306f;
+ t.hahmedialarabic = 0xfea4;
+ t.haitusquare = 0x332a;
+ t.hakatakana = 0x30cf;
+ t.hakatakanahalfwidth = 0xff8a;
+ t.halantgurmukhi = 0x0a4d;
+ t.hamzaarabic = 0x0621;
+ t.hamzalowarabic = 0x0621;
+ t.hangulfiller = 0x3164;
+ t.hardsigncyrillic = 0x044a;
+ t.harpoonleftbarbup = 0x21bc;
+ t.harpoonrightbarbup = 0x21c0;
+ t.hasquare = 0x33ca;
+ t.hatafpatah = 0x05b2;
+ t.hatafpatah16 = 0x05b2;
+ t.hatafpatah23 = 0x05b2;
+ t.hatafpatah2f = 0x05b2;
+ t.hatafpatahhebrew = 0x05b2;
+ t.hatafpatahnarrowhebrew = 0x05b2;
+ t.hatafpatahquarterhebrew = 0x05b2;
+ t.hatafpatahwidehebrew = 0x05b2;
+ t.hatafqamats = 0x05b3;
+ t.hatafqamats1b = 0x05b3;
+ t.hatafqamats28 = 0x05b3;
+ t.hatafqamats34 = 0x05b3;
+ t.hatafqamatshebrew = 0x05b3;
+ t.hatafqamatsnarrowhebrew = 0x05b3;
+ t.hatafqamatsquarterhebrew = 0x05b3;
+ t.hatafqamatswidehebrew = 0x05b3;
+ t.hatafsegol = 0x05b1;
+ t.hatafsegol17 = 0x05b1;
+ t.hatafsegol24 = 0x05b1;
+ t.hatafsegol30 = 0x05b1;
+ t.hatafsegolhebrew = 0x05b1;
+ t.hatafsegolnarrowhebrew = 0x05b1;
+ t.hatafsegolquarterhebrew = 0x05b1;
+ t.hatafsegolwidehebrew = 0x05b1;
+ t.hbar = 0x0127;
+ t.hbopomofo = 0x310f;
+ t.hbrevebelow = 0x1e2b;
+ t.hcedilla = 0x1e29;
+ t.hcircle = 0x24d7;
+ t.hcircumflex = 0x0125;
+ t.hdieresis = 0x1e27;
+ t.hdotaccent = 0x1e23;
+ t.hdotbelow = 0x1e25;
+ t.he = 0x05d4;
+ t.heart = 0x2665;
+ t.heartsuitblack = 0x2665;
+ t.heartsuitwhite = 0x2661;
+ t.hedagesh = 0xfb34;
+ t.hedageshhebrew = 0xfb34;
+ t.hehaltonearabic = 0x06c1;
+ t.heharabic = 0x0647;
+ t.hehebrew = 0x05d4;
+ t.hehfinalaltonearabic = 0xfba7;
+ t.hehfinalalttwoarabic = 0xfeea;
+ t.hehfinalarabic = 0xfeea;
+ t.hehhamzaabovefinalarabic = 0xfba5;
+ t.hehhamzaaboveisolatedarabic = 0xfba4;
+ t.hehinitialaltonearabic = 0xfba8;
+ t.hehinitialarabic = 0xfeeb;
+ t.hehiragana = 0x3078;
+ t.hehmedialaltonearabic = 0xfba9;
+ t.hehmedialarabic = 0xfeec;
+ t.heiseierasquare = 0x337b;
+ t.hekatakana = 0x30d8;
+ t.hekatakanahalfwidth = 0xff8d;
+ t.hekutaarusquare = 0x3336;
+ t.henghook = 0x0267;
+ t.herutusquare = 0x3339;
+ t.het = 0x05d7;
+ t.hethebrew = 0x05d7;
+ t.hhook = 0x0266;
+ t.hhooksuperior = 0x02b1;
+ t.hieuhacirclekorean = 0x327b;
+ t.hieuhaparenkorean = 0x321b;
+ t.hieuhcirclekorean = 0x326d;
+ t.hieuhkorean = 0x314e;
+ t.hieuhparenkorean = 0x320d;
+ t.hihiragana = 0x3072;
+ t.hikatakana = 0x30d2;
+ t.hikatakanahalfwidth = 0xff8b;
+ t.hiriq = 0x05b4;
+ t.hiriq14 = 0x05b4;
+ t.hiriq21 = 0x05b4;
+ t.hiriq2d = 0x05b4;
+ t.hiriqhebrew = 0x05b4;
+ t.hiriqnarrowhebrew = 0x05b4;
+ t.hiriqquarterhebrew = 0x05b4;
+ t.hiriqwidehebrew = 0x05b4;
+ t.hlinebelow = 0x1e96;
+ t.hmonospace = 0xff48;
+ t.hoarmenian = 0x0570;
+ t.hohipthai = 0x0e2b;
+ t.hohiragana = 0x307b;
+ t.hokatakana = 0x30db;
+ t.hokatakanahalfwidth = 0xff8e;
+ t.holam = 0x05b9;
+ t.holam19 = 0x05b9;
+ t.holam26 = 0x05b9;
+ t.holam32 = 0x05b9;
+ t.holamhebrew = 0x05b9;
+ t.holamnarrowhebrew = 0x05b9;
+ t.holamquarterhebrew = 0x05b9;
+ t.holamwidehebrew = 0x05b9;
+ t.honokhukthai = 0x0e2e;
+ t.hookabovecomb = 0x0309;
+ t.hookcmb = 0x0309;
+ t.hookpalatalizedbelowcmb = 0x0321;
+ t.hookretroflexbelowcmb = 0x0322;
+ t.hoonsquare = 0x3342;
+ t.horicoptic = 0x03e9;
+ t.horizontalbar = 0x2015;
+ t.horncmb = 0x031b;
+ t.hotsprings = 0x2668;
+ t.house = 0x2302;
+ t.hparen = 0x24a3;
+ t.hsuperior = 0x02b0;
+ t.hturned = 0x0265;
+ t.huhiragana = 0x3075;
+ t.huiitosquare = 0x3333;
+ t.hukatakana = 0x30d5;
+ t.hukatakanahalfwidth = 0xff8c;
+ t.hungarumlaut = 0x02dd;
+ t.hungarumlautcmb = 0x030b;
+ t.hv = 0x0195;
+ t.hyphen = 0x002d;
+ t.hypheninferior = 0xf6e5;
+ t.hyphenmonospace = 0xff0d;
+ t.hyphensmall = 0xfe63;
+ t.hyphensuperior = 0xf6e6;
+ t.hyphentwo = 0x2010;
+ t.i = 0x0069;
+ t.iacute = 0x00ed;
+ t.iacyrillic = 0x044f;
+ t.ibengali = 0x0987;
+ t.ibopomofo = 0x3127;
+ t.ibreve = 0x012d;
+ t.icaron = 0x01d0;
+ t.icircle = 0x24d8;
+ t.icircumflex = 0x00ee;
+ t.icyrillic = 0x0456;
+ t.idblgrave = 0x0209;
+ t.ideographearthcircle = 0x328f;
+ t.ideographfirecircle = 0x328b;
+ t.ideographicallianceparen = 0x323f;
+ t.ideographiccallparen = 0x323a;
+ t.ideographiccentrecircle = 0x32a5;
+ t.ideographicclose = 0x3006;
+ t.ideographiccomma = 0x3001;
+ t.ideographiccommaleft = 0xff64;
+ t.ideographiccongratulationparen = 0x3237;
+ t.ideographiccorrectcircle = 0x32a3;
+ t.ideographicearthparen = 0x322f;
+ t.ideographicenterpriseparen = 0x323d;
+ t.ideographicexcellentcircle = 0x329d;
+ t.ideographicfestivalparen = 0x3240;
+ t.ideographicfinancialcircle = 0x3296;
+ t.ideographicfinancialparen = 0x3236;
+ t.ideographicfireparen = 0x322b;
+ t.ideographichaveparen = 0x3232;
+ t.ideographichighcircle = 0x32a4;
+ t.ideographiciterationmark = 0x3005;
+ t.ideographiclaborcircle = 0x3298;
+ t.ideographiclaborparen = 0x3238;
+ t.ideographicleftcircle = 0x32a7;
+ t.ideographiclowcircle = 0x32a6;
+ t.ideographicmedicinecircle = 0x32a9;
+ t.ideographicmetalparen = 0x322e;
+ t.ideographicmoonparen = 0x322a;
+ t.ideographicnameparen = 0x3234;
+ t.ideographicperiod = 0x3002;
+ t.ideographicprintcircle = 0x329e;
+ t.ideographicreachparen = 0x3243;
+ t.ideographicrepresentparen = 0x3239;
+ t.ideographicresourceparen = 0x323e;
+ t.ideographicrightcircle = 0x32a8;
+ t.ideographicsecretcircle = 0x3299;
+ t.ideographicselfparen = 0x3242;
+ t.ideographicsocietyparen = 0x3233;
+ t.ideographicspace = 0x3000;
+ t.ideographicspecialparen = 0x3235;
+ t.ideographicstockparen = 0x3231;
+ t.ideographicstudyparen = 0x323b;
+ t.ideographicsunparen = 0x3230;
+ t.ideographicsuperviseparen = 0x323c;
+ t.ideographicwaterparen = 0x322c;
+ t.ideographicwoodparen = 0x322d;
+ t.ideographiczero = 0x3007;
+ t.ideographmetalcircle = 0x328e;
+ t.ideographmooncircle = 0x328a;
+ t.ideographnamecircle = 0x3294;
+ t.ideographsuncircle = 0x3290;
+ t.ideographwatercircle = 0x328c;
+ t.ideographwoodcircle = 0x328d;
+ t.ideva = 0x0907;
+ t.idieresis = 0x00ef;
+ t.idieresisacute = 0x1e2f;
+ t.idieresiscyrillic = 0x04e5;
+ t.idotbelow = 0x1ecb;
+ t.iebrevecyrillic = 0x04d7;
+ t.iecyrillic = 0x0435;
+ t.ieungacirclekorean = 0x3275;
+ t.ieungaparenkorean = 0x3215;
+ t.ieungcirclekorean = 0x3267;
+ t.ieungkorean = 0x3147;
+ t.ieungparenkorean = 0x3207;
+ t.igrave = 0x00ec;
+ t.igujarati = 0x0a87;
+ t.igurmukhi = 0x0a07;
+ t.ihiragana = 0x3044;
+ t.ihookabove = 0x1ec9;
+ t.iibengali = 0x0988;
+ t.iicyrillic = 0x0438;
+ t.iideva = 0x0908;
+ t.iigujarati = 0x0a88;
+ t.iigurmukhi = 0x0a08;
+ t.iimatragurmukhi = 0x0a40;
+ t.iinvertedbreve = 0x020b;
+ t.iishortcyrillic = 0x0439;
+ t.iivowelsignbengali = 0x09c0;
+ t.iivowelsigndeva = 0x0940;
+ t.iivowelsigngujarati = 0x0ac0;
+ t.ij = 0x0133;
+ t.ikatakana = 0x30a4;
+ t.ikatakanahalfwidth = 0xff72;
+ t.ikorean = 0x3163;
+ t.ilde = 0x02dc;
+ t.iluyhebrew = 0x05ac;
+ t.imacron = 0x012b;
+ t.imacroncyrillic = 0x04e3;
+ t.imageorapproximatelyequal = 0x2253;
+ t.imatragurmukhi = 0x0a3f;
+ t.imonospace = 0xff49;
+ t.increment = 0x2206;
+ t.infinity = 0x221e;
+ t.iniarmenian = 0x056b;
+ t.integral = 0x222b;
+ t.integralbottom = 0x2321;
+ t.integralbt = 0x2321;
+ t.integralex = 0xf8f5;
+ t.integraltop = 0x2320;
+ t.integraltp = 0x2320;
+ t.intersection = 0x2229;
+ t.intisquare = 0x3305;
+ t.invbullet = 0x25d8;
+ t.invcircle = 0x25d9;
+ t.invsmileface = 0x263b;
+ t.iocyrillic = 0x0451;
+ t.iogonek = 0x012f;
+ t.iota = 0x03b9;
+ t.iotadieresis = 0x03ca;
+ t.iotadieresistonos = 0x0390;
+ t.iotalatin = 0x0269;
+ t.iotatonos = 0x03af;
+ t.iparen = 0x24a4;
+ t.irigurmukhi = 0x0a72;
+ t.ismallhiragana = 0x3043;
+ t.ismallkatakana = 0x30a3;
+ t.ismallkatakanahalfwidth = 0xff68;
+ t.issharbengali = 0x09fa;
+ t.istroke = 0x0268;
+ t.isuperior = 0xf6ed;
+ t.iterationhiragana = 0x309d;
+ t.iterationkatakana = 0x30fd;
+ t.itilde = 0x0129;
+ t.itildebelow = 0x1e2d;
+ t.iubopomofo = 0x3129;
+ t.iucyrillic = 0x044e;
+ t.ivowelsignbengali = 0x09bf;
+ t.ivowelsigndeva = 0x093f;
+ t.ivowelsigngujarati = 0x0abf;
+ t.izhitsacyrillic = 0x0475;
+ t.izhitsadblgravecyrillic = 0x0477;
+ t.j = 0x006a;
+ t.jaarmenian = 0x0571;
+ t.jabengali = 0x099c;
+ t.jadeva = 0x091c;
+ t.jagujarati = 0x0a9c;
+ t.jagurmukhi = 0x0a1c;
+ t.jbopomofo = 0x3110;
+ t.jcaron = 0x01f0;
+ t.jcircle = 0x24d9;
+ t.jcircumflex = 0x0135;
+ t.jcrossedtail = 0x029d;
+ t.jdotlessstroke = 0x025f;
+ t.jecyrillic = 0x0458;
+ t.jeemarabic = 0x062c;
+ t.jeemfinalarabic = 0xfe9e;
+ t.jeeminitialarabic = 0xfe9f;
+ t.jeemmedialarabic = 0xfea0;
+ t.jeharabic = 0x0698;
+ t.jehfinalarabic = 0xfb8b;
+ t.jhabengali = 0x099d;
+ t.jhadeva = 0x091d;
+ t.jhagujarati = 0x0a9d;
+ t.jhagurmukhi = 0x0a1d;
+ t.jheharmenian = 0x057b;
+ t.jis = 0x3004;
+ t.jmonospace = 0xff4a;
+ t.jparen = 0x24a5;
+ t.jsuperior = 0x02b2;
+ t.k = 0x006b;
+ t.kabashkircyrillic = 0x04a1;
+ t.kabengali = 0x0995;
+ t.kacute = 0x1e31;
+ t.kacyrillic = 0x043a;
+ t.kadescendercyrillic = 0x049b;
+ t.kadeva = 0x0915;
+ t.kaf = 0x05db;
+ t.kafarabic = 0x0643;
+ t.kafdagesh = 0xfb3b;
+ t.kafdageshhebrew = 0xfb3b;
+ t.kaffinalarabic = 0xfeda;
+ t.kafhebrew = 0x05db;
+ t.kafinitialarabic = 0xfedb;
+ t.kafmedialarabic = 0xfedc;
+ t.kafrafehebrew = 0xfb4d;
+ t.kagujarati = 0x0a95;
+ t.kagurmukhi = 0x0a15;
+ t.kahiragana = 0x304b;
+ t.kahookcyrillic = 0x04c4;
+ t.kakatakana = 0x30ab;
+ t.kakatakanahalfwidth = 0xff76;
+ t.kappa = 0x03ba;
+ t.kappasymbolgreek = 0x03f0;
+ t.kapyeounmieumkorean = 0x3171;
+ t.kapyeounphieuphkorean = 0x3184;
+ t.kapyeounpieupkorean = 0x3178;
+ t.kapyeounssangpieupkorean = 0x3179;
+ t.karoriisquare = 0x330d;
+ t.kashidaautoarabic = 0x0640;
+ t.kashidaautonosidebearingarabic = 0x0640;
+ t.kasmallkatakana = 0x30f5;
+ t.kasquare = 0x3384;
+ t.kasraarabic = 0x0650;
+ t.kasratanarabic = 0x064d;
+ t.kastrokecyrillic = 0x049f;
+ t.katahiraprolongmarkhalfwidth = 0xff70;
+ t.kaverticalstrokecyrillic = 0x049d;
+ t.kbopomofo = 0x310e;
+ t.kcalsquare = 0x3389;
+ t.kcaron = 0x01e9;
+ t.kcedilla = 0x0137;
+ t.kcircle = 0x24da;
+ t.kcommaaccent = 0x0137;
+ t.kdotbelow = 0x1e33;
+ t.keharmenian = 0x0584;
+ t.kehiragana = 0x3051;
+ t.kekatakana = 0x30b1;
+ t.kekatakanahalfwidth = 0xff79;
+ t.kenarmenian = 0x056f;
+ t.kesmallkatakana = 0x30f6;
+ t.kgreenlandic = 0x0138;
+ t.khabengali = 0x0996;
+ t.khacyrillic = 0x0445;
+ t.khadeva = 0x0916;
+ t.khagujarati = 0x0a96;
+ t.khagurmukhi = 0x0a16;
+ t.khaharabic = 0x062e;
+ t.khahfinalarabic = 0xfea6;
+ t.khahinitialarabic = 0xfea7;
+ t.khahmedialarabic = 0xfea8;
+ t.kheicoptic = 0x03e7;
+ t.khhadeva = 0x0959;
+ t.khhagurmukhi = 0x0a59;
+ t.khieukhacirclekorean = 0x3278;
+ t.khieukhaparenkorean = 0x3218;
+ t.khieukhcirclekorean = 0x326a;
+ t.khieukhkorean = 0x314b;
+ t.khieukhparenkorean = 0x320a;
+ t.khokhaithai = 0x0e02;
+ t.khokhonthai = 0x0e05;
+ t.khokhuatthai = 0x0e03;
+ t.khokhwaithai = 0x0e04;
+ t.khomutthai = 0x0e5b;
+ t.khook = 0x0199;
+ t.khorakhangthai = 0x0e06;
+ t.khzsquare = 0x3391;
+ t.kihiragana = 0x304d;
+ t.kikatakana = 0x30ad;
+ t.kikatakanahalfwidth = 0xff77;
+ t.kiroguramusquare = 0x3315;
+ t.kiromeetorusquare = 0x3316;
+ t.kirosquare = 0x3314;
+ t.kiyeokacirclekorean = 0x326e;
+ t.kiyeokaparenkorean = 0x320e;
+ t.kiyeokcirclekorean = 0x3260;
+ t.kiyeokkorean = 0x3131;
+ t.kiyeokparenkorean = 0x3200;
+ t.kiyeoksioskorean = 0x3133;
+ t.kjecyrillic = 0x045c;
+ t.klinebelow = 0x1e35;
+ t.klsquare = 0x3398;
+ t.kmcubedsquare = 0x33a6;
+ t.kmonospace = 0xff4b;
+ t.kmsquaredsquare = 0x33a2;
+ t.kohiragana = 0x3053;
+ t.kohmsquare = 0x33c0;
+ t.kokaithai = 0x0e01;
+ t.kokatakana = 0x30b3;
+ t.kokatakanahalfwidth = 0xff7a;
+ t.kooposquare = 0x331e;
+ t.koppacyrillic = 0x0481;
+ t.koreanstandardsymbol = 0x327f;
+ t.koroniscmb = 0x0343;
+ t.kparen = 0x24a6;
+ t.kpasquare = 0x33aa;
+ t.ksicyrillic = 0x046f;
+ t.ktsquare = 0x33cf;
+ t.kturned = 0x029e;
+ t.kuhiragana = 0x304f;
+ t.kukatakana = 0x30af;
+ t.kukatakanahalfwidth = 0xff78;
+ t.kvsquare = 0x33b8;
+ t.kwsquare = 0x33be;
+ t.l = 0x006c;
+ t.labengali = 0x09b2;
+ t.lacute = 0x013a;
+ t.ladeva = 0x0932;
+ t.lagujarati = 0x0ab2;
+ t.lagurmukhi = 0x0a32;
+ t.lakkhangyaothai = 0x0e45;
+ t.lamaleffinalarabic = 0xfefc;
+ t.lamalefhamzaabovefinalarabic = 0xfef8;
+ t.lamalefhamzaaboveisolatedarabic = 0xfef7;
+ t.lamalefhamzabelowfinalarabic = 0xfefa;
+ t.lamalefhamzabelowisolatedarabic = 0xfef9;
+ t.lamalefisolatedarabic = 0xfefb;
+ t.lamalefmaddaabovefinalarabic = 0xfef6;
+ t.lamalefmaddaaboveisolatedarabic = 0xfef5;
+ t.lamarabic = 0x0644;
+ t.lambda = 0x03bb;
+ t.lambdastroke = 0x019b;
+ t.lamed = 0x05dc;
+ t.lameddagesh = 0xfb3c;
+ t.lameddageshhebrew = 0xfb3c;
+ t.lamedhebrew = 0x05dc;
+ t.lamfinalarabic = 0xfede;
+ t.lamhahinitialarabic = 0xfcca;
+ t.laminitialarabic = 0xfedf;
+ t.lamjeeminitialarabic = 0xfcc9;
+ t.lamkhahinitialarabic = 0xfccb;
+ t.lamlamhehisolatedarabic = 0xfdf2;
+ t.lammedialarabic = 0xfee0;
+ t.lammeemhahinitialarabic = 0xfd88;
+ t.lammeeminitialarabic = 0xfccc;
+ t.largecircle = 0x25ef;
+ t.lbar = 0x019a;
+ t.lbelt = 0x026c;
+ t.lbopomofo = 0x310c;
+ t.lcaron = 0x013e;
+ t.lcedilla = 0x013c;
+ t.lcircle = 0x24db;
+ t.lcircumflexbelow = 0x1e3d;
+ t.lcommaaccent = 0x013c;
+ t.ldot = 0x0140;
+ t.ldotaccent = 0x0140;
+ t.ldotbelow = 0x1e37;
+ t.ldotbelowmacron = 0x1e39;
+ t.leftangleabovecmb = 0x031a;
+ t.lefttackbelowcmb = 0x0318;
+ t.less = 0x003c;
+ t.lessequal = 0x2264;
+ t.lessequalorgreater = 0x22da;
+ t.lessmonospace = 0xff1c;
+ t.lessorequivalent = 0x2272;
+ t.lessorgreater = 0x2276;
+ t.lessoverequal = 0x2266;
+ t.lesssmall = 0xfe64;
+ t.lezh = 0x026e;
+ t.lfblock = 0x258c;
+ t.lhookretroflex = 0x026d;
+ t.lira = 0x20a4;
+ t.liwnarmenian = 0x056c;
+ t.lj = 0x01c9;
+ t.ljecyrillic = 0x0459;
+ t.ll = 0xf6c0;
+ t.lladeva = 0x0933;
+ t.llagujarati = 0x0ab3;
+ t.llinebelow = 0x1e3b;
+ t.llladeva = 0x0934;
+ t.llvocalicbengali = 0x09e1;
+ t.llvocalicdeva = 0x0961;
+ t.llvocalicvowelsignbengali = 0x09e3;
+ t.llvocalicvowelsigndeva = 0x0963;
+ t.lmiddletilde = 0x026b;
+ t.lmonospace = 0xff4c;
+ t.lmsquare = 0x33d0;
+ t.lochulathai = 0x0e2c;
+ t.logicaland = 0x2227;
+ t.logicalnot = 0x00ac;
+ t.logicalnotreversed = 0x2310;
+ t.logicalor = 0x2228;
+ t.lolingthai = 0x0e25;
+ t.longs = 0x017f;
+ t.lowlinecenterline = 0xfe4e;
+ t.lowlinecmb = 0x0332;
+ t.lowlinedashed = 0xfe4d;
+ t.lozenge = 0x25ca;
+ t.lparen = 0x24a7;
+ t.lslash = 0x0142;
+ t.lsquare = 0x2113;
+ t.lsuperior = 0xf6ee;
+ t.ltshade = 0x2591;
+ t.luthai = 0x0e26;
+ t.lvocalicbengali = 0x098c;
+ t.lvocalicdeva = 0x090c;
+ t.lvocalicvowelsignbengali = 0x09e2;
+ t.lvocalicvowelsigndeva = 0x0962;
+ t.lxsquare = 0x33d3;
+ t.m = 0x006d;
+ t.mabengali = 0x09ae;
+ t.macron = 0x00af;
+ t.macronbelowcmb = 0x0331;
+ t.macroncmb = 0x0304;
+ t.macronlowmod = 0x02cd;
+ t.macronmonospace = 0xffe3;
+ t.macute = 0x1e3f;
+ t.madeva = 0x092e;
+ t.magujarati = 0x0aae;
+ t.magurmukhi = 0x0a2e;
+ t.mahapakhhebrew = 0x05a4;
+ t.mahapakhlefthebrew = 0x05a4;
+ t.mahiragana = 0x307e;
+ t.maichattawalowleftthai = 0xf895;
+ t.maichattawalowrightthai = 0xf894;
+ t.maichattawathai = 0x0e4b;
+ t.maichattawaupperleftthai = 0xf893;
+ t.maieklowleftthai = 0xf88c;
+ t.maieklowrightthai = 0xf88b;
+ t.maiekthai = 0x0e48;
+ t.maiekupperleftthai = 0xf88a;
+ t.maihanakatleftthai = 0xf884;
+ t.maihanakatthai = 0x0e31;
+ t.maitaikhuleftthai = 0xf889;
+ t.maitaikhuthai = 0x0e47;
+ t.maitholowleftthai = 0xf88f;
+ t.maitholowrightthai = 0xf88e;
+ t.maithothai = 0x0e49;
+ t.maithoupperleftthai = 0xf88d;
+ t.maitrilowleftthai = 0xf892;
+ t.maitrilowrightthai = 0xf891;
+ t.maitrithai = 0x0e4a;
+ t.maitriupperleftthai = 0xf890;
+ t.maiyamokthai = 0x0e46;
+ t.makatakana = 0x30de;
+ t.makatakanahalfwidth = 0xff8f;
+ t.male = 0x2642;
+ t.mansyonsquare = 0x3347;
+ t.maqafhebrew = 0x05be;
+ t.mars = 0x2642;
+ t.masoracirclehebrew = 0x05af;
+ t.masquare = 0x3383;
+ t.mbopomofo = 0x3107;
+ t.mbsquare = 0x33d4;
+ t.mcircle = 0x24dc;
+ t.mcubedsquare = 0x33a5;
+ t.mdotaccent = 0x1e41;
+ t.mdotbelow = 0x1e43;
+ t.meemarabic = 0x0645;
+ t.meemfinalarabic = 0xfee2;
+ t.meeminitialarabic = 0xfee3;
+ t.meemmedialarabic = 0xfee4;
+ t.meemmeeminitialarabic = 0xfcd1;
+ t.meemmeemisolatedarabic = 0xfc48;
+ t.meetorusquare = 0x334d;
+ t.mehiragana = 0x3081;
+ t.meizierasquare = 0x337e;
+ t.mekatakana = 0x30e1;
+ t.mekatakanahalfwidth = 0xff92;
+ t.mem = 0x05de;
+ t.memdagesh = 0xfb3e;
+ t.memdageshhebrew = 0xfb3e;
+ t.memhebrew = 0x05de;
+ t.menarmenian = 0x0574;
+ t.merkhahebrew = 0x05a5;
+ t.merkhakefulahebrew = 0x05a6;
+ t.merkhakefulalefthebrew = 0x05a6;
+ t.merkhalefthebrew = 0x05a5;
+ t.mhook = 0x0271;
+ t.mhzsquare = 0x3392;
+ t.middledotkatakanahalfwidth = 0xff65;
+ t.middot = 0x00b7;
+ t.mieumacirclekorean = 0x3272;
+ t.mieumaparenkorean = 0x3212;
+ t.mieumcirclekorean = 0x3264;
+ t.mieumkorean = 0x3141;
+ t.mieumpansioskorean = 0x3170;
+ t.mieumparenkorean = 0x3204;
+ t.mieumpieupkorean = 0x316e;
+ t.mieumsioskorean = 0x316f;
+ t.mihiragana = 0x307f;
+ t.mikatakana = 0x30df;
+ t.mikatakanahalfwidth = 0xff90;
+ t.minus = 0x2212;
+ t.minusbelowcmb = 0x0320;
+ t.minuscircle = 0x2296;
+ t.minusmod = 0x02d7;
+ t.minusplus = 0x2213;
+ t.minute = 0x2032;
+ t.miribaarusquare = 0x334a;
+ t.mirisquare = 0x3349;
+ t.mlonglegturned = 0x0270;
+ t.mlsquare = 0x3396;
+ t.mmcubedsquare = 0x33a3;
+ t.mmonospace = 0xff4d;
+ t.mmsquaredsquare = 0x339f;
+ t.mohiragana = 0x3082;
+ t.mohmsquare = 0x33c1;
+ t.mokatakana = 0x30e2;
+ t.mokatakanahalfwidth = 0xff93;
+ t.molsquare = 0x33d6;
+ t.momathai = 0x0e21;
+ t.moverssquare = 0x33a7;
+ t.moverssquaredsquare = 0x33a8;
+ t.mparen = 0x24a8;
+ t.mpasquare = 0x33ab;
+ t.mssquare = 0x33b3;
+ t.msuperior = 0xf6ef;
+ t.mturned = 0x026f;
+ t.mu = 0x00b5;
+ t.mu1 = 0x00b5;
+ t.muasquare = 0x3382;
+ t.muchgreater = 0x226b;
+ t.muchless = 0x226a;
+ t.mufsquare = 0x338c;
+ t.mugreek = 0x03bc;
+ t.mugsquare = 0x338d;
+ t.muhiragana = 0x3080;
+ t.mukatakana = 0x30e0;
+ t.mukatakanahalfwidth = 0xff91;
+ t.mulsquare = 0x3395;
+ t.multiply = 0x00d7;
+ t.mumsquare = 0x339b;
+ t.munahhebrew = 0x05a3;
+ t.munahlefthebrew = 0x05a3;
+ t.musicalnote = 0x266a;
+ t.musicalnotedbl = 0x266b;
+ t.musicflatsign = 0x266d;
+ t.musicsharpsign = 0x266f;
+ t.mussquare = 0x33b2;
+ t.muvsquare = 0x33b6;
+ t.muwsquare = 0x33bc;
+ t.mvmegasquare = 0x33b9;
+ t.mvsquare = 0x33b7;
+ t.mwmegasquare = 0x33bf;
+ t.mwsquare = 0x33bd;
+ t.n = 0x006e;
+ t.nabengali = 0x09a8;
+ t.nabla = 0x2207;
+ t.nacute = 0x0144;
+ t.nadeva = 0x0928;
+ t.nagujarati = 0x0aa8;
+ t.nagurmukhi = 0x0a28;
+ t.nahiragana = 0x306a;
+ t.nakatakana = 0x30ca;
+ t.nakatakanahalfwidth = 0xff85;
+ t.napostrophe = 0x0149;
+ t.nasquare = 0x3381;
+ t.nbopomofo = 0x310b;
+ t.nbspace = 0x00a0;
+ t.ncaron = 0x0148;
+ t.ncedilla = 0x0146;
+ t.ncircle = 0x24dd;
+ t.ncircumflexbelow = 0x1e4b;
+ t.ncommaaccent = 0x0146;
+ t.ndotaccent = 0x1e45;
+ t.ndotbelow = 0x1e47;
+ t.nehiragana = 0x306d;
+ t.nekatakana = 0x30cd;
+ t.nekatakanahalfwidth = 0xff88;
+ t.newsheqelsign = 0x20aa;
+ t.nfsquare = 0x338b;
+ t.ngabengali = 0x0999;
+ t.ngadeva = 0x0919;
+ t.ngagujarati = 0x0a99;
+ t.ngagurmukhi = 0x0a19;
+ t.ngonguthai = 0x0e07;
+ t.nhiragana = 0x3093;
+ t.nhookleft = 0x0272;
+ t.nhookretroflex = 0x0273;
+ t.nieunacirclekorean = 0x326f;
+ t.nieunaparenkorean = 0x320f;
+ t.nieuncieuckorean = 0x3135;
+ t.nieuncirclekorean = 0x3261;
+ t.nieunhieuhkorean = 0x3136;
+ t.nieunkorean = 0x3134;
+ t.nieunpansioskorean = 0x3168;
+ t.nieunparenkorean = 0x3201;
+ t.nieunsioskorean = 0x3167;
+ t.nieuntikeutkorean = 0x3166;
+ t.nihiragana = 0x306b;
+ t.nikatakana = 0x30cb;
+ t.nikatakanahalfwidth = 0xff86;
+ t.nikhahitleftthai = 0xf899;
+ t.nikhahitthai = 0x0e4d;
+ t.nine = 0x0039;
+ t.ninearabic = 0x0669;
+ t.ninebengali = 0x09ef;
+ t.ninecircle = 0x2468;
+ t.ninecircleinversesansserif = 0x2792;
+ t.ninedeva = 0x096f;
+ t.ninegujarati = 0x0aef;
+ t.ninegurmukhi = 0x0a6f;
+ t.ninehackarabic = 0x0669;
+ t.ninehangzhou = 0x3029;
+ t.nineideographicparen = 0x3228;
+ t.nineinferior = 0x2089;
+ t.ninemonospace = 0xff19;
+ t.nineoldstyle = 0xf739;
+ t.nineparen = 0x247c;
+ t.nineperiod = 0x2490;
+ t.ninepersian = 0x06f9;
+ t.nineroman = 0x2178;
+ t.ninesuperior = 0x2079;
+ t.nineteencircle = 0x2472;
+ t.nineteenparen = 0x2486;
+ t.nineteenperiod = 0x249a;
+ t.ninethai = 0x0e59;
+ t.nj = 0x01cc;
+ t.njecyrillic = 0x045a;
+ t.nkatakana = 0x30f3;
+ t.nkatakanahalfwidth = 0xff9d;
+ t.nlegrightlong = 0x019e;
+ t.nlinebelow = 0x1e49;
+ t.nmonospace = 0xff4e;
+ t.nmsquare = 0x339a;
+ t.nnabengali = 0x09a3;
+ t.nnadeva = 0x0923;
+ t.nnagujarati = 0x0aa3;
+ t.nnagurmukhi = 0x0a23;
+ t.nnnadeva = 0x0929;
+ t.nohiragana = 0x306e;
+ t.nokatakana = 0x30ce;
+ t.nokatakanahalfwidth = 0xff89;
+ t.nonbreakingspace = 0x00a0;
+ t.nonenthai = 0x0e13;
+ t.nonuthai = 0x0e19;
+ t.noonarabic = 0x0646;
+ t.noonfinalarabic = 0xfee6;
+ t.noonghunnaarabic = 0x06ba;
+ t.noonghunnafinalarabic = 0xfb9f;
+ t.nooninitialarabic = 0xfee7;
+ t.noonjeeminitialarabic = 0xfcd2;
+ t.noonjeemisolatedarabic = 0xfc4b;
+ t.noonmedialarabic = 0xfee8;
+ t.noonmeeminitialarabic = 0xfcd5;
+ t.noonmeemisolatedarabic = 0xfc4e;
+ t.noonnoonfinalarabic = 0xfc8d;
+ t.notcontains = 0x220c;
+ t.notelement = 0x2209;
+ t.notelementof = 0x2209;
+ t.notequal = 0x2260;
+ t.notgreater = 0x226f;
+ t.notgreaternorequal = 0x2271;
+ t.notgreaternorless = 0x2279;
+ t.notidentical = 0x2262;
+ t.notless = 0x226e;
+ t.notlessnorequal = 0x2270;
+ t.notparallel = 0x2226;
+ t.notprecedes = 0x2280;
+ t.notsubset = 0x2284;
+ t.notsucceeds = 0x2281;
+ t.notsuperset = 0x2285;
+ t.nowarmenian = 0x0576;
+ t.nparen = 0x24a9;
+ t.nssquare = 0x33b1;
+ t.nsuperior = 0x207f;
+ t.ntilde = 0x00f1;
+ t.nu = 0x03bd;
+ t.nuhiragana = 0x306c;
+ t.nukatakana = 0x30cc;
+ t.nukatakanahalfwidth = 0xff87;
+ t.nuktabengali = 0x09bc;
+ t.nuktadeva = 0x093c;
+ t.nuktagujarati = 0x0abc;
+ t.nuktagurmukhi = 0x0a3c;
+ t.numbersign = 0x0023;
+ t.numbersignmonospace = 0xff03;
+ t.numbersignsmall = 0xfe5f;
+ t.numeralsigngreek = 0x0374;
+ t.numeralsignlowergreek = 0x0375;
+ t.numero = 0x2116;
+ t.nun = 0x05e0;
+ t.nundagesh = 0xfb40;
+ t.nundageshhebrew = 0xfb40;
+ t.nunhebrew = 0x05e0;
+ t.nvsquare = 0x33b5;
+ t.nwsquare = 0x33bb;
+ t.nyabengali = 0x099e;
+ t.nyadeva = 0x091e;
+ t.nyagujarati = 0x0a9e;
+ t.nyagurmukhi = 0x0a1e;
+ t.o = 0x006f;
+ t.oacute = 0x00f3;
+ t.oangthai = 0x0e2d;
+ t.obarred = 0x0275;
+ t.obarredcyrillic = 0x04e9;
+ t.obarreddieresiscyrillic = 0x04eb;
+ t.obengali = 0x0993;
+ t.obopomofo = 0x311b;
+ t.obreve = 0x014f;
+ t.ocandradeva = 0x0911;
+ t.ocandragujarati = 0x0a91;
+ t.ocandravowelsigndeva = 0x0949;
+ t.ocandravowelsigngujarati = 0x0ac9;
+ t.ocaron = 0x01d2;
+ t.ocircle = 0x24de;
+ t.ocircumflex = 0x00f4;
+ t.ocircumflexacute = 0x1ed1;
+ t.ocircumflexdotbelow = 0x1ed9;
+ t.ocircumflexgrave = 0x1ed3;
+ t.ocircumflexhookabove = 0x1ed5;
+ t.ocircumflextilde = 0x1ed7;
+ t.ocyrillic = 0x043e;
+ t.odblacute = 0x0151;
+ t.odblgrave = 0x020d;
+ t.odeva = 0x0913;
+ t.odieresis = 0x00f6;
+ t.odieresiscyrillic = 0x04e7;
+ t.odotbelow = 0x1ecd;
+ t.oe = 0x0153;
+ t.oekorean = 0x315a;
+ t.ogonek = 0x02db;
+ t.ogonekcmb = 0x0328;
+ t.ograve = 0x00f2;
+ t.ogujarati = 0x0a93;
+ t.oharmenian = 0x0585;
+ t.ohiragana = 0x304a;
+ t.ohookabove = 0x1ecf;
+ t.ohorn = 0x01a1;
+ t.ohornacute = 0x1edb;
+ t.ohorndotbelow = 0x1ee3;
+ t.ohorngrave = 0x1edd;
+ t.ohornhookabove = 0x1edf;
+ t.ohorntilde = 0x1ee1;
+ t.ohungarumlaut = 0x0151;
+ t.oi = 0x01a3;
+ t.oinvertedbreve = 0x020f;
+ t.okatakana = 0x30aa;
+ t.okatakanahalfwidth = 0xff75;
+ t.okorean = 0x3157;
+ t.olehebrew = 0x05ab;
+ t.omacron = 0x014d;
+ t.omacronacute = 0x1e53;
+ t.omacrongrave = 0x1e51;
+ t.omdeva = 0x0950;
+ t.omega = 0x03c9;
+ t.omega1 = 0x03d6;
+ t.omegacyrillic = 0x0461;
+ t.omegalatinclosed = 0x0277;
+ t.omegaroundcyrillic = 0x047b;
+ t.omegatitlocyrillic = 0x047d;
+ t.omegatonos = 0x03ce;
+ t.omgujarati = 0x0ad0;
+ t.omicron = 0x03bf;
+ t.omicrontonos = 0x03cc;
+ t.omonospace = 0xff4f;
+ t.one = 0x0031;
+ t.onearabic = 0x0661;
+ t.onebengali = 0x09e7;
+ t.onecircle = 0x2460;
+ t.onecircleinversesansserif = 0x278a;
+ t.onedeva = 0x0967;
+ t.onedotenleader = 0x2024;
+ t.oneeighth = 0x215b;
+ t.onefitted = 0xf6dc;
+ t.onegujarati = 0x0ae7;
+ t.onegurmukhi = 0x0a67;
+ t.onehackarabic = 0x0661;
+ t.onehalf = 0x00bd;
+ t.onehangzhou = 0x3021;
+ t.oneideographicparen = 0x3220;
+ t.oneinferior = 0x2081;
+ t.onemonospace = 0xff11;
+ t.onenumeratorbengali = 0x09f4;
+ t.oneoldstyle = 0xf731;
+ t.oneparen = 0x2474;
+ t.oneperiod = 0x2488;
+ t.onepersian = 0x06f1;
+ t.onequarter = 0x00bc;
+ t.oneroman = 0x2170;
+ t.onesuperior = 0x00b9;
+ t.onethai = 0x0e51;
+ t.onethird = 0x2153;
+ t.oogonek = 0x01eb;
+ t.oogonekmacron = 0x01ed;
+ t.oogurmukhi = 0x0a13;
+ t.oomatragurmukhi = 0x0a4b;
+ t.oopen = 0x0254;
+ t.oparen = 0x24aa;
+ t.openbullet = 0x25e6;
+ t.option = 0x2325;
+ t.ordfeminine = 0x00aa;
+ t.ordmasculine = 0x00ba;
+ t.orthogonal = 0x221f;
+ t.oshortdeva = 0x0912;
+ t.oshortvowelsigndeva = 0x094a;
+ t.oslash = 0x00f8;
+ t.oslashacute = 0x01ff;
+ t.osmallhiragana = 0x3049;
+ t.osmallkatakana = 0x30a9;
+ t.osmallkatakanahalfwidth = 0xff6b;
+ t.ostrokeacute = 0x01ff;
+ t.osuperior = 0xf6f0;
+ t.otcyrillic = 0x047f;
+ t.otilde = 0x00f5;
+ t.otildeacute = 0x1e4d;
+ t.otildedieresis = 0x1e4f;
+ t.oubopomofo = 0x3121;
+ t.overline = 0x203e;
+ t.overlinecenterline = 0xfe4a;
+ t.overlinecmb = 0x0305;
+ t.overlinedashed = 0xfe49;
+ t.overlinedblwavy = 0xfe4c;
+ t.overlinewavy = 0xfe4b;
+ t.overscore = 0x00af;
+ t.ovowelsignbengali = 0x09cb;
+ t.ovowelsigndeva = 0x094b;
+ t.ovowelsigngujarati = 0x0acb;
+ t.p = 0x0070;
+ t.paampssquare = 0x3380;
+ t.paasentosquare = 0x332b;
+ t.pabengali = 0x09aa;
+ t.pacute = 0x1e55;
+ t.padeva = 0x092a;
+ t.pagedown = 0x21df;
+ t.pageup = 0x21de;
+ t.pagujarati = 0x0aaa;
+ t.pagurmukhi = 0x0a2a;
+ t.pahiragana = 0x3071;
+ t.paiyannoithai = 0x0e2f;
+ t.pakatakana = 0x30d1;
+ t.palatalizationcyrilliccmb = 0x0484;
+ t.palochkacyrillic = 0x04c0;
+ t.pansioskorean = 0x317f;
+ t.paragraph = 0x00b6;
+ t.parallel = 0x2225;
+ t.parenleft = 0x0028;
+ t.parenleftaltonearabic = 0xfd3e;
+ t.parenleftbt = 0xf8ed;
+ t.parenleftex = 0xf8ec;
+ t.parenleftinferior = 0x208d;
+ t.parenleftmonospace = 0xff08;
+ t.parenleftsmall = 0xfe59;
+ t.parenleftsuperior = 0x207d;
+ t.parenlefttp = 0xf8eb;
+ t.parenleftvertical = 0xfe35;
+ t.parenright = 0x0029;
+ t.parenrightaltonearabic = 0xfd3f;
+ t.parenrightbt = 0xf8f8;
+ t.parenrightex = 0xf8f7;
+ t.parenrightinferior = 0x208e;
+ t.parenrightmonospace = 0xff09;
+ t.parenrightsmall = 0xfe5a;
+ t.parenrightsuperior = 0x207e;
+ t.parenrighttp = 0xf8f6;
+ t.parenrightvertical = 0xfe36;
+ t.partialdiff = 0x2202;
+ t.paseqhebrew = 0x05c0;
+ t.pashtahebrew = 0x0599;
+ t.pasquare = 0x33a9;
+ t.patah = 0x05b7;
+ t.patah11 = 0x05b7;
+ t.patah1d = 0x05b7;
+ t.patah2a = 0x05b7;
+ t.patahhebrew = 0x05b7;
+ t.patahnarrowhebrew = 0x05b7;
+ t.patahquarterhebrew = 0x05b7;
+ t.patahwidehebrew = 0x05b7;
+ t.pazerhebrew = 0x05a1;
+ t.pbopomofo = 0x3106;
+ t.pcircle = 0x24df;
+ t.pdotaccent = 0x1e57;
+ t.pe = 0x05e4;
+ t.pecyrillic = 0x043f;
+ t.pedagesh = 0xfb44;
+ t.pedageshhebrew = 0xfb44;
+ t.peezisquare = 0x333b;
+ t.pefinaldageshhebrew = 0xfb43;
+ t.peharabic = 0x067e;
+ t.peharmenian = 0x057a;
+ t.pehebrew = 0x05e4;
+ t.pehfinalarabic = 0xfb57;
+ t.pehinitialarabic = 0xfb58;
+ t.pehiragana = 0x307a;
+ t.pehmedialarabic = 0xfb59;
+ t.pekatakana = 0x30da;
+ t.pemiddlehookcyrillic = 0x04a7;
+ t.perafehebrew = 0xfb4e;
+ t.percent = 0x0025;
+ t.percentarabic = 0x066a;
+ t.percentmonospace = 0xff05;
+ t.percentsmall = 0xfe6a;
+ t.period = 0x002e;
+ t.periodarmenian = 0x0589;
+ t.periodcentered = 0x00b7;
+ t.periodhalfwidth = 0xff61;
+ t.periodinferior = 0xf6e7;
+ t.periodmonospace = 0xff0e;
+ t.periodsmall = 0xfe52;
+ t.periodsuperior = 0xf6e8;
+ t.perispomenigreekcmb = 0x0342;
+ t.perpendicular = 0x22a5;
+ t.perthousand = 0x2030;
+ t.peseta = 0x20a7;
+ t.pfsquare = 0x338a;
+ t.phabengali = 0x09ab;
+ t.phadeva = 0x092b;
+ t.phagujarati = 0x0aab;
+ t.phagurmukhi = 0x0a2b;
+ t.phi = 0x03c6;
+ t.phi1 = 0x03d5;
+ t.phieuphacirclekorean = 0x327a;
+ t.phieuphaparenkorean = 0x321a;
+ t.phieuphcirclekorean = 0x326c;
+ t.phieuphkorean = 0x314d;
+ t.phieuphparenkorean = 0x320c;
+ t.philatin = 0x0278;
+ t.phinthuthai = 0x0e3a;
+ t.phisymbolgreek = 0x03d5;
+ t.phook = 0x01a5;
+ t.phophanthai = 0x0e1e;
+ t.phophungthai = 0x0e1c;
+ t.phosamphaothai = 0x0e20;
+ t.pi = 0x03c0;
+ t.pieupacirclekorean = 0x3273;
+ t.pieupaparenkorean = 0x3213;
+ t.pieupcieuckorean = 0x3176;
+ t.pieupcirclekorean = 0x3265;
+ t.pieupkiyeokkorean = 0x3172;
+ t.pieupkorean = 0x3142;
+ t.pieupparenkorean = 0x3205;
+ t.pieupsioskiyeokkorean = 0x3174;
+ t.pieupsioskorean = 0x3144;
+ t.pieupsiostikeutkorean = 0x3175;
+ t.pieupthieuthkorean = 0x3177;
+ t.pieuptikeutkorean = 0x3173;
+ t.pihiragana = 0x3074;
+ t.pikatakana = 0x30d4;
+ t.pisymbolgreek = 0x03d6;
+ t.piwrarmenian = 0x0583;
+ t.plus = 0x002b;
+ t.plusbelowcmb = 0x031f;
+ t.pluscircle = 0x2295;
+ t.plusminus = 0x00b1;
+ t.plusmod = 0x02d6;
+ t.plusmonospace = 0xff0b;
+ t.plussmall = 0xfe62;
+ t.plussuperior = 0x207a;
+ t.pmonospace = 0xff50;
+ t.pmsquare = 0x33d8;
+ t.pohiragana = 0x307d;
+ t.pointingindexdownwhite = 0x261f;
+ t.pointingindexleftwhite = 0x261c;
+ t.pointingindexrightwhite = 0x261e;
+ t.pointingindexupwhite = 0x261d;
+ t.pokatakana = 0x30dd;
+ t.poplathai = 0x0e1b;
+ t.postalmark = 0x3012;
+ t.postalmarkface = 0x3020;
+ t.pparen = 0x24ab;
+ t.precedes = 0x227a;
+ t.prescription = 0x211e;
+ t.primemod = 0x02b9;
+ t.primereversed = 0x2035;
+ t.product = 0x220f;
+ t.projective = 0x2305;
+ t.prolongedkana = 0x30fc;
+ t.propellor = 0x2318;
+ t.propersubset = 0x2282;
+ t.propersuperset = 0x2283;
+ t.proportion = 0x2237;
+ t.proportional = 0x221d;
+ t.psi = 0x03c8;
+ t.psicyrillic = 0x0471;
+ t.psilipneumatacyrilliccmb = 0x0486;
+ t.pssquare = 0x33b0;
+ t.puhiragana = 0x3077;
+ t.pukatakana = 0x30d7;
+ t.pvsquare = 0x33b4;
+ t.pwsquare = 0x33ba;
+ t.q = 0x0071;
+ t.qadeva = 0x0958;
+ t.qadmahebrew = 0x05a8;
+ t.qafarabic = 0x0642;
+ t.qaffinalarabic = 0xfed6;
+ t.qafinitialarabic = 0xfed7;
+ t.qafmedialarabic = 0xfed8;
+ t.qamats = 0x05b8;
+ t.qamats10 = 0x05b8;
+ t.qamats1a = 0x05b8;
+ t.qamats1c = 0x05b8;
+ t.qamats27 = 0x05b8;
+ t.qamats29 = 0x05b8;
+ t.qamats33 = 0x05b8;
+ t.qamatsde = 0x05b8;
+ t.qamatshebrew = 0x05b8;
+ t.qamatsnarrowhebrew = 0x05b8;
+ t.qamatsqatanhebrew = 0x05b8;
+ t.qamatsqatannarrowhebrew = 0x05b8;
+ t.qamatsqatanquarterhebrew = 0x05b8;
+ t.qamatsqatanwidehebrew = 0x05b8;
+ t.qamatsquarterhebrew = 0x05b8;
+ t.qamatswidehebrew = 0x05b8;
+ t.qarneyparahebrew = 0x059f;
+ t.qbopomofo = 0x3111;
+ t.qcircle = 0x24e0;
+ t.qhook = 0x02a0;
+ t.qmonospace = 0xff51;
+ t.qof = 0x05e7;
+ t.qofdagesh = 0xfb47;
+ t.qofdageshhebrew = 0xfb47;
+ t.qofhebrew = 0x05e7;
+ t.qparen = 0x24ac;
+ t.quarternote = 0x2669;
+ t.qubuts = 0x05bb;
+ t.qubuts18 = 0x05bb;
+ t.qubuts25 = 0x05bb;
+ t.qubuts31 = 0x05bb;
+ t.qubutshebrew = 0x05bb;
+ t.qubutsnarrowhebrew = 0x05bb;
+ t.qubutsquarterhebrew = 0x05bb;
+ t.qubutswidehebrew = 0x05bb;
+ t.question = 0x003f;
+ t.questionarabic = 0x061f;
+ t.questionarmenian = 0x055e;
+ t.questiondown = 0x00bf;
+ t.questiondownsmall = 0xf7bf;
+ t.questiongreek = 0x037e;
+ t.questionmonospace = 0xff1f;
+ t.questionsmall = 0xf73f;
+ t.quotedbl = 0x0022;
+ t.quotedblbase = 0x201e;
+ t.quotedblleft = 0x201c;
+ t.quotedblmonospace = 0xff02;
+ t.quotedblprime = 0x301e;
+ t.quotedblprimereversed = 0x301d;
+ t.quotedblright = 0x201d;
+ t.quoteleft = 0x2018;
+ t.quoteleftreversed = 0x201b;
+ t.quotereversed = 0x201b;
+ t.quoteright = 0x2019;
+ t.quoterightn = 0x0149;
+ t.quotesinglbase = 0x201a;
+ t.quotesingle = 0x0027;
+ t.quotesinglemonospace = 0xff07;
+ t.r = 0x0072;
+ t.raarmenian = 0x057c;
+ t.rabengali = 0x09b0;
+ t.racute = 0x0155;
+ t.radeva = 0x0930;
+ t.radical = 0x221a;
+ t.radicalex = 0xf8e5;
+ t.radoverssquare = 0x33ae;
+ t.radoverssquaredsquare = 0x33af;
+ t.radsquare = 0x33ad;
+ t.rafe = 0x05bf;
+ t.rafehebrew = 0x05bf;
+ t.ragujarati = 0x0ab0;
+ t.ragurmukhi = 0x0a30;
+ t.rahiragana = 0x3089;
+ t.rakatakana = 0x30e9;
+ t.rakatakanahalfwidth = 0xff97;
+ t.ralowerdiagonalbengali = 0x09f1;
+ t.ramiddlediagonalbengali = 0x09f0;
+ t.ramshorn = 0x0264;
+ t.ratio = 0x2236;
+ t.rbopomofo = 0x3116;
+ t.rcaron = 0x0159;
+ t.rcedilla = 0x0157;
+ t.rcircle = 0x24e1;
+ t.rcommaaccent = 0x0157;
+ t.rdblgrave = 0x0211;
+ t.rdotaccent = 0x1e59;
+ t.rdotbelow = 0x1e5b;
+ t.rdotbelowmacron = 0x1e5d;
+ t.referencemark = 0x203b;
+ t.reflexsubset = 0x2286;
+ t.reflexsuperset = 0x2287;
+ t.registered = 0x00ae;
+ t.registersans = 0xf8e8;
+ t.registerserif = 0xf6da;
+ t.reharabic = 0x0631;
+ t.reharmenian = 0x0580;
+ t.rehfinalarabic = 0xfeae;
+ t.rehiragana = 0x308c;
+ t.rekatakana = 0x30ec;
+ t.rekatakanahalfwidth = 0xff9a;
+ t.resh = 0x05e8;
+ t.reshdageshhebrew = 0xfb48;
+ t.reshhebrew = 0x05e8;
+ t.reversedtilde = 0x223d;
+ t.reviahebrew = 0x0597;
+ t.reviamugrashhebrew = 0x0597;
+ t.revlogicalnot = 0x2310;
+ t.rfishhook = 0x027e;
+ t.rfishhookreversed = 0x027f;
+ t.rhabengali = 0x09dd;
+ t.rhadeva = 0x095d;
+ t.rho = 0x03c1;
+ t.rhook = 0x027d;
+ t.rhookturned = 0x027b;
+ t.rhookturnedsuperior = 0x02b5;
+ t.rhosymbolgreek = 0x03f1;
+ t.rhotichookmod = 0x02de;
+ t.rieulacirclekorean = 0x3271;
+ t.rieulaparenkorean = 0x3211;
+ t.rieulcirclekorean = 0x3263;
+ t.rieulhieuhkorean = 0x3140;
+ t.rieulkiyeokkorean = 0x313a;
+ t.rieulkiyeoksioskorean = 0x3169;
+ t.rieulkorean = 0x3139;
+ t.rieulmieumkorean = 0x313b;
+ t.rieulpansioskorean = 0x316c;
+ t.rieulparenkorean = 0x3203;
+ t.rieulphieuphkorean = 0x313f;
+ t.rieulpieupkorean = 0x313c;
+ t.rieulpieupsioskorean = 0x316b;
+ t.rieulsioskorean = 0x313d;
+ t.rieulthieuthkorean = 0x313e;
+ t.rieultikeutkorean = 0x316a;
+ t.rieulyeorinhieuhkorean = 0x316d;
+ t.rightangle = 0x221f;
+ t.righttackbelowcmb = 0x0319;
+ t.righttriangle = 0x22bf;
+ t.rihiragana = 0x308a;
+ t.rikatakana = 0x30ea;
+ t.rikatakanahalfwidth = 0xff98;
+ t.ring = 0x02da;
+ t.ringbelowcmb = 0x0325;
+ t.ringcmb = 0x030a;
+ t.ringhalfleft = 0x02bf;
+ t.ringhalfleftarmenian = 0x0559;
+ t.ringhalfleftbelowcmb = 0x031c;
+ t.ringhalfleftcentered = 0x02d3;
+ t.ringhalfright = 0x02be;
+ t.ringhalfrightbelowcmb = 0x0339;
+ t.ringhalfrightcentered = 0x02d2;
+ t.rinvertedbreve = 0x0213;
+ t.rittorusquare = 0x3351;
+ t.rlinebelow = 0x1e5f;
+ t.rlongleg = 0x027c;
+ t.rlonglegturned = 0x027a;
+ t.rmonospace = 0xff52;
+ t.rohiragana = 0x308d;
+ t.rokatakana = 0x30ed;
+ t.rokatakanahalfwidth = 0xff9b;
+ t.roruathai = 0x0e23;
+ t.rparen = 0x24ad;
+ t.rrabengali = 0x09dc;
+ t.rradeva = 0x0931;
+ t.rragurmukhi = 0x0a5c;
+ t.rreharabic = 0x0691;
+ t.rrehfinalarabic = 0xfb8d;
+ t.rrvocalicbengali = 0x09e0;
+ t.rrvocalicdeva = 0x0960;
+ t.rrvocalicgujarati = 0x0ae0;
+ t.rrvocalicvowelsignbengali = 0x09c4;
+ t.rrvocalicvowelsigndeva = 0x0944;
+ t.rrvocalicvowelsigngujarati = 0x0ac4;
+ t.rsuperior = 0xf6f1;
+ t.rtblock = 0x2590;
+ t.rturned = 0x0279;
+ t.rturnedsuperior = 0x02b4;
+ t.ruhiragana = 0x308b;
+ t.rukatakana = 0x30eb;
+ t.rukatakanahalfwidth = 0xff99;
+ t.rupeemarkbengali = 0x09f2;
+ t.rupeesignbengali = 0x09f3;
+ t.rupiah = 0xf6dd;
+ t.ruthai = 0x0e24;
+ t.rvocalicbengali = 0x098b;
+ t.rvocalicdeva = 0x090b;
+ t.rvocalicgujarati = 0x0a8b;
+ t.rvocalicvowelsignbengali = 0x09c3;
+ t.rvocalicvowelsigndeva = 0x0943;
+ t.rvocalicvowelsigngujarati = 0x0ac3;
+ t.s = 0x0073;
+ t.sabengali = 0x09b8;
+ t.sacute = 0x015b;
+ t.sacutedotaccent = 0x1e65;
+ t.sadarabic = 0x0635;
+ t.sadeva = 0x0938;
+ t.sadfinalarabic = 0xfeba;
+ t.sadinitialarabic = 0xfebb;
+ t.sadmedialarabic = 0xfebc;
+ t.sagujarati = 0x0ab8;
+ t.sagurmukhi = 0x0a38;
+ t.sahiragana = 0x3055;
+ t.sakatakana = 0x30b5;
+ t.sakatakanahalfwidth = 0xff7b;
+ t.sallallahoualayhewasallamarabic = 0xfdfa;
+ t.samekh = 0x05e1;
+ t.samekhdagesh = 0xfb41;
+ t.samekhdageshhebrew = 0xfb41;
+ t.samekhhebrew = 0x05e1;
+ t.saraaathai = 0x0e32;
+ t.saraaethai = 0x0e41;
+ t.saraaimaimalaithai = 0x0e44;
+ t.saraaimaimuanthai = 0x0e43;
+ t.saraamthai = 0x0e33;
+ t.saraathai = 0x0e30;
+ t.saraethai = 0x0e40;
+ t.saraiileftthai = 0xf886;
+ t.saraiithai = 0x0e35;
+ t.saraileftthai = 0xf885;
+ t.saraithai = 0x0e34;
+ t.saraothai = 0x0e42;
+ t.saraueeleftthai = 0xf888;
+ t.saraueethai = 0x0e37;
+ t.saraueleftthai = 0xf887;
+ t.sarauethai = 0x0e36;
+ t.sarauthai = 0x0e38;
+ t.sarauuthai = 0x0e39;
+ t.sbopomofo = 0x3119;
+ t.scaron = 0x0161;
+ t.scarondotaccent = 0x1e67;
+ t.scedilla = 0x015f;
+ t.schwa = 0x0259;
+ t.schwacyrillic = 0x04d9;
+ t.schwadieresiscyrillic = 0x04db;
+ t.schwahook = 0x025a;
+ t.scircle = 0x24e2;
+ t.scircumflex = 0x015d;
+ t.scommaaccent = 0x0219;
+ t.sdotaccent = 0x1e61;
+ t.sdotbelow = 0x1e63;
+ t.sdotbelowdotaccent = 0x1e69;
+ t.seagullbelowcmb = 0x033c;
+ t.second = 0x2033;
+ t.secondtonechinese = 0x02ca;
+ t.section = 0x00a7;
+ t.seenarabic = 0x0633;
+ t.seenfinalarabic = 0xfeb2;
+ t.seeninitialarabic = 0xfeb3;
+ t.seenmedialarabic = 0xfeb4;
+ t.segol = 0x05b6;
+ t.segol13 = 0x05b6;
+ t.segol1f = 0x05b6;
+ t.segol2c = 0x05b6;
+ t.segolhebrew = 0x05b6;
+ t.segolnarrowhebrew = 0x05b6;
+ t.segolquarterhebrew = 0x05b6;
+ t.segoltahebrew = 0x0592;
+ t.segolwidehebrew = 0x05b6;
+ t.seharmenian = 0x057d;
+ t.sehiragana = 0x305b;
+ t.sekatakana = 0x30bb;
+ t.sekatakanahalfwidth = 0xff7e;
+ t.semicolon = 0x003b;
+ t.semicolonarabic = 0x061b;
+ t.semicolonmonospace = 0xff1b;
+ t.semicolonsmall = 0xfe54;
+ t.semivoicedmarkkana = 0x309c;
+ t.semivoicedmarkkanahalfwidth = 0xff9f;
+ t.sentisquare = 0x3322;
+ t.sentosquare = 0x3323;
+ t.seven = 0x0037;
+ t.sevenarabic = 0x0667;
+ t.sevenbengali = 0x09ed;
+ t.sevencircle = 0x2466;
+ t.sevencircleinversesansserif = 0x2790;
+ t.sevendeva = 0x096d;
+ t.seveneighths = 0x215e;
+ t.sevengujarati = 0x0aed;
+ t.sevengurmukhi = 0x0a6d;
+ t.sevenhackarabic = 0x0667;
+ t.sevenhangzhou = 0x3027;
+ t.sevenideographicparen = 0x3226;
+ t.seveninferior = 0x2087;
+ t.sevenmonospace = 0xff17;
+ t.sevenoldstyle = 0xf737;
+ t.sevenparen = 0x247a;
+ t.sevenperiod = 0x248e;
+ t.sevenpersian = 0x06f7;
+ t.sevenroman = 0x2176;
+ t.sevensuperior = 0x2077;
+ t.seventeencircle = 0x2470;
+ t.seventeenparen = 0x2484;
+ t.seventeenperiod = 0x2498;
+ t.seventhai = 0x0e57;
+ t.sfthyphen = 0x00ad;
+ t.shaarmenian = 0x0577;
+ t.shabengali = 0x09b6;
+ t.shacyrillic = 0x0448;
+ t.shaddaarabic = 0x0651;
+ t.shaddadammaarabic = 0xfc61;
+ t.shaddadammatanarabic = 0xfc5e;
+ t.shaddafathaarabic = 0xfc60;
+ t.shaddakasraarabic = 0xfc62;
+ t.shaddakasratanarabic = 0xfc5f;
+ t.shade = 0x2592;
+ t.shadedark = 0x2593;
+ t.shadelight = 0x2591;
+ t.shademedium = 0x2592;
+ t.shadeva = 0x0936;
+ t.shagujarati = 0x0ab6;
+ t.shagurmukhi = 0x0a36;
+ t.shalshelethebrew = 0x0593;
+ t.shbopomofo = 0x3115;
+ t.shchacyrillic = 0x0449;
+ t.sheenarabic = 0x0634;
+ t.sheenfinalarabic = 0xfeb6;
+ t.sheeninitialarabic = 0xfeb7;
+ t.sheenmedialarabic = 0xfeb8;
+ t.sheicoptic = 0x03e3;
+ t.sheqel = 0x20aa;
+ t.sheqelhebrew = 0x20aa;
+ t.sheva = 0x05b0;
+ t.sheva115 = 0x05b0;
+ t.sheva15 = 0x05b0;
+ t.sheva22 = 0x05b0;
+ t.sheva2e = 0x05b0;
+ t.shevahebrew = 0x05b0;
+ t.shevanarrowhebrew = 0x05b0;
+ t.shevaquarterhebrew = 0x05b0;
+ t.shevawidehebrew = 0x05b0;
+ t.shhacyrillic = 0x04bb;
+ t.shimacoptic = 0x03ed;
+ t.shin = 0x05e9;
+ t.shindagesh = 0xfb49;
+ t.shindageshhebrew = 0xfb49;
+ t.shindageshshindot = 0xfb2c;
+ t.shindageshshindothebrew = 0xfb2c;
+ t.shindageshsindot = 0xfb2d;
+ t.shindageshsindothebrew = 0xfb2d;
+ t.shindothebrew = 0x05c1;
+ t.shinhebrew = 0x05e9;
+ t.shinshindot = 0xfb2a;
+ t.shinshindothebrew = 0xfb2a;
+ t.shinsindot = 0xfb2b;
+ t.shinsindothebrew = 0xfb2b;
+ t.shook = 0x0282;
+ t.sigma = 0x03c3;
+ t.sigma1 = 0x03c2;
+ t.sigmafinal = 0x03c2;
+ t.sigmalunatesymbolgreek = 0x03f2;
+ t.sihiragana = 0x3057;
+ t.sikatakana = 0x30b7;
+ t.sikatakanahalfwidth = 0xff7c;
+ t.siluqhebrew = 0x05bd;
+ t.siluqlefthebrew = 0x05bd;
+ t.similar = 0x223c;
+ t.sindothebrew = 0x05c2;
+ t.siosacirclekorean = 0x3274;
+ t.siosaparenkorean = 0x3214;
+ t.sioscieuckorean = 0x317e;
+ t.sioscirclekorean = 0x3266;
+ t.sioskiyeokkorean = 0x317a;
+ t.sioskorean = 0x3145;
+ t.siosnieunkorean = 0x317b;
+ t.siosparenkorean = 0x3206;
+ t.siospieupkorean = 0x317d;
+ t.siostikeutkorean = 0x317c;
+ t.six = 0x0036;
+ t.sixarabic = 0x0666;
+ t.sixbengali = 0x09ec;
+ t.sixcircle = 0x2465;
+ t.sixcircleinversesansserif = 0x278f;
+ t.sixdeva = 0x096c;
+ t.sixgujarati = 0x0aec;
+ t.sixgurmukhi = 0x0a6c;
+ t.sixhackarabic = 0x0666;
+ t.sixhangzhou = 0x3026;
+ t.sixideographicparen = 0x3225;
+ t.sixinferior = 0x2086;
+ t.sixmonospace = 0xff16;
+ t.sixoldstyle = 0xf736;
+ t.sixparen = 0x2479;
+ t.sixperiod = 0x248d;
+ t.sixpersian = 0x06f6;
+ t.sixroman = 0x2175;
+ t.sixsuperior = 0x2076;
+ t.sixteencircle = 0x246f;
+ t.sixteencurrencydenominatorbengali = 0x09f9;
+ t.sixteenparen = 0x2483;
+ t.sixteenperiod = 0x2497;
+ t.sixthai = 0x0e56;
+ t.slash = 0x002f;
+ t.slashmonospace = 0xff0f;
+ t.slong = 0x017f;
+ t.slongdotaccent = 0x1e9b;
+ t.smileface = 0x263a;
+ t.smonospace = 0xff53;
+ t.sofpasuqhebrew = 0x05c3;
+ t.softhyphen = 0x00ad;
+ t.softsigncyrillic = 0x044c;
+ t.sohiragana = 0x305d;
+ t.sokatakana = 0x30bd;
+ t.sokatakanahalfwidth = 0xff7f;
+ t.soliduslongoverlaycmb = 0x0338;
+ t.solidusshortoverlaycmb = 0x0337;
+ t.sorusithai = 0x0e29;
+ t.sosalathai = 0x0e28;
+ t.sosothai = 0x0e0b;
+ t.sosuathai = 0x0e2a;
+ t.space = 0x0020;
+ t.spacehackarabic = 0x0020;
+ t.spade = 0x2660;
+ t.spadesuitblack = 0x2660;
+ t.spadesuitwhite = 0x2664;
+ t.sparen = 0x24ae;
+ t.squarebelowcmb = 0x033b;
+ t.squarecc = 0x33c4;
+ t.squarecm = 0x339d;
+ t.squarediagonalcrosshatchfill = 0x25a9;
+ t.squarehorizontalfill = 0x25a4;
+ t.squarekg = 0x338f;
+ t.squarekm = 0x339e;
+ t.squarekmcapital = 0x33ce;
+ t.squareln = 0x33d1;
+ t.squarelog = 0x33d2;
+ t.squaremg = 0x338e;
+ t.squaremil = 0x33d5;
+ t.squaremm = 0x339c;
+ t.squaremsquared = 0x33a1;
+ t.squareorthogonalcrosshatchfill = 0x25a6;
+ t.squareupperlefttolowerrightfill = 0x25a7;
+ t.squareupperrighttolowerleftfill = 0x25a8;
+ t.squareverticalfill = 0x25a5;
+ t.squarewhitewithsmallblack = 0x25a3;
+ t.srsquare = 0x33db;
+ t.ssabengali = 0x09b7;
+ t.ssadeva = 0x0937;
+ t.ssagujarati = 0x0ab7;
+ t.ssangcieuckorean = 0x3149;
+ t.ssanghieuhkorean = 0x3185;
+ t.ssangieungkorean = 0x3180;
+ t.ssangkiyeokkorean = 0x3132;
+ t.ssangnieunkorean = 0x3165;
+ t.ssangpieupkorean = 0x3143;
+ t.ssangsioskorean = 0x3146;
+ t.ssangtikeutkorean = 0x3138;
+ t.ssuperior = 0xf6f2;
+ t.sterling = 0x00a3;
+ t.sterlingmonospace = 0xffe1;
+ t.strokelongoverlaycmb = 0x0336;
+ t.strokeshortoverlaycmb = 0x0335;
+ t.subset = 0x2282;
+ t.subsetnotequal = 0x228a;
+ t.subsetorequal = 0x2286;
+ t.succeeds = 0x227b;
+ t.suchthat = 0x220b;
+ t.suhiragana = 0x3059;
+ t.sukatakana = 0x30b9;
+ t.sukatakanahalfwidth = 0xff7d;
+ t.sukunarabic = 0x0652;
+ t.summation = 0x2211;
+ t.sun = 0x263c;
+ t.superset = 0x2283;
+ t.supersetnotequal = 0x228b;
+ t.supersetorequal = 0x2287;
+ t.svsquare = 0x33dc;
+ t.syouwaerasquare = 0x337c;
+ t.t = 0x0074;
+ t.tabengali = 0x09a4;
+ t.tackdown = 0x22a4;
+ t.tackleft = 0x22a3;
+ t.tadeva = 0x0924;
+ t.tagujarati = 0x0aa4;
+ t.tagurmukhi = 0x0a24;
+ t.taharabic = 0x0637;
+ t.tahfinalarabic = 0xfec2;
+ t.tahinitialarabic = 0xfec3;
+ t.tahiragana = 0x305f;
+ t.tahmedialarabic = 0xfec4;
+ t.taisyouerasquare = 0x337d;
+ t.takatakana = 0x30bf;
+ t.takatakanahalfwidth = 0xff80;
+ t.tatweelarabic = 0x0640;
+ t.tau = 0x03c4;
+ t.tav = 0x05ea;
+ t.tavdages = 0xfb4a;
+ t.tavdagesh = 0xfb4a;
+ t.tavdageshhebrew = 0xfb4a;
+ t.tavhebrew = 0x05ea;
+ t.tbar = 0x0167;
+ t.tbopomofo = 0x310a;
+ t.tcaron = 0x0165;
+ t.tccurl = 0x02a8;
+ t.tcedilla = 0x0163;
+ t.tcheharabic = 0x0686;
+ t.tchehfinalarabic = 0xfb7b;
+ t.tchehinitialarabic = 0xfb7c;
+ t.tchehmedialarabic = 0xfb7d;
+ t.tcircle = 0x24e3;
+ t.tcircumflexbelow = 0x1e71;
+ t.tcommaaccent = 0x0163;
+ t.tdieresis = 0x1e97;
+ t.tdotaccent = 0x1e6b;
+ t.tdotbelow = 0x1e6d;
+ t.tecyrillic = 0x0442;
+ t.tedescendercyrillic = 0x04ad;
+ t.teharabic = 0x062a;
+ t.tehfinalarabic = 0xfe96;
+ t.tehhahinitialarabic = 0xfca2;
+ t.tehhahisolatedarabic = 0xfc0c;
+ t.tehinitialarabic = 0xfe97;
+ t.tehiragana = 0x3066;
+ t.tehjeeminitialarabic = 0xfca1;
+ t.tehjeemisolatedarabic = 0xfc0b;
+ t.tehmarbutaarabic = 0x0629;
+ t.tehmarbutafinalarabic = 0xfe94;
+ t.tehmedialarabic = 0xfe98;
+ t.tehmeeminitialarabic = 0xfca4;
+ t.tehmeemisolatedarabic = 0xfc0e;
+ t.tehnoonfinalarabic = 0xfc73;
+ t.tekatakana = 0x30c6;
+ t.tekatakanahalfwidth = 0xff83;
+ t.telephone = 0x2121;
+ t.telephoneblack = 0x260e;
+ t.telishagedolahebrew = 0x05a0;
+ t.telishaqetanahebrew = 0x05a9;
+ t.tencircle = 0x2469;
+ t.tenideographicparen = 0x3229;
+ t.tenparen = 0x247d;
+ t.tenperiod = 0x2491;
+ t.tenroman = 0x2179;
+ t.tesh = 0x02a7;
+ t.tet = 0x05d8;
+ t.tetdagesh = 0xfb38;
+ t.tetdageshhebrew = 0xfb38;
+ t.tethebrew = 0x05d8;
+ t.tetsecyrillic = 0x04b5;
+ t.tevirhebrew = 0x059b;
+ t.tevirlefthebrew = 0x059b;
+ t.thabengali = 0x09a5;
+ t.thadeva = 0x0925;
+ t.thagujarati = 0x0aa5;
+ t.thagurmukhi = 0x0a25;
+ t.thalarabic = 0x0630;
+ t.thalfinalarabic = 0xfeac;
+ t.thanthakhatlowleftthai = 0xf898;
+ t.thanthakhatlowrightthai = 0xf897;
+ t.thanthakhatthai = 0x0e4c;
+ t.thanthakhatupperleftthai = 0xf896;
+ t.theharabic = 0x062b;
+ t.thehfinalarabic = 0xfe9a;
+ t.thehinitialarabic = 0xfe9b;
+ t.thehmedialarabic = 0xfe9c;
+ t.thereexists = 0x2203;
+ t.therefore = 0x2234;
+ t.theta = 0x03b8;
+ t.theta1 = 0x03d1;
+ t.thetasymbolgreek = 0x03d1;
+ t.thieuthacirclekorean = 0x3279;
+ t.thieuthaparenkorean = 0x3219;
+ t.thieuthcirclekorean = 0x326b;
+ t.thieuthkorean = 0x314c;
+ t.thieuthparenkorean = 0x320b;
+ t.thirteencircle = 0x246c;
+ t.thirteenparen = 0x2480;
+ t.thirteenperiod = 0x2494;
+ t.thonangmonthothai = 0x0e11;
+ t.thook = 0x01ad;
+ t.thophuthaothai = 0x0e12;
+ t.thorn = 0x00fe;
+ t.thothahanthai = 0x0e17;
+ t.thothanthai = 0x0e10;
+ t.thothongthai = 0x0e18;
+ t.thothungthai = 0x0e16;
+ t.thousandcyrillic = 0x0482;
+ t.thousandsseparatorarabic = 0x066c;
+ t.thousandsseparatorpersian = 0x066c;
+ t.three = 0x0033;
+ t.threearabic = 0x0663;
+ t.threebengali = 0x09e9;
+ t.threecircle = 0x2462;
+ t.threecircleinversesansserif = 0x278c;
+ t.threedeva = 0x0969;
+ t.threeeighths = 0x215c;
+ t.threegujarati = 0x0ae9;
+ t.threegurmukhi = 0x0a69;
+ t.threehackarabic = 0x0663;
+ t.threehangzhou = 0x3023;
+ t.threeideographicparen = 0x3222;
+ t.threeinferior = 0x2083;
+ t.threemonospace = 0xff13;
+ t.threenumeratorbengali = 0x09f6;
+ t.threeoldstyle = 0xf733;
+ t.threeparen = 0x2476;
+ t.threeperiod = 0x248a;
+ t.threepersian = 0x06f3;
+ t.threequarters = 0x00be;
+ t.threequartersemdash = 0xf6de;
+ t.threeroman = 0x2172;
+ t.threesuperior = 0x00b3;
+ t.threethai = 0x0e53;
+ t.thzsquare = 0x3394;
+ t.tihiragana = 0x3061;
+ t.tikatakana = 0x30c1;
+ t.tikatakanahalfwidth = 0xff81;
+ t.tikeutacirclekorean = 0x3270;
+ t.tikeutaparenkorean = 0x3210;
+ t.tikeutcirclekorean = 0x3262;
+ t.tikeutkorean = 0x3137;
+ t.tikeutparenkorean = 0x3202;
+ t.tilde = 0x02dc;
+ t.tildebelowcmb = 0x0330;
+ t.tildecmb = 0x0303;
+ t.tildecomb = 0x0303;
+ t.tildedoublecmb = 0x0360;
+ t.tildeoperator = 0x223c;
+ t.tildeoverlaycmb = 0x0334;
+ t.tildeverticalcmb = 0x033e;
+ t.timescircle = 0x2297;
+ t.tipehahebrew = 0x0596;
+ t.tipehalefthebrew = 0x0596;
+ t.tippigurmukhi = 0x0a70;
+ t.titlocyrilliccmb = 0x0483;
+ t.tiwnarmenian = 0x057f;
+ t.tlinebelow = 0x1e6f;
+ t.tmonospace = 0xff54;
+ t.toarmenian = 0x0569;
+ t.tohiragana = 0x3068;
+ t.tokatakana = 0x30c8;
+ t.tokatakanahalfwidth = 0xff84;
+ t.tonebarextrahighmod = 0x02e5;
+ t.tonebarextralowmod = 0x02e9;
+ t.tonebarhighmod = 0x02e6;
+ t.tonebarlowmod = 0x02e8;
+ t.tonebarmidmod = 0x02e7;
+ t.tonefive = 0x01bd;
+ t.tonesix = 0x0185;
+ t.tonetwo = 0x01a8;
+ t.tonos = 0x0384;
+ t.tonsquare = 0x3327;
+ t.topatakthai = 0x0e0f;
+ t.tortoiseshellbracketleft = 0x3014;
+ t.tortoiseshellbracketleftsmall = 0xfe5d;
+ t.tortoiseshellbracketleftvertical = 0xfe39;
+ t.tortoiseshellbracketright = 0x3015;
+ t.tortoiseshellbracketrightsmall = 0xfe5e;
+ t.tortoiseshellbracketrightvertical = 0xfe3a;
+ t.totaothai = 0x0e15;
+ t.tpalatalhook = 0x01ab;
+ t.tparen = 0x24af;
+ t.trademark = 0x2122;
+ t.trademarksans = 0xf8ea;
+ t.trademarkserif = 0xf6db;
+ t.tretroflexhook = 0x0288;
+ t.triagdn = 0x25bc;
+ t.triaglf = 0x25c4;
+ t.triagrt = 0x25ba;
+ t.triagup = 0x25b2;
+ t.ts = 0x02a6;
+ t.tsadi = 0x05e6;
+ t.tsadidagesh = 0xfb46;
+ t.tsadidageshhebrew = 0xfb46;
+ t.tsadihebrew = 0x05e6;
+ t.tsecyrillic = 0x0446;
+ t.tsere = 0x05b5;
+ t.tsere12 = 0x05b5;
+ t.tsere1e = 0x05b5;
+ t.tsere2b = 0x05b5;
+ t.tserehebrew = 0x05b5;
+ t.tserenarrowhebrew = 0x05b5;
+ t.tserequarterhebrew = 0x05b5;
+ t.tserewidehebrew = 0x05b5;
+ t.tshecyrillic = 0x045b;
+ t.tsuperior = 0xf6f3;
+ t.ttabengali = 0x099f;
+ t.ttadeva = 0x091f;
+ t.ttagujarati = 0x0a9f;
+ t.ttagurmukhi = 0x0a1f;
+ t.tteharabic = 0x0679;
+ t.ttehfinalarabic = 0xfb67;
+ t.ttehinitialarabic = 0xfb68;
+ t.ttehmedialarabic = 0xfb69;
+ t.tthabengali = 0x09a0;
+ t.tthadeva = 0x0920;
+ t.tthagujarati = 0x0aa0;
+ t.tthagurmukhi = 0x0a20;
+ t.tturned = 0x0287;
+ t.tuhiragana = 0x3064;
+ t.tukatakana = 0x30c4;
+ t.tukatakanahalfwidth = 0xff82;
+ t.tusmallhiragana = 0x3063;
+ t.tusmallkatakana = 0x30c3;
+ t.tusmallkatakanahalfwidth = 0xff6f;
+ t.twelvecircle = 0x246b;
+ t.twelveparen = 0x247f;
+ t.twelveperiod = 0x2493;
+ t.twelveroman = 0x217b;
+ t.twentycircle = 0x2473;
+ t.twentyhangzhou = 0x5344;
+ t.twentyparen = 0x2487;
+ t.twentyperiod = 0x249b;
+ t.two = 0x0032;
+ t.twoarabic = 0x0662;
+ t.twobengali = 0x09e8;
+ t.twocircle = 0x2461;
+ t.twocircleinversesansserif = 0x278b;
+ t.twodeva = 0x0968;
+ t.twodotenleader = 0x2025;
+ t.twodotleader = 0x2025;
+ t.twodotleadervertical = 0xfe30;
+ t.twogujarati = 0x0ae8;
+ t.twogurmukhi = 0x0a68;
+ t.twohackarabic = 0x0662;
+ t.twohangzhou = 0x3022;
+ t.twoideographicparen = 0x3221;
+ t.twoinferior = 0x2082;
+ t.twomonospace = 0xff12;
+ t.twonumeratorbengali = 0x09f5;
+ t.twooldstyle = 0xf732;
+ t.twoparen = 0x2475;
+ t.twoperiod = 0x2489;
+ t.twopersian = 0x06f2;
+ t.tworoman = 0x2171;
+ t.twostroke = 0x01bb;
+ t.twosuperior = 0x00b2;
+ t.twothai = 0x0e52;
+ t.twothirds = 0x2154;
+ t.u = 0x0075;
+ t.uacute = 0x00fa;
+ t.ubar = 0x0289;
+ t.ubengali = 0x0989;
+ t.ubopomofo = 0x3128;
+ t.ubreve = 0x016d;
+ t.ucaron = 0x01d4;
+ t.ucircle = 0x24e4;
+ t.ucircumflex = 0x00fb;
+ t.ucircumflexbelow = 0x1e77;
+ t.ucyrillic = 0x0443;
+ t.udattadeva = 0x0951;
+ t.udblacute = 0x0171;
+ t.udblgrave = 0x0215;
+ t.udeva = 0x0909;
+ t.udieresis = 0x00fc;
+ t.udieresisacute = 0x01d8;
+ t.udieresisbelow = 0x1e73;
+ t.udieresiscaron = 0x01da;
+ t.udieresiscyrillic = 0x04f1;
+ t.udieresisgrave = 0x01dc;
+ t.udieresismacron = 0x01d6;
+ t.udotbelow = 0x1ee5;
+ t.ugrave = 0x00f9;
+ t.ugujarati = 0x0a89;
+ t.ugurmukhi = 0x0a09;
+ t.uhiragana = 0x3046;
+ t.uhookabove = 0x1ee7;
+ t.uhorn = 0x01b0;
+ t.uhornacute = 0x1ee9;
+ t.uhorndotbelow = 0x1ef1;
+ t.uhorngrave = 0x1eeb;
+ t.uhornhookabove = 0x1eed;
+ t.uhorntilde = 0x1eef;
+ t.uhungarumlaut = 0x0171;
+ t.uhungarumlautcyrillic = 0x04f3;
+ t.uinvertedbreve = 0x0217;
+ t.ukatakana = 0x30a6;
+ t.ukatakanahalfwidth = 0xff73;
+ t.ukcyrillic = 0x0479;
+ t.ukorean = 0x315c;
+ t.umacron = 0x016b;
+ t.umacroncyrillic = 0x04ef;
+ t.umacrondieresis = 0x1e7b;
+ t.umatragurmukhi = 0x0a41;
+ t.umonospace = 0xff55;
+ t.underscore = 0x005f;
+ t.underscoredbl = 0x2017;
+ t.underscoremonospace = 0xff3f;
+ t.underscorevertical = 0xfe33;
+ t.underscorewavy = 0xfe4f;
+ t.union = 0x222a;
+ t.universal = 0x2200;
+ t.uogonek = 0x0173;
+ t.uparen = 0x24b0;
+ t.upblock = 0x2580;
+ t.upperdothebrew = 0x05c4;
+ t.upsilon = 0x03c5;
+ t.upsilondieresis = 0x03cb;
+ t.upsilondieresistonos = 0x03b0;
+ t.upsilonlatin = 0x028a;
+ t.upsilontonos = 0x03cd;
+ t.uptackbelowcmb = 0x031d;
+ t.uptackmod = 0x02d4;
+ t.uragurmukhi = 0x0a73;
+ t.uring = 0x016f;
+ t.ushortcyrillic = 0x045e;
+ t.usmallhiragana = 0x3045;
+ t.usmallkatakana = 0x30a5;
+ t.usmallkatakanahalfwidth = 0xff69;
+ t.ustraightcyrillic = 0x04af;
+ t.ustraightstrokecyrillic = 0x04b1;
+ t.utilde = 0x0169;
+ t.utildeacute = 0x1e79;
+ t.utildebelow = 0x1e75;
+ t.uubengali = 0x098a;
+ t.uudeva = 0x090a;
+ t.uugujarati = 0x0a8a;
+ t.uugurmukhi = 0x0a0a;
+ t.uumatragurmukhi = 0x0a42;
+ t.uuvowelsignbengali = 0x09c2;
+ t.uuvowelsigndeva = 0x0942;
+ t.uuvowelsigngujarati = 0x0ac2;
+ t.uvowelsignbengali = 0x09c1;
+ t.uvowelsigndeva = 0x0941;
+ t.uvowelsigngujarati = 0x0ac1;
+ t.v = 0x0076;
+ t.vadeva = 0x0935;
+ t.vagujarati = 0x0ab5;
+ t.vagurmukhi = 0x0a35;
+ t.vakatakana = 0x30f7;
+ t.vav = 0x05d5;
+ t.vavdagesh = 0xfb35;
+ t.vavdagesh65 = 0xfb35;
+ t.vavdageshhebrew = 0xfb35;
+ t.vavhebrew = 0x05d5;
+ t.vavholam = 0xfb4b;
+ t.vavholamhebrew = 0xfb4b;
+ t.vavvavhebrew = 0x05f0;
+ t.vavyodhebrew = 0x05f1;
+ t.vcircle = 0x24e5;
+ t.vdotbelow = 0x1e7f;
+ t.vecyrillic = 0x0432;
+ t.veharabic = 0x06a4;
+ t.vehfinalarabic = 0xfb6b;
+ t.vehinitialarabic = 0xfb6c;
+ t.vehmedialarabic = 0xfb6d;
+ t.vekatakana = 0x30f9;
+ t.venus = 0x2640;
+ t.verticalbar = 0x007c;
+ t.verticallineabovecmb = 0x030d;
+ t.verticallinebelowcmb = 0x0329;
+ t.verticallinelowmod = 0x02cc;
+ t.verticallinemod = 0x02c8;
+ t.vewarmenian = 0x057e;
+ t.vhook = 0x028b;
+ t.vikatakana = 0x30f8;
+ t.viramabengali = 0x09cd;
+ t.viramadeva = 0x094d;
+ t.viramagujarati = 0x0acd;
+ t.visargabengali = 0x0983;
+ t.visargadeva = 0x0903;
+ t.visargagujarati = 0x0a83;
+ t.vmonospace = 0xff56;
+ t.voarmenian = 0x0578;
+ t.voicediterationhiragana = 0x309e;
+ t.voicediterationkatakana = 0x30fe;
+ t.voicedmarkkana = 0x309b;
+ t.voicedmarkkanahalfwidth = 0xff9e;
+ t.vokatakana = 0x30fa;
+ t.vparen = 0x24b1;
+ t.vtilde = 0x1e7d;
+ t.vturned = 0x028c;
+ t.vuhiragana = 0x3094;
+ t.vukatakana = 0x30f4;
+ t.w = 0x0077;
+ t.wacute = 0x1e83;
+ t.waekorean = 0x3159;
+ t.wahiragana = 0x308f;
+ t.wakatakana = 0x30ef;
+ t.wakatakanahalfwidth = 0xff9c;
+ t.wakorean = 0x3158;
+ t.wasmallhiragana = 0x308e;
+ t.wasmallkatakana = 0x30ee;
+ t.wattosquare = 0x3357;
+ t.wavedash = 0x301c;
+ t.wavyunderscorevertical = 0xfe34;
+ t.wawarabic = 0x0648;
+ t.wawfinalarabic = 0xfeee;
+ t.wawhamzaabovearabic = 0x0624;
+ t.wawhamzaabovefinalarabic = 0xfe86;
+ t.wbsquare = 0x33dd;
+ t.wcircle = 0x24e6;
+ t.wcircumflex = 0x0175;
+ t.wdieresis = 0x1e85;
+ t.wdotaccent = 0x1e87;
+ t.wdotbelow = 0x1e89;
+ t.wehiragana = 0x3091;
+ t.weierstrass = 0x2118;
+ t.wekatakana = 0x30f1;
+ t.wekorean = 0x315e;
+ t.weokorean = 0x315d;
+ t.wgrave = 0x1e81;
+ t.whitebullet = 0x25e6;
+ t.whitecircle = 0x25cb;
+ t.whitecircleinverse = 0x25d9;
+ t.whitecornerbracketleft = 0x300e;
+ t.whitecornerbracketleftvertical = 0xfe43;
+ t.whitecornerbracketright = 0x300f;
+ t.whitecornerbracketrightvertical = 0xfe44;
+ t.whitediamond = 0x25c7;
+ t.whitediamondcontainingblacksmalldiamond = 0x25c8;
+ t.whitedownpointingsmalltriangle = 0x25bf;
+ t.whitedownpointingtriangle = 0x25bd;
+ t.whiteleftpointingsmalltriangle = 0x25c3;
+ t.whiteleftpointingtriangle = 0x25c1;
+ t.whitelenticularbracketleft = 0x3016;
+ t.whitelenticularbracketright = 0x3017;
+ t.whiterightpointingsmalltriangle = 0x25b9;
+ t.whiterightpointingtriangle = 0x25b7;
+ t.whitesmallsquare = 0x25ab;
+ t.whitesmilingface = 0x263a;
+ t.whitesquare = 0x25a1;
+ t.whitestar = 0x2606;
+ t.whitetelephone = 0x260f;
+ t.whitetortoiseshellbracketleft = 0x3018;
+ t.whitetortoiseshellbracketright = 0x3019;
+ t.whiteuppointingsmalltriangle = 0x25b5;
+ t.whiteuppointingtriangle = 0x25b3;
+ t.wihiragana = 0x3090;
+ t.wikatakana = 0x30f0;
+ t.wikorean = 0x315f;
+ t.wmonospace = 0xff57;
+ t.wohiragana = 0x3092;
+ t.wokatakana = 0x30f2;
+ t.wokatakanahalfwidth = 0xff66;
+ t.won = 0x20a9;
+ t.wonmonospace = 0xffe6;
+ t.wowaenthai = 0x0e27;
+ t.wparen = 0x24b2;
+ t.wring = 0x1e98;
+ t.wsuperior = 0x02b7;
+ t.wturned = 0x028d;
+ t.wynn = 0x01bf;
+ t.x = 0x0078;
+ t.xabovecmb = 0x033d;
+ t.xbopomofo = 0x3112;
+ t.xcircle = 0x24e7;
+ t.xdieresis = 0x1e8d;
+ t.xdotaccent = 0x1e8b;
+ t.xeharmenian = 0x056d;
+ t.xi = 0x03be;
+ t.xmonospace = 0xff58;
+ t.xparen = 0x24b3;
+ t.xsuperior = 0x02e3;
+ t.y = 0x0079;
+ t.yaadosquare = 0x334e;
+ t.yabengali = 0x09af;
+ t.yacute = 0x00fd;
+ t.yadeva = 0x092f;
+ t.yaekorean = 0x3152;
+ t.yagujarati = 0x0aaf;
+ t.yagurmukhi = 0x0a2f;
+ t.yahiragana = 0x3084;
+ t.yakatakana = 0x30e4;
+ t.yakatakanahalfwidth = 0xff94;
+ t.yakorean = 0x3151;
+ t.yamakkanthai = 0x0e4e;
+ t.yasmallhiragana = 0x3083;
+ t.yasmallkatakana = 0x30e3;
+ t.yasmallkatakanahalfwidth = 0xff6c;
+ t.yatcyrillic = 0x0463;
+ t.ycircle = 0x24e8;
+ t.ycircumflex = 0x0177;
+ t.ydieresis = 0x00ff;
+ t.ydotaccent = 0x1e8f;
+ t.ydotbelow = 0x1ef5;
+ t.yeharabic = 0x064a;
+ t.yehbarreearabic = 0x06d2;
+ t.yehbarreefinalarabic = 0xfbaf;
+ t.yehfinalarabic = 0xfef2;
+ t.yehhamzaabovearabic = 0x0626;
+ t.yehhamzaabovefinalarabic = 0xfe8a;
+ t.yehhamzaaboveinitialarabic = 0xfe8b;
+ t.yehhamzaabovemedialarabic = 0xfe8c;
+ t.yehinitialarabic = 0xfef3;
+ t.yehmedialarabic = 0xfef4;
+ t.yehmeeminitialarabic = 0xfcdd;
+ t.yehmeemisolatedarabic = 0xfc58;
+ t.yehnoonfinalarabic = 0xfc94;
+ t.yehthreedotsbelowarabic = 0x06d1;
+ t.yekorean = 0x3156;
+ t.yen = 0x00a5;
+ t.yenmonospace = 0xffe5;
+ t.yeokorean = 0x3155;
+ t.yeorinhieuhkorean = 0x3186;
+ t.yerahbenyomohebrew = 0x05aa;
+ t.yerahbenyomolefthebrew = 0x05aa;
+ t.yericyrillic = 0x044b;
+ t.yerudieresiscyrillic = 0x04f9;
+ t.yesieungkorean = 0x3181;
+ t.yesieungpansioskorean = 0x3183;
+ t.yesieungsioskorean = 0x3182;
+ t.yetivhebrew = 0x059a;
+ t.ygrave = 0x1ef3;
+ t.yhook = 0x01b4;
+ t.yhookabove = 0x1ef7;
+ t.yiarmenian = 0x0575;
+ t.yicyrillic = 0x0457;
+ t.yikorean = 0x3162;
+ t.yinyang = 0x262f;
+ t.yiwnarmenian = 0x0582;
+ t.ymonospace = 0xff59;
+ t.yod = 0x05d9;
+ t.yoddagesh = 0xfb39;
+ t.yoddageshhebrew = 0xfb39;
+ t.yodhebrew = 0x05d9;
+ t.yodyodhebrew = 0x05f2;
+ t.yodyodpatahhebrew = 0xfb1f;
+ t.yohiragana = 0x3088;
+ t.yoikorean = 0x3189;
+ t.yokatakana = 0x30e8;
+ t.yokatakanahalfwidth = 0xff96;
+ t.yokorean = 0x315b;
+ t.yosmallhiragana = 0x3087;
+ t.yosmallkatakana = 0x30e7;
+ t.yosmallkatakanahalfwidth = 0xff6e;
+ t.yotgreek = 0x03f3;
+ t.yoyaekorean = 0x3188;
+ t.yoyakorean = 0x3187;
+ t.yoyakthai = 0x0e22;
+ t.yoyingthai = 0x0e0d;
+ t.yparen = 0x24b4;
+ t.ypogegrammeni = 0x037a;
+ t.ypogegrammenigreekcmb = 0x0345;
+ t.yr = 0x01a6;
+ t.yring = 0x1e99;
+ t.ysuperior = 0x02b8;
+ t.ytilde = 0x1ef9;
+ t.yturned = 0x028e;
+ t.yuhiragana = 0x3086;
+ t.yuikorean = 0x318c;
+ t.yukatakana = 0x30e6;
+ t.yukatakanahalfwidth = 0xff95;
+ t.yukorean = 0x3160;
+ t.yusbigcyrillic = 0x046b;
+ t.yusbigiotifiedcyrillic = 0x046d;
+ t.yuslittlecyrillic = 0x0467;
+ t.yuslittleiotifiedcyrillic = 0x0469;
+ t.yusmallhiragana = 0x3085;
+ t.yusmallkatakana = 0x30e5;
+ t.yusmallkatakanahalfwidth = 0xff6d;
+ t.yuyekorean = 0x318b;
+ t.yuyeokorean = 0x318a;
+ t.yyabengali = 0x09df;
+ t.yyadeva = 0x095f;
+ t.z = 0x007a;
+ t.zaarmenian = 0x0566;
+ t.zacute = 0x017a;
+ t.zadeva = 0x095b;
+ t.zagurmukhi = 0x0a5b;
+ t.zaharabic = 0x0638;
+ t.zahfinalarabic = 0xfec6;
+ t.zahinitialarabic = 0xfec7;
+ t.zahiragana = 0x3056;
+ t.zahmedialarabic = 0xfec8;
+ t.zainarabic = 0x0632;
+ t.zainfinalarabic = 0xfeb0;
+ t.zakatakana = 0x30b6;
+ t.zaqefgadolhebrew = 0x0595;
+ t.zaqefqatanhebrew = 0x0594;
+ t.zarqahebrew = 0x0598;
+ t.zayin = 0x05d6;
+ t.zayindagesh = 0xfb36;
+ t.zayindageshhebrew = 0xfb36;
+ t.zayinhebrew = 0x05d6;
+ t.zbopomofo = 0x3117;
+ t.zcaron = 0x017e;
+ t.zcircle = 0x24e9;
+ t.zcircumflex = 0x1e91;
+ t.zcurl = 0x0291;
+ t.zdot = 0x017c;
+ t.zdotaccent = 0x017c;
+ t.zdotbelow = 0x1e93;
+ t.zecyrillic = 0x0437;
+ t.zedescendercyrillic = 0x0499;
+ t.zedieresiscyrillic = 0x04df;
+ t.zehiragana = 0x305c;
+ t.zekatakana = 0x30bc;
+ t.zero = 0x0030;
+ t.zeroarabic = 0x0660;
+ t.zerobengali = 0x09e6;
+ t.zerodeva = 0x0966;
+ t.zerogujarati = 0x0ae6;
+ t.zerogurmukhi = 0x0a66;
+ t.zerohackarabic = 0x0660;
+ t.zeroinferior = 0x2080;
+ t.zeromonospace = 0xff10;
+ t.zerooldstyle = 0xf730;
+ t.zeropersian = 0x06f0;
+ t.zerosuperior = 0x2070;
+ t.zerothai = 0x0e50;
+ t.zerowidthjoiner = 0xfeff;
+ t.zerowidthnonjoiner = 0x200c;
+ t.zerowidthspace = 0x200b;
+ t.zeta = 0x03b6;
+ t.zhbopomofo = 0x3113;
+ t.zhearmenian = 0x056a;
+ t.zhebrevecyrillic = 0x04c2;
+ t.zhecyrillic = 0x0436;
+ t.zhedescendercyrillic = 0x0497;
+ t.zhedieresiscyrillic = 0x04dd;
+ t.zihiragana = 0x3058;
+ t.zikatakana = 0x30b8;
+ t.zinorhebrew = 0x05ae;
+ t.zlinebelow = 0x1e95;
+ t.zmonospace = 0xff5a;
+ t.zohiragana = 0x305e;
+ t.zokatakana = 0x30be;
+ t.zparen = 0x24b5;
+ t.zretroflexhook = 0x0290;
+ t.zstroke = 0x01b6;
+ t.zuhiragana = 0x305a;
+ t.zukatakana = 0x30ba;
+ t[".notdef"] = 0x0000;
+ t.angbracketleftbig = 0x2329;
+ t.angbracketleftBig = 0x2329;
+ t.angbracketleftbigg = 0x2329;
+ t.angbracketleftBigg = 0x2329;
+ t.angbracketrightBig = 0x232a;
+ t.angbracketrightbig = 0x232a;
+ t.angbracketrightBigg = 0x232a;
+ t.angbracketrightbigg = 0x232a;
+ t.arrowhookleft = 0x21aa;
+ t.arrowhookright = 0x21a9;
+ t.arrowlefttophalf = 0x21bc;
+ t.arrowleftbothalf = 0x21bd;
+ t.arrownortheast = 0x2197;
+ t.arrownorthwest = 0x2196;
+ t.arrowrighttophalf = 0x21c0;
+ t.arrowrightbothalf = 0x21c1;
+ t.arrowsoutheast = 0x2198;
+ t.arrowsouthwest = 0x2199;
+ t.backslashbig = 0x2216;
+ t.backslashBig = 0x2216;
+ t.backslashBigg = 0x2216;
+ t.backslashbigg = 0x2216;
+ t.bardbl = 0x2016;
+ t.bracehtipdownleft = 0xfe37;
+ t.bracehtipdownright = 0xfe37;
+ t.bracehtipupleft = 0xfe38;
+ t.bracehtipupright = 0xfe38;
+ t.braceleftBig = 0x007b;
+ t.braceleftbig = 0x007b;
+ t.braceleftbigg = 0x007b;
+ t.braceleftBigg = 0x007b;
+ t.bracerightBig = 0x007d;
+ t.bracerightbig = 0x007d;
+ t.bracerightbigg = 0x007d;
+ t.bracerightBigg = 0x007d;
+ t.bracketleftbig = 0x005b;
+ t.bracketleftBig = 0x005b;
+ t.bracketleftbigg = 0x005b;
+ t.bracketleftBigg = 0x005b;
+ t.bracketrightBig = 0x005d;
+ t.bracketrightbig = 0x005d;
+ t.bracketrightbigg = 0x005d;
+ t.bracketrightBigg = 0x005d;
+ t.ceilingleftbig = 0x2308;
+ t.ceilingleftBig = 0x2308;
+ t.ceilingleftBigg = 0x2308;
+ t.ceilingleftbigg = 0x2308;
+ t.ceilingrightbig = 0x2309;
+ t.ceilingrightBig = 0x2309;
+ t.ceilingrightbigg = 0x2309;
+ t.ceilingrightBigg = 0x2309;
+ t.circledotdisplay = 0x2299;
+ t.circledottext = 0x2299;
+ t.circlemultiplydisplay = 0x2297;
+ t.circlemultiplytext = 0x2297;
+ t.circleplusdisplay = 0x2295;
+ t.circleplustext = 0x2295;
+ t.contintegraldisplay = 0x222e;
+ t.contintegraltext = 0x222e;
+ t.coproductdisplay = 0x2210;
+ t.coproducttext = 0x2210;
+ t.floorleftBig = 0x230a;
+ t.floorleftbig = 0x230a;
+ t.floorleftbigg = 0x230a;
+ t.floorleftBigg = 0x230a;
+ t.floorrightbig = 0x230b;
+ t.floorrightBig = 0x230b;
+ t.floorrightBigg = 0x230b;
+ t.floorrightbigg = 0x230b;
+ t.hatwide = 0x0302;
+ t.hatwider = 0x0302;
+ t.hatwidest = 0x0302;
+ t.intercal = 0x1d40;
+ t.integraldisplay = 0x222b;
+ t.integraltext = 0x222b;
+ t.intersectiondisplay = 0x22c2;
+ t.intersectiontext = 0x22c2;
+ t.logicalanddisplay = 0x2227;
+ t.logicalandtext = 0x2227;
+ t.logicalordisplay = 0x2228;
+ t.logicalortext = 0x2228;
+ t.parenleftBig = 0x0028;
+ t.parenleftbig = 0x0028;
+ t.parenleftBigg = 0x0028;
+ t.parenleftbigg = 0x0028;
+ t.parenrightBig = 0x0029;
+ t.parenrightbig = 0x0029;
+ t.parenrightBigg = 0x0029;
+ t.parenrightbigg = 0x0029;
+ t.prime = 0x2032;
+ t.productdisplay = 0x220f;
+ t.producttext = 0x220f;
+ t.radicalbig = 0x221a;
+ t.radicalBig = 0x221a;
+ t.radicalBigg = 0x221a;
+ t.radicalbigg = 0x221a;
+ t.radicalbt = 0x221a;
+ t.radicaltp = 0x221a;
+ t.radicalvertex = 0x221a;
+ t.slashbig = 0x002f;
+ t.slashBig = 0x002f;
+ t.slashBigg = 0x002f;
+ t.slashbigg = 0x002f;
+ t.summationdisplay = 0x2211;
+ t.summationtext = 0x2211;
+ t.tildewide = 0x02dc;
+ t.tildewider = 0x02dc;
+ t.tildewidest = 0x02dc;
+ t.uniondisplay = 0x22c3;
+ t.unionmultidisplay = 0x228e;
+ t.unionmultitext = 0x228e;
+ t.unionsqdisplay = 0x2294;
+ t.unionsqtext = 0x2294;
+ t.uniontext = 0x22c3;
+ t.vextenddouble = 0x2225;
+ t.vextendsingle = 0x2223;
+});
+var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {
+ t.space = 0x0020;
+ t.a1 = 0x2701;
+ t.a2 = 0x2702;
+ t.a202 = 0x2703;
+ t.a3 = 0x2704;
+ t.a4 = 0x260e;
+ t.a5 = 0x2706;
+ t.a119 = 0x2707;
+ t.a118 = 0x2708;
+ t.a117 = 0x2709;
+ t.a11 = 0x261b;
+ t.a12 = 0x261e;
+ t.a13 = 0x270c;
+ t.a14 = 0x270d;
+ t.a15 = 0x270e;
+ t.a16 = 0x270f;
+ t.a105 = 0x2710;
+ t.a17 = 0x2711;
+ t.a18 = 0x2712;
+ t.a19 = 0x2713;
+ t.a20 = 0x2714;
+ t.a21 = 0x2715;
+ t.a22 = 0x2716;
+ t.a23 = 0x2717;
+ t.a24 = 0x2718;
+ t.a25 = 0x2719;
+ t.a26 = 0x271a;
+ t.a27 = 0x271b;
+ t.a28 = 0x271c;
+ t.a6 = 0x271d;
+ t.a7 = 0x271e;
+ t.a8 = 0x271f;
+ t.a9 = 0x2720;
+ t.a10 = 0x2721;
+ t.a29 = 0x2722;
+ t.a30 = 0x2723;
+ t.a31 = 0x2724;
+ t.a32 = 0x2725;
+ t.a33 = 0x2726;
+ t.a34 = 0x2727;
+ t.a35 = 0x2605;
+ t.a36 = 0x2729;
+ t.a37 = 0x272a;
+ t.a38 = 0x272b;
+ t.a39 = 0x272c;
+ t.a40 = 0x272d;
+ t.a41 = 0x272e;
+ t.a42 = 0x272f;
+ t.a43 = 0x2730;
+ t.a44 = 0x2731;
+ t.a45 = 0x2732;
+ t.a46 = 0x2733;
+ t.a47 = 0x2734;
+ t.a48 = 0x2735;
+ t.a49 = 0x2736;
+ t.a50 = 0x2737;
+ t.a51 = 0x2738;
+ t.a52 = 0x2739;
+ t.a53 = 0x273a;
+ t.a54 = 0x273b;
+ t.a55 = 0x273c;
+ t.a56 = 0x273d;
+ t.a57 = 0x273e;
+ t.a58 = 0x273f;
+ t.a59 = 0x2740;
+ t.a60 = 0x2741;
+ t.a61 = 0x2742;
+ t.a62 = 0x2743;
+ t.a63 = 0x2744;
+ t.a64 = 0x2745;
+ t.a65 = 0x2746;
+ t.a66 = 0x2747;
+ t.a67 = 0x2748;
+ t.a68 = 0x2749;
+ t.a69 = 0x274a;
+ t.a70 = 0x274b;
+ t.a71 = 0x25cf;
+ t.a72 = 0x274d;
+ t.a73 = 0x25a0;
+ t.a74 = 0x274f;
+ t.a203 = 0x2750;
+ t.a75 = 0x2751;
+ t.a204 = 0x2752;
+ t.a76 = 0x25b2;
+ t.a77 = 0x25bc;
+ t.a78 = 0x25c6;
+ t.a79 = 0x2756;
+ t.a81 = 0x25d7;
+ t.a82 = 0x2758;
+ t.a83 = 0x2759;
+ t.a84 = 0x275a;
+ t.a97 = 0x275b;
+ t.a98 = 0x275c;
+ t.a99 = 0x275d;
+ t.a100 = 0x275e;
+ t.a101 = 0x2761;
+ t.a102 = 0x2762;
+ t.a103 = 0x2763;
+ t.a104 = 0x2764;
+ t.a106 = 0x2765;
+ t.a107 = 0x2766;
+ t.a108 = 0x2767;
+ t.a112 = 0x2663;
+ t.a111 = 0x2666;
+ t.a110 = 0x2665;
+ t.a109 = 0x2660;
+ t.a120 = 0x2460;
+ t.a121 = 0x2461;
+ t.a122 = 0x2462;
+ t.a123 = 0x2463;
+ t.a124 = 0x2464;
+ t.a125 = 0x2465;
+ t.a126 = 0x2466;
+ t.a127 = 0x2467;
+ t.a128 = 0x2468;
+ t.a129 = 0x2469;
+ t.a130 = 0x2776;
+ t.a131 = 0x2777;
+ t.a132 = 0x2778;
+ t.a133 = 0x2779;
+ t.a134 = 0x277a;
+ t.a135 = 0x277b;
+ t.a136 = 0x277c;
+ t.a137 = 0x277d;
+ t.a138 = 0x277e;
+ t.a139 = 0x277f;
+ t.a140 = 0x2780;
+ t.a141 = 0x2781;
+ t.a142 = 0x2782;
+ t.a143 = 0x2783;
+ t.a144 = 0x2784;
+ t.a145 = 0x2785;
+ t.a146 = 0x2786;
+ t.a147 = 0x2787;
+ t.a148 = 0x2788;
+ t.a149 = 0x2789;
+ t.a150 = 0x278a;
+ t.a151 = 0x278b;
+ t.a152 = 0x278c;
+ t.a153 = 0x278d;
+ t.a154 = 0x278e;
+ t.a155 = 0x278f;
+ t.a156 = 0x2790;
+ t.a157 = 0x2791;
+ t.a158 = 0x2792;
+ t.a159 = 0x2793;
+ t.a160 = 0x2794;
+ t.a161 = 0x2192;
+ t.a163 = 0x2194;
+ t.a164 = 0x2195;
+ t.a196 = 0x2798;
+ t.a165 = 0x2799;
+ t.a192 = 0x279a;
+ t.a166 = 0x279b;
+ t.a167 = 0x279c;
+ t.a168 = 0x279d;
+ t.a169 = 0x279e;
+ t.a170 = 0x279f;
+ t.a171 = 0x27a0;
+ t.a172 = 0x27a1;
+ t.a173 = 0x27a2;
+ t.a162 = 0x27a3;
+ t.a174 = 0x27a4;
+ t.a175 = 0x27a5;
+ t.a176 = 0x27a6;
+ t.a177 = 0x27a7;
+ t.a178 = 0x27a8;
+ t.a179 = 0x27a9;
+ t.a193 = 0x27aa;
+ t.a180 = 0x27ab;
+ t.a199 = 0x27ac;
+ t.a181 = 0x27ad;
+ t.a200 = 0x27ae;
+ t.a182 = 0x27af;
+ t.a201 = 0x27b1;
+ t.a183 = 0x27b2;
+ t.a184 = 0x27b3;
+ t.a197 = 0x27b4;
+ t.a185 = 0x27b5;
+ t.a194 = 0x27b6;
+ t.a198 = 0x27b7;
+ t.a186 = 0x27b8;
+ t.a195 = 0x27b9;
+ t.a187 = 0x27ba;
+ t.a188 = 0x27bb;
+ t.a189 = 0x27bc;
+ t.a190 = 0x27bd;
+ t.a191 = 0x27be;
+ t.a89 = 0x2768;
+ t.a90 = 0x2769;
+ t.a93 = 0x276a;
+ t.a94 = 0x276b;
+ t.a91 = 0x276c;
+ t.a92 = 0x276d;
+ t.a205 = 0x276e;
+ t.a85 = 0x276f;
+ t.a206 = 0x2770;
+ t.a86 = 0x2771;
+ t.a87 = 0x2772;
+ t.a88 = 0x2773;
+ t.a95 = 0x2774;
+ t.a96 = 0x2775;
+ t[".notdef"] = 0x0000;
+});
+exports.getGlyphsUnicode = getGlyphsUnicode;
+exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode;
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = exports.getNonStdFontMap = exports.getStdFontMap = void 0;
+
+var _core_utils = __w_pdfjs_require__(8);
+
+const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.ArialNarrow = "Helvetica";
+ t["ArialNarrow-Bold"] = "Helvetica-Bold";
+ t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique";
+ t["ArialNarrow-Italic"] = "Helvetica-Oblique";
+ t.ArialBlack = "Helvetica";
+ t["ArialBlack-Bold"] = "Helvetica-Bold";
+ t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique";
+ t["ArialBlack-Italic"] = "Helvetica-Oblique";
+ t["Arial-Black"] = "Helvetica";
+ t["Arial-Black-Bold"] = "Helvetica-Bold";
+ t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique";
+ t["Arial-Black-Italic"] = "Helvetica-Oblique";
+ t.Arial = "Helvetica";
+ t["Arial-Bold"] = "Helvetica-Bold";
+ t["Arial-BoldItalic"] = "Helvetica-BoldOblique";
+ t["Arial-Italic"] = "Helvetica-Oblique";
+ t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique";
+ t["Arial-BoldMT"] = "Helvetica-Bold";
+ t["Arial-ItalicMT"] = "Helvetica-Oblique";
+ t.ArialMT = "Helvetica";
+ t["Courier-Bold"] = "Courier-Bold";
+ t["Courier-BoldItalic"] = "Courier-BoldOblique";
+ t["Courier-Italic"] = "Courier-Oblique";
+ t.CourierNew = "Courier";
+ t["CourierNew-Bold"] = "Courier-Bold";
+ t["CourierNew-BoldItalic"] = "Courier-BoldOblique";
+ t["CourierNew-Italic"] = "Courier-Oblique";
+ t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique";
+ t["CourierNewPS-BoldMT"] = "Courier-Bold";
+ t["CourierNewPS-ItalicMT"] = "Courier-Oblique";
+ t.CourierNewPSMT = "Courier";
+ t.Helvetica = "Helvetica";
+ t["Helvetica-Bold"] = "Helvetica-Bold";
+ t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique";
+ t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique";
+ t["Helvetica-Italic"] = "Helvetica-Oblique";
+ t["Helvetica-Oblique"] = "Helvetica-Oblique";
+ t["Symbol-Bold"] = "Symbol";
+ t["Symbol-BoldItalic"] = "Symbol";
+ t["Symbol-Italic"] = "Symbol";
+ t.TimesNewRoman = "Times-Roman";
+ t["TimesNewRoman-Bold"] = "Times-Bold";
+ t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic";
+ t["TimesNewRoman-Italic"] = "Times-Italic";
+ t.TimesNewRomanPS = "Times-Roman";
+ t["TimesNewRomanPS-Bold"] = "Times-Bold";
+ t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic";
+ t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic";
+ t["TimesNewRomanPS-BoldMT"] = "Times-Bold";
+ t["TimesNewRomanPS-Italic"] = "Times-Italic";
+ t["TimesNewRomanPS-ItalicMT"] = "Times-Italic";
+ t.TimesNewRomanPSMT = "Times-Roman";
+ t["TimesNewRomanPSMT-Bold"] = "Times-Bold";
+ t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic";
+ t["TimesNewRomanPSMT-Italic"] = "Times-Italic";
+});
+exports.getStdFontMap = getStdFontMap;
+const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.Calibri = "Helvetica";
+ t["Calibri-Bold"] = "Helvetica-Bold";
+ t["Calibri-BoldItalic"] = "Helvetica-BoldOblique";
+ t["Calibri-Italic"] = "Helvetica-Oblique";
+ t.CenturyGothic = "Helvetica";
+ t["CenturyGothic-Bold"] = "Helvetica-Bold";
+ t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique";
+ t["CenturyGothic-Italic"] = "Helvetica-Oblique";
+ t.ComicSansMS = "Comic Sans MS";
+ t["ComicSansMS-Bold"] = "Comic Sans MS-Bold";
+ t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic";
+ t["ComicSansMS-Italic"] = "Comic Sans MS-Italic";
+ t.LucidaConsole = "Courier";
+ t["LucidaConsole-Bold"] = "Courier-Bold";
+ t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique";
+ t["LucidaConsole-Italic"] = "Courier-Oblique";
+ t["LucidaSans-Demi"] = "Helvetica-Bold";
+ t["MS-Gothic"] = "MS Gothic";
+ t["MS-Gothic-Bold"] = "MS Gothic-Bold";
+ t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic";
+ t["MS-Gothic-Italic"] = "MS Gothic-Italic";
+ t["MS-Mincho"] = "MS Mincho";
+ t["MS-Mincho-Bold"] = "MS Mincho-Bold";
+ t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic";
+ t["MS-Mincho-Italic"] = "MS Mincho-Italic";
+ t["MS-PGothic"] = "MS PGothic";
+ t["MS-PGothic-Bold"] = "MS PGothic-Bold";
+ t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic";
+ t["MS-PGothic-Italic"] = "MS PGothic-Italic";
+ t["MS-PMincho"] = "MS PMincho";
+ t["MS-PMincho-Bold"] = "MS PMincho-Bold";
+ t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic";
+ t["MS-PMincho-Italic"] = "MS PMincho-Italic";
+ t.NuptialScript = "Times-Italic";
+ t.SegoeUISymbol = "Helvetica";
+ t.Wingdings = "ZapfDingbats";
+ t["Wingdings-Regular"] = "ZapfDingbats";
+});
+exports.getNonStdFontMap = getNonStdFontMap;
+const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t["Adobe Jenson"] = true;
+ t["Adobe Text"] = true;
+ t.Albertus = true;
+ t.Aldus = true;
+ t.Alexandria = true;
+ t.Algerian = true;
+ t["American Typewriter"] = true;
+ t.Antiqua = true;
+ t.Apex = true;
+ t.Arno = true;
+ t.Aster = true;
+ t.Aurora = true;
+ t.Baskerville = true;
+ t.Bell = true;
+ t.Bembo = true;
+ t["Bembo Schoolbook"] = true;
+ t.Benguiat = true;
+ t["Berkeley Old Style"] = true;
+ t["Bernhard Modern"] = true;
+ t["Berthold City"] = true;
+ t.Bodoni = true;
+ t["Bauer Bodoni"] = true;
+ t["Book Antiqua"] = true;
+ t.Bookman = true;
+ t["Bordeaux Roman"] = true;
+ t["Californian FB"] = true;
+ t.Calisto = true;
+ t.Calvert = true;
+ t.Capitals = true;
+ t.Cambria = true;
+ t.Cartier = true;
+ t.Caslon = true;
+ t.Catull = true;
+ t.Centaur = true;
+ t["Century Old Style"] = true;
+ t["Century Schoolbook"] = true;
+ t.Chaparral = true;
+ t["Charis SIL"] = true;
+ t.Cheltenham = true;
+ t["Cholla Slab"] = true;
+ t.Clarendon = true;
+ t.Clearface = true;
+ t.Cochin = true;
+ t.Colonna = true;
+ t["Computer Modern"] = true;
+ t["Concrete Roman"] = true;
+ t.Constantia = true;
+ t["Cooper Black"] = true;
+ t.Corona = true;
+ t.Ecotype = true;
+ t.Egyptienne = true;
+ t.Elephant = true;
+ t.Excelsior = true;
+ t.Fairfield = true;
+ t["FF Scala"] = true;
+ t.Folkard = true;
+ t.Footlight = true;
+ t.FreeSerif = true;
+ t["Friz Quadrata"] = true;
+ t.Garamond = true;
+ t.Gentium = true;
+ t.Georgia = true;
+ t.Gloucester = true;
+ t["Goudy Old Style"] = true;
+ t["Goudy Schoolbook"] = true;
+ t["Goudy Pro Font"] = true;
+ t.Granjon = true;
+ t["Guardian Egyptian"] = true;
+ t.Heather = true;
+ t.Hercules = true;
+ t["High Tower Text"] = true;
+ t.Hiroshige = true;
+ t["Hoefler Text"] = true;
+ t["Humana Serif"] = true;
+ t.Imprint = true;
+ t["Ionic No. 5"] = true;
+ t.Janson = true;
+ t.Joanna = true;
+ t.Korinna = true;
+ t.Lexicon = true;
+ t["Liberation Serif"] = true;
+ t["Linux Libertine"] = true;
+ t.Literaturnaya = true;
+ t.Lucida = true;
+ t["Lucida Bright"] = true;
+ t.Melior = true;
+ t.Memphis = true;
+ t.Miller = true;
+ t.Minion = true;
+ t.Modern = true;
+ t["Mona Lisa"] = true;
+ t["Mrs Eaves"] = true;
+ t["MS Serif"] = true;
+ t["Museo Slab"] = true;
+ t["New York"] = true;
+ t["Nimbus Roman"] = true;
+ t["NPS Rawlinson Roadway"] = true;
+ t.NuptialScript = true;
+ t.Palatino = true;
+ t.Perpetua = true;
+ t.Plantin = true;
+ t["Plantin Schoolbook"] = true;
+ t.Playbill = true;
+ t["Poor Richard"] = true;
+ t["Rawlinson Roadway"] = true;
+ t.Renault = true;
+ t.Requiem = true;
+ t.Rockwell = true;
+ t.Roman = true;
+ t["Rotis Serif"] = true;
+ t.Sabon = true;
+ t.Scala = true;
+ t.Seagull = true;
+ t.Sistina = true;
+ t.Souvenir = true;
+ t.STIX = true;
+ t["Stone Informal"] = true;
+ t["Stone Serif"] = true;
+ t.Sylfaen = true;
+ t.Times = true;
+ t.Trajan = true;
+ t["Trinité"] = true;
+ t["Trump Mediaeval"] = true;
+ t.Utopia = true;
+ t["Vale Type"] = true;
+ t["Bitstream Vera"] = true;
+ t["Vera Serif"] = true;
+ t.Versailles = true;
+ t.Wanted = true;
+ t.Weiss = true;
+ t["Wide Latin"] = true;
+ t.Windsor = true;
+ t.XITS = true;
+});
+exports.getSerifFonts = getSerifFonts;
+const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.Dingbats = true;
+ t.Symbol = true;
+ t.ZapfDingbats = true;
+});
+exports.getSymbolsFonts = getSymbolsFonts;
+const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t[2] = 10;
+ t[3] = 32;
+ t[4] = 33;
+ t[5] = 34;
+ t[6] = 35;
+ t[7] = 36;
+ t[8] = 37;
+ t[9] = 38;
+ t[10] = 39;
+ t[11] = 40;
+ t[12] = 41;
+ t[13] = 42;
+ t[14] = 43;
+ t[15] = 44;
+ t[16] = 45;
+ t[17] = 46;
+ t[18] = 47;
+ t[19] = 48;
+ t[20] = 49;
+ t[21] = 50;
+ t[22] = 51;
+ t[23] = 52;
+ t[24] = 53;
+ t[25] = 54;
+ t[26] = 55;
+ t[27] = 56;
+ t[28] = 57;
+ t[29] = 58;
+ t[30] = 894;
+ t[31] = 60;
+ t[32] = 61;
+ t[33] = 62;
+ t[34] = 63;
+ t[35] = 64;
+ t[36] = 65;
+ t[37] = 66;
+ t[38] = 67;
+ t[39] = 68;
+ t[40] = 69;
+ t[41] = 70;
+ t[42] = 71;
+ t[43] = 72;
+ t[44] = 73;
+ t[45] = 74;
+ t[46] = 75;
+ t[47] = 76;
+ t[48] = 77;
+ t[49] = 78;
+ t[50] = 79;
+ t[51] = 80;
+ t[52] = 81;
+ t[53] = 82;
+ t[54] = 83;
+ t[55] = 84;
+ t[56] = 85;
+ t[57] = 86;
+ t[58] = 87;
+ t[59] = 88;
+ t[60] = 89;
+ t[61] = 90;
+ t[62] = 91;
+ t[63] = 92;
+ t[64] = 93;
+ t[65] = 94;
+ t[66] = 95;
+ t[67] = 96;
+ t[68] = 97;
+ t[69] = 98;
+ t[70] = 99;
+ t[71] = 100;
+ t[72] = 101;
+ t[73] = 102;
+ t[74] = 103;
+ t[75] = 104;
+ t[76] = 105;
+ t[77] = 106;
+ t[78] = 107;
+ t[79] = 108;
+ t[80] = 109;
+ t[81] = 110;
+ t[82] = 111;
+ t[83] = 112;
+ t[84] = 113;
+ t[85] = 114;
+ t[86] = 115;
+ t[87] = 116;
+ t[88] = 117;
+ t[89] = 118;
+ t[90] = 119;
+ t[91] = 120;
+ t[92] = 121;
+ t[93] = 122;
+ t[94] = 123;
+ t[95] = 124;
+ t[96] = 125;
+ t[97] = 126;
+ t[98] = 196;
+ t[99] = 197;
+ t[100] = 199;
+ t[101] = 201;
+ t[102] = 209;
+ t[103] = 214;
+ t[104] = 220;
+ t[105] = 225;
+ t[106] = 224;
+ t[107] = 226;
+ t[108] = 228;
+ t[109] = 227;
+ t[110] = 229;
+ t[111] = 231;
+ t[112] = 233;
+ t[113] = 232;
+ t[114] = 234;
+ t[115] = 235;
+ t[116] = 237;
+ t[117] = 236;
+ t[118] = 238;
+ t[119] = 239;
+ t[120] = 241;
+ t[121] = 243;
+ t[122] = 242;
+ t[123] = 244;
+ t[124] = 246;
+ t[125] = 245;
+ t[126] = 250;
+ t[127] = 249;
+ t[128] = 251;
+ t[129] = 252;
+ t[130] = 8224;
+ t[131] = 176;
+ t[132] = 162;
+ t[133] = 163;
+ t[134] = 167;
+ t[135] = 8226;
+ t[136] = 182;
+ t[137] = 223;
+ t[138] = 174;
+ t[139] = 169;
+ t[140] = 8482;
+ t[141] = 180;
+ t[142] = 168;
+ t[143] = 8800;
+ t[144] = 198;
+ t[145] = 216;
+ t[146] = 8734;
+ t[147] = 177;
+ t[148] = 8804;
+ t[149] = 8805;
+ t[150] = 165;
+ t[151] = 181;
+ t[152] = 8706;
+ t[153] = 8721;
+ t[154] = 8719;
+ t[156] = 8747;
+ t[157] = 170;
+ t[158] = 186;
+ t[159] = 8486;
+ t[160] = 230;
+ t[161] = 248;
+ t[162] = 191;
+ t[163] = 161;
+ t[164] = 172;
+ t[165] = 8730;
+ t[166] = 402;
+ t[167] = 8776;
+ t[168] = 8710;
+ t[169] = 171;
+ t[170] = 187;
+ t[171] = 8230;
+ t[210] = 218;
+ t[223] = 711;
+ t[224] = 321;
+ t[225] = 322;
+ t[227] = 353;
+ t[229] = 382;
+ t[234] = 253;
+ t[252] = 263;
+ t[253] = 268;
+ t[254] = 269;
+ t[258] = 258;
+ t[260] = 260;
+ t[261] = 261;
+ t[265] = 280;
+ t[266] = 281;
+ t[268] = 283;
+ t[269] = 313;
+ t[275] = 323;
+ t[276] = 324;
+ t[278] = 328;
+ t[284] = 345;
+ t[285] = 346;
+ t[286] = 347;
+ t[292] = 367;
+ t[295] = 377;
+ t[296] = 378;
+ t[298] = 380;
+ t[305] = 963;
+ t[306] = 964;
+ t[307] = 966;
+ t[308] = 8215;
+ t[309] = 8252;
+ t[310] = 8319;
+ t[311] = 8359;
+ t[312] = 8592;
+ t[313] = 8593;
+ t[337] = 9552;
+ t[493] = 1039;
+ t[494] = 1040;
+ t[705] = 1524;
+ t[706] = 8362;
+ t[710] = 64288;
+ t[711] = 64298;
+ t[759] = 1617;
+ t[761] = 1776;
+ t[763] = 1778;
+ t[775] = 1652;
+ t[777] = 1764;
+ t[778] = 1780;
+ t[779] = 1781;
+ t[780] = 1782;
+ t[782] = 771;
+ t[783] = 64726;
+ t[786] = 8363;
+ t[788] = 8532;
+ t[790] = 768;
+ t[791] = 769;
+ t[792] = 768;
+ t[795] = 803;
+ t[797] = 64336;
+ t[798] = 64337;
+ t[799] = 64342;
+ t[800] = 64343;
+ t[801] = 64344;
+ t[802] = 64345;
+ t[803] = 64362;
+ t[804] = 64363;
+ t[805] = 64364;
+ t[2424] = 7821;
+ t[2425] = 7822;
+ t[2426] = 7823;
+ t[2427] = 7824;
+ t[2428] = 7825;
+ t[2429] = 7826;
+ t[2430] = 7827;
+ t[2433] = 7682;
+ t[2678] = 8045;
+ t[2679] = 8046;
+ t[2830] = 1552;
+ t[2838] = 686;
+ t[2840] = 751;
+ t[2842] = 753;
+ t[2843] = 754;
+ t[2844] = 755;
+ t[2846] = 757;
+ t[2856] = 767;
+ t[2857] = 848;
+ t[2858] = 849;
+ t[2862] = 853;
+ t[2863] = 854;
+ t[2864] = 855;
+ t[2865] = 861;
+ t[2866] = 862;
+ t[2906] = 7460;
+ t[2908] = 7462;
+ t[2909] = 7463;
+ t[2910] = 7464;
+ t[2912] = 7466;
+ t[2913] = 7467;
+ t[2914] = 7468;
+ t[2916] = 7470;
+ t[2917] = 7471;
+ t[2918] = 7472;
+ t[2920] = 7474;
+ t[2921] = 7475;
+ t[2922] = 7476;
+ t[2924] = 7478;
+ t[2925] = 7479;
+ t[2926] = 7480;
+ t[2928] = 7482;
+ t[2929] = 7483;
+ t[2930] = 7484;
+ t[2932] = 7486;
+ t[2933] = 7487;
+ t[2934] = 7488;
+ t[2936] = 7490;
+ t[2937] = 7491;
+ t[2938] = 7492;
+ t[2940] = 7494;
+ t[2941] = 7495;
+ t[2942] = 7496;
+ t[2944] = 7498;
+ t[2946] = 7500;
+ t[2948] = 7502;
+ t[2950] = 7504;
+ t[2951] = 7505;
+ t[2952] = 7506;
+ t[2954] = 7508;
+ t[2955] = 7509;
+ t[2956] = 7510;
+ t[2958] = 7512;
+ t[2959] = 7513;
+ t[2960] = 7514;
+ t[2962] = 7516;
+ t[2963] = 7517;
+ t[2964] = 7518;
+ t[2966] = 7520;
+ t[2967] = 7521;
+ t[2968] = 7522;
+ t[2970] = 7524;
+ t[2971] = 7525;
+ t[2972] = 7526;
+ t[2974] = 7528;
+ t[2975] = 7529;
+ t[2976] = 7530;
+ t[2978] = 1537;
+ t[2979] = 1538;
+ t[2980] = 1539;
+ t[2982] = 1549;
+ t[2983] = 1551;
+ t[2984] = 1552;
+ t[2986] = 1554;
+ t[2987] = 1555;
+ t[2988] = 1556;
+ t[2990] = 1623;
+ t[2991] = 1624;
+ t[2995] = 1775;
+ t[2999] = 1791;
+ t[3002] = 64290;
+ t[3003] = 64291;
+ t[3004] = 64292;
+ t[3006] = 64294;
+ t[3007] = 64295;
+ t[3008] = 64296;
+ t[3011] = 1900;
+ t[3014] = 8223;
+ t[3015] = 8244;
+ t[3017] = 7532;
+ t[3018] = 7533;
+ t[3019] = 7534;
+ t[3075] = 7590;
+ t[3076] = 7591;
+ t[3079] = 7594;
+ t[3080] = 7595;
+ t[3083] = 7598;
+ t[3084] = 7599;
+ t[3087] = 7602;
+ t[3088] = 7603;
+ t[3091] = 7606;
+ t[3092] = 7607;
+ t[3095] = 7610;
+ t[3096] = 7611;
+ t[3099] = 7614;
+ t[3100] = 7615;
+ t[3103] = 7618;
+ t[3104] = 7619;
+ t[3107] = 8337;
+ t[3108] = 8338;
+ t[3116] = 1884;
+ t[3119] = 1885;
+ t[3120] = 1885;
+ t[3123] = 1886;
+ t[3124] = 1886;
+ t[3127] = 1887;
+ t[3128] = 1887;
+ t[3131] = 1888;
+ t[3132] = 1888;
+ t[3135] = 1889;
+ t[3136] = 1889;
+ t[3139] = 1890;
+ t[3140] = 1890;
+ t[3143] = 1891;
+ t[3144] = 1891;
+ t[3147] = 1892;
+ t[3148] = 1892;
+ t[3153] = 580;
+ t[3154] = 581;
+ t[3157] = 584;
+ t[3158] = 585;
+ t[3161] = 588;
+ t[3162] = 589;
+ t[3165] = 891;
+ t[3166] = 892;
+ t[3169] = 1274;
+ t[3170] = 1275;
+ t[3173] = 1278;
+ t[3174] = 1279;
+ t[3181] = 7622;
+ t[3182] = 7623;
+ t[3282] = 11799;
+ t[3316] = 578;
+ t[3379] = 42785;
+ t[3393] = 1159;
+ t[3416] = 8377;
+});
+exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts;
+const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t[227] = 322;
+ t[264] = 261;
+ t[291] = 346;
+});
+exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack;
+const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t[1] = 32;
+ t[4] = 65;
+ t[17] = 66;
+ t[18] = 67;
+ t[24] = 68;
+ t[28] = 69;
+ t[38] = 70;
+ t[39] = 71;
+ t[44] = 72;
+ t[47] = 73;
+ t[58] = 74;
+ t[60] = 75;
+ t[62] = 76;
+ t[68] = 77;
+ t[69] = 78;
+ t[75] = 79;
+ t[87] = 80;
+ t[89] = 81;
+ t[90] = 82;
+ t[94] = 83;
+ t[100] = 84;
+ t[104] = 85;
+ t[115] = 86;
+ t[116] = 87;
+ t[121] = 88;
+ t[122] = 89;
+ t[127] = 90;
+ t[258] = 97;
+ t[268] = 261;
+ t[271] = 98;
+ t[272] = 99;
+ t[273] = 263;
+ t[282] = 100;
+ t[286] = 101;
+ t[295] = 281;
+ t[296] = 102;
+ t[336] = 103;
+ t[346] = 104;
+ t[349] = 105;
+ t[361] = 106;
+ t[364] = 107;
+ t[367] = 108;
+ t[371] = 322;
+ t[373] = 109;
+ t[374] = 110;
+ t[381] = 111;
+ t[383] = 243;
+ t[393] = 112;
+ t[395] = 113;
+ t[396] = 114;
+ t[400] = 115;
+ t[401] = 347;
+ t[410] = 116;
+ t[437] = 117;
+ t[448] = 118;
+ t[449] = 119;
+ t[454] = 120;
+ t[455] = 121;
+ t[460] = 122;
+ t[463] = 380;
+ t[853] = 44;
+ t[855] = 58;
+ t[856] = 46;
+ t[876] = 47;
+ t[878] = 45;
+ t[882] = 45;
+ t[894] = 40;
+ t[895] = 41;
+ t[896] = 91;
+ t[897] = 93;
+ t[923] = 64;
+ t[1004] = 48;
+ t[1005] = 49;
+ t[1006] = 50;
+ t[1007] = 51;
+ t[1008] = 52;
+ t[1009] = 53;
+ t[1010] = 54;
+ t[1011] = 55;
+ t[1012] = 56;
+ t[1013] = 57;
+ t[1081] = 37;
+ t[1085] = 43;
+ t[1086] = 45;
+});
+exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
+var getSpecialPUASymbols = getLookupTableFactory(function (t) {
+ t[63721] = 0x00a9;
+ t[63193] = 0x00a9;
+ t[63720] = 0x00ae;
+ t[63194] = 0x00ae;
+ t[63722] = 0x2122;
+ t[63195] = 0x2122;
+ t[63729] = 0x23a7;
+ t[63730] = 0x23a8;
+ t[63731] = 0x23a9;
+ t[63740] = 0x23ab;
+ t[63741] = 0x23ac;
+ t[63742] = 0x23ad;
+ t[63726] = 0x23a1;
+ t[63727] = 0x23a2;
+ t[63728] = 0x23a3;
+ t[63737] = 0x23a4;
+ t[63738] = 0x23a5;
+ t[63739] = 0x23a6;
+ t[63723] = 0x239b;
+ t[63724] = 0x239c;
+ t[63725] = 0x239d;
+ t[63734] = 0x239e;
+ t[63735] = 0x239f;
+ t[63736] = 0x23a0;
+});
+function mapSpecialUnicodeValues(code) {
+ if (code >= 0xfff0 && code <= 0xffff) {
+ return 0;
+ } else if (code >= 0xf600 && code <= 0xf8ff) {
+ return getSpecialPUASymbols()[code] || code;
+ } else if (code === 0x00ad) {
+ return 0x002d;
+ }
+ return code;
+}
+function getUnicodeForGlyph(name, glyphsUnicodeMap) {
+ var unicode = glyphsUnicodeMap[name];
+ if (unicode !== undefined) {
+ return unicode;
+ }
+ if (!name) {
+ return -1;
+ }
+ if (name[0] === "u") {
+ var nameLen = name.length, hexStr;
+ if (nameLen === 7 && name[1] === "n" && name[2] === "i") {
+ hexStr = name.substring(3);
+ } else if (nameLen >= 5 && nameLen <= 7) {
+ hexStr = name.substring(1);
+ } else {
+ return -1;
+ }
+ if (hexStr === hexStr.toUpperCase()) {
+ unicode = parseInt(hexStr, 16);
+ if (unicode >= 0) {
+ return unicode;
+ }
+ }
+ }
+ return -1;
+}
+var UnicodeRanges = [
+ {
+ begin: 0x0000,
+ end: 0x007f
+ },
+ {
+ begin: 0x0080,
+ end: 0x00ff
+ },
+ {
+ begin: 0x0100,
+ end: 0x017f
+ },
+ {
+ begin: 0x0180,
+ end: 0x024f
+ },
+ {
+ begin: 0x0250,
+ end: 0x02af
+ },
+ {
+ begin: 0x02b0,
+ end: 0x02ff
+ },
+ {
+ begin: 0x0300,
+ end: 0x036f
+ },
+ {
+ begin: 0x0370,
+ end: 0x03ff
+ },
+ {
+ begin: 0x2c80,
+ end: 0x2cff
+ },
+ {
+ begin: 0x0400,
+ end: 0x04ff
+ },
+ {
+ begin: 0x0530,
+ end: 0x058f
+ },
+ {
+ begin: 0x0590,
+ end: 0x05ff
+ },
+ {
+ begin: 0xa500,
+ end: 0xa63f
+ },
+ {
+ begin: 0x0600,
+ end: 0x06ff
+ },
+ {
+ begin: 0x07c0,
+ end: 0x07ff
+ },
+ {
+ begin: 0x0900,
+ end: 0x097f
+ },
+ {
+ begin: 0x0980,
+ end: 0x09ff
+ },
+ {
+ begin: 0x0a00,
+ end: 0x0a7f
+ },
+ {
+ begin: 0x0a80,
+ end: 0x0aff
+ },
+ {
+ begin: 0x0b00,
+ end: 0x0b7f
+ },
+ {
+ begin: 0x0b80,
+ end: 0x0bff
+ },
+ {
+ begin: 0x0c00,
+ end: 0x0c7f
+ },
+ {
+ begin: 0x0c80,
+ end: 0x0cff
+ },
+ {
+ begin: 0x0d00,
+ end: 0x0d7f
+ },
+ {
+ begin: 0x0e00,
+ end: 0x0e7f
+ },
+ {
+ begin: 0x0e80,
+ end: 0x0eff
+ },
+ {
+ begin: 0x10a0,
+ end: 0x10ff
+ },
+ {
+ begin: 0x1b00,
+ end: 0x1b7f
+ },
+ {
+ begin: 0x1100,
+ end: 0x11ff
+ },
+ {
+ begin: 0x1e00,
+ end: 0x1eff
+ },
+ {
+ begin: 0x1f00,
+ end: 0x1fff
+ },
+ {
+ begin: 0x2000,
+ end: 0x206f
+ },
+ {
+ begin: 0x2070,
+ end: 0x209f
+ },
+ {
+ begin: 0x20a0,
+ end: 0x20cf
+ },
+ {
+ begin: 0x20d0,
+ end: 0x20ff
+ },
+ {
+ begin: 0x2100,
+ end: 0x214f
+ },
+ {
+ begin: 0x2150,
+ end: 0x218f
+ },
+ {
+ begin: 0x2190,
+ end: 0x21ff
+ },
+ {
+ begin: 0x2200,
+ end: 0x22ff
+ },
+ {
+ begin: 0x2300,
+ end: 0x23ff
+ },
+ {
+ begin: 0x2400,
+ end: 0x243f
+ },
+ {
+ begin: 0x2440,
+ end: 0x245f
+ },
+ {
+ begin: 0x2460,
+ end: 0x24ff
+ },
+ {
+ begin: 0x2500,
+ end: 0x257f
+ },
+ {
+ begin: 0x2580,
+ end: 0x259f
+ },
+ {
+ begin: 0x25a0,
+ end: 0x25ff
+ },
+ {
+ begin: 0x2600,
+ end: 0x26ff
+ },
+ {
+ begin: 0x2700,
+ end: 0x27bf
+ },
+ {
+ begin: 0x3000,
+ end: 0x303f
+ },
+ {
+ begin: 0x3040,
+ end: 0x309f
+ },
+ {
+ begin: 0x30a0,
+ end: 0x30ff
+ },
+ {
+ begin: 0x3100,
+ end: 0x312f
+ },
+ {
+ begin: 0x3130,
+ end: 0x318f
+ },
+ {
+ begin: 0xa840,
+ end: 0xa87f
+ },
+ {
+ begin: 0x3200,
+ end: 0x32ff
+ },
+ {
+ begin: 0x3300,
+ end: 0x33ff
+ },
+ {
+ begin: 0xac00,
+ end: 0xd7af
+ },
+ {
+ begin: 0xd800,
+ end: 0xdfff
+ },
+ {
+ begin: 0x10900,
+ end: 0x1091f
+ },
+ {
+ begin: 0x4e00,
+ end: 0x9fff
+ },
+ {
+ begin: 0xe000,
+ end: 0xf8ff
+ },
+ {
+ begin: 0x31c0,
+ end: 0x31ef
+ },
+ {
+ begin: 0xfb00,
+ end: 0xfb4f
+ },
+ {
+ begin: 0xfb50,
+ end: 0xfdff
+ },
+ {
+ begin: 0xfe20,
+ end: 0xfe2f
+ },
+ {
+ begin: 0xfe10,
+ end: 0xfe1f
+ },
+ {
+ begin: 0xfe50,
+ end: 0xfe6f
+ },
+ {
+ begin: 0xfe70,
+ end: 0xfeff
+ },
+ {
+ begin: 0xff00,
+ end: 0xffef
+ },
+ {
+ begin: 0xfff0,
+ end: 0xffff
+ },
+ {
+ begin: 0x0f00,
+ end: 0x0fff
+ },
+ {
+ begin: 0x0700,
+ end: 0x074f
+ },
+ {
+ begin: 0x0780,
+ end: 0x07bf
+ },
+ {
+ begin: 0x0d80,
+ end: 0x0dff
+ },
+ {
+ begin: 0x1000,
+ end: 0x109f
+ },
+ {
+ begin: 0x1200,
+ end: 0x137f
+ },
+ {
+ begin: 0x13a0,
+ end: 0x13ff
+ },
+ {
+ begin: 0x1400,
+ end: 0x167f
+ },
+ {
+ begin: 0x1680,
+ end: 0x169f
+ },
+ {
+ begin: 0x16a0,
+ end: 0x16ff
+ },
+ {
+ begin: 0x1780,
+ end: 0x17ff
+ },
+ {
+ begin: 0x1800,
+ end: 0x18af
+ },
+ {
+ begin: 0x2800,
+ end: 0x28ff
+ },
+ {
+ begin: 0xa000,
+ end: 0xa48f
+ },
+ {
+ begin: 0x1700,
+ end: 0x171f
+ },
+ {
+ begin: 0x10300,
+ end: 0x1032f
+ },
+ {
+ begin: 0x10330,
+ end: 0x1034f
+ },
+ {
+ begin: 0x10400,
+ end: 0x1044f
+ },
+ {
+ begin: 0x1d000,
+ end: 0x1d0ff
+ },
+ {
+ begin: 0x1d400,
+ end: 0x1d7ff
+ },
+ {
+ begin: 0xff000,
+ end: 0xffffd
+ },
+ {
+ begin: 0xfe00,
+ end: 0xfe0f
+ },
+ {
+ begin: 0xe0000,
+ end: 0xe007f
+ },
+ {
+ begin: 0x1900,
+ end: 0x194f
+ },
+ {
+ begin: 0x1950,
+ end: 0x197f
+ },
+ {
+ begin: 0x1980,
+ end: 0x19df
+ },
+ {
+ begin: 0x1a00,
+ end: 0x1a1f
+ },
+ {
+ begin: 0x2c00,
+ end: 0x2c5f
+ },
+ {
+ begin: 0x2d30,
+ end: 0x2d7f
+ },
+ {
+ begin: 0x4dc0,
+ end: 0x4dff
+ },
+ {
+ begin: 0xa800,
+ end: 0xa82f
+ },
+ {
+ begin: 0x10000,
+ end: 0x1007f
+ },
+ {
+ begin: 0x10140,
+ end: 0x1018f
+ },
+ {
+ begin: 0x10380,
+ end: 0x1039f
+ },
+ {
+ begin: 0x103a0,
+ end: 0x103df
+ },
+ {
+ begin: 0x10450,
+ end: 0x1047f
+ },
+ {
+ begin: 0x10480,
+ end: 0x104af
+ },
+ {
+ begin: 0x10800,
+ end: 0x1083f
+ },
+ {
+ begin: 0x10a00,
+ end: 0x10a5f
+ },
+ {
+ begin: 0x1d300,
+ end: 0x1d35f
+ },
+ {
+ begin: 0x12000,
+ end: 0x123ff
+ },
+ {
+ begin: 0x1d360,
+ end: 0x1d37f
+ },
+ {
+ begin: 0x1b80,
+ end: 0x1bbf
+ },
+ {
+ begin: 0x1c00,
+ end: 0x1c4f
+ },
+ {
+ begin: 0x1c50,
+ end: 0x1c7f
+ },
+ {
+ begin: 0xa880,
+ end: 0xa8df
+ },
+ {
+ begin: 0xa900,
+ end: 0xa92f
+ },
+ {
+ begin: 0xa930,
+ end: 0xa95f
+ },
+ {
+ begin: 0xaa00,
+ end: 0xaa5f
+ },
+ {
+ begin: 0x10190,
+ end: 0x101cf
+ },
+ {
+ begin: 0x101d0,
+ end: 0x101ff
+ },
+ {
+ begin: 0x102a0,
+ end: 0x102df
+ },
+ {
+ begin: 0x1f030,
+ end: 0x1f09f
+ }
+];
+function getUnicodeRangeFor(value) {
+ for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {
+ var range = UnicodeRanges[i];
+ if (value >= range.begin && value < range.end) {
+ return i;
+ }
+ }
+ return -1;
+}
+function isRTLRangeFor(value) {
+ var range = UnicodeRanges[13];
+ if (value >= range.begin && value < range.end) {
+ return true;
+ }
+ range = UnicodeRanges[11];
+ if (value >= range.begin && value < range.end) {
+ return true;
+ }
+ return false;
+}
+var getNormalizedUnicodes = getLookupTableFactory(function (t) {
+ t["\u00A8"] = "\u0020\u0308";
+ t["\u00AF"] = "\u0020\u0304";
+ t["\u00B4"] = "\u0020\u0301";
+ t["\u00B5"] = "\u03BC";
+ t["\u00B8"] = "\u0020\u0327";
+ t["\u0132"] = "\u0049\u004A";
+ t["\u0133"] = "\u0069\u006A";
+ t["\u013F"] = "\u004C\u00B7";
+ t["\u0140"] = "\u006C\u00B7";
+ t["\u0149"] = "\u02BC\u006E";
+ t["\u017F"] = "\u0073";
+ t["\u01C4"] = "\u0044\u017D";
+ t["\u01C5"] = "\u0044\u017E";
+ t["\u01C6"] = "\u0064\u017E";
+ t["\u01C7"] = "\u004C\u004A";
+ t["\u01C8"] = "\u004C\u006A";
+ t["\u01C9"] = "\u006C\u006A";
+ t["\u01CA"] = "\u004E\u004A";
+ t["\u01CB"] = "\u004E\u006A";
+ t["\u01CC"] = "\u006E\u006A";
+ t["\u01F1"] = "\u0044\u005A";
+ t["\u01F2"] = "\u0044\u007A";
+ t["\u01F3"] = "\u0064\u007A";
+ t["\u02D8"] = "\u0020\u0306";
+ t["\u02D9"] = "\u0020\u0307";
+ t["\u02DA"] = "\u0020\u030A";
+ t["\u02DB"] = "\u0020\u0328";
+ t["\u02DC"] = "\u0020\u0303";
+ t["\u02DD"] = "\u0020\u030B";
+ t["\u037A"] = "\u0020\u0345";
+ t["\u0384"] = "\u0020\u0301";
+ t["\u03D0"] = "\u03B2";
+ t["\u03D1"] = "\u03B8";
+ t["\u03D2"] = "\u03A5";
+ t["\u03D5"] = "\u03C6";
+ t["\u03D6"] = "\u03C0";
+ t["\u03F0"] = "\u03BA";
+ t["\u03F1"] = "\u03C1";
+ t["\u03F2"] = "\u03C2";
+ t["\u03F4"] = "\u0398";
+ t["\u03F5"] = "\u03B5";
+ t["\u03F9"] = "\u03A3";
+ t["\u0587"] = "\u0565\u0582";
+ t["\u0675"] = "\u0627\u0674";
+ t["\u0676"] = "\u0648\u0674";
+ t["\u0677"] = "\u06C7\u0674";
+ t["\u0678"] = "\u064A\u0674";
+ t["\u0E33"] = "\u0E4D\u0E32";
+ t["\u0EB3"] = "\u0ECD\u0EB2";
+ t["\u0EDC"] = "\u0EAB\u0E99";
+ t["\u0EDD"] = "\u0EAB\u0EA1";
+ t["\u0F77"] = "\u0FB2\u0F81";
+ t["\u0F79"] = "\u0FB3\u0F81";
+ t["\u1E9A"] = "\u0061\u02BE";
+ t["\u1FBD"] = "\u0020\u0313";
+ t["\u1FBF"] = "\u0020\u0313";
+ t["\u1FC0"] = "\u0020\u0342";
+ t["\u1FFE"] = "\u0020\u0314";
+ t["\u2002"] = "\u0020";
+ t["\u2003"] = "\u0020";
+ t["\u2004"] = "\u0020";
+ t["\u2005"] = "\u0020";
+ t["\u2006"] = "\u0020";
+ t["\u2008"] = "\u0020";
+ t["\u2009"] = "\u0020";
+ t["\u200A"] = "\u0020";
+ t["\u2017"] = "\u0020\u0333";
+ t["\u2024"] = "\u002E";
+ t["\u2025"] = "\u002E\u002E";
+ t["\u2026"] = "\u002E\u002E\u002E";
+ t["\u2033"] = "\u2032\u2032";
+ t["\u2034"] = "\u2032\u2032\u2032";
+ t["\u2036"] = "\u2035\u2035";
+ t["\u2037"] = "\u2035\u2035\u2035";
+ t["\u203C"] = "\u0021\u0021";
+ t["\u203E"] = "\u0020\u0305";
+ t["\u2047"] = "\u003F\u003F";
+ t["\u2048"] = "\u003F\u0021";
+ t["\u2049"] = "\u0021\u003F";
+ t["\u2057"] = "\u2032\u2032\u2032\u2032";
+ t["\u205F"] = "\u0020";
+ t["\u20A8"] = "\u0052\u0073";
+ t["\u2100"] = "\u0061\u002F\u0063";
+ t["\u2101"] = "\u0061\u002F\u0073";
+ t["\u2103"] = "\u00B0\u0043";
+ t["\u2105"] = "\u0063\u002F\u006F";
+ t["\u2106"] = "\u0063\u002F\u0075";
+ t["\u2107"] = "\u0190";
+ t["\u2109"] = "\u00B0\u0046";
+ t["\u2116"] = "\u004E\u006F";
+ t["\u2121"] = "\u0054\u0045\u004C";
+ t["\u2135"] = "\u05D0";
+ t["\u2136"] = "\u05D1";
+ t["\u2137"] = "\u05D2";
+ t["\u2138"] = "\u05D3";
+ t["\u213B"] = "\u0046\u0041\u0058";
+ t["\u2160"] = "\u0049";
+ t["\u2161"] = "\u0049\u0049";
+ t["\u2162"] = "\u0049\u0049\u0049";
+ t["\u2163"] = "\u0049\u0056";
+ t["\u2164"] = "\u0056";
+ t["\u2165"] = "\u0056\u0049";
+ t["\u2166"] = "\u0056\u0049\u0049";
+ t["\u2167"] = "\u0056\u0049\u0049\u0049";
+ t["\u2168"] = "\u0049\u0058";
+ t["\u2169"] = "\u0058";
+ t["\u216A"] = "\u0058\u0049";
+ t["\u216B"] = "\u0058\u0049\u0049";
+ t["\u216C"] = "\u004C";
+ t["\u216D"] = "\u0043";
+ t["\u216E"] = "\u0044";
+ t["\u216F"] = "\u004D";
+ t["\u2170"] = "\u0069";
+ t["\u2171"] = "\u0069\u0069";
+ t["\u2172"] = "\u0069\u0069\u0069";
+ t["\u2173"] = "\u0069\u0076";
+ t["\u2174"] = "\u0076";
+ t["\u2175"] = "\u0076\u0069";
+ t["\u2176"] = "\u0076\u0069\u0069";
+ t["\u2177"] = "\u0076\u0069\u0069\u0069";
+ t["\u2178"] = "\u0069\u0078";
+ t["\u2179"] = "\u0078";
+ t["\u217A"] = "\u0078\u0069";
+ t["\u217B"] = "\u0078\u0069\u0069";
+ t["\u217C"] = "\u006C";
+ t["\u217D"] = "\u0063";
+ t["\u217E"] = "\u0064";
+ t["\u217F"] = "\u006D";
+ t["\u222C"] = "\u222B\u222B";
+ t["\u222D"] = "\u222B\u222B\u222B";
+ t["\u222F"] = "\u222E\u222E";
+ t["\u2230"] = "\u222E\u222E\u222E";
+ t["\u2474"] = "\u0028\u0031\u0029";
+ t["\u2475"] = "\u0028\u0032\u0029";
+ t["\u2476"] = "\u0028\u0033\u0029";
+ t["\u2477"] = "\u0028\u0034\u0029";
+ t["\u2478"] = "\u0028\u0035\u0029";
+ t["\u2479"] = "\u0028\u0036\u0029";
+ t["\u247A"] = "\u0028\u0037\u0029";
+ t["\u247B"] = "\u0028\u0038\u0029";
+ t["\u247C"] = "\u0028\u0039\u0029";
+ t["\u247D"] = "\u0028\u0031\u0030\u0029";
+ t["\u247E"] = "\u0028\u0031\u0031\u0029";
+ t["\u247F"] = "\u0028\u0031\u0032\u0029";
+ t["\u2480"] = "\u0028\u0031\u0033\u0029";
+ t["\u2481"] = "\u0028\u0031\u0034\u0029";
+ t["\u2482"] = "\u0028\u0031\u0035\u0029";
+ t["\u2483"] = "\u0028\u0031\u0036\u0029";
+ t["\u2484"] = "\u0028\u0031\u0037\u0029";
+ t["\u2485"] = "\u0028\u0031\u0038\u0029";
+ t["\u2486"] = "\u0028\u0031\u0039\u0029";
+ t["\u2487"] = "\u0028\u0032\u0030\u0029";
+ t["\u2488"] = "\u0031\u002E";
+ t["\u2489"] = "\u0032\u002E";
+ t["\u248A"] = "\u0033\u002E";
+ t["\u248B"] = "\u0034\u002E";
+ t["\u248C"] = "\u0035\u002E";
+ t["\u248D"] = "\u0036\u002E";
+ t["\u248E"] = "\u0037\u002E";
+ t["\u248F"] = "\u0038\u002E";
+ t["\u2490"] = "\u0039\u002E";
+ t["\u2491"] = "\u0031\u0030\u002E";
+ t["\u2492"] = "\u0031\u0031\u002E";
+ t["\u2493"] = "\u0031\u0032\u002E";
+ t["\u2494"] = "\u0031\u0033\u002E";
+ t["\u2495"] = "\u0031\u0034\u002E";
+ t["\u2496"] = "\u0031\u0035\u002E";
+ t["\u2497"] = "\u0031\u0036\u002E";
+ t["\u2498"] = "\u0031\u0037\u002E";
+ t["\u2499"] = "\u0031\u0038\u002E";
+ t["\u249A"] = "\u0031\u0039\u002E";
+ t["\u249B"] = "\u0032\u0030\u002E";
+ t["\u249C"] = "\u0028\u0061\u0029";
+ t["\u249D"] = "\u0028\u0062\u0029";
+ t["\u249E"] = "\u0028\u0063\u0029";
+ t["\u249F"] = "\u0028\u0064\u0029";
+ t["\u24A0"] = "\u0028\u0065\u0029";
+ t["\u24A1"] = "\u0028\u0066\u0029";
+ t["\u24A2"] = "\u0028\u0067\u0029";
+ t["\u24A3"] = "\u0028\u0068\u0029";
+ t["\u24A4"] = "\u0028\u0069\u0029";
+ t["\u24A5"] = "\u0028\u006A\u0029";
+ t["\u24A6"] = "\u0028\u006B\u0029";
+ t["\u24A7"] = "\u0028\u006C\u0029";
+ t["\u24A8"] = "\u0028\u006D\u0029";
+ t["\u24A9"] = "\u0028\u006E\u0029";
+ t["\u24AA"] = "\u0028\u006F\u0029";
+ t["\u24AB"] = "\u0028\u0070\u0029";
+ t["\u24AC"] = "\u0028\u0071\u0029";
+ t["\u24AD"] = "\u0028\u0072\u0029";
+ t["\u24AE"] = "\u0028\u0073\u0029";
+ t["\u24AF"] = "\u0028\u0074\u0029";
+ t["\u24B0"] = "\u0028\u0075\u0029";
+ t["\u24B1"] = "\u0028\u0076\u0029";
+ t["\u24B2"] = "\u0028\u0077\u0029";
+ t["\u24B3"] = "\u0028\u0078\u0029";
+ t["\u24B4"] = "\u0028\u0079\u0029";
+ t["\u24B5"] = "\u0028\u007A\u0029";
+ t["\u2A0C"] = "\u222B\u222B\u222B\u222B";
+ t["\u2A74"] = "\u003A\u003A\u003D";
+ t["\u2A75"] = "\u003D\u003D";
+ t["\u2A76"] = "\u003D\u003D\u003D";
+ t["\u2E9F"] = "\u6BCD";
+ t["\u2EF3"] = "\u9F9F";
+ t["\u2F00"] = "\u4E00";
+ t["\u2F01"] = "\u4E28";
+ t["\u2F02"] = "\u4E36";
+ t["\u2F03"] = "\u4E3F";
+ t["\u2F04"] = "\u4E59";
+ t["\u2F05"] = "\u4E85";
+ t["\u2F06"] = "\u4E8C";
+ t["\u2F07"] = "\u4EA0";
+ t["\u2F08"] = "\u4EBA";
+ t["\u2F09"] = "\u513F";
+ t["\u2F0A"] = "\u5165";
+ t["\u2F0B"] = "\u516B";
+ t["\u2F0C"] = "\u5182";
+ t["\u2F0D"] = "\u5196";
+ t["\u2F0E"] = "\u51AB";
+ t["\u2F0F"] = "\u51E0";
+ t["\u2F10"] = "\u51F5";
+ t["\u2F11"] = "\u5200";
+ t["\u2F12"] = "\u529B";
+ t["\u2F13"] = "\u52F9";
+ t["\u2F14"] = "\u5315";
+ t["\u2F15"] = "\u531A";
+ t["\u2F16"] = "\u5338";
+ t["\u2F17"] = "\u5341";
+ t["\u2F18"] = "\u535C";
+ t["\u2F19"] = "\u5369";
+ t["\u2F1A"] = "\u5382";
+ t["\u2F1B"] = "\u53B6";
+ t["\u2F1C"] = "\u53C8";
+ t["\u2F1D"] = "\u53E3";
+ t["\u2F1E"] = "\u56D7";
+ t["\u2F1F"] = "\u571F";
+ t["\u2F20"] = "\u58EB";
+ t["\u2F21"] = "\u5902";
+ t["\u2F22"] = "\u590A";
+ t["\u2F23"] = "\u5915";
+ t["\u2F24"] = "\u5927";
+ t["\u2F25"] = "\u5973";
+ t["\u2F26"] = "\u5B50";
+ t["\u2F27"] = "\u5B80";
+ t["\u2F28"] = "\u5BF8";
+ t["\u2F29"] = "\u5C0F";
+ t["\u2F2A"] = "\u5C22";
+ t["\u2F2B"] = "\u5C38";
+ t["\u2F2C"] = "\u5C6E";
+ t["\u2F2D"] = "\u5C71";
+ t["\u2F2E"] = "\u5DDB";
+ t["\u2F2F"] = "\u5DE5";
+ t["\u2F30"] = "\u5DF1";
+ t["\u2F31"] = "\u5DFE";
+ t["\u2F32"] = "\u5E72";
+ t["\u2F33"] = "\u5E7A";
+ t["\u2F34"] = "\u5E7F";
+ t["\u2F35"] = "\u5EF4";
+ t["\u2F36"] = "\u5EFE";
+ t["\u2F37"] = "\u5F0B";
+ t["\u2F38"] = "\u5F13";
+ t["\u2F39"] = "\u5F50";
+ t["\u2F3A"] = "\u5F61";
+ t["\u2F3B"] = "\u5F73";
+ t["\u2F3C"] = "\u5FC3";
+ t["\u2F3D"] = "\u6208";
+ t["\u2F3E"] = "\u6236";
+ t["\u2F3F"] = "\u624B";
+ t["\u2F40"] = "\u652F";
+ t["\u2F41"] = "\u6534";
+ t["\u2F42"] = "\u6587";
+ t["\u2F43"] = "\u6597";
+ t["\u2F44"] = "\u65A4";
+ t["\u2F45"] = "\u65B9";
+ t["\u2F46"] = "\u65E0";
+ t["\u2F47"] = "\u65E5";
+ t["\u2F48"] = "\u66F0";
+ t["\u2F49"] = "\u6708";
+ t["\u2F4A"] = "\u6728";
+ t["\u2F4B"] = "\u6B20";
+ t["\u2F4C"] = "\u6B62";
+ t["\u2F4D"] = "\u6B79";
+ t["\u2F4E"] = "\u6BB3";
+ t["\u2F4F"] = "\u6BCB";
+ t["\u2F50"] = "\u6BD4";
+ t["\u2F51"] = "\u6BDB";
+ t["\u2F52"] = "\u6C0F";
+ t["\u2F53"] = "\u6C14";
+ t["\u2F54"] = "\u6C34";
+ t["\u2F55"] = "\u706B";
+ t["\u2F56"] = "\u722A";
+ t["\u2F57"] = "\u7236";
+ t["\u2F58"] = "\u723B";
+ t["\u2F59"] = "\u723F";
+ t["\u2F5A"] = "\u7247";
+ t["\u2F5B"] = "\u7259";
+ t["\u2F5C"] = "\u725B";
+ t["\u2F5D"] = "\u72AC";
+ t["\u2F5E"] = "\u7384";
+ t["\u2F5F"] = "\u7389";
+ t["\u2F60"] = "\u74DC";
+ t["\u2F61"] = "\u74E6";
+ t["\u2F62"] = "\u7518";
+ t["\u2F63"] = "\u751F";
+ t["\u2F64"] = "\u7528";
+ t["\u2F65"] = "\u7530";
+ t["\u2F66"] = "\u758B";
+ t["\u2F67"] = "\u7592";
+ t["\u2F68"] = "\u7676";
+ t["\u2F69"] = "\u767D";
+ t["\u2F6A"] = "\u76AE";
+ t["\u2F6B"] = "\u76BF";
+ t["\u2F6C"] = "\u76EE";
+ t["\u2F6D"] = "\u77DB";
+ t["\u2F6E"] = "\u77E2";
+ t["\u2F6F"] = "\u77F3";
+ t["\u2F70"] = "\u793A";
+ t["\u2F71"] = "\u79B8";
+ t["\u2F72"] = "\u79BE";
+ t["\u2F73"] = "\u7A74";
+ t["\u2F74"] = "\u7ACB";
+ t["\u2F75"] = "\u7AF9";
+ t["\u2F76"] = "\u7C73";
+ t["\u2F77"] = "\u7CF8";
+ t["\u2F78"] = "\u7F36";
+ t["\u2F79"] = "\u7F51";
+ t["\u2F7A"] = "\u7F8A";
+ t["\u2F7B"] = "\u7FBD";
+ t["\u2F7C"] = "\u8001";
+ t["\u2F7D"] = "\u800C";
+ t["\u2F7E"] = "\u8012";
+ t["\u2F7F"] = "\u8033";
+ t["\u2F80"] = "\u807F";
+ t["\u2F81"] = "\u8089";
+ t["\u2F82"] = "\u81E3";
+ t["\u2F83"] = "\u81EA";
+ t["\u2F84"] = "\u81F3";
+ t["\u2F85"] = "\u81FC";
+ t["\u2F86"] = "\u820C";
+ t["\u2F87"] = "\u821B";
+ t["\u2F88"] = "\u821F";
+ t["\u2F89"] = "\u826E";
+ t["\u2F8A"] = "\u8272";
+ t["\u2F8B"] = "\u8278";
+ t["\u2F8C"] = "\u864D";
+ t["\u2F8D"] = "\u866B";
+ t["\u2F8E"] = "\u8840";
+ t["\u2F8F"] = "\u884C";
+ t["\u2F90"] = "\u8863";
+ t["\u2F91"] = "\u897E";
+ t["\u2F92"] = "\u898B";
+ t["\u2F93"] = "\u89D2";
+ t["\u2F94"] = "\u8A00";
+ t["\u2F95"] = "\u8C37";
+ t["\u2F96"] = "\u8C46";
+ t["\u2F97"] = "\u8C55";
+ t["\u2F98"] = "\u8C78";
+ t["\u2F99"] = "\u8C9D";
+ t["\u2F9A"] = "\u8D64";
+ t["\u2F9B"] = "\u8D70";
+ t["\u2F9C"] = "\u8DB3";
+ t["\u2F9D"] = "\u8EAB";
+ t["\u2F9E"] = "\u8ECA";
+ t["\u2F9F"] = "\u8F9B";
+ t["\u2FA0"] = "\u8FB0";
+ t["\u2FA1"] = "\u8FB5";
+ t["\u2FA2"] = "\u9091";
+ t["\u2FA3"] = "\u9149";
+ t["\u2FA4"] = "\u91C6";
+ t["\u2FA5"] = "\u91CC";
+ t["\u2FA6"] = "\u91D1";
+ t["\u2FA7"] = "\u9577";
+ t["\u2FA8"] = "\u9580";
+ t["\u2FA9"] = "\u961C";
+ t["\u2FAA"] = "\u96B6";
+ t["\u2FAB"] = "\u96B9";
+ t["\u2FAC"] = "\u96E8";
+ t["\u2FAD"] = "\u9751";
+ t["\u2FAE"] = "\u975E";
+ t["\u2FAF"] = "\u9762";
+ t["\u2FB0"] = "\u9769";
+ t["\u2FB1"] = "\u97CB";
+ t["\u2FB2"] = "\u97ED";
+ t["\u2FB3"] = "\u97F3";
+ t["\u2FB4"] = "\u9801";
+ t["\u2FB5"] = "\u98A8";
+ t["\u2FB6"] = "\u98DB";
+ t["\u2FB7"] = "\u98DF";
+ t["\u2FB8"] = "\u9996";
+ t["\u2FB9"] = "\u9999";
+ t["\u2FBA"] = "\u99AC";
+ t["\u2FBB"] = "\u9AA8";
+ t["\u2FBC"] = "\u9AD8";
+ t["\u2FBD"] = "\u9ADF";
+ t["\u2FBE"] = "\u9B25";
+ t["\u2FBF"] = "\u9B2F";
+ t["\u2FC0"] = "\u9B32";
+ t["\u2FC1"] = "\u9B3C";
+ t["\u2FC2"] = "\u9B5A";
+ t["\u2FC3"] = "\u9CE5";
+ t["\u2FC4"] = "\u9E75";
+ t["\u2FC5"] = "\u9E7F";
+ t["\u2FC6"] = "\u9EA5";
+ t["\u2FC7"] = "\u9EBB";
+ t["\u2FC8"] = "\u9EC3";
+ t["\u2FC9"] = "\u9ECD";
+ t["\u2FCA"] = "\u9ED1";
+ t["\u2FCB"] = "\u9EF9";
+ t["\u2FCC"] = "\u9EFD";
+ t["\u2FCD"] = "\u9F0E";
+ t["\u2FCE"] = "\u9F13";
+ t["\u2FCF"] = "\u9F20";
+ t["\u2FD0"] = "\u9F3B";
+ t["\u2FD1"] = "\u9F4A";
+ t["\u2FD2"] = "\u9F52";
+ t["\u2FD3"] = "\u9F8D";
+ t["\u2FD4"] = "\u9F9C";
+ t["\u2FD5"] = "\u9FA0";
+ t["\u3036"] = "\u3012";
+ t["\u3038"] = "\u5341";
+ t["\u3039"] = "\u5344";
+ t["\u303A"] = "\u5345";
+ t["\u309B"] = "\u0020\u3099";
+ t["\u309C"] = "\u0020\u309A";
+ t["\u3131"] = "\u1100";
+ t["\u3132"] = "\u1101";
+ t["\u3133"] = "\u11AA";
+ t["\u3134"] = "\u1102";
+ t["\u3135"] = "\u11AC";
+ t["\u3136"] = "\u11AD";
+ t["\u3137"] = "\u1103";
+ t["\u3138"] = "\u1104";
+ t["\u3139"] = "\u1105";
+ t["\u313A"] = "\u11B0";
+ t["\u313B"] = "\u11B1";
+ t["\u313C"] = "\u11B2";
+ t["\u313D"] = "\u11B3";
+ t["\u313E"] = "\u11B4";
+ t["\u313F"] = "\u11B5";
+ t["\u3140"] = "\u111A";
+ t["\u3141"] = "\u1106";
+ t["\u3142"] = "\u1107";
+ t["\u3143"] = "\u1108";
+ t["\u3144"] = "\u1121";
+ t["\u3145"] = "\u1109";
+ t["\u3146"] = "\u110A";
+ t["\u3147"] = "\u110B";
+ t["\u3148"] = "\u110C";
+ t["\u3149"] = "\u110D";
+ t["\u314A"] = "\u110E";
+ t["\u314B"] = "\u110F";
+ t["\u314C"] = "\u1110";
+ t["\u314D"] = "\u1111";
+ t["\u314E"] = "\u1112";
+ t["\u314F"] = "\u1161";
+ t["\u3150"] = "\u1162";
+ t["\u3151"] = "\u1163";
+ t["\u3152"] = "\u1164";
+ t["\u3153"] = "\u1165";
+ t["\u3154"] = "\u1166";
+ t["\u3155"] = "\u1167";
+ t["\u3156"] = "\u1168";
+ t["\u3157"] = "\u1169";
+ t["\u3158"] = "\u116A";
+ t["\u3159"] = "\u116B";
+ t["\u315A"] = "\u116C";
+ t["\u315B"] = "\u116D";
+ t["\u315C"] = "\u116E";
+ t["\u315D"] = "\u116F";
+ t["\u315E"] = "\u1170";
+ t["\u315F"] = "\u1171";
+ t["\u3160"] = "\u1172";
+ t["\u3161"] = "\u1173";
+ t["\u3162"] = "\u1174";
+ t["\u3163"] = "\u1175";
+ t["\u3164"] = "\u1160";
+ t["\u3165"] = "\u1114";
+ t["\u3166"] = "\u1115";
+ t["\u3167"] = "\u11C7";
+ t["\u3168"] = "\u11C8";
+ t["\u3169"] = "\u11CC";
+ t["\u316A"] = "\u11CE";
+ t["\u316B"] = "\u11D3";
+ t["\u316C"] = "\u11D7";
+ t["\u316D"] = "\u11D9";
+ t["\u316E"] = "\u111C";
+ t["\u316F"] = "\u11DD";
+ t["\u3170"] = "\u11DF";
+ t["\u3171"] = "\u111D";
+ t["\u3172"] = "\u111E";
+ t["\u3173"] = "\u1120";
+ t["\u3174"] = "\u1122";
+ t["\u3175"] = "\u1123";
+ t["\u3176"] = "\u1127";
+ t["\u3177"] = "\u1129";
+ t["\u3178"] = "\u112B";
+ t["\u3179"] = "\u112C";
+ t["\u317A"] = "\u112D";
+ t["\u317B"] = "\u112E";
+ t["\u317C"] = "\u112F";
+ t["\u317D"] = "\u1132";
+ t["\u317E"] = "\u1136";
+ t["\u317F"] = "\u1140";
+ t["\u3180"] = "\u1147";
+ t["\u3181"] = "\u114C";
+ t["\u3182"] = "\u11F1";
+ t["\u3183"] = "\u11F2";
+ t["\u3184"] = "\u1157";
+ t["\u3185"] = "\u1158";
+ t["\u3186"] = "\u1159";
+ t["\u3187"] = "\u1184";
+ t["\u3188"] = "\u1185";
+ t["\u3189"] = "\u1188";
+ t["\u318A"] = "\u1191";
+ t["\u318B"] = "\u1192";
+ t["\u318C"] = "\u1194";
+ t["\u318D"] = "\u119E";
+ t["\u318E"] = "\u11A1";
+ t["\u3200"] = "\u0028\u1100\u0029";
+ t["\u3201"] = "\u0028\u1102\u0029";
+ t["\u3202"] = "\u0028\u1103\u0029";
+ t["\u3203"] = "\u0028\u1105\u0029";
+ t["\u3204"] = "\u0028\u1106\u0029";
+ t["\u3205"] = "\u0028\u1107\u0029";
+ t["\u3206"] = "\u0028\u1109\u0029";
+ t["\u3207"] = "\u0028\u110B\u0029";
+ t["\u3208"] = "\u0028\u110C\u0029";
+ t["\u3209"] = "\u0028\u110E\u0029";
+ t["\u320A"] = "\u0028\u110F\u0029";
+ t["\u320B"] = "\u0028\u1110\u0029";
+ t["\u320C"] = "\u0028\u1111\u0029";
+ t["\u320D"] = "\u0028\u1112\u0029";
+ t["\u320E"] = "\u0028\u1100\u1161\u0029";
+ t["\u320F"] = "\u0028\u1102\u1161\u0029";
+ t["\u3210"] = "\u0028\u1103\u1161\u0029";
+ t["\u3211"] = "\u0028\u1105\u1161\u0029";
+ t["\u3212"] = "\u0028\u1106\u1161\u0029";
+ t["\u3213"] = "\u0028\u1107\u1161\u0029";
+ t["\u3214"] = "\u0028\u1109\u1161\u0029";
+ t["\u3215"] = "\u0028\u110B\u1161\u0029";
+ t["\u3216"] = "\u0028\u110C\u1161\u0029";
+ t["\u3217"] = "\u0028\u110E\u1161\u0029";
+ t["\u3218"] = "\u0028\u110F\u1161\u0029";
+ t["\u3219"] = "\u0028\u1110\u1161\u0029";
+ t["\u321A"] = "\u0028\u1111\u1161\u0029";
+ t["\u321B"] = "\u0028\u1112\u1161\u0029";
+ t["\u321C"] = "\u0028\u110C\u116E\u0029";
+ t["\u321D"] = "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029";
+ t["\u321E"] = "\u0028\u110B\u1169\u1112\u116E\u0029";
+ t["\u3220"] = "\u0028\u4E00\u0029";
+ t["\u3221"] = "\u0028\u4E8C\u0029";
+ t["\u3222"] = "\u0028\u4E09\u0029";
+ t["\u3223"] = "\u0028\u56DB\u0029";
+ t["\u3224"] = "\u0028\u4E94\u0029";
+ t["\u3225"] = "\u0028\u516D\u0029";
+ t["\u3226"] = "\u0028\u4E03\u0029";
+ t["\u3227"] = "\u0028\u516B\u0029";
+ t["\u3228"] = "\u0028\u4E5D\u0029";
+ t["\u3229"] = "\u0028\u5341\u0029";
+ t["\u322A"] = "\u0028\u6708\u0029";
+ t["\u322B"] = "\u0028\u706B\u0029";
+ t["\u322C"] = "\u0028\u6C34\u0029";
+ t["\u322D"] = "\u0028\u6728\u0029";
+ t["\u322E"] = "\u0028\u91D1\u0029";
+ t["\u322F"] = "\u0028\u571F\u0029";
+ t["\u3230"] = "\u0028\u65E5\u0029";
+ t["\u3231"] = "\u0028\u682A\u0029";
+ t["\u3232"] = "\u0028\u6709\u0029";
+ t["\u3233"] = "\u0028\u793E\u0029";
+ t["\u3234"] = "\u0028\u540D\u0029";
+ t["\u3235"] = "\u0028\u7279\u0029";
+ t["\u3236"] = "\u0028\u8CA1\u0029";
+ t["\u3237"] = "\u0028\u795D\u0029";
+ t["\u3238"] = "\u0028\u52B4\u0029";
+ t["\u3239"] = "\u0028\u4EE3\u0029";
+ t["\u323A"] = "\u0028\u547C\u0029";
+ t["\u323B"] = "\u0028\u5B66\u0029";
+ t["\u323C"] = "\u0028\u76E3\u0029";
+ t["\u323D"] = "\u0028\u4F01\u0029";
+ t["\u323E"] = "\u0028\u8CC7\u0029";
+ t["\u323F"] = "\u0028\u5354\u0029";
+ t["\u3240"] = "\u0028\u796D\u0029";
+ t["\u3241"] = "\u0028\u4F11\u0029";
+ t["\u3242"] = "\u0028\u81EA\u0029";
+ t["\u3243"] = "\u0028\u81F3\u0029";
+ t["\u32C0"] = "\u0031\u6708";
+ t["\u32C1"] = "\u0032\u6708";
+ t["\u32C2"] = "\u0033\u6708";
+ t["\u32C3"] = "\u0034\u6708";
+ t["\u32C4"] = "\u0035\u6708";
+ t["\u32C5"] = "\u0036\u6708";
+ t["\u32C6"] = "\u0037\u6708";
+ t["\u32C7"] = "\u0038\u6708";
+ t["\u32C8"] = "\u0039\u6708";
+ t["\u32C9"] = "\u0031\u0030\u6708";
+ t["\u32CA"] = "\u0031\u0031\u6708";
+ t["\u32CB"] = "\u0031\u0032\u6708";
+ t["\u3358"] = "\u0030\u70B9";
+ t["\u3359"] = "\u0031\u70B9";
+ t["\u335A"] = "\u0032\u70B9";
+ t["\u335B"] = "\u0033\u70B9";
+ t["\u335C"] = "\u0034\u70B9";
+ t["\u335D"] = "\u0035\u70B9";
+ t["\u335E"] = "\u0036\u70B9";
+ t["\u335F"] = "\u0037\u70B9";
+ t["\u3360"] = "\u0038\u70B9";
+ t["\u3361"] = "\u0039\u70B9";
+ t["\u3362"] = "\u0031\u0030\u70B9";
+ t["\u3363"] = "\u0031\u0031\u70B9";
+ t["\u3364"] = "\u0031\u0032\u70B9";
+ t["\u3365"] = "\u0031\u0033\u70B9";
+ t["\u3366"] = "\u0031\u0034\u70B9";
+ t["\u3367"] = "\u0031\u0035\u70B9";
+ t["\u3368"] = "\u0031\u0036\u70B9";
+ t["\u3369"] = "\u0031\u0037\u70B9";
+ t["\u336A"] = "\u0031\u0038\u70B9";
+ t["\u336B"] = "\u0031\u0039\u70B9";
+ t["\u336C"] = "\u0032\u0030\u70B9";
+ t["\u336D"] = "\u0032\u0031\u70B9";
+ t["\u336E"] = "\u0032\u0032\u70B9";
+ t["\u336F"] = "\u0032\u0033\u70B9";
+ t["\u3370"] = "\u0032\u0034\u70B9";
+ t["\u33E0"] = "\u0031\u65E5";
+ t["\u33E1"] = "\u0032\u65E5";
+ t["\u33E2"] = "\u0033\u65E5";
+ t["\u33E3"] = "\u0034\u65E5";
+ t["\u33E4"] = "\u0035\u65E5";
+ t["\u33E5"] = "\u0036\u65E5";
+ t["\u33E6"] = "\u0037\u65E5";
+ t["\u33E7"] = "\u0038\u65E5";
+ t["\u33E8"] = "\u0039\u65E5";
+ t["\u33E9"] = "\u0031\u0030\u65E5";
+ t["\u33EA"] = "\u0031\u0031\u65E5";
+ t["\u33EB"] = "\u0031\u0032\u65E5";
+ t["\u33EC"] = "\u0031\u0033\u65E5";
+ t["\u33ED"] = "\u0031\u0034\u65E5";
+ t["\u33EE"] = "\u0031\u0035\u65E5";
+ t["\u33EF"] = "\u0031\u0036\u65E5";
+ t["\u33F0"] = "\u0031\u0037\u65E5";
+ t["\u33F1"] = "\u0031\u0038\u65E5";
+ t["\u33F2"] = "\u0031\u0039\u65E5";
+ t["\u33F3"] = "\u0032\u0030\u65E5";
+ t["\u33F4"] = "\u0032\u0031\u65E5";
+ t["\u33F5"] = "\u0032\u0032\u65E5";
+ t["\u33F6"] = "\u0032\u0033\u65E5";
+ t["\u33F7"] = "\u0032\u0034\u65E5";
+ t["\u33F8"] = "\u0032\u0035\u65E5";
+ t["\u33F9"] = "\u0032\u0036\u65E5";
+ t["\u33FA"] = "\u0032\u0037\u65E5";
+ t["\u33FB"] = "\u0032\u0038\u65E5";
+ t["\u33FC"] = "\u0032\u0039\u65E5";
+ t["\u33FD"] = "\u0033\u0030\u65E5";
+ t["\u33FE"] = "\u0033\u0031\u65E5";
+ t["\uFB00"] = "\u0066\u0066";
+ t["\uFB01"] = "\u0066\u0069";
+ t["\uFB02"] = "\u0066\u006C";
+ t["\uFB03"] = "\u0066\u0066\u0069";
+ t["\uFB04"] = "\u0066\u0066\u006C";
+ t["\uFB05"] = "\u017F\u0074";
+ t["\uFB06"] = "\u0073\u0074";
+ t["\uFB13"] = "\u0574\u0576";
+ t["\uFB14"] = "\u0574\u0565";
+ t["\uFB15"] = "\u0574\u056B";
+ t["\uFB16"] = "\u057E\u0576";
+ t["\uFB17"] = "\u0574\u056D";
+ t["\uFB4F"] = "\u05D0\u05DC";
+ t["\uFB50"] = "\u0671";
+ t["\uFB51"] = "\u0671";
+ t["\uFB52"] = "\u067B";
+ t["\uFB53"] = "\u067B";
+ t["\uFB54"] = "\u067B";
+ t["\uFB55"] = "\u067B";
+ t["\uFB56"] = "\u067E";
+ t["\uFB57"] = "\u067E";
+ t["\uFB58"] = "\u067E";
+ t["\uFB59"] = "\u067E";
+ t["\uFB5A"] = "\u0680";
+ t["\uFB5B"] = "\u0680";
+ t["\uFB5C"] = "\u0680";
+ t["\uFB5D"] = "\u0680";
+ t["\uFB5E"] = "\u067A";
+ t["\uFB5F"] = "\u067A";
+ t["\uFB60"] = "\u067A";
+ t["\uFB61"] = "\u067A";
+ t["\uFB62"] = "\u067F";
+ t["\uFB63"] = "\u067F";
+ t["\uFB64"] = "\u067F";
+ t["\uFB65"] = "\u067F";
+ t["\uFB66"] = "\u0679";
+ t["\uFB67"] = "\u0679";
+ t["\uFB68"] = "\u0679";
+ t["\uFB69"] = "\u0679";
+ t["\uFB6A"] = "\u06A4";
+ t["\uFB6B"] = "\u06A4";
+ t["\uFB6C"] = "\u06A4";
+ t["\uFB6D"] = "\u06A4";
+ t["\uFB6E"] = "\u06A6";
+ t["\uFB6F"] = "\u06A6";
+ t["\uFB70"] = "\u06A6";
+ t["\uFB71"] = "\u06A6";
+ t["\uFB72"] = "\u0684";
+ t["\uFB73"] = "\u0684";
+ t["\uFB74"] = "\u0684";
+ t["\uFB75"] = "\u0684";
+ t["\uFB76"] = "\u0683";
+ t["\uFB77"] = "\u0683";
+ t["\uFB78"] = "\u0683";
+ t["\uFB79"] = "\u0683";
+ t["\uFB7A"] = "\u0686";
+ t["\uFB7B"] = "\u0686";
+ t["\uFB7C"] = "\u0686";
+ t["\uFB7D"] = "\u0686";
+ t["\uFB7E"] = "\u0687";
+ t["\uFB7F"] = "\u0687";
+ t["\uFB80"] = "\u0687";
+ t["\uFB81"] = "\u0687";
+ t["\uFB82"] = "\u068D";
+ t["\uFB83"] = "\u068D";
+ t["\uFB84"] = "\u068C";
+ t["\uFB85"] = "\u068C";
+ t["\uFB86"] = "\u068E";
+ t["\uFB87"] = "\u068E";
+ t["\uFB88"] = "\u0688";
+ t["\uFB89"] = "\u0688";
+ t["\uFB8A"] = "\u0698";
+ t["\uFB8B"] = "\u0698";
+ t["\uFB8C"] = "\u0691";
+ t["\uFB8D"] = "\u0691";
+ t["\uFB8E"] = "\u06A9";
+ t["\uFB8F"] = "\u06A9";
+ t["\uFB90"] = "\u06A9";
+ t["\uFB91"] = "\u06A9";
+ t["\uFB92"] = "\u06AF";
+ t["\uFB93"] = "\u06AF";
+ t["\uFB94"] = "\u06AF";
+ t["\uFB95"] = "\u06AF";
+ t["\uFB96"] = "\u06B3";
+ t["\uFB97"] = "\u06B3";
+ t["\uFB98"] = "\u06B3";
+ t["\uFB99"] = "\u06B3";
+ t["\uFB9A"] = "\u06B1";
+ t["\uFB9B"] = "\u06B1";
+ t["\uFB9C"] = "\u06B1";
+ t["\uFB9D"] = "\u06B1";
+ t["\uFB9E"] = "\u06BA";
+ t["\uFB9F"] = "\u06BA";
+ t["\uFBA0"] = "\u06BB";
+ t["\uFBA1"] = "\u06BB";
+ t["\uFBA2"] = "\u06BB";
+ t["\uFBA3"] = "\u06BB";
+ t["\uFBA4"] = "\u06C0";
+ t["\uFBA5"] = "\u06C0";
+ t["\uFBA6"] = "\u06C1";
+ t["\uFBA7"] = "\u06C1";
+ t["\uFBA8"] = "\u06C1";
+ t["\uFBA9"] = "\u06C1";
+ t["\uFBAA"] = "\u06BE";
+ t["\uFBAB"] = "\u06BE";
+ t["\uFBAC"] = "\u06BE";
+ t["\uFBAD"] = "\u06BE";
+ t["\uFBAE"] = "\u06D2";
+ t["\uFBAF"] = "\u06D2";
+ t["\uFBB0"] = "\u06D3";
+ t["\uFBB1"] = "\u06D3";
+ t["\uFBD3"] = "\u06AD";
+ t["\uFBD4"] = "\u06AD";
+ t["\uFBD5"] = "\u06AD";
+ t["\uFBD6"] = "\u06AD";
+ t["\uFBD7"] = "\u06C7";
+ t["\uFBD8"] = "\u06C7";
+ t["\uFBD9"] = "\u06C6";
+ t["\uFBDA"] = "\u06C6";
+ t["\uFBDB"] = "\u06C8";
+ t["\uFBDC"] = "\u06C8";
+ t["\uFBDD"] = "\u0677";
+ t["\uFBDE"] = "\u06CB";
+ t["\uFBDF"] = "\u06CB";
+ t["\uFBE0"] = "\u06C5";
+ t["\uFBE1"] = "\u06C5";
+ t["\uFBE2"] = "\u06C9";
+ t["\uFBE3"] = "\u06C9";
+ t["\uFBE4"] = "\u06D0";
+ t["\uFBE5"] = "\u06D0";
+ t["\uFBE6"] = "\u06D0";
+ t["\uFBE7"] = "\u06D0";
+ t["\uFBE8"] = "\u0649";
+ t["\uFBE9"] = "\u0649";
+ t["\uFBEA"] = "\u0626\u0627";
+ t["\uFBEB"] = "\u0626\u0627";
+ t["\uFBEC"] = "\u0626\u06D5";
+ t["\uFBED"] = "\u0626\u06D5";
+ t["\uFBEE"] = "\u0626\u0648";
+ t["\uFBEF"] = "\u0626\u0648";
+ t["\uFBF0"] = "\u0626\u06C7";
+ t["\uFBF1"] = "\u0626\u06C7";
+ t["\uFBF2"] = "\u0626\u06C6";
+ t["\uFBF3"] = "\u0626\u06C6";
+ t["\uFBF4"] = "\u0626\u06C8";
+ t["\uFBF5"] = "\u0626\u06C8";
+ t["\uFBF6"] = "\u0626\u06D0";
+ t["\uFBF7"] = "\u0626\u06D0";
+ t["\uFBF8"] = "\u0626\u06D0";
+ t["\uFBF9"] = "\u0626\u0649";
+ t["\uFBFA"] = "\u0626\u0649";
+ t["\uFBFB"] = "\u0626\u0649";
+ t["\uFBFC"] = "\u06CC";
+ t["\uFBFD"] = "\u06CC";
+ t["\uFBFE"] = "\u06CC";
+ t["\uFBFF"] = "\u06CC";
+ t["\uFC00"] = "\u0626\u062C";
+ t["\uFC01"] = "\u0626\u062D";
+ t["\uFC02"] = "\u0626\u0645";
+ t["\uFC03"] = "\u0626\u0649";
+ t["\uFC04"] = "\u0626\u064A";
+ t["\uFC05"] = "\u0628\u062C";
+ t["\uFC06"] = "\u0628\u062D";
+ t["\uFC07"] = "\u0628\u062E";
+ t["\uFC08"] = "\u0628\u0645";
+ t["\uFC09"] = "\u0628\u0649";
+ t["\uFC0A"] = "\u0628\u064A";
+ t["\uFC0B"] = "\u062A\u062C";
+ t["\uFC0C"] = "\u062A\u062D";
+ t["\uFC0D"] = "\u062A\u062E";
+ t["\uFC0E"] = "\u062A\u0645";
+ t["\uFC0F"] = "\u062A\u0649";
+ t["\uFC10"] = "\u062A\u064A";
+ t["\uFC11"] = "\u062B\u062C";
+ t["\uFC12"] = "\u062B\u0645";
+ t["\uFC13"] = "\u062B\u0649";
+ t["\uFC14"] = "\u062B\u064A";
+ t["\uFC15"] = "\u062C\u062D";
+ t["\uFC16"] = "\u062C\u0645";
+ t["\uFC17"] = "\u062D\u062C";
+ t["\uFC18"] = "\u062D\u0645";
+ t["\uFC19"] = "\u062E\u062C";
+ t["\uFC1A"] = "\u062E\u062D";
+ t["\uFC1B"] = "\u062E\u0645";
+ t["\uFC1C"] = "\u0633\u062C";
+ t["\uFC1D"] = "\u0633\u062D";
+ t["\uFC1E"] = "\u0633\u062E";
+ t["\uFC1F"] = "\u0633\u0645";
+ t["\uFC20"] = "\u0635\u062D";
+ t["\uFC21"] = "\u0635\u0645";
+ t["\uFC22"] = "\u0636\u062C";
+ t["\uFC23"] = "\u0636\u062D";
+ t["\uFC24"] = "\u0636\u062E";
+ t["\uFC25"] = "\u0636\u0645";
+ t["\uFC26"] = "\u0637\u062D";
+ t["\uFC27"] = "\u0637\u0645";
+ t["\uFC28"] = "\u0638\u0645";
+ t["\uFC29"] = "\u0639\u062C";
+ t["\uFC2A"] = "\u0639\u0645";
+ t["\uFC2B"] = "\u063A\u062C";
+ t["\uFC2C"] = "\u063A\u0645";
+ t["\uFC2D"] = "\u0641\u062C";
+ t["\uFC2E"] = "\u0641\u062D";
+ t["\uFC2F"] = "\u0641\u062E";
+ t["\uFC30"] = "\u0641\u0645";
+ t["\uFC31"] = "\u0641\u0649";
+ t["\uFC32"] = "\u0641\u064A";
+ t["\uFC33"] = "\u0642\u062D";
+ t["\uFC34"] = "\u0642\u0645";
+ t["\uFC35"] = "\u0642\u0649";
+ t["\uFC36"] = "\u0642\u064A";
+ t["\uFC37"] = "\u0643\u0627";
+ t["\uFC38"] = "\u0643\u062C";
+ t["\uFC39"] = "\u0643\u062D";
+ t["\uFC3A"] = "\u0643\u062E";
+ t["\uFC3B"] = "\u0643\u0644";
+ t["\uFC3C"] = "\u0643\u0645";
+ t["\uFC3D"] = "\u0643\u0649";
+ t["\uFC3E"] = "\u0643\u064A";
+ t["\uFC3F"] = "\u0644\u062C";
+ t["\uFC40"] = "\u0644\u062D";
+ t["\uFC41"] = "\u0644\u062E";
+ t["\uFC42"] = "\u0644\u0645";
+ t["\uFC43"] = "\u0644\u0649";
+ t["\uFC44"] = "\u0644\u064A";
+ t["\uFC45"] = "\u0645\u062C";
+ t["\uFC46"] = "\u0645\u062D";
+ t["\uFC47"] = "\u0645\u062E";
+ t["\uFC48"] = "\u0645\u0645";
+ t["\uFC49"] = "\u0645\u0649";
+ t["\uFC4A"] = "\u0645\u064A";
+ t["\uFC4B"] = "\u0646\u062C";
+ t["\uFC4C"] = "\u0646\u062D";
+ t["\uFC4D"] = "\u0646\u062E";
+ t["\uFC4E"] = "\u0646\u0645";
+ t["\uFC4F"] = "\u0646\u0649";
+ t["\uFC50"] = "\u0646\u064A";
+ t["\uFC51"] = "\u0647\u062C";
+ t["\uFC52"] = "\u0647\u0645";
+ t["\uFC53"] = "\u0647\u0649";
+ t["\uFC54"] = "\u0647\u064A";
+ t["\uFC55"] = "\u064A\u062C";
+ t["\uFC56"] = "\u064A\u062D";
+ t["\uFC57"] = "\u064A\u062E";
+ t["\uFC58"] = "\u064A\u0645";
+ t["\uFC59"] = "\u064A\u0649";
+ t["\uFC5A"] = "\u064A\u064A";
+ t["\uFC5B"] = "\u0630\u0670";
+ t["\uFC5C"] = "\u0631\u0670";
+ t["\uFC5D"] = "\u0649\u0670";
+ t["\uFC5E"] = "\u0020\u064C\u0651";
+ t["\uFC5F"] = "\u0020\u064D\u0651";
+ t["\uFC60"] = "\u0020\u064E\u0651";
+ t["\uFC61"] = "\u0020\u064F\u0651";
+ t["\uFC62"] = "\u0020\u0650\u0651";
+ t["\uFC63"] = "\u0020\u0651\u0670";
+ t["\uFC64"] = "\u0626\u0631";
+ t["\uFC65"] = "\u0626\u0632";
+ t["\uFC66"] = "\u0626\u0645";
+ t["\uFC67"] = "\u0626\u0646";
+ t["\uFC68"] = "\u0626\u0649";
+ t["\uFC69"] = "\u0626\u064A";
+ t["\uFC6A"] = "\u0628\u0631";
+ t["\uFC6B"] = "\u0628\u0632";
+ t["\uFC6C"] = "\u0628\u0645";
+ t["\uFC6D"] = "\u0628\u0646";
+ t["\uFC6E"] = "\u0628\u0649";
+ t["\uFC6F"] = "\u0628\u064A";
+ t["\uFC70"] = "\u062A\u0631";
+ t["\uFC71"] = "\u062A\u0632";
+ t["\uFC72"] = "\u062A\u0645";
+ t["\uFC73"] = "\u062A\u0646";
+ t["\uFC74"] = "\u062A\u0649";
+ t["\uFC75"] = "\u062A\u064A";
+ t["\uFC76"] = "\u062B\u0631";
+ t["\uFC77"] = "\u062B\u0632";
+ t["\uFC78"] = "\u062B\u0645";
+ t["\uFC79"] = "\u062B\u0646";
+ t["\uFC7A"] = "\u062B\u0649";
+ t["\uFC7B"] = "\u062B\u064A";
+ t["\uFC7C"] = "\u0641\u0649";
+ t["\uFC7D"] = "\u0641\u064A";
+ t["\uFC7E"] = "\u0642\u0649";
+ t["\uFC7F"] = "\u0642\u064A";
+ t["\uFC80"] = "\u0643\u0627";
+ t["\uFC81"] = "\u0643\u0644";
+ t["\uFC82"] = "\u0643\u0645";
+ t["\uFC83"] = "\u0643\u0649";
+ t["\uFC84"] = "\u0643\u064A";
+ t["\uFC85"] = "\u0644\u0645";
+ t["\uFC86"] = "\u0644\u0649";
+ t["\uFC87"] = "\u0644\u064A";
+ t["\uFC88"] = "\u0645\u0627";
+ t["\uFC89"] = "\u0645\u0645";
+ t["\uFC8A"] = "\u0646\u0631";
+ t["\uFC8B"] = "\u0646\u0632";
+ t["\uFC8C"] = "\u0646\u0645";
+ t["\uFC8D"] = "\u0646\u0646";
+ t["\uFC8E"] = "\u0646\u0649";
+ t["\uFC8F"] = "\u0646\u064A";
+ t["\uFC90"] = "\u0649\u0670";
+ t["\uFC91"] = "\u064A\u0631";
+ t["\uFC92"] = "\u064A\u0632";
+ t["\uFC93"] = "\u064A\u0645";
+ t["\uFC94"] = "\u064A\u0646";
+ t["\uFC95"] = "\u064A\u0649";
+ t["\uFC96"] = "\u064A\u064A";
+ t["\uFC97"] = "\u0626\u062C";
+ t["\uFC98"] = "\u0626\u062D";
+ t["\uFC99"] = "\u0626\u062E";
+ t["\uFC9A"] = "\u0626\u0645";
+ t["\uFC9B"] = "\u0626\u0647";
+ t["\uFC9C"] = "\u0628\u062C";
+ t["\uFC9D"] = "\u0628\u062D";
+ t["\uFC9E"] = "\u0628\u062E";
+ t["\uFC9F"] = "\u0628\u0645";
+ t["\uFCA0"] = "\u0628\u0647";
+ t["\uFCA1"] = "\u062A\u062C";
+ t["\uFCA2"] = "\u062A\u062D";
+ t["\uFCA3"] = "\u062A\u062E";
+ t["\uFCA4"] = "\u062A\u0645";
+ t["\uFCA5"] = "\u062A\u0647";
+ t["\uFCA6"] = "\u062B\u0645";
+ t["\uFCA7"] = "\u062C\u062D";
+ t["\uFCA8"] = "\u062C\u0645";
+ t["\uFCA9"] = "\u062D\u062C";
+ t["\uFCAA"] = "\u062D\u0645";
+ t["\uFCAB"] = "\u062E\u062C";
+ t["\uFCAC"] = "\u062E\u0645";
+ t["\uFCAD"] = "\u0633\u062C";
+ t["\uFCAE"] = "\u0633\u062D";
+ t["\uFCAF"] = "\u0633\u062E";
+ t["\uFCB0"] = "\u0633\u0645";
+ t["\uFCB1"] = "\u0635\u062D";
+ t["\uFCB2"] = "\u0635\u062E";
+ t["\uFCB3"] = "\u0635\u0645";
+ t["\uFCB4"] = "\u0636\u062C";
+ t["\uFCB5"] = "\u0636\u062D";
+ t["\uFCB6"] = "\u0636\u062E";
+ t["\uFCB7"] = "\u0636\u0645";
+ t["\uFCB8"] = "\u0637\u062D";
+ t["\uFCB9"] = "\u0638\u0645";
+ t["\uFCBA"] = "\u0639\u062C";
+ t["\uFCBB"] = "\u0639\u0645";
+ t["\uFCBC"] = "\u063A\u062C";
+ t["\uFCBD"] = "\u063A\u0645";
+ t["\uFCBE"] = "\u0641\u062C";
+ t["\uFCBF"] = "\u0641\u062D";
+ t["\uFCC0"] = "\u0641\u062E";
+ t["\uFCC1"] = "\u0641\u0645";
+ t["\uFCC2"] = "\u0642\u062D";
+ t["\uFCC3"] = "\u0642\u0645";
+ t["\uFCC4"] = "\u0643\u062C";
+ t["\uFCC5"] = "\u0643\u062D";
+ t["\uFCC6"] = "\u0643\u062E";
+ t["\uFCC7"] = "\u0643\u0644";
+ t["\uFCC8"] = "\u0643\u0645";
+ t["\uFCC9"] = "\u0644\u062C";
+ t["\uFCCA"] = "\u0644\u062D";
+ t["\uFCCB"] = "\u0644\u062E";
+ t["\uFCCC"] = "\u0644\u0645";
+ t["\uFCCD"] = "\u0644\u0647";
+ t["\uFCCE"] = "\u0645\u062C";
+ t["\uFCCF"] = "\u0645\u062D";
+ t["\uFCD0"] = "\u0645\u062E";
+ t["\uFCD1"] = "\u0645\u0645";
+ t["\uFCD2"] = "\u0646\u062C";
+ t["\uFCD3"] = "\u0646\u062D";
+ t["\uFCD4"] = "\u0646\u062E";
+ t["\uFCD5"] = "\u0646\u0645";
+ t["\uFCD6"] = "\u0646\u0647";
+ t["\uFCD7"] = "\u0647\u062C";
+ t["\uFCD8"] = "\u0647\u0645";
+ t["\uFCD9"] = "\u0647\u0670";
+ t["\uFCDA"] = "\u064A\u062C";
+ t["\uFCDB"] = "\u064A\u062D";
+ t["\uFCDC"] = "\u064A\u062E";
+ t["\uFCDD"] = "\u064A\u0645";
+ t["\uFCDE"] = "\u064A\u0647";
+ t["\uFCDF"] = "\u0626\u0645";
+ t["\uFCE0"] = "\u0626\u0647";
+ t["\uFCE1"] = "\u0628\u0645";
+ t["\uFCE2"] = "\u0628\u0647";
+ t["\uFCE3"] = "\u062A\u0645";
+ t["\uFCE4"] = "\u062A\u0647";
+ t["\uFCE5"] = "\u062B\u0645";
+ t["\uFCE6"] = "\u062B\u0647";
+ t["\uFCE7"] = "\u0633\u0645";
+ t["\uFCE8"] = "\u0633\u0647";
+ t["\uFCE9"] = "\u0634\u0645";
+ t["\uFCEA"] = "\u0634\u0647";
+ t["\uFCEB"] = "\u0643\u0644";
+ t["\uFCEC"] = "\u0643\u0645";
+ t["\uFCED"] = "\u0644\u0645";
+ t["\uFCEE"] = "\u0646\u0645";
+ t["\uFCEF"] = "\u0646\u0647";
+ t["\uFCF0"] = "\u064A\u0645";
+ t["\uFCF1"] = "\u064A\u0647";
+ t["\uFCF2"] = "\u0640\u064E\u0651";
+ t["\uFCF3"] = "\u0640\u064F\u0651";
+ t["\uFCF4"] = "\u0640\u0650\u0651";
+ t["\uFCF5"] = "\u0637\u0649";
+ t["\uFCF6"] = "\u0637\u064A";
+ t["\uFCF7"] = "\u0639\u0649";
+ t["\uFCF8"] = "\u0639\u064A";
+ t["\uFCF9"] = "\u063A\u0649";
+ t["\uFCFA"] = "\u063A\u064A";
+ t["\uFCFB"] = "\u0633\u0649";
+ t["\uFCFC"] = "\u0633\u064A";
+ t["\uFCFD"] = "\u0634\u0649";
+ t["\uFCFE"] = "\u0634\u064A";
+ t["\uFCFF"] = "\u062D\u0649";
+ t["\uFD00"] = "\u062D\u064A";
+ t["\uFD01"] = "\u062C\u0649";
+ t["\uFD02"] = "\u062C\u064A";
+ t["\uFD03"] = "\u062E\u0649";
+ t["\uFD04"] = "\u062E\u064A";
+ t["\uFD05"] = "\u0635\u0649";
+ t["\uFD06"] = "\u0635\u064A";
+ t["\uFD07"] = "\u0636\u0649";
+ t["\uFD08"] = "\u0636\u064A";
+ t["\uFD09"] = "\u0634\u062C";
+ t["\uFD0A"] = "\u0634\u062D";
+ t["\uFD0B"] = "\u0634\u062E";
+ t["\uFD0C"] = "\u0634\u0645";
+ t["\uFD0D"] = "\u0634\u0631";
+ t["\uFD0E"] = "\u0633\u0631";
+ t["\uFD0F"] = "\u0635\u0631";
+ t["\uFD10"] = "\u0636\u0631";
+ t["\uFD11"] = "\u0637\u0649";
+ t["\uFD12"] = "\u0637\u064A";
+ t["\uFD13"] = "\u0639\u0649";
+ t["\uFD14"] = "\u0639\u064A";
+ t["\uFD15"] = "\u063A\u0649";
+ t["\uFD16"] = "\u063A\u064A";
+ t["\uFD17"] = "\u0633\u0649";
+ t["\uFD18"] = "\u0633\u064A";
+ t["\uFD19"] = "\u0634\u0649";
+ t["\uFD1A"] = "\u0634\u064A";
+ t["\uFD1B"] = "\u062D\u0649";
+ t["\uFD1C"] = "\u062D\u064A";
+ t["\uFD1D"] = "\u062C\u0649";
+ t["\uFD1E"] = "\u062C\u064A";
+ t["\uFD1F"] = "\u062E\u0649";
+ t["\uFD20"] = "\u062E\u064A";
+ t["\uFD21"] = "\u0635\u0649";
+ t["\uFD22"] = "\u0635\u064A";
+ t["\uFD23"] = "\u0636\u0649";
+ t["\uFD24"] = "\u0636\u064A";
+ t["\uFD25"] = "\u0634\u062C";
+ t["\uFD26"] = "\u0634\u062D";
+ t["\uFD27"] = "\u0634\u062E";
+ t["\uFD28"] = "\u0634\u0645";
+ t["\uFD29"] = "\u0634\u0631";
+ t["\uFD2A"] = "\u0633\u0631";
+ t["\uFD2B"] = "\u0635\u0631";
+ t["\uFD2C"] = "\u0636\u0631";
+ t["\uFD2D"] = "\u0634\u062C";
+ t["\uFD2E"] = "\u0634\u062D";
+ t["\uFD2F"] = "\u0634\u062E";
+ t["\uFD30"] = "\u0634\u0645";
+ t["\uFD31"] = "\u0633\u0647";
+ t["\uFD32"] = "\u0634\u0647";
+ t["\uFD33"] = "\u0637\u0645";
+ t["\uFD34"] = "\u0633\u062C";
+ t["\uFD35"] = "\u0633\u062D";
+ t["\uFD36"] = "\u0633\u062E";
+ t["\uFD37"] = "\u0634\u062C";
+ t["\uFD38"] = "\u0634\u062D";
+ t["\uFD39"] = "\u0634\u062E";
+ t["\uFD3A"] = "\u0637\u0645";
+ t["\uFD3B"] = "\u0638\u0645";
+ t["\uFD3C"] = "\u0627\u064B";
+ t["\uFD3D"] = "\u0627\u064B";
+ t["\uFD50"] = "\u062A\u062C\u0645";
+ t["\uFD51"] = "\u062A\u062D\u062C";
+ t["\uFD52"] = "\u062A\u062D\u062C";
+ t["\uFD53"] = "\u062A\u062D\u0645";
+ t["\uFD54"] = "\u062A\u062E\u0645";
+ t["\uFD55"] = "\u062A\u0645\u062C";
+ t["\uFD56"] = "\u062A\u0645\u062D";
+ t["\uFD57"] = "\u062A\u0645\u062E";
+ t["\uFD58"] = "\u062C\u0645\u062D";
+ t["\uFD59"] = "\u062C\u0645\u062D";
+ t["\uFD5A"] = "\u062D\u0645\u064A";
+ t["\uFD5B"] = "\u062D\u0645\u0649";
+ t["\uFD5C"] = "\u0633\u062D\u062C";
+ t["\uFD5D"] = "\u0633\u062C\u062D";
+ t["\uFD5E"] = "\u0633\u062C\u0649";
+ t["\uFD5F"] = "\u0633\u0645\u062D";
+ t["\uFD60"] = "\u0633\u0645\u062D";
+ t["\uFD61"] = "\u0633\u0645\u062C";
+ t["\uFD62"] = "\u0633\u0645\u0645";
+ t["\uFD63"] = "\u0633\u0645\u0645";
+ t["\uFD64"] = "\u0635\u062D\u062D";
+ t["\uFD65"] = "\u0635\u062D\u062D";
+ t["\uFD66"] = "\u0635\u0645\u0645";
+ t["\uFD67"] = "\u0634\u062D\u0645";
+ t["\uFD68"] = "\u0634\u062D\u0645";
+ t["\uFD69"] = "\u0634\u062C\u064A";
+ t["\uFD6A"] = "\u0634\u0645\u062E";
+ t["\uFD6B"] = "\u0634\u0645\u062E";
+ t["\uFD6C"] = "\u0634\u0645\u0645";
+ t["\uFD6D"] = "\u0634\u0645\u0645";
+ t["\uFD6E"] = "\u0636\u062D\u0649";
+ t["\uFD6F"] = "\u0636\u062E\u0645";
+ t["\uFD70"] = "\u0636\u062E\u0645";
+ t["\uFD71"] = "\u0637\u0645\u062D";
+ t["\uFD72"] = "\u0637\u0645\u062D";
+ t["\uFD73"] = "\u0637\u0645\u0645";
+ t["\uFD74"] = "\u0637\u0645\u064A";
+ t["\uFD75"] = "\u0639\u062C\u0645";
+ t["\uFD76"] = "\u0639\u0645\u0645";
+ t["\uFD77"] = "\u0639\u0645\u0645";
+ t["\uFD78"] = "\u0639\u0645\u0649";
+ t["\uFD79"] = "\u063A\u0645\u0645";
+ t["\uFD7A"] = "\u063A\u0645\u064A";
+ t["\uFD7B"] = "\u063A\u0645\u0649";
+ t["\uFD7C"] = "\u0641\u062E\u0645";
+ t["\uFD7D"] = "\u0641\u062E\u0645";
+ t["\uFD7E"] = "\u0642\u0645\u062D";
+ t["\uFD7F"] = "\u0642\u0645\u0645";
+ t["\uFD80"] = "\u0644\u062D\u0645";
+ t["\uFD81"] = "\u0644\u062D\u064A";
+ t["\uFD82"] = "\u0644\u062D\u0649";
+ t["\uFD83"] = "\u0644\u062C\u062C";
+ t["\uFD84"] = "\u0644\u062C\u062C";
+ t["\uFD85"] = "\u0644\u062E\u0645";
+ t["\uFD86"] = "\u0644\u062E\u0645";
+ t["\uFD87"] = "\u0644\u0645\u062D";
+ t["\uFD88"] = "\u0644\u0645\u062D";
+ t["\uFD89"] = "\u0645\u062D\u062C";
+ t["\uFD8A"] = "\u0645\u062D\u0645";
+ t["\uFD8B"] = "\u0645\u062D\u064A";
+ t["\uFD8C"] = "\u0645\u062C\u062D";
+ t["\uFD8D"] = "\u0645\u062C\u0645";
+ t["\uFD8E"] = "\u0645\u062E\u062C";
+ t["\uFD8F"] = "\u0645\u062E\u0645";
+ t["\uFD92"] = "\u0645\u062C\u062E";
+ t["\uFD93"] = "\u0647\u0645\u062C";
+ t["\uFD94"] = "\u0647\u0645\u0645";
+ t["\uFD95"] = "\u0646\u062D\u0645";
+ t["\uFD96"] = "\u0646\u062D\u0649";
+ t["\uFD97"] = "\u0646\u062C\u0645";
+ t["\uFD98"] = "\u0646\u062C\u0645";
+ t["\uFD99"] = "\u0646\u062C\u0649";
+ t["\uFD9A"] = "\u0646\u0645\u064A";
+ t["\uFD9B"] = "\u0646\u0645\u0649";
+ t["\uFD9C"] = "\u064A\u0645\u0645";
+ t["\uFD9D"] = "\u064A\u0645\u0645";
+ t["\uFD9E"] = "\u0628\u062E\u064A";
+ t["\uFD9F"] = "\u062A\u062C\u064A";
+ t["\uFDA0"] = "\u062A\u062C\u0649";
+ t["\uFDA1"] = "\u062A\u062E\u064A";
+ t["\uFDA2"] = "\u062A\u062E\u0649";
+ t["\uFDA3"] = "\u062A\u0645\u064A";
+ t["\uFDA4"] = "\u062A\u0645\u0649";
+ t["\uFDA5"] = "\u062C\u0645\u064A";
+ t["\uFDA6"] = "\u062C\u062D\u0649";
+ t["\uFDA7"] = "\u062C\u0645\u0649";
+ t["\uFDA8"] = "\u0633\u062E\u0649";
+ t["\uFDA9"] = "\u0635\u062D\u064A";
+ t["\uFDAA"] = "\u0634\u062D\u064A";
+ t["\uFDAB"] = "\u0636\u062D\u064A";
+ t["\uFDAC"] = "\u0644\u062C\u064A";
+ t["\uFDAD"] = "\u0644\u0645\u064A";
+ t["\uFDAE"] = "\u064A\u062D\u064A";
+ t["\uFDAF"] = "\u064A\u062C\u064A";
+ t["\uFDB0"] = "\u064A\u0645\u064A";
+ t["\uFDB1"] = "\u0645\u0645\u064A";
+ t["\uFDB2"] = "\u0642\u0645\u064A";
+ t["\uFDB3"] = "\u0646\u062D\u064A";
+ t["\uFDB4"] = "\u0642\u0645\u062D";
+ t["\uFDB5"] = "\u0644\u062D\u0645";
+ t["\uFDB6"] = "\u0639\u0645\u064A";
+ t["\uFDB7"] = "\u0643\u0645\u064A";
+ t["\uFDB8"] = "\u0646\u062C\u062D";
+ t["\uFDB9"] = "\u0645\u062E\u064A";
+ t["\uFDBA"] = "\u0644\u062C\u0645";
+ t["\uFDBB"] = "\u0643\u0645\u0645";
+ t["\uFDBC"] = "\u0644\u062C\u0645";
+ t["\uFDBD"] = "\u0646\u062C\u062D";
+ t["\uFDBE"] = "\u062C\u062D\u064A";
+ t["\uFDBF"] = "\u062D\u062C\u064A";
+ t["\uFDC0"] = "\u0645\u062C\u064A";
+ t["\uFDC1"] = "\u0641\u0645\u064A";
+ t["\uFDC2"] = "\u0628\u062D\u064A";
+ t["\uFDC3"] = "\u0643\u0645\u0645";
+ t["\uFDC4"] = "\u0639\u062C\u0645";
+ t["\uFDC5"] = "\u0635\u0645\u0645";
+ t["\uFDC6"] = "\u0633\u062E\u064A";
+ t["\uFDC7"] = "\u0646\u062C\u064A";
+ t["\uFE49"] = "\u203E";
+ t["\uFE4A"] = "\u203E";
+ t["\uFE4B"] = "\u203E";
+ t["\uFE4C"] = "\u203E";
+ t["\uFE4D"] = "\u005F";
+ t["\uFE4E"] = "\u005F";
+ t["\uFE4F"] = "\u005F";
+ t["\uFE80"] = "\u0621";
+ t["\uFE81"] = "\u0622";
+ t["\uFE82"] = "\u0622";
+ t["\uFE83"] = "\u0623";
+ t["\uFE84"] = "\u0623";
+ t["\uFE85"] = "\u0624";
+ t["\uFE86"] = "\u0624";
+ t["\uFE87"] = "\u0625";
+ t["\uFE88"] = "\u0625";
+ t["\uFE89"] = "\u0626";
+ t["\uFE8A"] = "\u0626";
+ t["\uFE8B"] = "\u0626";
+ t["\uFE8C"] = "\u0626";
+ t["\uFE8D"] = "\u0627";
+ t["\uFE8E"] = "\u0627";
+ t["\uFE8F"] = "\u0628";
+ t["\uFE90"] = "\u0628";
+ t["\uFE91"] = "\u0628";
+ t["\uFE92"] = "\u0628";
+ t["\uFE93"] = "\u0629";
+ t["\uFE94"] = "\u0629";
+ t["\uFE95"] = "\u062A";
+ t["\uFE96"] = "\u062A";
+ t["\uFE97"] = "\u062A";
+ t["\uFE98"] = "\u062A";
+ t["\uFE99"] = "\u062B";
+ t["\uFE9A"] = "\u062B";
+ t["\uFE9B"] = "\u062B";
+ t["\uFE9C"] = "\u062B";
+ t["\uFE9D"] = "\u062C";
+ t["\uFE9E"] = "\u062C";
+ t["\uFE9F"] = "\u062C";
+ t["\uFEA0"] = "\u062C";
+ t["\uFEA1"] = "\u062D";
+ t["\uFEA2"] = "\u062D";
+ t["\uFEA3"] = "\u062D";
+ t["\uFEA4"] = "\u062D";
+ t["\uFEA5"] = "\u062E";
+ t["\uFEA6"] = "\u062E";
+ t["\uFEA7"] = "\u062E";
+ t["\uFEA8"] = "\u062E";
+ t["\uFEA9"] = "\u062F";
+ t["\uFEAA"] = "\u062F";
+ t["\uFEAB"] = "\u0630";
+ t["\uFEAC"] = "\u0630";
+ t["\uFEAD"] = "\u0631";
+ t["\uFEAE"] = "\u0631";
+ t["\uFEAF"] = "\u0632";
+ t["\uFEB0"] = "\u0632";
+ t["\uFEB1"] = "\u0633";
+ t["\uFEB2"] = "\u0633";
+ t["\uFEB3"] = "\u0633";
+ t["\uFEB4"] = "\u0633";
+ t["\uFEB5"] = "\u0634";
+ t["\uFEB6"] = "\u0634";
+ t["\uFEB7"] = "\u0634";
+ t["\uFEB8"] = "\u0634";
+ t["\uFEB9"] = "\u0635";
+ t["\uFEBA"] = "\u0635";
+ t["\uFEBB"] = "\u0635";
+ t["\uFEBC"] = "\u0635";
+ t["\uFEBD"] = "\u0636";
+ t["\uFEBE"] = "\u0636";
+ t["\uFEBF"] = "\u0636";
+ t["\uFEC0"] = "\u0636";
+ t["\uFEC1"] = "\u0637";
+ t["\uFEC2"] = "\u0637";
+ t["\uFEC3"] = "\u0637";
+ t["\uFEC4"] = "\u0637";
+ t["\uFEC5"] = "\u0638";
+ t["\uFEC6"] = "\u0638";
+ t["\uFEC7"] = "\u0638";
+ t["\uFEC8"] = "\u0638";
+ t["\uFEC9"] = "\u0639";
+ t["\uFECA"] = "\u0639";
+ t["\uFECB"] = "\u0639";
+ t["\uFECC"] = "\u0639";
+ t["\uFECD"] = "\u063A";
+ t["\uFECE"] = "\u063A";
+ t["\uFECF"] = "\u063A";
+ t["\uFED0"] = "\u063A";
+ t["\uFED1"] = "\u0641";
+ t["\uFED2"] = "\u0641";
+ t["\uFED3"] = "\u0641";
+ t["\uFED4"] = "\u0641";
+ t["\uFED5"] = "\u0642";
+ t["\uFED6"] = "\u0642";
+ t["\uFED7"] = "\u0642";
+ t["\uFED8"] = "\u0642";
+ t["\uFED9"] = "\u0643";
+ t["\uFEDA"] = "\u0643";
+ t["\uFEDB"] = "\u0643";
+ t["\uFEDC"] = "\u0643";
+ t["\uFEDD"] = "\u0644";
+ t["\uFEDE"] = "\u0644";
+ t["\uFEDF"] = "\u0644";
+ t["\uFEE0"] = "\u0644";
+ t["\uFEE1"] = "\u0645";
+ t["\uFEE2"] = "\u0645";
+ t["\uFEE3"] = "\u0645";
+ t["\uFEE4"] = "\u0645";
+ t["\uFEE5"] = "\u0646";
+ t["\uFEE6"] = "\u0646";
+ t["\uFEE7"] = "\u0646";
+ t["\uFEE8"] = "\u0646";
+ t["\uFEE9"] = "\u0647";
+ t["\uFEEA"] = "\u0647";
+ t["\uFEEB"] = "\u0647";
+ t["\uFEEC"] = "\u0647";
+ t["\uFEED"] = "\u0648";
+ t["\uFEEE"] = "\u0648";
+ t["\uFEEF"] = "\u0649";
+ t["\uFEF0"] = "\u0649";
+ t["\uFEF1"] = "\u064A";
+ t["\uFEF2"] = "\u064A";
+ t["\uFEF3"] = "\u064A";
+ t["\uFEF4"] = "\u064A";
+ t["\uFEF5"] = "\u0644\u0622";
+ t["\uFEF6"] = "\u0644\u0622";
+ t["\uFEF7"] = "\u0644\u0623";
+ t["\uFEF8"] = "\u0644\u0623";
+ t["\uFEF9"] = "\u0644\u0625";
+ t["\uFEFA"] = "\u0644\u0625";
+ t["\uFEFB"] = "\u0644\u0627";
+ t["\uFEFC"] = "\u0644\u0627";
+});
+function reverseIfRtl(chars) {
+ var charsLength = chars.length;
+ if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {
+ return chars;
+ }
+ var s = "";
+ for (var ii = charsLength - 1; ii >= 0; ii--) {
+ s += chars[ii];
+ }
+ return s;
+}
+exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues;
+exports.reverseIfRtl = reverseIfRtl;
+exports.getUnicodeRangeFor = getUnicodeRangeFor;
+exports.getNormalizedUnicodes = getNormalizedUnicodes;
+exports.getUnicodeForGlyph = getUnicodeForGlyph;
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FontRendererFactory = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _cff_parser = __w_pdfjs_require__(30);
+
+var _glyphlist = __w_pdfjs_require__(33);
+
+var _encodings = __w_pdfjs_require__(32);
+
+var _stream = __w_pdfjs_require__(12);
+
+var FontRendererFactory = function FontRendererFactoryClosure() {
+ function getLong(data, offset) {
+ return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
+ }
+
+ function getUshort(data, offset) {
+ return data[offset] << 8 | data[offset + 1];
+ }
+
+ function getSubroutineBias(subrs) {
+ const numSubrs = subrs.length;
+ let bias = 32768;
+
+ if (numSubrs < 1240) {
+ bias = 107;
+ } else if (numSubrs < 33900) {
+ bias = 1131;
+ }
+
+ return bias;
+ }
+
+ function parseCmap(data, start, end) {
+ var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16);
+ var format = getUshort(data, start + offset);
+ var ranges, p, i;
+
+ if (format === 4) {
+ getUshort(data, start + offset + 2);
+ var segCount = getUshort(data, start + offset + 6) >> 1;
+ p = start + offset + 14;
+ ranges = [];
+
+ for (i = 0; i < segCount; i++, p += 2) {
+ ranges[i] = {
+ end: getUshort(data, p)
+ };
+ }
+
+ p += 2;
+
+ for (i = 0; i < segCount; i++, p += 2) {
+ ranges[i].start = getUshort(data, p);
+ }
+
+ for (i = 0; i < segCount; i++, p += 2) {
+ ranges[i].idDelta = getUshort(data, p);
+ }
+
+ for (i = 0; i < segCount; i++, p += 2) {
+ var idOffset = getUshort(data, p);
+
+ if (idOffset === 0) {
+ continue;
+ }
+
+ ranges[i].ids = [];
+
+ for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
+ ranges[i].ids[j] = getUshort(data, p + idOffset);
+ idOffset += 2;
+ }
+ }
+
+ return ranges;
+ } else if (format === 12) {
+ getLong(data, start + offset + 4);
+ var groups = getLong(data, start + offset + 12);
+ p = start + offset + 16;
+ ranges = [];
+
+ for (i = 0; i < groups; i++) {
+ ranges.push({
+ start: getLong(data, p),
+ end: getLong(data, p + 4),
+ idDelta: getLong(data, p + 8) - getLong(data, p)
+ });
+ p += 12;
+ }
+
+ return ranges;
+ }
+
+ throw new _util.FormatError(`unsupported cmap: ${format}`);
+ }
+
+ function parseCff(data, start, end, seacAnalysisEnabled) {
+ var properties = {};
+ var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled);
+ var cff = parser.parse();
+ return {
+ glyphs: cff.charStrings.objects,
+ subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects,
+ gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects,
+ isCFFCIDFont: cff.isCIDFont,
+ fdSelect: cff.fdSelect,
+ fdArray: cff.fdArray
+ };
+ }
+
+ function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
+ var itemSize, itemDecode;
+
+ if (isGlyphLocationsLong) {
+ itemSize = 4;
+
+ itemDecode = function fontItemDecodeLong(data, offset) {
+ return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
+ };
+ } else {
+ itemSize = 2;
+
+ itemDecode = function fontItemDecode(data, offset) {
+ return data[offset] << 9 | data[offset + 1] << 1;
+ };
+ }
+
+ var glyphs = [];
+ var startOffset = itemDecode(loca, 0);
+
+ for (var j = itemSize; j < loca.length; j += itemSize) {
+ var endOffset = itemDecode(loca, j);
+ glyphs.push(glyf.subarray(startOffset, endOffset));
+ startOffset = endOffset;
+ }
+
+ return glyphs;
+ }
+
+ function lookupCmap(ranges, unicode) {
+ var code = unicode.codePointAt(0),
+ gid = 0;
+ var l = 0,
+ r = ranges.length - 1;
+
+ while (l < r) {
+ var c = l + r + 1 >> 1;
+
+ if (code < ranges[c].start) {
+ r = c - 1;
+ } else {
+ l = c;
+ }
+ }
+
+ if (ranges[l].start <= code && code <= ranges[l].end) {
+ gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;
+ }
+
+ return {
+ charCode: code,
+ glyphId: gid
+ };
+ }
+
+ function compileGlyf(code, cmds, font) {
+ function moveTo(x, y) {
+ cmds.push({
+ cmd: "moveTo",
+ args: [x, y]
+ });
+ }
+
+ function lineTo(x, y) {
+ cmds.push({
+ cmd: "lineTo",
+ args: [x, y]
+ });
+ }
+
+ function quadraticCurveTo(xa, ya, x, y) {
+ cmds.push({
+ cmd: "quadraticCurveTo",
+ args: [xa, ya, x, y]
+ });
+ }
+
+ var i = 0;
+ var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;
+ var flags;
+ var x = 0,
+ y = 0;
+ i += 10;
+
+ if (numberOfContours < 0) {
+ do {
+ flags = code[i] << 8 | code[i + 1];
+ var glyphIndex = code[i + 2] << 8 | code[i + 3];
+ i += 4;
+ var arg1, arg2;
+
+ if (flags & 0x01) {
+ arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16;
+ arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16;
+ i += 4;
+ } else {
+ arg1 = code[i++];
+ arg2 = code[i++];
+ }
+
+ if (flags & 0x02) {
+ x = arg1;
+ y = arg2;
+ } else {
+ x = 0;
+ y = 0;
+ }
+
+ var scaleX = 1,
+ scaleY = 1,
+ scale01 = 0,
+ scale10 = 0;
+
+ if (flags & 0x08) {
+ scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
+ i += 2;
+ } else if (flags & 0x40) {
+ scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
+ scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
+ i += 4;
+ } else if (flags & 0x80) {
+ scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
+ scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
+ scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824;
+ scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824;
+ i += 8;
+ }
+
+ var subglyph = font.glyphs[glyphIndex];
+
+ if (subglyph) {
+ cmds.push({
+ cmd: "save"
+ });
+ cmds.push({
+ cmd: "transform",
+ args: [scaleX, scale01, scale10, scaleY, x, y]
+ });
+ compileGlyf(subglyph, cmds, font);
+ cmds.push({
+ cmd: "restore"
+ });
+ }
+ } while (flags & 0x20);
+ } else {
+ var endPtsOfContours = [];
+ var j, jj;
+
+ for (j = 0; j < numberOfContours; j++) {
+ endPtsOfContours.push(code[i] << 8 | code[i + 1]);
+ i += 2;
+ }
+
+ var instructionLength = code[i] << 8 | code[i + 1];
+ i += 2 + instructionLength;
+ var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
+ var points = [];
+
+ while (points.length < numberOfPoints) {
+ flags = code[i++];
+ var repeat = 1;
+
+ if (flags & 0x08) {
+ repeat += code[i++];
+ }
+
+ while (repeat-- > 0) {
+ points.push({
+ flags
+ });
+ }
+ }
+
+ for (j = 0; j < numberOfPoints; j++) {
+ switch (points[j].flags & 0x12) {
+ case 0x00:
+ x += (code[i] << 24 | code[i + 1] << 16) >> 16;
+ i += 2;
+ break;
+
+ case 0x02:
+ x -= code[i++];
+ break;
+
+ case 0x12:
+ x += code[i++];
+ break;
+ }
+
+ points[j].x = x;
+ }
+
+ for (j = 0; j < numberOfPoints; j++) {
+ switch (points[j].flags & 0x24) {
+ case 0x00:
+ y += (code[i] << 24 | code[i + 1] << 16) >> 16;
+ i += 2;
+ break;
+
+ case 0x04:
+ y -= code[i++];
+ break;
+
+ case 0x24:
+ y += code[i++];
+ break;
+ }
+
+ points[j].y = y;
+ }
+
+ var startPoint = 0;
+
+ for (i = 0; i < numberOfContours; i++) {
+ var endPoint = endPtsOfContours[i];
+ var contour = points.slice(startPoint, endPoint + 1);
+
+ if (contour[0].flags & 1) {
+ contour.push(contour[0]);
+ } else if (contour[contour.length - 1].flags & 1) {
+ contour.unshift(contour[contour.length - 1]);
+ } else {
+ var p = {
+ flags: 1,
+ x: (contour[0].x + contour[contour.length - 1].x) / 2,
+ y: (contour[0].y + contour[contour.length - 1].y) / 2
+ };
+ contour.unshift(p);
+ contour.push(p);
+ }
+
+ moveTo(contour[0].x, contour[0].y);
+
+ for (j = 1, jj = contour.length; j < jj; j++) {
+ if (contour[j].flags & 1) {
+ lineTo(contour[j].x, contour[j].y);
+ } else if (contour[j + 1].flags & 1) {
+ quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);
+ j++;
+ } else {
+ quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);
+ }
+ }
+
+ startPoint = endPoint + 1;
+ }
+ }
+ }
+
+ function compileCharString(charStringCode, cmds, font, glyphId) {
+ function moveTo(x, y) {
+ cmds.push({
+ cmd: "moveTo",
+ args: [x, y]
+ });
+ }
+
+ function lineTo(x, y) {
+ cmds.push({
+ cmd: "lineTo",
+ args: [x, y]
+ });
+ }
+
+ function bezierCurveTo(x1, y1, x2, y2, x, y) {
+ cmds.push({
+ cmd: "bezierCurveTo",
+ args: [x1, y1, x2, y2, x, y]
+ });
+ }
+
+ var stack = [];
+ var x = 0,
+ y = 0;
+ var stems = 0;
+
+ function parse(code) {
+ var i = 0;
+
+ while (i < code.length) {
+ var stackClean = false;
+ var v = code[i++];
+ var xa, xb, ya, yb, y1, y2, y3, n, subrCode;
+
+ switch (v) {
+ case 1:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
+
+ case 3:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
+
+ case 4:
+ y += stack.pop();
+ moveTo(x, y);
+ stackClean = true;
+ break;
+
+ case 5:
+ while (stack.length > 0) {
+ x += stack.shift();
+ y += stack.shift();
+ lineTo(x, y);
+ }
+
+ break;
+
+ case 6:
+ while (stack.length > 0) {
+ x += stack.shift();
+ lineTo(x, y);
+
+ if (stack.length === 0) {
+ break;
+ }
+
+ y += stack.shift();
+ lineTo(x, y);
+ }
+
+ break;
+
+ case 7:
+ while (stack.length > 0) {
+ y += stack.shift();
+ lineTo(x, y);
+
+ if (stack.length === 0) {
+ break;
+ }
+
+ x += stack.shift();
+ lineTo(x, y);
+ }
+
+ break;
+
+ case 8:
+ while (stack.length > 0) {
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ case 10:
+ n = stack.pop();
+ subrCode = null;
+
+ if (font.isCFFCIDFont) {
+ const fdIndex = font.fdSelect.getFDIndex(glyphId);
+
+ if (fdIndex >= 0 && fdIndex < font.fdArray.length) {
+ const fontDict = font.fdArray[fdIndex];
+ let subrs;
+
+ if (fontDict.privateDict && fontDict.privateDict.subrsIndex) {
+ subrs = fontDict.privateDict.subrsIndex.objects;
+ }
+
+ if (subrs) {
+ n += getSubroutineBias(subrs);
+ subrCode = subrs[n];
+ }
+ } else {
+ (0, _util.warn)("Invalid fd index for glyph index.");
+ }
+ } else {
+ subrCode = font.subrs[n + font.subrsBias];
+ }
+
+ if (subrCode) {
+ parse(subrCode);
+ }
+
+ break;
+
+ case 11:
+ return;
+
+ case 12:
+ v = code[i++];
+
+ switch (v) {
+ case 34:
+ xa = x + stack.shift();
+ xb = xa + stack.shift();
+ y1 = y + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y, xb, y1, x, y1);
+ xa = x + stack.shift();
+ xb = xa + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y1, xb, y, x, y);
+ break;
+
+ case 35:
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ stack.pop();
+ break;
+
+ case 36:
+ xa = x + stack.shift();
+ y1 = y + stack.shift();
+ xb = xa + stack.shift();
+ y2 = y1 + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y1, xb, y2, x, y2);
+ xa = x + stack.shift();
+ xb = xa + stack.shift();
+ y3 = y2 + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y2, xb, y3, x, y);
+ break;
+
+ case 37:
+ var x0 = x,
+ y0 = y;
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb;
+ y = yb;
+
+ if (Math.abs(x - x0) > Math.abs(y - y0)) {
+ x += stack.shift();
+ } else {
+ y += stack.shift();
+ }
+
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ break;
+
+ default:
+ throw new _util.FormatError(`unknown operator: 12 ${v}`);
+ }
+
+ break;
+
+ case 14:
+ if (stack.length >= 4) {
+ var achar = stack.pop();
+ var bchar = stack.pop();
+ y = stack.pop();
+ x = stack.pop();
+ cmds.push({
+ cmd: "save"
+ });
+ cmds.push({
+ cmd: "translate",
+ args: [x, y]
+ });
+ var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));
+ compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
+ cmds.push({
+ cmd: "restore"
+ });
+ cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]]));
+ compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
+ }
+
+ return;
+
+ case 18:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
+
+ case 19:
+ stems += stack.length >> 1;
+ i += stems + 7 >> 3;
+ stackClean = true;
+ break;
+
+ case 20:
+ stems += stack.length >> 1;
+ i += stems + 7 >> 3;
+ stackClean = true;
+ break;
+
+ case 21:
+ y += stack.pop();
+ x += stack.pop();
+ moveTo(x, y);
+ stackClean = true;
+ break;
+
+ case 22:
+ x += stack.pop();
+ moveTo(x, y);
+ stackClean = true;
+ break;
+
+ case 23:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
+
+ case 24:
+ while (stack.length > 2) {
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ x += stack.shift();
+ y += stack.shift();
+ lineTo(x, y);
+ break;
+
+ case 25:
+ while (stack.length > 6) {
+ x += stack.shift();
+ y += stack.shift();
+ lineTo(x, y);
+ }
+
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ break;
+
+ case 26:
+ if (stack.length % 2) {
+ x += stack.shift();
+ }
+
+ while (stack.length > 0) {
+ xa = x;
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb;
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ case 27:
+ if (stack.length % 2) {
+ y += stack.shift();
+ }
+
+ while (stack.length > 0) {
+ xa = x + stack.shift();
+ ya = y;
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb;
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ case 28:
+ stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);
+ i += 2;
+ break;
+
+ case 29:
+ n = stack.pop() + font.gsubrsBias;
+ subrCode = font.gsubrs[n];
+
+ if (subrCode) {
+ parse(subrCode);
+ }
+
+ break;
+
+ case 30:
+ while (stack.length > 0) {
+ xa = x;
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+
+ if (stack.length === 0) {
+ break;
+ }
+
+ xa = x + stack.shift();
+ ya = y;
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ y = yb + stack.shift();
+ x = xb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ case 31:
+ while (stack.length > 0) {
+ xa = x + stack.shift();
+ ya = y;
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ y = yb + stack.shift();
+ x = xb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+
+ if (stack.length === 0) {
+ break;
+ }
+
+ xa = x;
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ default:
+ if (v < 32) {
+ throw new _util.FormatError(`unknown operator: ${v}`);
+ }
+
+ if (v < 247) {
+ stack.push(v - 139);
+ } else if (v < 251) {
+ stack.push((v - 247) * 256 + code[i++] + 108);
+ } else if (v < 255) {
+ stack.push(-(v - 251) * 256 - code[i++] - 108);
+ } else {
+ stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);
+ i += 4;
+ }
+
+ break;
+ }
+
+ if (stackClean) {
+ stack.length = 0;
+ }
+ }
+ }
+
+ parse(charStringCode);
+ }
+
+ const NOOP = [];
+
+ class CompiledFont {
+ constructor(fontMatrix) {
+ if (this.constructor === CompiledFont) {
+ (0, _util.unreachable)("Cannot initialize CompiledFont.");
+ }
+
+ this.fontMatrix = fontMatrix;
+ this.compiledGlyphs = Object.create(null);
+ this.compiledCharCodeToGlyphId = Object.create(null);
+ }
+
+ getPathJs(unicode) {
+ const cmap = lookupCmap(this.cmap, unicode);
+ let fn = this.compiledGlyphs[cmap.glyphId];
+
+ if (!fn) {
+ fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId);
+ this.compiledGlyphs[cmap.glyphId] = fn;
+ }
+
+ if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) {
+ this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId;
+ }
+
+ return fn;
+ }
+
+ compileGlyph(code, glyphId) {
+ if (!code || code.length === 0 || code[0] === 14) {
+ return NOOP;
+ }
+
+ let fontMatrix = this.fontMatrix;
+
+ if (this.isCFFCIDFont) {
+ const fdIndex = this.fdSelect.getFDIndex(glyphId);
+
+ if (fdIndex >= 0 && fdIndex < this.fdArray.length) {
+ const fontDict = this.fdArray[fdIndex];
+ fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX;
+ } else {
+ (0, _util.warn)("Invalid fd index for glyph index.");
+ }
+ }
+
+ const cmds = [];
+ cmds.push({
+ cmd: "save"
+ });
+ cmds.push({
+ cmd: "transform",
+ args: fontMatrix.slice()
+ });
+ cmds.push({
+ cmd: "scale",
+ args: ["size", "-size"]
+ });
+ this.compileGlyphImpl(code, cmds, glyphId);
+ cmds.push({
+ cmd: "restore"
+ });
+ return cmds;
+ }
+
+ compileGlyphImpl() {
+ (0, _util.unreachable)("Children classes should implement this.");
+ }
+
+ hasBuiltPath(unicode) {
+ const cmap = lookupCmap(this.cmap, unicode);
+ return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined;
+ }
+
+ }
+
+ class TrueTypeCompiled extends CompiledFont {
+ constructor(glyphs, cmap, fontMatrix) {
+ super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);
+ this.glyphs = glyphs;
+ this.cmap = cmap;
+ }
+
+ compileGlyphImpl(code, cmds) {
+ compileGlyf(code, cmds, this);
+ }
+
+ }
+
+ class Type2Compiled extends CompiledFont {
+ constructor(cffInfo, cmap, fontMatrix, glyphNameMap) {
+ super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);
+ this.glyphs = cffInfo.glyphs;
+ this.gsubrs = cffInfo.gsubrs || [];
+ this.subrs = cffInfo.subrs || [];
+ this.cmap = cmap;
+ this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)();
+ this.gsubrsBias = getSubroutineBias(this.gsubrs);
+ this.subrsBias = getSubroutineBias(this.subrs);
+ this.isCFFCIDFont = cffInfo.isCFFCIDFont;
+ this.fdSelect = cffInfo.fdSelect;
+ this.fdArray = cffInfo.fdArray;
+ }
+
+ compileGlyphImpl(code, cmds, glyphId) {
+ compileCharString(code, cmds, this, glyphId);
+ }
+
+ }
+
+ return {
+ create: function FontRendererFactory_create(font, seacAnalysisEnabled) {
+ var data = new Uint8Array(font.data);
+ var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
+ var numTables = getUshort(data, 4);
+
+ for (var i = 0, p = 12; i < numTables; i++, p += 16) {
+ var tag = (0, _util.bytesToString)(data.subarray(p, p + 4));
+ var offset = getLong(data, p + 8);
+ var length = getLong(data, p + 12);
+
+ switch (tag) {
+ case "cmap":
+ cmap = parseCmap(data, offset, offset + length);
+ break;
+
+ case "glyf":
+ glyf = data.subarray(offset, offset + length);
+ break;
+
+ case "loca":
+ loca = data.subarray(offset, offset + length);
+ break;
+
+ case "head":
+ unitsPerEm = getUshort(data, offset + 18);
+ indexToLocFormat = getUshort(data, offset + 50);
+ break;
+
+ case "CFF ":
+ cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);
+ break;
+ }
+ }
+
+ if (glyf) {
+ var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
+ return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
+ }
+
+ return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
+ }
+ };
+}();
+
+exports.FontRendererFactory = FontRendererFactory;
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Type1Parser = void 0;
+
+var _encodings = __w_pdfjs_require__(32);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _util = __w_pdfjs_require__(2);
+
+var HINTING_ENABLED = false;
+
+var Type1CharString = function Type1CharStringClosure() {
+ var COMMAND_MAP = {
+ hstem: [1],
+ vstem: [3],
+ vmoveto: [4],
+ rlineto: [5],
+ hlineto: [6],
+ vlineto: [7],
+ rrcurveto: [8],
+ callsubr: [10],
+ flex: [12, 35],
+ drop: [12, 18],
+ endchar: [14],
+ rmoveto: [21],
+ hmoveto: [22],
+ vhcurveto: [30],
+ hvcurveto: [31]
+ };
+
+ function Type1CharString() {
+ this.width = 0;
+ this.lsb = 0;
+ this.flexing = false;
+ this.output = [];
+ this.stack = [];
+ }
+
+ Type1CharString.prototype = {
+ convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) {
+ var count = encoded.length;
+ var error = false;
+ var wx, sbx, subrNumber;
+
+ for (var i = 0; i < count; i++) {
+ var value = encoded[i];
+
+ if (value < 32) {
+ if (value === 12) {
+ value = (value << 8) + encoded[++i];
+ }
+
+ switch (value) {
+ case 1:
+ if (!HINTING_ENABLED) {
+ this.stack = [];
+ break;
+ }
+
+ error = this.executeCommand(2, COMMAND_MAP.hstem);
+ break;
+
+ case 3:
+ if (!HINTING_ENABLED) {
+ this.stack = [];
+ break;
+ }
+
+ error = this.executeCommand(2, COMMAND_MAP.vstem);
+ break;
+
+ case 4:
+ if (this.flexing) {
+ if (this.stack.length < 1) {
+ error = true;
+ break;
+ }
+
+ var dy = this.stack.pop();
+ this.stack.push(0, dy);
+ break;
+ }
+
+ error = this.executeCommand(1, COMMAND_MAP.vmoveto);
+ break;
+
+ case 5:
+ error = this.executeCommand(2, COMMAND_MAP.rlineto);
+ break;
+
+ case 6:
+ error = this.executeCommand(1, COMMAND_MAP.hlineto);
+ break;
+
+ case 7:
+ error = this.executeCommand(1, COMMAND_MAP.vlineto);
+ break;
+
+ case 8:
+ error = this.executeCommand(6, COMMAND_MAP.rrcurveto);
+ break;
+
+ case 9:
+ this.stack = [];
+ break;
+
+ case 10:
+ if (this.stack.length < 1) {
+ error = true;
+ break;
+ }
+
+ subrNumber = this.stack.pop();
+
+ if (!subrs[subrNumber]) {
+ error = true;
+ break;
+ }
+
+ error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);
+ break;
+
+ case 11:
+ return error;
+
+ case 13:
+ if (this.stack.length < 2) {
+ error = true;
+ break;
+ }
+
+ wx = this.stack.pop();
+ sbx = this.stack.pop();
+ this.lsb = sbx;
+ this.width = wx;
+ this.stack.push(wx, sbx);
+ error = this.executeCommand(2, COMMAND_MAP.hmoveto);
+ break;
+
+ case 14:
+ this.output.push(COMMAND_MAP.endchar[0]);
+ break;
+
+ case 21:
+ if (this.flexing) {
+ break;
+ }
+
+ error = this.executeCommand(2, COMMAND_MAP.rmoveto);
+ break;
+
+ case 22:
+ if (this.flexing) {
+ this.stack.push(0);
+ break;
+ }
+
+ error = this.executeCommand(1, COMMAND_MAP.hmoveto);
+ break;
+
+ case 30:
+ error = this.executeCommand(4, COMMAND_MAP.vhcurveto);
+ break;
+
+ case 31:
+ error = this.executeCommand(4, COMMAND_MAP.hvcurveto);
+ break;
+
+ case (12 << 8) + 0:
+ this.stack = [];
+ break;
+
+ case (12 << 8) + 1:
+ if (!HINTING_ENABLED) {
+ this.stack = [];
+ break;
+ }
+
+ error = this.executeCommand(2, COMMAND_MAP.vstem);
+ break;
+
+ case (12 << 8) + 2:
+ if (!HINTING_ENABLED) {
+ this.stack = [];
+ break;
+ }
+
+ error = this.executeCommand(2, COMMAND_MAP.hstem);
+ break;
+
+ case (12 << 8) + 6:
+ if (seacAnalysisEnabled) {
+ this.seac = this.stack.splice(-4, 4);
+ error = this.executeCommand(0, COMMAND_MAP.endchar);
+ } else {
+ error = this.executeCommand(4, COMMAND_MAP.endchar);
+ }
+
+ break;
+
+ case (12 << 8) + 7:
+ if (this.stack.length < 4) {
+ error = true;
+ break;
+ }
+
+ this.stack.pop();
+ wx = this.stack.pop();
+ var sby = this.stack.pop();
+ sbx = this.stack.pop();
+ this.lsb = sbx;
+ this.width = wx;
+ this.stack.push(wx, sbx, sby);
+ error = this.executeCommand(3, COMMAND_MAP.rmoveto);
+ break;
+
+ case (12 << 8) + 12:
+ if (this.stack.length < 2) {
+ error = true;
+ break;
+ }
+
+ var num2 = this.stack.pop();
+ var num1 = this.stack.pop();
+ this.stack.push(num1 / num2);
+ break;
+
+ case (12 << 8) + 16:
+ if (this.stack.length < 2) {
+ error = true;
+ break;
+ }
+
+ subrNumber = this.stack.pop();
+ var numArgs = this.stack.pop();
+
+ if (subrNumber === 0 && numArgs === 3) {
+ var flexArgs = this.stack.splice(this.stack.length - 17, 17);
+ this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);
+ error = this.executeCommand(13, COMMAND_MAP.flex, true);
+ this.flexing = false;
+ this.stack.push(flexArgs[15], flexArgs[16]);
+ } else if (subrNumber === 1 && numArgs === 0) {
+ this.flexing = true;
+ }
+
+ break;
+
+ case (12 << 8) + 17:
+ break;
+
+ case (12 << 8) + 33:
+ this.stack = [];
+ break;
+
+ default:
+ (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"');
+ break;
+ }
+
+ if (error) {
+ break;
+ }
+
+ continue;
+ } else if (value <= 246) {
+ value = value - 139;
+ } else if (value <= 250) {
+ value = (value - 247) * 256 + encoded[++i] + 108;
+ } else if (value <= 254) {
+ value = -((value - 251) * 256) - encoded[++i] - 108;
+ } else {
+ value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;
+ }
+
+ this.stack.push(value);
+ }
+
+ return error;
+ },
+
+ executeCommand(howManyArgs, command, keepStack) {
+ var stackLength = this.stack.length;
+
+ if (howManyArgs > stackLength) {
+ return true;
+ }
+
+ var start = stackLength - howManyArgs;
+
+ for (var i = start; i < stackLength; i++) {
+ var value = this.stack[i];
+
+ if (Number.isInteger(value)) {
+ this.output.push(28, value >> 8 & 0xff, value & 0xff);
+ } else {
+ value = 65536 * value | 0;
+ this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
+ }
+ }
+
+ this.output.push.apply(this.output, command);
+
+ if (keepStack) {
+ this.stack.splice(start, howManyArgs);
+ } else {
+ this.stack.length = 0;
+ }
+
+ return false;
+ }
+
+ };
+ return Type1CharString;
+}();
+
+var Type1Parser = function Type1ParserClosure() {
+ var EEXEC_ENCRYPT_KEY = 55665;
+ var CHAR_STRS_ENCRYPT_KEY = 4330;
+
+ function isHexDigit(code) {
+ return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;
+ }
+
+ function decrypt(data, key, discardNumber) {
+ if (discardNumber >= data.length) {
+ return new Uint8Array(0);
+ }
+
+ var r = key | 0,
+ c1 = 52845,
+ c2 = 22719,
+ i,
+ j;
+
+ for (i = 0; i < discardNumber; i++) {
+ r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;
+ }
+
+ var count = data.length - discardNumber;
+ var decrypted = new Uint8Array(count);
+
+ for (i = discardNumber, j = 0; j < count; i++, j++) {
+ var value = data[i];
+ decrypted[j] = value ^ r >> 8;
+ r = (value + r) * c1 + c2 & (1 << 16) - 1;
+ }
+
+ return decrypted;
+ }
+
+ function decryptAscii(data, key, discardNumber) {
+ var r = key | 0,
+ c1 = 52845,
+ c2 = 22719;
+ var count = data.length,
+ maybeLength = count >>> 1;
+ var decrypted = new Uint8Array(maybeLength);
+ var i, j;
+
+ for (i = 0, j = 0; i < count; i++) {
+ var digit1 = data[i];
+
+ if (!isHexDigit(digit1)) {
+ continue;
+ }
+
+ i++;
+ var digit2;
+
+ while (i < count && !isHexDigit(digit2 = data[i])) {
+ i++;
+ }
+
+ if (i < count) {
+ var value = parseInt(String.fromCharCode(digit1, digit2), 16);
+ decrypted[j++] = value ^ r >> 8;
+ r = (value + r) * c1 + c2 & (1 << 16) - 1;
+ }
+ }
+
+ return decrypted.slice(discardNumber, j);
+ }
+
+ function isSpecial(c) {
+ return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;
+ }
+
+ function Type1Parser(stream, encrypted, seacAnalysisEnabled) {
+ if (encrypted) {
+ var data = stream.getBytes();
+ var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
+ stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
+ }
+
+ this.seacAnalysisEnabled = !!seacAnalysisEnabled;
+ this.stream = stream;
+ this.nextChar();
+ }
+
+ Type1Parser.prototype = {
+ readNumberArray: function Type1Parser_readNumberArray() {
+ this.getToken();
+ var array = [];
+
+ while (true) {
+ var token = this.getToken();
+
+ if (token === null || token === "]" || token === "}") {
+ break;
+ }
+
+ array.push(parseFloat(token || 0));
+ }
+
+ return array;
+ },
+ readNumber: function Type1Parser_readNumber() {
+ var token = this.getToken();
+ return parseFloat(token || 0);
+ },
+ readInt: function Type1Parser_readInt() {
+ var token = this.getToken();
+ return parseInt(token || 0, 10) | 0;
+ },
+ readBoolean: function Type1Parser_readBoolean() {
+ var token = this.getToken();
+ return token === "true" ? 1 : 0;
+ },
+ nextChar: function Type1_nextChar() {
+ return this.currentChar = this.stream.getByte();
+ },
+ getToken: function Type1Parser_getToken() {
+ var comment = false;
+ var ch = this.currentChar;
+
+ while (true) {
+ if (ch === -1) {
+ return null;
+ }
+
+ if (comment) {
+ if (ch === 0x0a || ch === 0x0d) {
+ comment = false;
+ }
+ } else if (ch === 0x25) {
+ comment = true;
+ } else if (!(0, _core_utils.isWhiteSpace)(ch)) {
+ break;
+ }
+
+ ch = this.nextChar();
+ }
+
+ if (isSpecial(ch)) {
+ this.nextChar();
+ return String.fromCharCode(ch);
+ }
+
+ var token = "";
+
+ do {
+ token += String.fromCharCode(ch);
+ ch = this.nextChar();
+ } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch));
+
+ return token;
+ },
+ readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) {
+ if (lenIV === -1) {
+ return bytes;
+ }
+
+ return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);
+ },
+ extractFontProgram: function Type1Parser_extractFontProgram(properties) {
+ var stream = this.stream;
+ var subrs = [],
+ charstrings = [];
+ var privateData = Object.create(null);
+ privateData.lenIV = 4;
+ var program = {
+ subrs: [],
+ charstrings: [],
+ properties: {
+ privateData
+ }
+ };
+ var token, length, data, lenIV, encoded;
+
+ while ((token = this.getToken()) !== null) {
+ if (token !== "/") {
+ continue;
+ }
+
+ token = this.getToken();
+
+ switch (token) {
+ case "CharStrings":
+ this.getToken();
+ this.getToken();
+ this.getToken();
+ this.getToken();
+
+ while (true) {
+ token = this.getToken();
+
+ if (token === null || token === "end") {
+ break;
+ }
+
+ if (token !== "/") {
+ continue;
+ }
+
+ var glyph = this.getToken();
+ length = this.readInt();
+ this.getToken();
+ data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
+ lenIV = program.properties.privateData.lenIV;
+ encoded = this.readCharStrings(data, lenIV);
+ this.nextChar();
+ token = this.getToken();
+
+ if (token === "noaccess") {
+ this.getToken();
+ }
+
+ charstrings.push({
+ glyph,
+ encoded
+ });
+ }
+
+ break;
+
+ case "Subrs":
+ this.readInt();
+ this.getToken();
+
+ while (this.getToken() === "dup") {
+ const index = this.readInt();
+ length = this.readInt();
+ this.getToken();
+ data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
+ lenIV = program.properties.privateData.lenIV;
+ encoded = this.readCharStrings(data, lenIV);
+ this.nextChar();
+ token = this.getToken();
+
+ if (token === "noaccess") {
+ this.getToken();
+ }
+
+ subrs[index] = encoded;
+ }
+
+ break;
+
+ case "BlueValues":
+ case "OtherBlues":
+ case "FamilyBlues":
+ case "FamilyOtherBlues":
+ var blueArray = this.readNumberArray();
+
+ if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {
+ program.properties.privateData[token] = blueArray;
+ }
+
+ break;
+
+ case "StemSnapH":
+ case "StemSnapV":
+ program.properties.privateData[token] = this.readNumberArray();
+ break;
+
+ case "StdHW":
+ case "StdVW":
+ program.properties.privateData[token] = this.readNumberArray()[0];
+ break;
+
+ case "BlueShift":
+ case "lenIV":
+ case "BlueFuzz":
+ case "BlueScale":
+ case "LanguageGroup":
+ case "ExpansionFactor":
+ program.properties.privateData[token] = this.readNumber();
+ break;
+
+ case "ForceBold":
+ program.properties.privateData[token] = this.readBoolean();
+ break;
+ }
+ }
+
+ for (var i = 0; i < charstrings.length; i++) {
+ glyph = charstrings[i].glyph;
+ encoded = charstrings[i].encoded;
+ var charString = new Type1CharString();
+ var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
+ var output = charString.output;
+
+ if (error) {
+ output = [14];
+ }
+
+ const charStringObject = {
+ glyphName: glyph,
+ charstring: output,
+ width: charString.width,
+ lsb: charString.lsb,
+ seac: charString.seac
+ };
+
+ if (glyph === ".notdef") {
+ program.charstrings.unshift(charStringObject);
+ } else {
+ program.charstrings.push(charStringObject);
+ }
+
+ if (properties.builtInEncoding) {
+ const index = properties.builtInEncoding.indexOf(glyph);
+
+ if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) {
+ properties.widths[index] = charString.width;
+ }
+ }
+ }
+
+ return program;
+ },
+ extractFontHeader: function Type1Parser_extractFontHeader(properties) {
+ var token;
+
+ while ((token = this.getToken()) !== null) {
+ if (token !== "/") {
+ continue;
+ }
+
+ token = this.getToken();
+
+ switch (token) {
+ case "FontMatrix":
+ var matrix = this.readNumberArray();
+ properties.fontMatrix = matrix;
+ break;
+
+ case "Encoding":
+ var encodingArg = this.getToken();
+ var encoding;
+
+ if (!/^\d+$/.test(encodingArg)) {
+ encoding = (0, _encodings.getEncoding)(encodingArg);
+ } else {
+ encoding = [];
+ var size = parseInt(encodingArg, 10) | 0;
+ this.getToken();
+
+ for (var j = 0; j < size; j++) {
+ token = this.getToken();
+
+ while (token !== "dup" && token !== "def") {
+ token = this.getToken();
+
+ if (token === null) {
+ return;
+ }
+ }
+
+ if (token === "def") {
+ break;
+ }
+
+ var index = this.readInt();
+ this.getToken();
+ var glyph = this.getToken();
+ encoding[index] = glyph;
+ this.getToken();
+ }
+ }
+
+ properties.builtInEncoding = encoding;
+ break;
+
+ case "FontBBox":
+ var fontBBox = this.readNumberArray();
+ properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
+ properties.descent = Math.min(fontBBox[1], fontBBox[3]);
+ properties.ascentScaled = true;
+ break;
+ }
+ }
+ }
+ };
+ return Type1Parser;
+}();
+
+exports.Type1Parser = Type1Parser;
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getTilingPatternIR = getTilingPatternIR;
+exports.Pattern = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var ShadingType = {
+ FUNCTION_BASED: 1,
+ AXIAL: 2,
+ RADIAL: 3,
+ FREE_FORM_MESH: 4,
+ LATTICE_FORM_MESH: 5,
+ COONS_PATCH_MESH: 6,
+ TENSOR_PATCH_MESH: 7
+};
+
+var Pattern = function PatternClosure() {
+ function Pattern() {
+ (0, _util.unreachable)("should not call Pattern constructor");
+ }
+
+ Pattern.prototype = {
+ getPattern: function Pattern_getPattern(ctx) {
+ (0, _util.unreachable)(`Should not call Pattern.getStyle: ${ctx}`);
+ }
+ };
+
+ Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory) {
+ var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;
+ var type = dict.get("ShadingType");
+
+ try {
+ switch (type) {
+ case ShadingType.AXIAL:
+ case ShadingType.RADIAL:
+ return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory);
+
+ case ShadingType.FREE_FORM_MESH:
+ case ShadingType.LATTICE_FORM_MESH:
+ case ShadingType.COONS_PATCH_MESH:
+ case ShadingType.TENSOR_PATCH_MESH:
+ return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory);
+
+ default:
+ throw new _util.FormatError("Unsupported ShadingType: " + type);
+ }
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.shadingPattern
+ });
+ (0, _util.warn)(ex);
+ return new Shadings.Dummy();
+ }
+ };
+
+ return Pattern;
+}();
+
+exports.Pattern = Pattern;
+var Shadings = {};
+Shadings.SMALL_NUMBER = 1e-6;
+
+Shadings.RadialAxial = function RadialAxialClosure() {
+ function RadialAxial(dict, matrix, xref, res, pdfFunctionFactory) {
+ this.matrix = matrix;
+ this.coordsArr = dict.getArray("Coords");
+ this.shadingType = dict.get("ShadingType");
+ this.type = "Pattern";
+ var cs = dict.get("ColorSpace", "CS");
+ cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
+ this.cs = cs;
+ const bbox = dict.getArray("BBox");
+
+ if (Array.isArray(bbox) && bbox.length === 4) {
+ this.bbox = _util.Util.normalizeRect(bbox);
+ } else {
+ this.bbox = null;
+ }
+
+ var t0 = 0.0,
+ t1 = 1.0;
+
+ if (dict.has("Domain")) {
+ var domainArr = dict.getArray("Domain");
+ t0 = domainArr[0];
+ t1 = domainArr[1];
+ }
+
+ var extendStart = false,
+ extendEnd = false;
+
+ if (dict.has("Extend")) {
+ var extendArr = dict.getArray("Extend");
+ extendStart = extendArr[0];
+ extendEnd = extendArr[1];
+ }
+
+ if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {
+ var x1 = this.coordsArr[0];
+ var y1 = this.coordsArr[1];
+ var r1 = this.coordsArr[2];
+ var x2 = this.coordsArr[3];
+ var y2 = this.coordsArr[4];
+ var r2 = this.coordsArr[5];
+ var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+
+ if (r1 <= r2 + distance && r2 <= r1 + distance) {
+ (0, _util.warn)("Unsupported radial gradient.");
+ }
+ }
+
+ this.extendStart = extendStart;
+ this.extendEnd = extendEnd;
+ var fnObj = dict.get("Function");
+ var fn = pdfFunctionFactory.createFromArray(fnObj);
+ const NUMBER_OF_SAMPLES = 10;
+ const step = (t1 - t0) / NUMBER_OF_SAMPLES;
+ var colorStops = this.colorStops = [];
+
+ if (t0 >= t1 || step <= 0) {
+ (0, _util.info)("Bad shading domain.");
+ return;
+ }
+
+ var color = new Float32Array(cs.numComps),
+ ratio = new Float32Array(1);
+ var rgbColor;
+
+ for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) {
+ ratio[0] = t0 + i * step;
+ fn(ratio, 0, color, 0);
+ rgbColor = cs.getRgb(color, 0);
+
+ var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+
+ colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);
+ }
+
+ var background = "transparent";
+
+ if (dict.has("Background")) {
+ rgbColor = cs.getRgb(dict.get("Background"), 0);
+ background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+ }
+
+ if (!extendStart) {
+ colorStops.unshift([0, background]);
+ colorStops[1][0] += Shadings.SMALL_NUMBER;
+ }
+
+ if (!extendEnd) {
+ colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;
+ colorStops.push([1, background]);
+ }
+
+ this.colorStops = colorStops;
+ }
+
+ RadialAxial.prototype = {
+ getIR: function RadialAxial_getIR() {
+ var coordsArr = this.coordsArr;
+ var shadingType = this.shadingType;
+ var type, p0, p1, r0, r1;
+
+ if (shadingType === ShadingType.AXIAL) {
+ p0 = [coordsArr[0], coordsArr[1]];
+ p1 = [coordsArr[2], coordsArr[3]];
+ r0 = null;
+ r1 = null;
+ type = "axial";
+ } else if (shadingType === ShadingType.RADIAL) {
+ p0 = [coordsArr[0], coordsArr[1]];
+ p1 = [coordsArr[3], coordsArr[4]];
+ r0 = coordsArr[2];
+ r1 = coordsArr[5];
+ type = "radial";
+ } else {
+ (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`);
+ }
+
+ var matrix = this.matrix;
+
+ if (matrix) {
+ p0 = _util.Util.applyTransform(p0, matrix);
+ p1 = _util.Util.applyTransform(p1, matrix);
+
+ if (shadingType === ShadingType.RADIAL) {
+ var scale = _util.Util.singularValueDecompose2dScale(matrix);
+
+ r0 *= scale[0];
+ r1 *= scale[1];
+ }
+ }
+
+ return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1];
+ }
+ };
+ return RadialAxial;
+}();
+
+Shadings.Mesh = function MeshClosure() {
+ function MeshStreamReader(stream, context) {
+ this.stream = stream;
+ this.context = context;
+ this.buffer = 0;
+ this.bufferLength = 0;
+ var numComps = context.numComps;
+ this.tmpCompsBuf = new Float32Array(numComps);
+ var csNumComps = context.colorSpace.numComps;
+ this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;
+ }
+
+ MeshStreamReader.prototype = {
+ get hasData() {
+ if (this.stream.end) {
+ return this.stream.pos < this.stream.end;
+ }
+
+ if (this.bufferLength > 0) {
+ return true;
+ }
+
+ var nextByte = this.stream.getByte();
+
+ if (nextByte < 0) {
+ return false;
+ }
+
+ this.buffer = nextByte;
+ this.bufferLength = 8;
+ return true;
+ },
+
+ readBits: function MeshStreamReader_readBits(n) {
+ var buffer = this.buffer;
+ var bufferLength = this.bufferLength;
+
+ if (n === 32) {
+ if (bufferLength === 0) {
+ return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;
+ }
+
+ buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();
+ var nextByte = this.stream.getByte();
+ this.buffer = nextByte & (1 << bufferLength) - 1;
+ return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;
+ }
+
+ if (n === 8 && bufferLength === 0) {
+ return this.stream.getByte();
+ }
+
+ while (bufferLength < n) {
+ buffer = buffer << 8 | this.stream.getByte();
+ bufferLength += 8;
+ }
+
+ bufferLength -= n;
+ this.bufferLength = bufferLength;
+ this.buffer = buffer & (1 << bufferLength) - 1;
+ return buffer >> bufferLength;
+ },
+ align: function MeshStreamReader_align() {
+ this.buffer = 0;
+ this.bufferLength = 0;
+ },
+ readFlag: function MeshStreamReader_readFlag() {
+ return this.readBits(this.context.bitsPerFlag);
+ },
+ readCoordinate: function MeshStreamReader_readCoordinate() {
+ var bitsPerCoordinate = this.context.bitsPerCoordinate;
+ var xi = this.readBits(bitsPerCoordinate);
+ var yi = this.readBits(bitsPerCoordinate);
+ var decode = this.context.decode;
+ var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;
+ return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];
+ },
+ readComponents: function MeshStreamReader_readComponents() {
+ var numComps = this.context.numComps;
+ var bitsPerComponent = this.context.bitsPerComponent;
+ var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;
+ var decode = this.context.decode;
+ var components = this.tmpCompsBuf;
+
+ for (var i = 0, j = 4; i < numComps; i++, j += 2) {
+ var ci = this.readBits(bitsPerComponent);
+ components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
+ }
+
+ var color = this.tmpCsCompsBuf;
+
+ if (this.context.colorFn) {
+ this.context.colorFn(components, 0, color, 0);
+ }
+
+ return this.context.colorSpace.getRgb(color, 0);
+ }
+ };
+
+ function decodeType4Shading(mesh, reader) {
+ var coords = mesh.coords;
+ var colors = mesh.colors;
+ var operators = [];
+ var ps = [];
+ var verticesLeft = 0;
+
+ while (reader.hasData) {
+ var f = reader.readFlag();
+ var coord = reader.readCoordinate();
+ var color = reader.readComponents();
+
+ if (verticesLeft === 0) {
+ if (!(0 <= f && f <= 2)) {
+ throw new _util.FormatError("Unknown type4 flag");
+ }
+
+ switch (f) {
+ case 0:
+ verticesLeft = 3;
+ break;
+
+ case 1:
+ ps.push(ps[ps.length - 2], ps[ps.length - 1]);
+ verticesLeft = 1;
+ break;
+
+ case 2:
+ ps.push(ps[ps.length - 3], ps[ps.length - 1]);
+ verticesLeft = 1;
+ break;
+ }
+
+ operators.push(f);
+ }
+
+ ps.push(coords.length);
+ coords.push(coord);
+ colors.push(color);
+ verticesLeft--;
+ reader.align();
+ }
+
+ mesh.figures.push({
+ type: "triangles",
+ coords: new Int32Array(ps),
+ colors: new Int32Array(ps)
+ });
+ }
+
+ function decodeType5Shading(mesh, reader, verticesPerRow) {
+ var coords = mesh.coords;
+ var colors = mesh.colors;
+ var ps = [];
+
+ while (reader.hasData) {
+ var coord = reader.readCoordinate();
+ var color = reader.readComponents();
+ ps.push(coords.length);
+ coords.push(coord);
+ colors.push(color);
+ }
+
+ mesh.figures.push({
+ type: "lattice",
+ coords: new Int32Array(ps),
+ colors: new Int32Array(ps),
+ verticesPerRow
+ });
+ }
+
+ var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
+ var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
+ var TRIANGLE_DENSITY = 20;
+
+ var getB = function getBClosure() {
+ function buildB(count) {
+ var lut = [];
+
+ for (var i = 0; i <= count; i++) {
+ var t = i / count,
+ t_ = 1 - t;
+ lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t]));
+ }
+
+ return lut;
+ }
+
+ var cache = [];
+ return function getB(count) {
+ if (!cache[count]) {
+ cache[count] = buildB(count);
+ }
+
+ return cache[count];
+ };
+ }();
+
+ function buildFigureFromPatch(mesh, index) {
+ var figure = mesh.figures[index];
+ (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure");
+ var coords = mesh.coords,
+ colors = mesh.colors;
+ var pi = figure.coords;
+ var ci = figure.colors;
+ var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
+ var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
+ var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
+ var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
+ var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0]));
+ splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));
+ var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1]));
+ splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));
+ var verticesPerRow = splitXBy + 1;
+ var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
+ var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
+ var k = 0;
+ var cl = new Uint8Array(3),
+ cr = new Uint8Array(3);
+ var c0 = colors[ci[0]],
+ c1 = colors[ci[1]],
+ c2 = colors[ci[2]],
+ c3 = colors[ci[3]];
+ var bRow = getB(splitYBy),
+ bCol = getB(splitXBy);
+
+ for (var row = 0; row <= splitYBy; row++) {
+ cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;
+ cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;
+ cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;
+ cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;
+ cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;
+ cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;
+
+ for (var col = 0; col <= splitXBy; col++, k++) {
+ if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {
+ continue;
+ }
+
+ var x = 0,
+ y = 0;
+ var q = 0;
+
+ for (var i = 0; i <= 3; i++) {
+ for (var j = 0; j <= 3; j++, q++) {
+ var m = bRow[row][i] * bCol[col][j];
+ x += coords[pi[q]][0] * m;
+ y += coords[pi[q]][1] * m;
+ }
+ }
+
+ figureCoords[k] = coords.length;
+ coords.push([x, y]);
+ figureColors[k] = colors.length;
+ var newColor = new Uint8Array(3);
+ newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;
+ newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;
+ newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;
+ colors.push(newColor);
+ }
+ }
+
+ figureCoords[0] = pi[0];
+ figureColors[0] = ci[0];
+ figureCoords[splitXBy] = pi[3];
+ figureColors[splitXBy] = ci[1];
+ figureCoords[verticesPerRow * splitYBy] = pi[12];
+ figureColors[verticesPerRow * splitYBy] = ci[2];
+ figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];
+ figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];
+ mesh.figures[index] = {
+ type: "lattice",
+ coords: figureCoords,
+ colors: figureColors,
+ verticesPerRow
+ };
+ }
+
+ function decodeType6Shading(mesh, reader) {
+ var coords = mesh.coords;
+ var colors = mesh.colors;
+ var ps = new Int32Array(16);
+ var cs = new Int32Array(4);
+
+ while (reader.hasData) {
+ var f = reader.readFlag();
+
+ if (!(0 <= f && f <= 3)) {
+ throw new _util.FormatError("Unknown type6 flag");
+ }
+
+ var i, ii;
+ var pi = coords.length;
+
+ for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
+ coords.push(reader.readCoordinate());
+ }
+
+ var ci = colors.length;
+
+ for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
+ colors.push(reader.readComponents());
+ }
+
+ var tmp1, tmp2, tmp3, tmp4;
+
+ switch (f) {
+ case 0:
+ ps[12] = pi + 3;
+ ps[13] = pi + 4;
+ ps[14] = pi + 5;
+ ps[15] = pi + 6;
+ ps[8] = pi + 2;
+ ps[11] = pi + 7;
+ ps[4] = pi + 1;
+ ps[7] = pi + 8;
+ ps[0] = pi;
+ ps[1] = pi + 11;
+ ps[2] = pi + 10;
+ ps[3] = pi + 9;
+ cs[2] = ci + 1;
+ cs[3] = ci + 2;
+ cs[0] = ci;
+ cs[1] = ci + 3;
+ break;
+
+ case 1:
+ tmp1 = ps[12];
+ tmp2 = ps[13];
+ tmp3 = ps[14];
+ tmp4 = ps[15];
+ ps[12] = tmp4;
+ ps[13] = pi + 0;
+ ps[14] = pi + 1;
+ ps[15] = pi + 2;
+ ps[8] = tmp3;
+ ps[11] = pi + 3;
+ ps[4] = tmp2;
+ ps[7] = pi + 4;
+ ps[0] = tmp1;
+ ps[1] = pi + 7;
+ ps[2] = pi + 6;
+ ps[3] = pi + 5;
+ tmp1 = cs[2];
+ tmp2 = cs[3];
+ cs[2] = tmp2;
+ cs[3] = ci;
+ cs[0] = tmp1;
+ cs[1] = ci + 1;
+ break;
+
+ case 2:
+ tmp1 = ps[15];
+ tmp2 = ps[11];
+ ps[12] = ps[3];
+ ps[13] = pi + 0;
+ ps[14] = pi + 1;
+ ps[15] = pi + 2;
+ ps[8] = ps[7];
+ ps[11] = pi + 3;
+ ps[4] = tmp2;
+ ps[7] = pi + 4;
+ ps[0] = tmp1;
+ ps[1] = pi + 7;
+ ps[2] = pi + 6;
+ ps[3] = pi + 5;
+ tmp1 = cs[3];
+ cs[2] = cs[1];
+ cs[3] = ci;
+ cs[0] = tmp1;
+ cs[1] = ci + 1;
+ break;
+
+ case 3:
+ ps[12] = ps[0];
+ ps[13] = pi + 0;
+ ps[14] = pi + 1;
+ ps[15] = pi + 2;
+ ps[8] = ps[1];
+ ps[11] = pi + 3;
+ ps[4] = ps[2];
+ ps[7] = pi + 4;
+ ps[0] = ps[3];
+ ps[1] = pi + 7;
+ ps[2] = pi + 6;
+ ps[3] = pi + 5;
+ cs[2] = cs[0];
+ cs[3] = ci;
+ cs[0] = cs[1];
+ cs[1] = ci + 1;
+ break;
+ }
+
+ ps[5] = coords.length;
+ coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]);
+ ps[6] = coords.length;
+ coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]);
+ ps[9] = coords.length;
+ coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]);
+ ps[10] = coords.length;
+ coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]);
+ mesh.figures.push({
+ type: "patch",
+ coords: new Int32Array(ps),
+ colors: new Int32Array(cs)
+ });
+ }
+ }
+
+ function decodeType7Shading(mesh, reader) {
+ var coords = mesh.coords;
+ var colors = mesh.colors;
+ var ps = new Int32Array(16);
+ var cs = new Int32Array(4);
+
+ while (reader.hasData) {
+ var f = reader.readFlag();
+
+ if (!(0 <= f && f <= 3)) {
+ throw new _util.FormatError("Unknown type7 flag");
+ }
+
+ var i, ii;
+ var pi = coords.length;
+
+ for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
+ coords.push(reader.readCoordinate());
+ }
+
+ var ci = colors.length;
+
+ for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
+ colors.push(reader.readComponents());
+ }
+
+ var tmp1, tmp2, tmp3, tmp4;
+
+ switch (f) {
+ case 0:
+ ps[12] = pi + 3;
+ ps[13] = pi + 4;
+ ps[14] = pi + 5;
+ ps[15] = pi + 6;
+ ps[8] = pi + 2;
+ ps[9] = pi + 13;
+ ps[10] = pi + 14;
+ ps[11] = pi + 7;
+ ps[4] = pi + 1;
+ ps[5] = pi + 12;
+ ps[6] = pi + 15;
+ ps[7] = pi + 8;
+ ps[0] = pi;
+ ps[1] = pi + 11;
+ ps[2] = pi + 10;
+ ps[3] = pi + 9;
+ cs[2] = ci + 1;
+ cs[3] = ci + 2;
+ cs[0] = ci;
+ cs[1] = ci + 3;
+ break;
+
+ case 1:
+ tmp1 = ps[12];
+ tmp2 = ps[13];
+ tmp3 = ps[14];
+ tmp4 = ps[15];
+ ps[12] = tmp4;
+ ps[13] = pi + 0;
+ ps[14] = pi + 1;
+ ps[15] = pi + 2;
+ ps[8] = tmp3;
+ ps[9] = pi + 9;
+ ps[10] = pi + 10;
+ ps[11] = pi + 3;
+ ps[4] = tmp2;
+ ps[5] = pi + 8;
+ ps[6] = pi + 11;
+ ps[7] = pi + 4;
+ ps[0] = tmp1;
+ ps[1] = pi + 7;
+ ps[2] = pi + 6;
+ ps[3] = pi + 5;
+ tmp1 = cs[2];
+ tmp2 = cs[3];
+ cs[2] = tmp2;
+ cs[3] = ci;
+ cs[0] = tmp1;
+ cs[1] = ci + 1;
+ break;
+
+ case 2:
+ tmp1 = ps[15];
+ tmp2 = ps[11];
+ ps[12] = ps[3];
+ ps[13] = pi + 0;
+ ps[14] = pi + 1;
+ ps[15] = pi + 2;
+ ps[8] = ps[7];
+ ps[9] = pi + 9;
+ ps[10] = pi + 10;
+ ps[11] = pi + 3;
+ ps[4] = tmp2;
+ ps[5] = pi + 8;
+ ps[6] = pi + 11;
+ ps[7] = pi + 4;
+ ps[0] = tmp1;
+ ps[1] = pi + 7;
+ ps[2] = pi + 6;
+ ps[3] = pi + 5;
+ tmp1 = cs[3];
+ cs[2] = cs[1];
+ cs[3] = ci;
+ cs[0] = tmp1;
+ cs[1] = ci + 1;
+ break;
+
+ case 3:
+ ps[12] = ps[0];
+ ps[13] = pi + 0;
+ ps[14] = pi + 1;
+ ps[15] = pi + 2;
+ ps[8] = ps[1];
+ ps[9] = pi + 9;
+ ps[10] = pi + 10;
+ ps[11] = pi + 3;
+ ps[4] = ps[2];
+ ps[5] = pi + 8;
+ ps[6] = pi + 11;
+ ps[7] = pi + 4;
+ ps[0] = ps[3];
+ ps[1] = pi + 7;
+ ps[2] = pi + 6;
+ ps[3] = pi + 5;
+ cs[2] = cs[0];
+ cs[3] = ci;
+ cs[0] = cs[1];
+ cs[1] = ci + 1;
+ break;
+ }
+
+ mesh.figures.push({
+ type: "patch",
+ coords: new Int32Array(ps),
+ colors: new Int32Array(cs)
+ });
+ }
+ }
+
+ function updateBounds(mesh) {
+ var minX = mesh.coords[0][0],
+ minY = mesh.coords[0][1],
+ maxX = minX,
+ maxY = minY;
+
+ for (var i = 1, ii = mesh.coords.length; i < ii; i++) {
+ var x = mesh.coords[i][0],
+ y = mesh.coords[i][1];
+ minX = minX > x ? x : minX;
+ minY = minY > y ? y : minY;
+ maxX = maxX < x ? x : maxX;
+ maxY = maxY < y ? y : maxY;
+ }
+
+ mesh.bounds = [minX, minY, maxX, maxY];
+ }
+
+ function packData(mesh) {
+ var i, ii, j, jj;
+ var coords = mesh.coords;
+ var coordsPacked = new Float32Array(coords.length * 2);
+
+ for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
+ var xy = coords[i];
+ coordsPacked[j++] = xy[0];
+ coordsPacked[j++] = xy[1];
+ }
+
+ mesh.coords = coordsPacked;
+ var colors = mesh.colors;
+ var colorsPacked = new Uint8Array(colors.length * 3);
+
+ for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
+ var c = colors[i];
+ colorsPacked[j++] = c[0];
+ colorsPacked[j++] = c[1];
+ colorsPacked[j++] = c[2];
+ }
+
+ mesh.colors = colorsPacked;
+ var figures = mesh.figures;
+
+ for (i = 0, ii = figures.length; i < ii; i++) {
+ var figure = figures[i],
+ ps = figure.coords,
+ cs = figure.colors;
+
+ for (j = 0, jj = ps.length; j < jj; j++) {
+ ps[j] *= 2;
+ cs[j] *= 3;
+ }
+ }
+ }
+
+ function Mesh(stream, matrix, xref, res, pdfFunctionFactory) {
+ if (!(0, _primitives.isStream)(stream)) {
+ throw new _util.FormatError("Mesh data is not a stream");
+ }
+
+ var dict = stream.dict;
+ this.matrix = matrix;
+ this.shadingType = dict.get("ShadingType");
+ this.type = "Pattern";
+ const bbox = dict.getArray("BBox");
+
+ if (Array.isArray(bbox) && bbox.length === 4) {
+ this.bbox = _util.Util.normalizeRect(bbox);
+ } else {
+ this.bbox = null;
+ }
+
+ var cs = dict.get("ColorSpace", "CS");
+ cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory);
+ this.cs = cs;
+ this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null;
+ var fnObj = dict.get("Function");
+ var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;
+ this.coords = [];
+ this.colors = [];
+ this.figures = [];
+ var decodeContext = {
+ bitsPerCoordinate: dict.get("BitsPerCoordinate"),
+ bitsPerComponent: dict.get("BitsPerComponent"),
+ bitsPerFlag: dict.get("BitsPerFlag"),
+ decode: dict.getArray("Decode"),
+ colorFn: fn,
+ colorSpace: cs,
+ numComps: fn ? 1 : cs.numComps
+ };
+ var reader = new MeshStreamReader(stream, decodeContext);
+ var patchMesh = false;
+
+ switch (this.shadingType) {
+ case ShadingType.FREE_FORM_MESH:
+ decodeType4Shading(this, reader);
+ break;
+
+ case ShadingType.LATTICE_FORM_MESH:
+ var verticesPerRow = dict.get("VerticesPerRow") | 0;
+
+ if (verticesPerRow < 2) {
+ throw new _util.FormatError("Invalid VerticesPerRow");
+ }
+
+ decodeType5Shading(this, reader, verticesPerRow);
+ break;
+
+ case ShadingType.COONS_PATCH_MESH:
+ decodeType6Shading(this, reader);
+ patchMesh = true;
+ break;
+
+ case ShadingType.TENSOR_PATCH_MESH:
+ decodeType7Shading(this, reader);
+ patchMesh = true;
+ break;
+
+ default:
+ (0, _util.unreachable)("Unsupported mesh type.");
+ break;
+ }
+
+ if (patchMesh) {
+ updateBounds(this);
+
+ for (var i = 0, ii = this.figures.length; i < ii; i++) {
+ buildFigureFromPatch(this, i);
+ }
+ }
+
+ updateBounds(this);
+ packData(this);
+ }
+
+ Mesh.prototype = {
+ getIR: function Mesh_getIR() {
+ return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background];
+ }
+ };
+ return Mesh;
+}();
+
+Shadings.Dummy = function DummyClosure() {
+ function Dummy() {
+ this.type = "Pattern";
+ }
+
+ Dummy.prototype = {
+ getIR: function Dummy_getIR() {
+ return ["Dummy"];
+ }
+ };
+ return Dummy;
+}();
+
+function getTilingPatternIR(operatorList, dict, args) {
+ const matrix = dict.getArray("Matrix");
+
+ const bbox = _util.Util.normalizeRect(dict.getArray("BBox"));
+
+ const xstep = dict.get("XStep");
+ const ystep = dict.get("YStep");
+ const paintType = dict.get("PaintType");
+ const tilingType = dict.get("TilingType");
+
+ if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {
+ throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`);
+ }
+
+ return ["TilingPattern", args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
+}
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.bidi = bidi;
+
+var _util = __w_pdfjs_require__(2);
+
+var baseTypes = ["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", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "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", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"];
+var arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "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", "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", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"];
+
+function isOdd(i) {
+ return (i & 1) !== 0;
+}
+
+function isEven(i) {
+ return (i & 1) === 0;
+}
+
+function findUnequal(arr, start, value) {
+ for (var j = start, jj = arr.length; j < jj; ++j) {
+ if (arr[j] !== value) {
+ return j;
+ }
+ }
+
+ return j;
+}
+
+function setValues(arr, start, end, value) {
+ for (var j = start; j < end; ++j) {
+ arr[j] = value;
+ }
+}
+
+function reverseValues(arr, start, end) {
+ for (var i = start, j = end - 1; i < j; ++i, --j) {
+ var temp = arr[i];
+ arr[i] = arr[j];
+ arr[j] = temp;
+ }
+}
+
+function createBidiText(str, isLTR, vertical = false) {
+ let dir = "ltr";
+
+ if (vertical) {
+ dir = "ttb";
+ } else if (!isLTR) {
+ dir = "rtl";
+ }
+
+ return {
+ str,
+ dir
+ };
+}
+
+var chars = [];
+var types = [];
+
+function bidi(str, startLevel, vertical) {
+ var isLTR = true;
+ var strLength = str.length;
+
+ if (strLength === 0 || vertical) {
+ return createBidiText(str, isLTR, vertical);
+ }
+
+ chars.length = strLength;
+ types.length = strLength;
+ var numBidi = 0;
+ var i, ii;
+
+ for (i = 0; i < strLength; ++i) {
+ chars[i] = str.charAt(i);
+ var charCode = str.charCodeAt(i);
+ var charType = "L";
+
+ if (charCode <= 0x00ff) {
+ charType = baseTypes[charCode];
+ } else if (0x0590 <= charCode && charCode <= 0x05f4) {
+ charType = "R";
+ } else if (0x0600 <= charCode && charCode <= 0x06ff) {
+ charType = arabicTypes[charCode & 0xff];
+
+ if (!charType) {
+ (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16));
+ }
+ } else if (0x0700 <= charCode && charCode <= 0x08ac) {
+ charType = "AL";
+ }
+
+ if (charType === "R" || charType === "AL" || charType === "AN") {
+ numBidi++;
+ }
+
+ types[i] = charType;
+ }
+
+ if (numBidi === 0) {
+ isLTR = true;
+ return createBidiText(str, isLTR);
+ }
+
+ if (startLevel === -1) {
+ if (numBidi / strLength < 0.3) {
+ isLTR = true;
+ startLevel = 0;
+ } else {
+ isLTR = false;
+ startLevel = 1;
+ }
+ }
+
+ var levels = [];
+
+ for (i = 0; i < strLength; ++i) {
+ levels[i] = startLevel;
+ }
+
+ var e = isOdd(startLevel) ? "R" : "L";
+ var sor = e;
+ var eor = sor;
+ var lastType = sor;
+
+ for (i = 0; i < strLength; ++i) {
+ if (types[i] === "NSM") {
+ types[i] = lastType;
+ } else {
+ lastType = types[i];
+ }
+ }
+
+ lastType = sor;
+ var t;
+
+ for (i = 0; i < strLength; ++i) {
+ t = types[i];
+
+ if (t === "EN") {
+ types[i] = lastType === "AL" ? "AN" : "EN";
+ } else if (t === "R" || t === "L" || t === "AL") {
+ lastType = t;
+ }
+ }
+
+ for (i = 0; i < strLength; ++i) {
+ t = types[i];
+
+ if (t === "AL") {
+ types[i] = "R";
+ }
+ }
+
+ for (i = 1; i < strLength - 1; ++i) {
+ if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") {
+ types[i] = "EN";
+ }
+
+ if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) {
+ types[i] = types[i - 1];
+ }
+ }
+
+ for (i = 0; i < strLength; ++i) {
+ if (types[i] === "EN") {
+ var j;
+
+ for (j = i - 1; j >= 0; --j) {
+ if (types[j] !== "ET") {
+ break;
+ }
+
+ types[j] = "EN";
+ }
+
+ for (j = i + 1; j < strLength; ++j) {
+ if (types[j] !== "ET") {
+ break;
+ }
+
+ types[j] = "EN";
+ }
+ }
+ }
+
+ for (i = 0; i < strLength; ++i) {
+ t = types[i];
+
+ if (t === "WS" || t === "ES" || t === "ET" || t === "CS") {
+ types[i] = "ON";
+ }
+ }
+
+ lastType = sor;
+
+ for (i = 0; i < strLength; ++i) {
+ t = types[i];
+
+ if (t === "EN") {
+ types[i] = lastType === "L" ? "L" : "EN";
+ } else if (t === "R" || t === "L") {
+ lastType = t;
+ }
+ }
+
+ for (i = 0; i < strLength; ++i) {
+ if (types[i] === "ON") {
+ var end = findUnequal(types, i + 1, "ON");
+ var before = sor;
+
+ if (i > 0) {
+ before = types[i - 1];
+ }
+
+ var after = eor;
+
+ if (end + 1 < strLength) {
+ after = types[end + 1];
+ }
+
+ if (before !== "L") {
+ before = "R";
+ }
+
+ if (after !== "L") {
+ after = "R";
+ }
+
+ if (before === after) {
+ setValues(types, i, end, before);
+ }
+
+ i = end - 1;
+ }
+ }
+
+ for (i = 0; i < strLength; ++i) {
+ if (types[i] === "ON") {
+ types[i] = e;
+ }
+ }
+
+ for (i = 0; i < strLength; ++i) {
+ t = types[i];
+
+ if (isEven(levels[i])) {
+ if (t === "R") {
+ levels[i] += 1;
+ } else if (t === "AN" || t === "EN") {
+ levels[i] += 2;
+ }
+ } else {
+ if (t === "L" || t === "AN" || t === "EN") {
+ levels[i] += 1;
+ }
+ }
+ }
+
+ var highestLevel = -1;
+ var lowestOddLevel = 99;
+ var level;
+
+ for (i = 0, ii = levels.length; i < ii; ++i) {
+ level = levels[i];
+
+ if (highestLevel < level) {
+ highestLevel = level;
+ }
+
+ if (lowestOddLevel > level && isOdd(level)) {
+ lowestOddLevel = level;
+ }
+ }
+
+ for (level = highestLevel; level >= lowestOddLevel; --level) {
+ var start = -1;
+
+ for (i = 0, ii = levels.length; i < ii; ++i) {
+ if (levels[i] < level) {
+ if (start >= 0) {
+ reverseValues(chars, start, i);
+ start = -1;
+ }
+ } else if (start < 0) {
+ start = i;
+ }
+ }
+
+ if (start >= 0) {
+ reverseValues(chars, start, levels.length);
+ }
+ }
+
+ for (i = 0, ii = chars.length; i < ii; ++i) {
+ var ch = chars[i];
+
+ if (ch === "<" || ch === ">") {
+ chars[i] = "";
+ }
+ }
+
+ return createBidiText(chars.join(""), isLTR);
+}
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getMetrics = void 0;
+
+var _core_utils = __w_pdfjs_require__(8);
+
+var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.Courier = 600;
+ t["Courier-Bold"] = 600;
+ t["Courier-BoldOblique"] = 600;
+ t["Courier-Oblique"] = 600;
+ t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 278;
+ t.exclam = 278;
+ t.quotedbl = 355;
+ t.numbersign = 556;
+ t.dollar = 556;
+ t.percent = 889;
+ t.ampersand = 667;
+ t.quoteright = 222;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 389;
+ t.plus = 584;
+ t.comma = 278;
+ t.hyphen = 333;
+ t.period = 278;
+ t.slash = 278;
+ t.zero = 556;
+ t.one = 556;
+ t.two = 556;
+ t.three = 556;
+ t.four = 556;
+ t.five = 556;
+ t.six = 556;
+ t.seven = 556;
+ t.eight = 556;
+ t.nine = 556;
+ t.colon = 278;
+ t.semicolon = 278;
+ t.less = 584;
+ t.equal = 584;
+ t.greater = 584;
+ t.question = 556;
+ t.at = 1015;
+ t.A = 667;
+ t.B = 667;
+ t.C = 722;
+ t.D = 722;
+ t.E = 667;
+ t.F = 611;
+ t.G = 778;
+ t.H = 722;
+ t.I = 278;
+ t.J = 500;
+ t.K = 667;
+ t.L = 556;
+ t.M = 833;
+ t.N = 722;
+ t.O = 778;
+ t.P = 667;
+ t.Q = 778;
+ t.R = 722;
+ t.S = 667;
+ t.T = 611;
+ t.U = 722;
+ t.V = 667;
+ t.W = 944;
+ t.X = 667;
+ t.Y = 667;
+ t.Z = 611;
+ t.bracketleft = 278;
+ t.backslash = 278;
+ t.bracketright = 278;
+ t.asciicircum = 469;
+ t.underscore = 556;
+ t.quoteleft = 222;
+ t.a = 556;
+ t.b = 556;
+ t.c = 500;
+ t.d = 556;
+ t.e = 556;
+ t.f = 278;
+ t.g = 556;
+ t.h = 556;
+ t.i = 222;
+ t.j = 222;
+ t.k = 500;
+ t.l = 222;
+ t.m = 833;
+ t.n = 556;
+ t.o = 556;
+ t.p = 556;
+ t.q = 556;
+ t.r = 333;
+ t.s = 500;
+ t.t = 278;
+ t.u = 556;
+ t.v = 500;
+ t.w = 722;
+ t.x = 500;
+ t.y = 500;
+ t.z = 500;
+ t.braceleft = 334;
+ t.bar = 260;
+ t.braceright = 334;
+ t.asciitilde = 584;
+ t.exclamdown = 333;
+ t.cent = 556;
+ t.sterling = 556;
+ t.fraction = 167;
+ t.yen = 556;
+ t.florin = 556;
+ t.section = 556;
+ t.currency = 556;
+ t.quotesingle = 191;
+ t.quotedblleft = 333;
+ t.guillemotleft = 556;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 500;
+ t.fl = 500;
+ t.endash = 556;
+ t.dagger = 556;
+ t.daggerdbl = 556;
+ t.periodcentered = 278;
+ t.paragraph = 537;
+ t.bullet = 350;
+ t.quotesinglbase = 222;
+ t.quotedblbase = 333;
+ t.quotedblright = 333;
+ t.guillemotright = 556;
+ t.ellipsis = 1000;
+ t.perthousand = 1000;
+ t.questiondown = 611;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 1000;
+ t.AE = 1000;
+ t.ordfeminine = 370;
+ t.Lslash = 556;
+ t.Oslash = 778;
+ t.OE = 1000;
+ t.ordmasculine = 365;
+ t.ae = 889;
+ t.dotlessi = 278;
+ t.lslash = 222;
+ t.oslash = 611;
+ t.oe = 944;
+ t.germandbls = 611;
+ t.Idieresis = 278;
+ t.eacute = 556;
+ t.abreve = 556;
+ t.uhungarumlaut = 556;
+ t.ecaron = 556;
+ t.Ydieresis = 667;
+ t.divide = 584;
+ t.Yacute = 667;
+ t.Acircumflex = 667;
+ t.aacute = 556;
+ t.Ucircumflex = 722;
+ t.yacute = 500;
+ t.scommaaccent = 500;
+ t.ecircumflex = 556;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 556;
+ t.Uacute = 722;
+ t.uogonek = 556;
+ t.Edieresis = 667;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 737;
+ t.Emacron = 667;
+ t.ccaron = 500;
+ t.aring = 556;
+ t.Ncommaaccent = 722;
+ t.lacute = 222;
+ t.agrave = 556;
+ t.Tcommaaccent = 611;
+ t.Cacute = 722;
+ t.atilde = 556;
+ t.Edotaccent = 667;
+ t.scaron = 500;
+ t.scedilla = 500;
+ t.iacute = 278;
+ t.lozenge = 471;
+ t.Rcaron = 722;
+ t.Gcommaaccent = 778;
+ t.ucircumflex = 556;
+ t.acircumflex = 556;
+ t.Amacron = 667;
+ t.rcaron = 333;
+ t.ccedilla = 500;
+ t.Zdotaccent = 611;
+ t.Thorn = 667;
+ t.Omacron = 778;
+ t.Racute = 722;
+ t.Sacute = 667;
+ t.dcaron = 643;
+ t.Umacron = 722;
+ t.uring = 556;
+ t.threesuperior = 333;
+ t.Ograve = 778;
+ t.Agrave = 667;
+ t.Abreve = 667;
+ t.multiply = 584;
+ t.uacute = 556;
+ t.Tcaron = 611;
+ t.partialdiff = 476;
+ t.ydieresis = 500;
+ t.Nacute = 722;
+ t.icircumflex = 278;
+ t.Ecircumflex = 667;
+ t.adieresis = 556;
+ t.edieresis = 556;
+ t.cacute = 500;
+ t.nacute = 556;
+ t.umacron = 556;
+ t.Ncaron = 722;
+ t.Iacute = 278;
+ t.plusminus = 584;
+ t.brokenbar = 260;
+ t.registered = 737;
+ t.Gbreve = 778;
+ t.Idotaccent = 278;
+ t.summation = 600;
+ t.Egrave = 667;
+ t.racute = 333;
+ t.omacron = 556;
+ t.Zacute = 611;
+ t.Zcaron = 611;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 722;
+ t.lcommaaccent = 222;
+ t.tcaron = 317;
+ t.eogonek = 556;
+ t.Uogonek = 722;
+ t.Aacute = 667;
+ t.Adieresis = 667;
+ t.egrave = 556;
+ t.zacute = 500;
+ t.iogonek = 222;
+ t.Oacute = 778;
+ t.oacute = 556;
+ t.amacron = 556;
+ t.sacute = 500;
+ t.idieresis = 278;
+ t.Ocircumflex = 778;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 556;
+ t.twosuperior = 333;
+ t.Odieresis = 778;
+ t.mu = 556;
+ t.igrave = 278;
+ t.ohungarumlaut = 556;
+ t.Eogonek = 667;
+ t.dcroat = 556;
+ t.threequarters = 834;
+ t.Scedilla = 667;
+ t.lcaron = 299;
+ t.Kcommaaccent = 667;
+ t.Lacute = 556;
+ t.trademark = 1000;
+ t.edotaccent = 556;
+ t.Igrave = 278;
+ t.Imacron = 278;
+ t.Lcaron = 556;
+ t.onehalf = 834;
+ t.lessequal = 549;
+ t.ocircumflex = 556;
+ t.ntilde = 556;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 667;
+ t.emacron = 556;
+ t.gbreve = 556;
+ t.onequarter = 834;
+ t.Scaron = 667;
+ t.Scommaaccent = 667;
+ t.Ohungarumlaut = 778;
+ t.degree = 400;
+ t.ograve = 556;
+ t.Ccaron = 722;
+ t.ugrave = 556;
+ t.radical = 453;
+ t.Dcaron = 722;
+ t.rcommaaccent = 333;
+ t.Ntilde = 722;
+ t.otilde = 556;
+ t.Rcommaaccent = 722;
+ t.Lcommaaccent = 556;
+ t.Atilde = 667;
+ t.Aogonek = 667;
+ t.Aring = 667;
+ t.Otilde = 778;
+ t.zdotaccent = 500;
+ t.Ecaron = 667;
+ t.Iogonek = 278;
+ t.kcommaaccent = 500;
+ t.minus = 584;
+ t.Icircumflex = 278;
+ t.ncaron = 556;
+ t.tcommaaccent = 278;
+ t.logicalnot = 584;
+ t.odieresis = 556;
+ t.udieresis = 556;
+ t.notequal = 549;
+ t.gcommaaccent = 556;
+ t.eth = 556;
+ t.zcaron = 500;
+ t.ncommaaccent = 556;
+ t.onesuperior = 333;
+ t.imacron = 278;
+ t.Euro = 556;
+ });
+ t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 278;
+ t.exclam = 333;
+ t.quotedbl = 474;
+ t.numbersign = 556;
+ t.dollar = 556;
+ t.percent = 889;
+ t.ampersand = 722;
+ t.quoteright = 278;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 389;
+ t.plus = 584;
+ t.comma = 278;
+ t.hyphen = 333;
+ t.period = 278;
+ t.slash = 278;
+ t.zero = 556;
+ t.one = 556;
+ t.two = 556;
+ t.three = 556;
+ t.four = 556;
+ t.five = 556;
+ t.six = 556;
+ t.seven = 556;
+ t.eight = 556;
+ t.nine = 556;
+ t.colon = 333;
+ t.semicolon = 333;
+ t.less = 584;
+ t.equal = 584;
+ t.greater = 584;
+ t.question = 611;
+ t.at = 975;
+ t.A = 722;
+ t.B = 722;
+ t.C = 722;
+ t.D = 722;
+ t.E = 667;
+ t.F = 611;
+ t.G = 778;
+ t.H = 722;
+ t.I = 278;
+ t.J = 556;
+ t.K = 722;
+ t.L = 611;
+ t.M = 833;
+ t.N = 722;
+ t.O = 778;
+ t.P = 667;
+ t.Q = 778;
+ t.R = 722;
+ t.S = 667;
+ t.T = 611;
+ t.U = 722;
+ t.V = 667;
+ t.W = 944;
+ t.X = 667;
+ t.Y = 667;
+ t.Z = 611;
+ t.bracketleft = 333;
+ t.backslash = 278;
+ t.bracketright = 333;
+ t.asciicircum = 584;
+ t.underscore = 556;
+ t.quoteleft = 278;
+ t.a = 556;
+ t.b = 611;
+ t.c = 556;
+ t.d = 611;
+ t.e = 556;
+ t.f = 333;
+ t.g = 611;
+ t.h = 611;
+ t.i = 278;
+ t.j = 278;
+ t.k = 556;
+ t.l = 278;
+ t.m = 889;
+ t.n = 611;
+ t.o = 611;
+ t.p = 611;
+ t.q = 611;
+ t.r = 389;
+ t.s = 556;
+ t.t = 333;
+ t.u = 611;
+ t.v = 556;
+ t.w = 778;
+ t.x = 556;
+ t.y = 556;
+ t.z = 500;
+ t.braceleft = 389;
+ t.bar = 280;
+ t.braceright = 389;
+ t.asciitilde = 584;
+ t.exclamdown = 333;
+ t.cent = 556;
+ t.sterling = 556;
+ t.fraction = 167;
+ t.yen = 556;
+ t.florin = 556;
+ t.section = 556;
+ t.currency = 556;
+ t.quotesingle = 238;
+ t.quotedblleft = 500;
+ t.guillemotleft = 556;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 611;
+ t.fl = 611;
+ t.endash = 556;
+ t.dagger = 556;
+ t.daggerdbl = 556;
+ t.periodcentered = 278;
+ t.paragraph = 556;
+ t.bullet = 350;
+ t.quotesinglbase = 278;
+ t.quotedblbase = 500;
+ t.quotedblright = 500;
+ t.guillemotright = 556;
+ t.ellipsis = 1000;
+ t.perthousand = 1000;
+ t.questiondown = 611;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 1000;
+ t.AE = 1000;
+ t.ordfeminine = 370;
+ t.Lslash = 611;
+ t.Oslash = 778;
+ t.OE = 1000;
+ t.ordmasculine = 365;
+ t.ae = 889;
+ t.dotlessi = 278;
+ t.lslash = 278;
+ t.oslash = 611;
+ t.oe = 944;
+ t.germandbls = 611;
+ t.Idieresis = 278;
+ t.eacute = 556;
+ t.abreve = 556;
+ t.uhungarumlaut = 611;
+ t.ecaron = 556;
+ t.Ydieresis = 667;
+ t.divide = 584;
+ t.Yacute = 667;
+ t.Acircumflex = 722;
+ t.aacute = 556;
+ t.Ucircumflex = 722;
+ t.yacute = 556;
+ t.scommaaccent = 556;
+ t.ecircumflex = 556;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 556;
+ t.Uacute = 722;
+ t.uogonek = 611;
+ t.Edieresis = 667;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 737;
+ t.Emacron = 667;
+ t.ccaron = 556;
+ t.aring = 556;
+ t.Ncommaaccent = 722;
+ t.lacute = 278;
+ t.agrave = 556;
+ t.Tcommaaccent = 611;
+ t.Cacute = 722;
+ t.atilde = 556;
+ t.Edotaccent = 667;
+ t.scaron = 556;
+ t.scedilla = 556;
+ t.iacute = 278;
+ t.lozenge = 494;
+ t.Rcaron = 722;
+ t.Gcommaaccent = 778;
+ t.ucircumflex = 611;
+ t.acircumflex = 556;
+ t.Amacron = 722;
+ t.rcaron = 389;
+ t.ccedilla = 556;
+ t.Zdotaccent = 611;
+ t.Thorn = 667;
+ t.Omacron = 778;
+ t.Racute = 722;
+ t.Sacute = 667;
+ t.dcaron = 743;
+ t.Umacron = 722;
+ t.uring = 611;
+ t.threesuperior = 333;
+ t.Ograve = 778;
+ t.Agrave = 722;
+ t.Abreve = 722;
+ t.multiply = 584;
+ t.uacute = 611;
+ t.Tcaron = 611;
+ t.partialdiff = 494;
+ t.ydieresis = 556;
+ t.Nacute = 722;
+ t.icircumflex = 278;
+ t.Ecircumflex = 667;
+ t.adieresis = 556;
+ t.edieresis = 556;
+ t.cacute = 556;
+ t.nacute = 611;
+ t.umacron = 611;
+ t.Ncaron = 722;
+ t.Iacute = 278;
+ t.plusminus = 584;
+ t.brokenbar = 280;
+ t.registered = 737;
+ t.Gbreve = 778;
+ t.Idotaccent = 278;
+ t.summation = 600;
+ t.Egrave = 667;
+ t.racute = 389;
+ t.omacron = 611;
+ t.Zacute = 611;
+ t.Zcaron = 611;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 722;
+ t.lcommaaccent = 278;
+ t.tcaron = 389;
+ t.eogonek = 556;
+ t.Uogonek = 722;
+ t.Aacute = 722;
+ t.Adieresis = 722;
+ t.egrave = 556;
+ t.zacute = 500;
+ t.iogonek = 278;
+ t.Oacute = 778;
+ t.oacute = 611;
+ t.amacron = 556;
+ t.sacute = 556;
+ t.idieresis = 278;
+ t.Ocircumflex = 778;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 611;
+ t.twosuperior = 333;
+ t.Odieresis = 778;
+ t.mu = 611;
+ t.igrave = 278;
+ t.ohungarumlaut = 611;
+ t.Eogonek = 667;
+ t.dcroat = 611;
+ t.threequarters = 834;
+ t.Scedilla = 667;
+ t.lcaron = 400;
+ t.Kcommaaccent = 722;
+ t.Lacute = 611;
+ t.trademark = 1000;
+ t.edotaccent = 556;
+ t.Igrave = 278;
+ t.Imacron = 278;
+ t.Lcaron = 611;
+ t.onehalf = 834;
+ t.lessequal = 549;
+ t.ocircumflex = 611;
+ t.ntilde = 611;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 667;
+ t.emacron = 556;
+ t.gbreve = 611;
+ t.onequarter = 834;
+ t.Scaron = 667;
+ t.Scommaaccent = 667;
+ t.Ohungarumlaut = 778;
+ t.degree = 400;
+ t.ograve = 611;
+ t.Ccaron = 722;
+ t.ugrave = 611;
+ t.radical = 549;
+ t.Dcaron = 722;
+ t.rcommaaccent = 389;
+ t.Ntilde = 722;
+ t.otilde = 611;
+ t.Rcommaaccent = 722;
+ t.Lcommaaccent = 611;
+ t.Atilde = 722;
+ t.Aogonek = 722;
+ t.Aring = 722;
+ t.Otilde = 778;
+ t.zdotaccent = 500;
+ t.Ecaron = 667;
+ t.Iogonek = 278;
+ t.kcommaaccent = 556;
+ t.minus = 584;
+ t.Icircumflex = 278;
+ t.ncaron = 611;
+ t.tcommaaccent = 333;
+ t.logicalnot = 584;
+ t.odieresis = 611;
+ t.udieresis = 611;
+ t.notequal = 549;
+ t.gcommaaccent = 611;
+ t.eth = 611;
+ t.zcaron = 500;
+ t.ncommaaccent = 611;
+ t.onesuperior = 333;
+ t.imacron = 278;
+ t.Euro = 556;
+ });
+ t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 278;
+ t.exclam = 333;
+ t.quotedbl = 474;
+ t.numbersign = 556;
+ t.dollar = 556;
+ t.percent = 889;
+ t.ampersand = 722;
+ t.quoteright = 278;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 389;
+ t.plus = 584;
+ t.comma = 278;
+ t.hyphen = 333;
+ t.period = 278;
+ t.slash = 278;
+ t.zero = 556;
+ t.one = 556;
+ t.two = 556;
+ t.three = 556;
+ t.four = 556;
+ t.five = 556;
+ t.six = 556;
+ t.seven = 556;
+ t.eight = 556;
+ t.nine = 556;
+ t.colon = 333;
+ t.semicolon = 333;
+ t.less = 584;
+ t.equal = 584;
+ t.greater = 584;
+ t.question = 611;
+ t.at = 975;
+ t.A = 722;
+ t.B = 722;
+ t.C = 722;
+ t.D = 722;
+ t.E = 667;
+ t.F = 611;
+ t.G = 778;
+ t.H = 722;
+ t.I = 278;
+ t.J = 556;
+ t.K = 722;
+ t.L = 611;
+ t.M = 833;
+ t.N = 722;
+ t.O = 778;
+ t.P = 667;
+ t.Q = 778;
+ t.R = 722;
+ t.S = 667;
+ t.T = 611;
+ t.U = 722;
+ t.V = 667;
+ t.W = 944;
+ t.X = 667;
+ t.Y = 667;
+ t.Z = 611;
+ t.bracketleft = 333;
+ t.backslash = 278;
+ t.bracketright = 333;
+ t.asciicircum = 584;
+ t.underscore = 556;
+ t.quoteleft = 278;
+ t.a = 556;
+ t.b = 611;
+ t.c = 556;
+ t.d = 611;
+ t.e = 556;
+ t.f = 333;
+ t.g = 611;
+ t.h = 611;
+ t.i = 278;
+ t.j = 278;
+ t.k = 556;
+ t.l = 278;
+ t.m = 889;
+ t.n = 611;
+ t.o = 611;
+ t.p = 611;
+ t.q = 611;
+ t.r = 389;
+ t.s = 556;
+ t.t = 333;
+ t.u = 611;
+ t.v = 556;
+ t.w = 778;
+ t.x = 556;
+ t.y = 556;
+ t.z = 500;
+ t.braceleft = 389;
+ t.bar = 280;
+ t.braceright = 389;
+ t.asciitilde = 584;
+ t.exclamdown = 333;
+ t.cent = 556;
+ t.sterling = 556;
+ t.fraction = 167;
+ t.yen = 556;
+ t.florin = 556;
+ t.section = 556;
+ t.currency = 556;
+ t.quotesingle = 238;
+ t.quotedblleft = 500;
+ t.guillemotleft = 556;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 611;
+ t.fl = 611;
+ t.endash = 556;
+ t.dagger = 556;
+ t.daggerdbl = 556;
+ t.periodcentered = 278;
+ t.paragraph = 556;
+ t.bullet = 350;
+ t.quotesinglbase = 278;
+ t.quotedblbase = 500;
+ t.quotedblright = 500;
+ t.guillemotright = 556;
+ t.ellipsis = 1000;
+ t.perthousand = 1000;
+ t.questiondown = 611;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 1000;
+ t.AE = 1000;
+ t.ordfeminine = 370;
+ t.Lslash = 611;
+ t.Oslash = 778;
+ t.OE = 1000;
+ t.ordmasculine = 365;
+ t.ae = 889;
+ t.dotlessi = 278;
+ t.lslash = 278;
+ t.oslash = 611;
+ t.oe = 944;
+ t.germandbls = 611;
+ t.Idieresis = 278;
+ t.eacute = 556;
+ t.abreve = 556;
+ t.uhungarumlaut = 611;
+ t.ecaron = 556;
+ t.Ydieresis = 667;
+ t.divide = 584;
+ t.Yacute = 667;
+ t.Acircumflex = 722;
+ t.aacute = 556;
+ t.Ucircumflex = 722;
+ t.yacute = 556;
+ t.scommaaccent = 556;
+ t.ecircumflex = 556;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 556;
+ t.Uacute = 722;
+ t.uogonek = 611;
+ t.Edieresis = 667;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 737;
+ t.Emacron = 667;
+ t.ccaron = 556;
+ t.aring = 556;
+ t.Ncommaaccent = 722;
+ t.lacute = 278;
+ t.agrave = 556;
+ t.Tcommaaccent = 611;
+ t.Cacute = 722;
+ t.atilde = 556;
+ t.Edotaccent = 667;
+ t.scaron = 556;
+ t.scedilla = 556;
+ t.iacute = 278;
+ t.lozenge = 494;
+ t.Rcaron = 722;
+ t.Gcommaaccent = 778;
+ t.ucircumflex = 611;
+ t.acircumflex = 556;
+ t.Amacron = 722;
+ t.rcaron = 389;
+ t.ccedilla = 556;
+ t.Zdotaccent = 611;
+ t.Thorn = 667;
+ t.Omacron = 778;
+ t.Racute = 722;
+ t.Sacute = 667;
+ t.dcaron = 743;
+ t.Umacron = 722;
+ t.uring = 611;
+ t.threesuperior = 333;
+ t.Ograve = 778;
+ t.Agrave = 722;
+ t.Abreve = 722;
+ t.multiply = 584;
+ t.uacute = 611;
+ t.Tcaron = 611;
+ t.partialdiff = 494;
+ t.ydieresis = 556;
+ t.Nacute = 722;
+ t.icircumflex = 278;
+ t.Ecircumflex = 667;
+ t.adieresis = 556;
+ t.edieresis = 556;
+ t.cacute = 556;
+ t.nacute = 611;
+ t.umacron = 611;
+ t.Ncaron = 722;
+ t.Iacute = 278;
+ t.plusminus = 584;
+ t.brokenbar = 280;
+ t.registered = 737;
+ t.Gbreve = 778;
+ t.Idotaccent = 278;
+ t.summation = 600;
+ t.Egrave = 667;
+ t.racute = 389;
+ t.omacron = 611;
+ t.Zacute = 611;
+ t.Zcaron = 611;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 722;
+ t.lcommaaccent = 278;
+ t.tcaron = 389;
+ t.eogonek = 556;
+ t.Uogonek = 722;
+ t.Aacute = 722;
+ t.Adieresis = 722;
+ t.egrave = 556;
+ t.zacute = 500;
+ t.iogonek = 278;
+ t.Oacute = 778;
+ t.oacute = 611;
+ t.amacron = 556;
+ t.sacute = 556;
+ t.idieresis = 278;
+ t.Ocircumflex = 778;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 611;
+ t.twosuperior = 333;
+ t.Odieresis = 778;
+ t.mu = 611;
+ t.igrave = 278;
+ t.ohungarumlaut = 611;
+ t.Eogonek = 667;
+ t.dcroat = 611;
+ t.threequarters = 834;
+ t.Scedilla = 667;
+ t.lcaron = 400;
+ t.Kcommaaccent = 722;
+ t.Lacute = 611;
+ t.trademark = 1000;
+ t.edotaccent = 556;
+ t.Igrave = 278;
+ t.Imacron = 278;
+ t.Lcaron = 611;
+ t.onehalf = 834;
+ t.lessequal = 549;
+ t.ocircumflex = 611;
+ t.ntilde = 611;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 667;
+ t.emacron = 556;
+ t.gbreve = 611;
+ t.onequarter = 834;
+ t.Scaron = 667;
+ t.Scommaaccent = 667;
+ t.Ohungarumlaut = 778;
+ t.degree = 400;
+ t.ograve = 611;
+ t.Ccaron = 722;
+ t.ugrave = 611;
+ t.radical = 549;
+ t.Dcaron = 722;
+ t.rcommaaccent = 389;
+ t.Ntilde = 722;
+ t.otilde = 611;
+ t.Rcommaaccent = 722;
+ t.Lcommaaccent = 611;
+ t.Atilde = 722;
+ t.Aogonek = 722;
+ t.Aring = 722;
+ t.Otilde = 778;
+ t.zdotaccent = 500;
+ t.Ecaron = 667;
+ t.Iogonek = 278;
+ t.kcommaaccent = 556;
+ t.minus = 584;
+ t.Icircumflex = 278;
+ t.ncaron = 611;
+ t.tcommaaccent = 333;
+ t.logicalnot = 584;
+ t.odieresis = 611;
+ t.udieresis = 611;
+ t.notequal = 549;
+ t.gcommaaccent = 611;
+ t.eth = 611;
+ t.zcaron = 500;
+ t.ncommaaccent = 611;
+ t.onesuperior = 333;
+ t.imacron = 278;
+ t.Euro = 556;
+ });
+ t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 278;
+ t.exclam = 278;
+ t.quotedbl = 355;
+ t.numbersign = 556;
+ t.dollar = 556;
+ t.percent = 889;
+ t.ampersand = 667;
+ t.quoteright = 222;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 389;
+ t.plus = 584;
+ t.comma = 278;
+ t.hyphen = 333;
+ t.period = 278;
+ t.slash = 278;
+ t.zero = 556;
+ t.one = 556;
+ t.two = 556;
+ t.three = 556;
+ t.four = 556;
+ t.five = 556;
+ t.six = 556;
+ t.seven = 556;
+ t.eight = 556;
+ t.nine = 556;
+ t.colon = 278;
+ t.semicolon = 278;
+ t.less = 584;
+ t.equal = 584;
+ t.greater = 584;
+ t.question = 556;
+ t.at = 1015;
+ t.A = 667;
+ t.B = 667;
+ t.C = 722;
+ t.D = 722;
+ t.E = 667;
+ t.F = 611;
+ t.G = 778;
+ t.H = 722;
+ t.I = 278;
+ t.J = 500;
+ t.K = 667;
+ t.L = 556;
+ t.M = 833;
+ t.N = 722;
+ t.O = 778;
+ t.P = 667;
+ t.Q = 778;
+ t.R = 722;
+ t.S = 667;
+ t.T = 611;
+ t.U = 722;
+ t.V = 667;
+ t.W = 944;
+ t.X = 667;
+ t.Y = 667;
+ t.Z = 611;
+ t.bracketleft = 278;
+ t.backslash = 278;
+ t.bracketright = 278;
+ t.asciicircum = 469;
+ t.underscore = 556;
+ t.quoteleft = 222;
+ t.a = 556;
+ t.b = 556;
+ t.c = 500;
+ t.d = 556;
+ t.e = 556;
+ t.f = 278;
+ t.g = 556;
+ t.h = 556;
+ t.i = 222;
+ t.j = 222;
+ t.k = 500;
+ t.l = 222;
+ t.m = 833;
+ t.n = 556;
+ t.o = 556;
+ t.p = 556;
+ t.q = 556;
+ t.r = 333;
+ t.s = 500;
+ t.t = 278;
+ t.u = 556;
+ t.v = 500;
+ t.w = 722;
+ t.x = 500;
+ t.y = 500;
+ t.z = 500;
+ t.braceleft = 334;
+ t.bar = 260;
+ t.braceright = 334;
+ t.asciitilde = 584;
+ t.exclamdown = 333;
+ t.cent = 556;
+ t.sterling = 556;
+ t.fraction = 167;
+ t.yen = 556;
+ t.florin = 556;
+ t.section = 556;
+ t.currency = 556;
+ t.quotesingle = 191;
+ t.quotedblleft = 333;
+ t.guillemotleft = 556;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 500;
+ t.fl = 500;
+ t.endash = 556;
+ t.dagger = 556;
+ t.daggerdbl = 556;
+ t.periodcentered = 278;
+ t.paragraph = 537;
+ t.bullet = 350;
+ t.quotesinglbase = 222;
+ t.quotedblbase = 333;
+ t.quotedblright = 333;
+ t.guillemotright = 556;
+ t.ellipsis = 1000;
+ t.perthousand = 1000;
+ t.questiondown = 611;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 1000;
+ t.AE = 1000;
+ t.ordfeminine = 370;
+ t.Lslash = 556;
+ t.Oslash = 778;
+ t.OE = 1000;
+ t.ordmasculine = 365;
+ t.ae = 889;
+ t.dotlessi = 278;
+ t.lslash = 222;
+ t.oslash = 611;
+ t.oe = 944;
+ t.germandbls = 611;
+ t.Idieresis = 278;
+ t.eacute = 556;
+ t.abreve = 556;
+ t.uhungarumlaut = 556;
+ t.ecaron = 556;
+ t.Ydieresis = 667;
+ t.divide = 584;
+ t.Yacute = 667;
+ t.Acircumflex = 667;
+ t.aacute = 556;
+ t.Ucircumflex = 722;
+ t.yacute = 500;
+ t.scommaaccent = 500;
+ t.ecircumflex = 556;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 556;
+ t.Uacute = 722;
+ t.uogonek = 556;
+ t.Edieresis = 667;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 737;
+ t.Emacron = 667;
+ t.ccaron = 500;
+ t.aring = 556;
+ t.Ncommaaccent = 722;
+ t.lacute = 222;
+ t.agrave = 556;
+ t.Tcommaaccent = 611;
+ t.Cacute = 722;
+ t.atilde = 556;
+ t.Edotaccent = 667;
+ t.scaron = 500;
+ t.scedilla = 500;
+ t.iacute = 278;
+ t.lozenge = 471;
+ t.Rcaron = 722;
+ t.Gcommaaccent = 778;
+ t.ucircumflex = 556;
+ t.acircumflex = 556;
+ t.Amacron = 667;
+ t.rcaron = 333;
+ t.ccedilla = 500;
+ t.Zdotaccent = 611;
+ t.Thorn = 667;
+ t.Omacron = 778;
+ t.Racute = 722;
+ t.Sacute = 667;
+ t.dcaron = 643;
+ t.Umacron = 722;
+ t.uring = 556;
+ t.threesuperior = 333;
+ t.Ograve = 778;
+ t.Agrave = 667;
+ t.Abreve = 667;
+ t.multiply = 584;
+ t.uacute = 556;
+ t.Tcaron = 611;
+ t.partialdiff = 476;
+ t.ydieresis = 500;
+ t.Nacute = 722;
+ t.icircumflex = 278;
+ t.Ecircumflex = 667;
+ t.adieresis = 556;
+ t.edieresis = 556;
+ t.cacute = 500;
+ t.nacute = 556;
+ t.umacron = 556;
+ t.Ncaron = 722;
+ t.Iacute = 278;
+ t.plusminus = 584;
+ t.brokenbar = 260;
+ t.registered = 737;
+ t.Gbreve = 778;
+ t.Idotaccent = 278;
+ t.summation = 600;
+ t.Egrave = 667;
+ t.racute = 333;
+ t.omacron = 556;
+ t.Zacute = 611;
+ t.Zcaron = 611;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 722;
+ t.lcommaaccent = 222;
+ t.tcaron = 317;
+ t.eogonek = 556;
+ t.Uogonek = 722;
+ t.Aacute = 667;
+ t.Adieresis = 667;
+ t.egrave = 556;
+ t.zacute = 500;
+ t.iogonek = 222;
+ t.Oacute = 778;
+ t.oacute = 556;
+ t.amacron = 556;
+ t.sacute = 500;
+ t.idieresis = 278;
+ t.Ocircumflex = 778;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 556;
+ t.twosuperior = 333;
+ t.Odieresis = 778;
+ t.mu = 556;
+ t.igrave = 278;
+ t.ohungarumlaut = 556;
+ t.Eogonek = 667;
+ t.dcroat = 556;
+ t.threequarters = 834;
+ t.Scedilla = 667;
+ t.lcaron = 299;
+ t.Kcommaaccent = 667;
+ t.Lacute = 556;
+ t.trademark = 1000;
+ t.edotaccent = 556;
+ t.Igrave = 278;
+ t.Imacron = 278;
+ t.Lcaron = 556;
+ t.onehalf = 834;
+ t.lessequal = 549;
+ t.ocircumflex = 556;
+ t.ntilde = 556;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 667;
+ t.emacron = 556;
+ t.gbreve = 556;
+ t.onequarter = 834;
+ t.Scaron = 667;
+ t.Scommaaccent = 667;
+ t.Ohungarumlaut = 778;
+ t.degree = 400;
+ t.ograve = 556;
+ t.Ccaron = 722;
+ t.ugrave = 556;
+ t.radical = 453;
+ t.Dcaron = 722;
+ t.rcommaaccent = 333;
+ t.Ntilde = 722;
+ t.otilde = 556;
+ t.Rcommaaccent = 722;
+ t.Lcommaaccent = 556;
+ t.Atilde = 667;
+ t.Aogonek = 667;
+ t.Aring = 667;
+ t.Otilde = 778;
+ t.zdotaccent = 500;
+ t.Ecaron = 667;
+ t.Iogonek = 278;
+ t.kcommaaccent = 500;
+ t.minus = 584;
+ t.Icircumflex = 278;
+ t.ncaron = 556;
+ t.tcommaaccent = 278;
+ t.logicalnot = 584;
+ t.odieresis = 556;
+ t.udieresis = 556;
+ t.notequal = 549;
+ t.gcommaaccent = 556;
+ t.eth = 556;
+ t.zcaron = 500;
+ t.ncommaaccent = 556;
+ t.onesuperior = 333;
+ t.imacron = 278;
+ t.Euro = 556;
+ });
+ t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 250;
+ t.exclam = 333;
+ t.universal = 713;
+ t.numbersign = 500;
+ t.existential = 549;
+ t.percent = 833;
+ t.ampersand = 778;
+ t.suchthat = 439;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asteriskmath = 500;
+ t.plus = 549;
+ t.comma = 250;
+ t.minus = 549;
+ t.period = 250;
+ t.slash = 278;
+ t.zero = 500;
+ t.one = 500;
+ t.two = 500;
+ t.three = 500;
+ t.four = 500;
+ t.five = 500;
+ t.six = 500;
+ t.seven = 500;
+ t.eight = 500;
+ t.nine = 500;
+ t.colon = 278;
+ t.semicolon = 278;
+ t.less = 549;
+ t.equal = 549;
+ t.greater = 549;
+ t.question = 444;
+ t.congruent = 549;
+ t.Alpha = 722;
+ t.Beta = 667;
+ t.Chi = 722;
+ t.Delta = 612;
+ t.Epsilon = 611;
+ t.Phi = 763;
+ t.Gamma = 603;
+ t.Eta = 722;
+ t.Iota = 333;
+ t.theta1 = 631;
+ t.Kappa = 722;
+ t.Lambda = 686;
+ t.Mu = 889;
+ t.Nu = 722;
+ t.Omicron = 722;
+ t.Pi = 768;
+ t.Theta = 741;
+ t.Rho = 556;
+ t.Sigma = 592;
+ t.Tau = 611;
+ t.Upsilon = 690;
+ t.sigma1 = 439;
+ t.Omega = 768;
+ t.Xi = 645;
+ t.Psi = 795;
+ t.Zeta = 611;
+ t.bracketleft = 333;
+ t.therefore = 863;
+ t.bracketright = 333;
+ t.perpendicular = 658;
+ t.underscore = 500;
+ t.radicalex = 500;
+ t.alpha = 631;
+ t.beta = 549;
+ t.chi = 549;
+ t.delta = 494;
+ t.epsilon = 439;
+ t.phi = 521;
+ t.gamma = 411;
+ t.eta = 603;
+ t.iota = 329;
+ t.phi1 = 603;
+ t.kappa = 549;
+ t.lambda = 549;
+ t.mu = 576;
+ t.nu = 521;
+ t.omicron = 549;
+ t.pi = 549;
+ t.theta = 521;
+ t.rho = 549;
+ t.sigma = 603;
+ t.tau = 439;
+ t.upsilon = 576;
+ t.omega1 = 713;
+ t.omega = 686;
+ t.xi = 493;
+ t.psi = 686;
+ t.zeta = 494;
+ t.braceleft = 480;
+ t.bar = 200;
+ t.braceright = 480;
+ t.similar = 549;
+ t.Euro = 750;
+ t.Upsilon1 = 620;
+ t.minute = 247;
+ t.lessequal = 549;
+ t.fraction = 167;
+ t.infinity = 713;
+ t.florin = 500;
+ t.club = 753;
+ t.diamond = 753;
+ t.heart = 753;
+ t.spade = 753;
+ t.arrowboth = 1042;
+ t.arrowleft = 987;
+ t.arrowup = 603;
+ t.arrowright = 987;
+ t.arrowdown = 603;
+ t.degree = 400;
+ t.plusminus = 549;
+ t.second = 411;
+ t.greaterequal = 549;
+ t.multiply = 549;
+ t.proportional = 713;
+ t.partialdiff = 494;
+ t.bullet = 460;
+ t.divide = 549;
+ t.notequal = 549;
+ t.equivalence = 549;
+ t.approxequal = 549;
+ t.ellipsis = 1000;
+ t.arrowvertex = 603;
+ t.arrowhorizex = 1000;
+ t.carriagereturn = 658;
+ t.aleph = 823;
+ t.Ifraktur = 686;
+ t.Rfraktur = 795;
+ t.weierstrass = 987;
+ t.circlemultiply = 768;
+ t.circleplus = 768;
+ t.emptyset = 823;
+ t.intersection = 768;
+ t.union = 768;
+ t.propersuperset = 713;
+ t.reflexsuperset = 713;
+ t.notsubset = 713;
+ t.propersubset = 713;
+ t.reflexsubset = 713;
+ t.element = 713;
+ t.notelement = 713;
+ t.angle = 768;
+ t.gradient = 713;
+ t.registerserif = 790;
+ t.copyrightserif = 790;
+ t.trademarkserif = 890;
+ t.product = 823;
+ t.radical = 549;
+ t.dotmath = 250;
+ t.logicalnot = 713;
+ t.logicaland = 603;
+ t.logicalor = 603;
+ t.arrowdblboth = 1042;
+ t.arrowdblleft = 987;
+ t.arrowdblup = 603;
+ t.arrowdblright = 987;
+ t.arrowdbldown = 603;
+ t.lozenge = 494;
+ t.angleleft = 329;
+ t.registersans = 790;
+ t.copyrightsans = 790;
+ t.trademarksans = 786;
+ t.summation = 713;
+ t.parenlefttp = 384;
+ t.parenleftex = 384;
+ t.parenleftbt = 384;
+ t.bracketlefttp = 384;
+ t.bracketleftex = 384;
+ t.bracketleftbt = 384;
+ t.bracelefttp = 494;
+ t.braceleftmid = 494;
+ t.braceleftbt = 494;
+ t.braceex = 494;
+ t.angleright = 329;
+ t.integral = 274;
+ t.integraltp = 686;
+ t.integralex = 686;
+ t.integralbt = 686;
+ t.parenrighttp = 384;
+ t.parenrightex = 384;
+ t.parenrightbt = 384;
+ t.bracketrighttp = 384;
+ t.bracketrightex = 384;
+ t.bracketrightbt = 384;
+ t.bracerighttp = 494;
+ t.bracerightmid = 494;
+ t.bracerightbt = 494;
+ t.apple = 790;
+ });
+ t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 250;
+ t.exclam = 333;
+ t.quotedbl = 408;
+ t.numbersign = 500;
+ t.dollar = 500;
+ t.percent = 833;
+ t.ampersand = 778;
+ t.quoteright = 333;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 500;
+ t.plus = 564;
+ t.comma = 250;
+ t.hyphen = 333;
+ t.period = 250;
+ t.slash = 278;
+ t.zero = 500;
+ t.one = 500;
+ t.two = 500;
+ t.three = 500;
+ t.four = 500;
+ t.five = 500;
+ t.six = 500;
+ t.seven = 500;
+ t.eight = 500;
+ t.nine = 500;
+ t.colon = 278;
+ t.semicolon = 278;
+ t.less = 564;
+ t.equal = 564;
+ t.greater = 564;
+ t.question = 444;
+ t.at = 921;
+ t.A = 722;
+ t.B = 667;
+ t.C = 667;
+ t.D = 722;
+ t.E = 611;
+ t.F = 556;
+ t.G = 722;
+ t.H = 722;
+ t.I = 333;
+ t.J = 389;
+ t.K = 722;
+ t.L = 611;
+ t.M = 889;
+ t.N = 722;
+ t.O = 722;
+ t.P = 556;
+ t.Q = 722;
+ t.R = 667;
+ t.S = 556;
+ t.T = 611;
+ t.U = 722;
+ t.V = 722;
+ t.W = 944;
+ t.X = 722;
+ t.Y = 722;
+ t.Z = 611;
+ t.bracketleft = 333;
+ t.backslash = 278;
+ t.bracketright = 333;
+ t.asciicircum = 469;
+ t.underscore = 500;
+ t.quoteleft = 333;
+ t.a = 444;
+ t.b = 500;
+ t.c = 444;
+ t.d = 500;
+ t.e = 444;
+ t.f = 333;
+ t.g = 500;
+ t.h = 500;
+ t.i = 278;
+ t.j = 278;
+ t.k = 500;
+ t.l = 278;
+ t.m = 778;
+ t.n = 500;
+ t.o = 500;
+ t.p = 500;
+ t.q = 500;
+ t.r = 333;
+ t.s = 389;
+ t.t = 278;
+ t.u = 500;
+ t.v = 500;
+ t.w = 722;
+ t.x = 500;
+ t.y = 500;
+ t.z = 444;
+ t.braceleft = 480;
+ t.bar = 200;
+ t.braceright = 480;
+ t.asciitilde = 541;
+ t.exclamdown = 333;
+ t.cent = 500;
+ t.sterling = 500;
+ t.fraction = 167;
+ t.yen = 500;
+ t.florin = 500;
+ t.section = 500;
+ t.currency = 500;
+ t.quotesingle = 180;
+ t.quotedblleft = 444;
+ t.guillemotleft = 500;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 556;
+ t.fl = 556;
+ t.endash = 500;
+ t.dagger = 500;
+ t.daggerdbl = 500;
+ t.periodcentered = 250;
+ t.paragraph = 453;
+ t.bullet = 350;
+ t.quotesinglbase = 333;
+ t.quotedblbase = 444;
+ t.quotedblright = 444;
+ t.guillemotright = 500;
+ t.ellipsis = 1000;
+ t.perthousand = 1000;
+ t.questiondown = 444;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 1000;
+ t.AE = 889;
+ t.ordfeminine = 276;
+ t.Lslash = 611;
+ t.Oslash = 722;
+ t.OE = 889;
+ t.ordmasculine = 310;
+ t.ae = 667;
+ t.dotlessi = 278;
+ t.lslash = 278;
+ t.oslash = 500;
+ t.oe = 722;
+ t.germandbls = 500;
+ t.Idieresis = 333;
+ t.eacute = 444;
+ t.abreve = 444;
+ t.uhungarumlaut = 500;
+ t.ecaron = 444;
+ t.Ydieresis = 722;
+ t.divide = 564;
+ t.Yacute = 722;
+ t.Acircumflex = 722;
+ t.aacute = 444;
+ t.Ucircumflex = 722;
+ t.yacute = 500;
+ t.scommaaccent = 389;
+ t.ecircumflex = 444;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 444;
+ t.Uacute = 722;
+ t.uogonek = 500;
+ t.Edieresis = 611;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 760;
+ t.Emacron = 611;
+ t.ccaron = 444;
+ t.aring = 444;
+ t.Ncommaaccent = 722;
+ t.lacute = 278;
+ t.agrave = 444;
+ t.Tcommaaccent = 611;
+ t.Cacute = 667;
+ t.atilde = 444;
+ t.Edotaccent = 611;
+ t.scaron = 389;
+ t.scedilla = 389;
+ t.iacute = 278;
+ t.lozenge = 471;
+ t.Rcaron = 667;
+ t.Gcommaaccent = 722;
+ t.ucircumflex = 500;
+ t.acircumflex = 444;
+ t.Amacron = 722;
+ t.rcaron = 333;
+ t.ccedilla = 444;
+ t.Zdotaccent = 611;
+ t.Thorn = 556;
+ t.Omacron = 722;
+ t.Racute = 667;
+ t.Sacute = 556;
+ t.dcaron = 588;
+ t.Umacron = 722;
+ t.uring = 500;
+ t.threesuperior = 300;
+ t.Ograve = 722;
+ t.Agrave = 722;
+ t.Abreve = 722;
+ t.multiply = 564;
+ t.uacute = 500;
+ t.Tcaron = 611;
+ t.partialdiff = 476;
+ t.ydieresis = 500;
+ t.Nacute = 722;
+ t.icircumflex = 278;
+ t.Ecircumflex = 611;
+ t.adieresis = 444;
+ t.edieresis = 444;
+ t.cacute = 444;
+ t.nacute = 500;
+ t.umacron = 500;
+ t.Ncaron = 722;
+ t.Iacute = 333;
+ t.plusminus = 564;
+ t.brokenbar = 200;
+ t.registered = 760;
+ t.Gbreve = 722;
+ t.Idotaccent = 333;
+ t.summation = 600;
+ t.Egrave = 611;
+ t.racute = 333;
+ t.omacron = 500;
+ t.Zacute = 611;
+ t.Zcaron = 611;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 667;
+ t.lcommaaccent = 278;
+ t.tcaron = 326;
+ t.eogonek = 444;
+ t.Uogonek = 722;
+ t.Aacute = 722;
+ t.Adieresis = 722;
+ t.egrave = 444;
+ t.zacute = 444;
+ t.iogonek = 278;
+ t.Oacute = 722;
+ t.oacute = 500;
+ t.amacron = 444;
+ t.sacute = 389;
+ t.idieresis = 278;
+ t.Ocircumflex = 722;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 500;
+ t.twosuperior = 300;
+ t.Odieresis = 722;
+ t.mu = 500;
+ t.igrave = 278;
+ t.ohungarumlaut = 500;
+ t.Eogonek = 611;
+ t.dcroat = 500;
+ t.threequarters = 750;
+ t.Scedilla = 556;
+ t.lcaron = 344;
+ t.Kcommaaccent = 722;
+ t.Lacute = 611;
+ t.trademark = 980;
+ t.edotaccent = 444;
+ t.Igrave = 333;
+ t.Imacron = 333;
+ t.Lcaron = 611;
+ t.onehalf = 750;
+ t.lessequal = 549;
+ t.ocircumflex = 500;
+ t.ntilde = 500;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 611;
+ t.emacron = 444;
+ t.gbreve = 500;
+ t.onequarter = 750;
+ t.Scaron = 556;
+ t.Scommaaccent = 556;
+ t.Ohungarumlaut = 722;
+ t.degree = 400;
+ t.ograve = 500;
+ t.Ccaron = 667;
+ t.ugrave = 500;
+ t.radical = 453;
+ t.Dcaron = 722;
+ t.rcommaaccent = 333;
+ t.Ntilde = 722;
+ t.otilde = 500;
+ t.Rcommaaccent = 667;
+ t.Lcommaaccent = 611;
+ t.Atilde = 722;
+ t.Aogonek = 722;
+ t.Aring = 722;
+ t.Otilde = 722;
+ t.zdotaccent = 444;
+ t.Ecaron = 611;
+ t.Iogonek = 333;
+ t.kcommaaccent = 500;
+ t.minus = 564;
+ t.Icircumflex = 333;
+ t.ncaron = 500;
+ t.tcommaaccent = 278;
+ t.logicalnot = 564;
+ t.odieresis = 500;
+ t.udieresis = 500;
+ t.notequal = 549;
+ t.gcommaaccent = 500;
+ t.eth = 500;
+ t.zcaron = 444;
+ t.ncommaaccent = 500;
+ t.onesuperior = 300;
+ t.imacron = 278;
+ t.Euro = 500;
+ });
+ t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 250;
+ t.exclam = 333;
+ t.quotedbl = 555;
+ t.numbersign = 500;
+ t.dollar = 500;
+ t.percent = 1000;
+ t.ampersand = 833;
+ t.quoteright = 333;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 500;
+ t.plus = 570;
+ t.comma = 250;
+ t.hyphen = 333;
+ t.period = 250;
+ t.slash = 278;
+ t.zero = 500;
+ t.one = 500;
+ t.two = 500;
+ t.three = 500;
+ t.four = 500;
+ t.five = 500;
+ t.six = 500;
+ t.seven = 500;
+ t.eight = 500;
+ t.nine = 500;
+ t.colon = 333;
+ t.semicolon = 333;
+ t.less = 570;
+ t.equal = 570;
+ t.greater = 570;
+ t.question = 500;
+ t.at = 930;
+ t.A = 722;
+ t.B = 667;
+ t.C = 722;
+ t.D = 722;
+ t.E = 667;
+ t.F = 611;
+ t.G = 778;
+ t.H = 778;
+ t.I = 389;
+ t.J = 500;
+ t.K = 778;
+ t.L = 667;
+ t.M = 944;
+ t.N = 722;
+ t.O = 778;
+ t.P = 611;
+ t.Q = 778;
+ t.R = 722;
+ t.S = 556;
+ t.T = 667;
+ t.U = 722;
+ t.V = 722;
+ t.W = 1000;
+ t.X = 722;
+ t.Y = 722;
+ t.Z = 667;
+ t.bracketleft = 333;
+ t.backslash = 278;
+ t.bracketright = 333;
+ t.asciicircum = 581;
+ t.underscore = 500;
+ t.quoteleft = 333;
+ t.a = 500;
+ t.b = 556;
+ t.c = 444;
+ t.d = 556;
+ t.e = 444;
+ t.f = 333;
+ t.g = 500;
+ t.h = 556;
+ t.i = 278;
+ t.j = 333;
+ t.k = 556;
+ t.l = 278;
+ t.m = 833;
+ t.n = 556;
+ t.o = 500;
+ t.p = 556;
+ t.q = 556;
+ t.r = 444;
+ t.s = 389;
+ t.t = 333;
+ t.u = 556;
+ t.v = 500;
+ t.w = 722;
+ t.x = 500;
+ t.y = 500;
+ t.z = 444;
+ t.braceleft = 394;
+ t.bar = 220;
+ t.braceright = 394;
+ t.asciitilde = 520;
+ t.exclamdown = 333;
+ t.cent = 500;
+ t.sterling = 500;
+ t.fraction = 167;
+ t.yen = 500;
+ t.florin = 500;
+ t.section = 500;
+ t.currency = 500;
+ t.quotesingle = 278;
+ t.quotedblleft = 500;
+ t.guillemotleft = 500;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 556;
+ t.fl = 556;
+ t.endash = 500;
+ t.dagger = 500;
+ t.daggerdbl = 500;
+ t.periodcentered = 250;
+ t.paragraph = 540;
+ t.bullet = 350;
+ t.quotesinglbase = 333;
+ t.quotedblbase = 500;
+ t.quotedblright = 500;
+ t.guillemotright = 500;
+ t.ellipsis = 1000;
+ t.perthousand = 1000;
+ t.questiondown = 500;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 1000;
+ t.AE = 1000;
+ t.ordfeminine = 300;
+ t.Lslash = 667;
+ t.Oslash = 778;
+ t.OE = 1000;
+ t.ordmasculine = 330;
+ t.ae = 722;
+ t.dotlessi = 278;
+ t.lslash = 278;
+ t.oslash = 500;
+ t.oe = 722;
+ t.germandbls = 556;
+ t.Idieresis = 389;
+ t.eacute = 444;
+ t.abreve = 500;
+ t.uhungarumlaut = 556;
+ t.ecaron = 444;
+ t.Ydieresis = 722;
+ t.divide = 570;
+ t.Yacute = 722;
+ t.Acircumflex = 722;
+ t.aacute = 500;
+ t.Ucircumflex = 722;
+ t.yacute = 500;
+ t.scommaaccent = 389;
+ t.ecircumflex = 444;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 500;
+ t.Uacute = 722;
+ t.uogonek = 556;
+ t.Edieresis = 667;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 747;
+ t.Emacron = 667;
+ t.ccaron = 444;
+ t.aring = 500;
+ t.Ncommaaccent = 722;
+ t.lacute = 278;
+ t.agrave = 500;
+ t.Tcommaaccent = 667;
+ t.Cacute = 722;
+ t.atilde = 500;
+ t.Edotaccent = 667;
+ t.scaron = 389;
+ t.scedilla = 389;
+ t.iacute = 278;
+ t.lozenge = 494;
+ t.Rcaron = 722;
+ t.Gcommaaccent = 778;
+ t.ucircumflex = 556;
+ t.acircumflex = 500;
+ t.Amacron = 722;
+ t.rcaron = 444;
+ t.ccedilla = 444;
+ t.Zdotaccent = 667;
+ t.Thorn = 611;
+ t.Omacron = 778;
+ t.Racute = 722;
+ t.Sacute = 556;
+ t.dcaron = 672;
+ t.Umacron = 722;
+ t.uring = 556;
+ t.threesuperior = 300;
+ t.Ograve = 778;
+ t.Agrave = 722;
+ t.Abreve = 722;
+ t.multiply = 570;
+ t.uacute = 556;
+ t.Tcaron = 667;
+ t.partialdiff = 494;
+ t.ydieresis = 500;
+ t.Nacute = 722;
+ t.icircumflex = 278;
+ t.Ecircumflex = 667;
+ t.adieresis = 500;
+ t.edieresis = 444;
+ t.cacute = 444;
+ t.nacute = 556;
+ t.umacron = 556;
+ t.Ncaron = 722;
+ t.Iacute = 389;
+ t.plusminus = 570;
+ t.brokenbar = 220;
+ t.registered = 747;
+ t.Gbreve = 778;
+ t.Idotaccent = 389;
+ t.summation = 600;
+ t.Egrave = 667;
+ t.racute = 444;
+ t.omacron = 500;
+ t.Zacute = 667;
+ t.Zcaron = 667;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 722;
+ t.lcommaaccent = 278;
+ t.tcaron = 416;
+ t.eogonek = 444;
+ t.Uogonek = 722;
+ t.Aacute = 722;
+ t.Adieresis = 722;
+ t.egrave = 444;
+ t.zacute = 444;
+ t.iogonek = 278;
+ t.Oacute = 778;
+ t.oacute = 500;
+ t.amacron = 500;
+ t.sacute = 389;
+ t.idieresis = 278;
+ t.Ocircumflex = 778;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 556;
+ t.twosuperior = 300;
+ t.Odieresis = 778;
+ t.mu = 556;
+ t.igrave = 278;
+ t.ohungarumlaut = 500;
+ t.Eogonek = 667;
+ t.dcroat = 556;
+ t.threequarters = 750;
+ t.Scedilla = 556;
+ t.lcaron = 394;
+ t.Kcommaaccent = 778;
+ t.Lacute = 667;
+ t.trademark = 1000;
+ t.edotaccent = 444;
+ t.Igrave = 389;
+ t.Imacron = 389;
+ t.Lcaron = 667;
+ t.onehalf = 750;
+ t.lessequal = 549;
+ t.ocircumflex = 500;
+ t.ntilde = 556;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 667;
+ t.emacron = 444;
+ t.gbreve = 500;
+ t.onequarter = 750;
+ t.Scaron = 556;
+ t.Scommaaccent = 556;
+ t.Ohungarumlaut = 778;
+ t.degree = 400;
+ t.ograve = 500;
+ t.Ccaron = 722;
+ t.ugrave = 556;
+ t.radical = 549;
+ t.Dcaron = 722;
+ t.rcommaaccent = 444;
+ t.Ntilde = 722;
+ t.otilde = 500;
+ t.Rcommaaccent = 722;
+ t.Lcommaaccent = 667;
+ t.Atilde = 722;
+ t.Aogonek = 722;
+ t.Aring = 722;
+ t.Otilde = 778;
+ t.zdotaccent = 444;
+ t.Ecaron = 667;
+ t.Iogonek = 389;
+ t.kcommaaccent = 556;
+ t.minus = 570;
+ t.Icircumflex = 389;
+ t.ncaron = 556;
+ t.tcommaaccent = 333;
+ t.logicalnot = 570;
+ t.odieresis = 500;
+ t.udieresis = 556;
+ t.notequal = 549;
+ t.gcommaaccent = 500;
+ t.eth = 500;
+ t.zcaron = 444;
+ t.ncommaaccent = 556;
+ t.onesuperior = 300;
+ t.imacron = 278;
+ t.Euro = 500;
+ });
+ t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 250;
+ t.exclam = 389;
+ t.quotedbl = 555;
+ t.numbersign = 500;
+ t.dollar = 500;
+ t.percent = 833;
+ t.ampersand = 778;
+ t.quoteright = 333;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 500;
+ t.plus = 570;
+ t.comma = 250;
+ t.hyphen = 333;
+ t.period = 250;
+ t.slash = 278;
+ t.zero = 500;
+ t.one = 500;
+ t.two = 500;
+ t.three = 500;
+ t.four = 500;
+ t.five = 500;
+ t.six = 500;
+ t.seven = 500;
+ t.eight = 500;
+ t.nine = 500;
+ t.colon = 333;
+ t.semicolon = 333;
+ t.less = 570;
+ t.equal = 570;
+ t.greater = 570;
+ t.question = 500;
+ t.at = 832;
+ t.A = 667;
+ t.B = 667;
+ t.C = 667;
+ t.D = 722;
+ t.E = 667;
+ t.F = 667;
+ t.G = 722;
+ t.H = 778;
+ t.I = 389;
+ t.J = 500;
+ t.K = 667;
+ t.L = 611;
+ t.M = 889;
+ t.N = 722;
+ t.O = 722;
+ t.P = 611;
+ t.Q = 722;
+ t.R = 667;
+ t.S = 556;
+ t.T = 611;
+ t.U = 722;
+ t.V = 667;
+ t.W = 889;
+ t.X = 667;
+ t.Y = 611;
+ t.Z = 611;
+ t.bracketleft = 333;
+ t.backslash = 278;
+ t.bracketright = 333;
+ t.asciicircum = 570;
+ t.underscore = 500;
+ t.quoteleft = 333;
+ t.a = 500;
+ t.b = 500;
+ t.c = 444;
+ t.d = 500;
+ t.e = 444;
+ t.f = 333;
+ t.g = 500;
+ t.h = 556;
+ t.i = 278;
+ t.j = 278;
+ t.k = 500;
+ t.l = 278;
+ t.m = 778;
+ t.n = 556;
+ t.o = 500;
+ t.p = 500;
+ t.q = 500;
+ t.r = 389;
+ t.s = 389;
+ t.t = 278;
+ t.u = 556;
+ t.v = 444;
+ t.w = 667;
+ t.x = 500;
+ t.y = 444;
+ t.z = 389;
+ t.braceleft = 348;
+ t.bar = 220;
+ t.braceright = 348;
+ t.asciitilde = 570;
+ t.exclamdown = 389;
+ t.cent = 500;
+ t.sterling = 500;
+ t.fraction = 167;
+ t.yen = 500;
+ t.florin = 500;
+ t.section = 500;
+ t.currency = 500;
+ t.quotesingle = 278;
+ t.quotedblleft = 500;
+ t.guillemotleft = 500;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 556;
+ t.fl = 556;
+ t.endash = 500;
+ t.dagger = 500;
+ t.daggerdbl = 500;
+ t.periodcentered = 250;
+ t.paragraph = 500;
+ t.bullet = 350;
+ t.quotesinglbase = 333;
+ t.quotedblbase = 500;
+ t.quotedblright = 500;
+ t.guillemotright = 500;
+ t.ellipsis = 1000;
+ t.perthousand = 1000;
+ t.questiondown = 500;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 1000;
+ t.AE = 944;
+ t.ordfeminine = 266;
+ t.Lslash = 611;
+ t.Oslash = 722;
+ t.OE = 944;
+ t.ordmasculine = 300;
+ t.ae = 722;
+ t.dotlessi = 278;
+ t.lslash = 278;
+ t.oslash = 500;
+ t.oe = 722;
+ t.germandbls = 500;
+ t.Idieresis = 389;
+ t.eacute = 444;
+ t.abreve = 500;
+ t.uhungarumlaut = 556;
+ t.ecaron = 444;
+ t.Ydieresis = 611;
+ t.divide = 570;
+ t.Yacute = 611;
+ t.Acircumflex = 667;
+ t.aacute = 500;
+ t.Ucircumflex = 722;
+ t.yacute = 444;
+ t.scommaaccent = 389;
+ t.ecircumflex = 444;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 500;
+ t.Uacute = 722;
+ t.uogonek = 556;
+ t.Edieresis = 667;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 747;
+ t.Emacron = 667;
+ t.ccaron = 444;
+ t.aring = 500;
+ t.Ncommaaccent = 722;
+ t.lacute = 278;
+ t.agrave = 500;
+ t.Tcommaaccent = 611;
+ t.Cacute = 667;
+ t.atilde = 500;
+ t.Edotaccent = 667;
+ t.scaron = 389;
+ t.scedilla = 389;
+ t.iacute = 278;
+ t.lozenge = 494;
+ t.Rcaron = 667;
+ t.Gcommaaccent = 722;
+ t.ucircumflex = 556;
+ t.acircumflex = 500;
+ t.Amacron = 667;
+ t.rcaron = 389;
+ t.ccedilla = 444;
+ t.Zdotaccent = 611;
+ t.Thorn = 611;
+ t.Omacron = 722;
+ t.Racute = 667;
+ t.Sacute = 556;
+ t.dcaron = 608;
+ t.Umacron = 722;
+ t.uring = 556;
+ t.threesuperior = 300;
+ t.Ograve = 722;
+ t.Agrave = 667;
+ t.Abreve = 667;
+ t.multiply = 570;
+ t.uacute = 556;
+ t.Tcaron = 611;
+ t.partialdiff = 494;
+ t.ydieresis = 444;
+ t.Nacute = 722;
+ t.icircumflex = 278;
+ t.Ecircumflex = 667;
+ t.adieresis = 500;
+ t.edieresis = 444;
+ t.cacute = 444;
+ t.nacute = 556;
+ t.umacron = 556;
+ t.Ncaron = 722;
+ t.Iacute = 389;
+ t.plusminus = 570;
+ t.brokenbar = 220;
+ t.registered = 747;
+ t.Gbreve = 722;
+ t.Idotaccent = 389;
+ t.summation = 600;
+ t.Egrave = 667;
+ t.racute = 389;
+ t.omacron = 500;
+ t.Zacute = 611;
+ t.Zcaron = 611;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 667;
+ t.lcommaaccent = 278;
+ t.tcaron = 366;
+ t.eogonek = 444;
+ t.Uogonek = 722;
+ t.Aacute = 667;
+ t.Adieresis = 667;
+ t.egrave = 444;
+ t.zacute = 389;
+ t.iogonek = 278;
+ t.Oacute = 722;
+ t.oacute = 500;
+ t.amacron = 500;
+ t.sacute = 389;
+ t.idieresis = 278;
+ t.Ocircumflex = 722;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 500;
+ t.twosuperior = 300;
+ t.Odieresis = 722;
+ t.mu = 576;
+ t.igrave = 278;
+ t.ohungarumlaut = 500;
+ t.Eogonek = 667;
+ t.dcroat = 500;
+ t.threequarters = 750;
+ t.Scedilla = 556;
+ t.lcaron = 382;
+ t.Kcommaaccent = 667;
+ t.Lacute = 611;
+ t.trademark = 1000;
+ t.edotaccent = 444;
+ t.Igrave = 389;
+ t.Imacron = 389;
+ t.Lcaron = 611;
+ t.onehalf = 750;
+ t.lessequal = 549;
+ t.ocircumflex = 500;
+ t.ntilde = 556;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 667;
+ t.emacron = 444;
+ t.gbreve = 500;
+ t.onequarter = 750;
+ t.Scaron = 556;
+ t.Scommaaccent = 556;
+ t.Ohungarumlaut = 722;
+ t.degree = 400;
+ t.ograve = 500;
+ t.Ccaron = 667;
+ t.ugrave = 556;
+ t.radical = 549;
+ t.Dcaron = 722;
+ t.rcommaaccent = 389;
+ t.Ntilde = 722;
+ t.otilde = 500;
+ t.Rcommaaccent = 667;
+ t.Lcommaaccent = 611;
+ t.Atilde = 667;
+ t.Aogonek = 667;
+ t.Aring = 667;
+ t.Otilde = 722;
+ t.zdotaccent = 389;
+ t.Ecaron = 667;
+ t.Iogonek = 389;
+ t.kcommaaccent = 500;
+ t.minus = 606;
+ t.Icircumflex = 389;
+ t.ncaron = 556;
+ t.tcommaaccent = 278;
+ t.logicalnot = 606;
+ t.odieresis = 500;
+ t.udieresis = 556;
+ t.notequal = 549;
+ t.gcommaaccent = 500;
+ t.eth = 500;
+ t.zcaron = 389;
+ t.ncommaaccent = 556;
+ t.onesuperior = 300;
+ t.imacron = 278;
+ t.Euro = 500;
+ });
+ t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 250;
+ t.exclam = 333;
+ t.quotedbl = 420;
+ t.numbersign = 500;
+ t.dollar = 500;
+ t.percent = 833;
+ t.ampersand = 778;
+ t.quoteright = 333;
+ t.parenleft = 333;
+ t.parenright = 333;
+ t.asterisk = 500;
+ t.plus = 675;
+ t.comma = 250;
+ t.hyphen = 333;
+ t.period = 250;
+ t.slash = 278;
+ t.zero = 500;
+ t.one = 500;
+ t.two = 500;
+ t.three = 500;
+ t.four = 500;
+ t.five = 500;
+ t.six = 500;
+ t.seven = 500;
+ t.eight = 500;
+ t.nine = 500;
+ t.colon = 333;
+ t.semicolon = 333;
+ t.less = 675;
+ t.equal = 675;
+ t.greater = 675;
+ t.question = 500;
+ t.at = 920;
+ t.A = 611;
+ t.B = 611;
+ t.C = 667;
+ t.D = 722;
+ t.E = 611;
+ t.F = 611;
+ t.G = 722;
+ t.H = 722;
+ t.I = 333;
+ t.J = 444;
+ t.K = 667;
+ t.L = 556;
+ t.M = 833;
+ t.N = 667;
+ t.O = 722;
+ t.P = 611;
+ t.Q = 722;
+ t.R = 611;
+ t.S = 500;
+ t.T = 556;
+ t.U = 722;
+ t.V = 611;
+ t.W = 833;
+ t.X = 611;
+ t.Y = 556;
+ t.Z = 556;
+ t.bracketleft = 389;
+ t.backslash = 278;
+ t.bracketright = 389;
+ t.asciicircum = 422;
+ t.underscore = 500;
+ t.quoteleft = 333;
+ t.a = 500;
+ t.b = 500;
+ t.c = 444;
+ t.d = 500;
+ t.e = 444;
+ t.f = 278;
+ t.g = 500;
+ t.h = 500;
+ t.i = 278;
+ t.j = 278;
+ t.k = 444;
+ t.l = 278;
+ t.m = 722;
+ t.n = 500;
+ t.o = 500;
+ t.p = 500;
+ t.q = 500;
+ t.r = 389;
+ t.s = 389;
+ t.t = 278;
+ t.u = 500;
+ t.v = 444;
+ t.w = 667;
+ t.x = 444;
+ t.y = 444;
+ t.z = 389;
+ t.braceleft = 400;
+ t.bar = 275;
+ t.braceright = 400;
+ t.asciitilde = 541;
+ t.exclamdown = 389;
+ t.cent = 500;
+ t.sterling = 500;
+ t.fraction = 167;
+ t.yen = 500;
+ t.florin = 500;
+ t.section = 500;
+ t.currency = 500;
+ t.quotesingle = 214;
+ t.quotedblleft = 556;
+ t.guillemotleft = 500;
+ t.guilsinglleft = 333;
+ t.guilsinglright = 333;
+ t.fi = 500;
+ t.fl = 500;
+ t.endash = 500;
+ t.dagger = 500;
+ t.daggerdbl = 500;
+ t.periodcentered = 250;
+ t.paragraph = 523;
+ t.bullet = 350;
+ t.quotesinglbase = 333;
+ t.quotedblbase = 556;
+ t.quotedblright = 556;
+ t.guillemotright = 500;
+ t.ellipsis = 889;
+ t.perthousand = 1000;
+ t.questiondown = 500;
+ t.grave = 333;
+ t.acute = 333;
+ t.circumflex = 333;
+ t.tilde = 333;
+ t.macron = 333;
+ t.breve = 333;
+ t.dotaccent = 333;
+ t.dieresis = 333;
+ t.ring = 333;
+ t.cedilla = 333;
+ t.hungarumlaut = 333;
+ t.ogonek = 333;
+ t.caron = 333;
+ t.emdash = 889;
+ t.AE = 889;
+ t.ordfeminine = 276;
+ t.Lslash = 556;
+ t.Oslash = 722;
+ t.OE = 944;
+ t.ordmasculine = 310;
+ t.ae = 667;
+ t.dotlessi = 278;
+ t.lslash = 278;
+ t.oslash = 500;
+ t.oe = 667;
+ t.germandbls = 500;
+ t.Idieresis = 333;
+ t.eacute = 444;
+ t.abreve = 500;
+ t.uhungarumlaut = 500;
+ t.ecaron = 444;
+ t.Ydieresis = 556;
+ t.divide = 675;
+ t.Yacute = 556;
+ t.Acircumflex = 611;
+ t.aacute = 500;
+ t.Ucircumflex = 722;
+ t.yacute = 444;
+ t.scommaaccent = 389;
+ t.ecircumflex = 444;
+ t.Uring = 722;
+ t.Udieresis = 722;
+ t.aogonek = 500;
+ t.Uacute = 722;
+ t.uogonek = 500;
+ t.Edieresis = 611;
+ t.Dcroat = 722;
+ t.commaaccent = 250;
+ t.copyright = 760;
+ t.Emacron = 611;
+ t.ccaron = 444;
+ t.aring = 500;
+ t.Ncommaaccent = 667;
+ t.lacute = 278;
+ t.agrave = 500;
+ t.Tcommaaccent = 556;
+ t.Cacute = 667;
+ t.atilde = 500;
+ t.Edotaccent = 611;
+ t.scaron = 389;
+ t.scedilla = 389;
+ t.iacute = 278;
+ t.lozenge = 471;
+ t.Rcaron = 611;
+ t.Gcommaaccent = 722;
+ t.ucircumflex = 500;
+ t.acircumflex = 500;
+ t.Amacron = 611;
+ t.rcaron = 389;
+ t.ccedilla = 444;
+ t.Zdotaccent = 556;
+ t.Thorn = 611;
+ t.Omacron = 722;
+ t.Racute = 611;
+ t.Sacute = 500;
+ t.dcaron = 544;
+ t.Umacron = 722;
+ t.uring = 500;
+ t.threesuperior = 300;
+ t.Ograve = 722;
+ t.Agrave = 611;
+ t.Abreve = 611;
+ t.multiply = 675;
+ t.uacute = 500;
+ t.Tcaron = 556;
+ t.partialdiff = 476;
+ t.ydieresis = 444;
+ t.Nacute = 667;
+ t.icircumflex = 278;
+ t.Ecircumflex = 611;
+ t.adieresis = 500;
+ t.edieresis = 444;
+ t.cacute = 444;
+ t.nacute = 500;
+ t.umacron = 500;
+ t.Ncaron = 667;
+ t.Iacute = 333;
+ t.plusminus = 675;
+ t.brokenbar = 275;
+ t.registered = 760;
+ t.Gbreve = 722;
+ t.Idotaccent = 333;
+ t.summation = 600;
+ t.Egrave = 611;
+ t.racute = 389;
+ t.omacron = 500;
+ t.Zacute = 556;
+ t.Zcaron = 556;
+ t.greaterequal = 549;
+ t.Eth = 722;
+ t.Ccedilla = 667;
+ t.lcommaaccent = 278;
+ t.tcaron = 300;
+ t.eogonek = 444;
+ t.Uogonek = 722;
+ t.Aacute = 611;
+ t.Adieresis = 611;
+ t.egrave = 444;
+ t.zacute = 389;
+ t.iogonek = 278;
+ t.Oacute = 722;
+ t.oacute = 500;
+ t.amacron = 500;
+ t.sacute = 389;
+ t.idieresis = 278;
+ t.Ocircumflex = 722;
+ t.Ugrave = 722;
+ t.Delta = 612;
+ t.thorn = 500;
+ t.twosuperior = 300;
+ t.Odieresis = 722;
+ t.mu = 500;
+ t.igrave = 278;
+ t.ohungarumlaut = 500;
+ t.Eogonek = 611;
+ t.dcroat = 500;
+ t.threequarters = 750;
+ t.Scedilla = 500;
+ t.lcaron = 300;
+ t.Kcommaaccent = 667;
+ t.Lacute = 556;
+ t.trademark = 980;
+ t.edotaccent = 444;
+ t.Igrave = 333;
+ t.Imacron = 333;
+ t.Lcaron = 611;
+ t.onehalf = 750;
+ t.lessequal = 549;
+ t.ocircumflex = 500;
+ t.ntilde = 500;
+ t.Uhungarumlaut = 722;
+ t.Eacute = 611;
+ t.emacron = 444;
+ t.gbreve = 500;
+ t.onequarter = 750;
+ t.Scaron = 500;
+ t.Scommaaccent = 500;
+ t.Ohungarumlaut = 722;
+ t.degree = 400;
+ t.ograve = 500;
+ t.Ccaron = 667;
+ t.ugrave = 500;
+ t.radical = 453;
+ t.Dcaron = 722;
+ t.rcommaaccent = 389;
+ t.Ntilde = 667;
+ t.otilde = 500;
+ t.Rcommaaccent = 611;
+ t.Lcommaaccent = 556;
+ t.Atilde = 611;
+ t.Aogonek = 611;
+ t.Aring = 611;
+ t.Otilde = 722;
+ t.zdotaccent = 389;
+ t.Ecaron = 611;
+ t.Iogonek = 333;
+ t.kcommaaccent = 444;
+ t.minus = 675;
+ t.Icircumflex = 333;
+ t.ncaron = 500;
+ t.tcommaaccent = 278;
+ t.logicalnot = 675;
+ t.odieresis = 500;
+ t.udieresis = 500;
+ t.notequal = 549;
+ t.gcommaaccent = 500;
+ t.eth = 500;
+ t.zcaron = 389;
+ t.ncommaaccent = 500;
+ t.onesuperior = 300;
+ t.imacron = 278;
+ t.Euro = 500;
+ });
+ t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.space = 278;
+ t.a1 = 974;
+ t.a2 = 961;
+ t.a202 = 974;
+ t.a3 = 980;
+ t.a4 = 719;
+ t.a5 = 789;
+ t.a119 = 790;
+ t.a118 = 791;
+ t.a117 = 690;
+ t.a11 = 960;
+ t.a12 = 939;
+ t.a13 = 549;
+ t.a14 = 855;
+ t.a15 = 911;
+ t.a16 = 933;
+ t.a105 = 911;
+ t.a17 = 945;
+ t.a18 = 974;
+ t.a19 = 755;
+ t.a20 = 846;
+ t.a21 = 762;
+ t.a22 = 761;
+ t.a23 = 571;
+ t.a24 = 677;
+ t.a25 = 763;
+ t.a26 = 760;
+ t.a27 = 759;
+ t.a28 = 754;
+ t.a6 = 494;
+ t.a7 = 552;
+ t.a8 = 537;
+ t.a9 = 577;
+ t.a10 = 692;
+ t.a29 = 786;
+ t.a30 = 788;
+ t.a31 = 788;
+ t.a32 = 790;
+ t.a33 = 793;
+ t.a34 = 794;
+ t.a35 = 816;
+ t.a36 = 823;
+ t.a37 = 789;
+ t.a38 = 841;
+ t.a39 = 823;
+ t.a40 = 833;
+ t.a41 = 816;
+ t.a42 = 831;
+ t.a43 = 923;
+ t.a44 = 744;
+ t.a45 = 723;
+ t.a46 = 749;
+ t.a47 = 790;
+ t.a48 = 792;
+ t.a49 = 695;
+ t.a50 = 776;
+ t.a51 = 768;
+ t.a52 = 792;
+ t.a53 = 759;
+ t.a54 = 707;
+ t.a55 = 708;
+ t.a56 = 682;
+ t.a57 = 701;
+ t.a58 = 826;
+ t.a59 = 815;
+ t.a60 = 789;
+ t.a61 = 789;
+ t.a62 = 707;
+ t.a63 = 687;
+ t.a64 = 696;
+ t.a65 = 689;
+ t.a66 = 786;
+ t.a67 = 787;
+ t.a68 = 713;
+ t.a69 = 791;
+ t.a70 = 785;
+ t.a71 = 791;
+ t.a72 = 873;
+ t.a73 = 761;
+ t.a74 = 762;
+ t.a203 = 762;
+ t.a75 = 759;
+ t.a204 = 759;
+ t.a76 = 892;
+ t.a77 = 892;
+ t.a78 = 788;
+ t.a79 = 784;
+ t.a81 = 438;
+ t.a82 = 138;
+ t.a83 = 277;
+ t.a84 = 415;
+ t.a97 = 392;
+ t.a98 = 392;
+ t.a99 = 668;
+ t.a100 = 668;
+ t.a89 = 390;
+ t.a90 = 390;
+ t.a93 = 317;
+ t.a94 = 317;
+ t.a91 = 276;
+ t.a92 = 276;
+ t.a205 = 509;
+ t.a85 = 509;
+ t.a206 = 410;
+ t.a86 = 410;
+ t.a87 = 234;
+ t.a88 = 234;
+ t.a95 = 334;
+ t.a96 = 334;
+ t.a101 = 732;
+ t.a102 = 544;
+ t.a103 = 544;
+ t.a104 = 910;
+ t.a106 = 667;
+ t.a107 = 760;
+ t.a108 = 760;
+ t.a112 = 776;
+ t.a111 = 595;
+ t.a110 = 694;
+ t.a109 = 626;
+ t.a120 = 788;
+ t.a121 = 788;
+ t.a122 = 788;
+ t.a123 = 788;
+ t.a124 = 788;
+ t.a125 = 788;
+ t.a126 = 788;
+ t.a127 = 788;
+ t.a128 = 788;
+ t.a129 = 788;
+ t.a130 = 788;
+ t.a131 = 788;
+ t.a132 = 788;
+ t.a133 = 788;
+ t.a134 = 788;
+ t.a135 = 788;
+ t.a136 = 788;
+ t.a137 = 788;
+ t.a138 = 788;
+ t.a139 = 788;
+ t.a140 = 788;
+ t.a141 = 788;
+ t.a142 = 788;
+ t.a143 = 788;
+ t.a144 = 788;
+ t.a145 = 788;
+ t.a146 = 788;
+ t.a147 = 788;
+ t.a148 = 788;
+ t.a149 = 788;
+ t.a150 = 788;
+ t.a151 = 788;
+ t.a152 = 788;
+ t.a153 = 788;
+ t.a154 = 788;
+ t.a155 = 788;
+ t.a156 = 788;
+ t.a157 = 788;
+ t.a158 = 788;
+ t.a159 = 788;
+ t.a160 = 894;
+ t.a161 = 838;
+ t.a163 = 1016;
+ t.a164 = 458;
+ t.a196 = 748;
+ t.a165 = 924;
+ t.a192 = 748;
+ t.a166 = 918;
+ t.a167 = 927;
+ t.a168 = 928;
+ t.a169 = 928;
+ t.a170 = 834;
+ t.a171 = 873;
+ t.a172 = 828;
+ t.a173 = 924;
+ t.a162 = 924;
+ t.a174 = 917;
+ t.a175 = 930;
+ t.a176 = 931;
+ t.a177 = 463;
+ t.a178 = 883;
+ t.a179 = 836;
+ t.a193 = 836;
+ t.a180 = 867;
+ t.a199 = 867;
+ t.a181 = 696;
+ t.a200 = 696;
+ t.a182 = 874;
+ t.a201 = 874;
+ t.a183 = 760;
+ t.a184 = 946;
+ t.a197 = 771;
+ t.a185 = 865;
+ t.a194 = 771;
+ t.a198 = 888;
+ t.a186 = 967;
+ t.a195 = 888;
+ t.a187 = 831;
+ t.a188 = 873;
+ t.a189 = 927;
+ t.a190 = 970;
+ t.a191 = 918;
+ });
+});
+exports.getMetrics = getMetrics;
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isPDFFunction = isPDFFunction;
+exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _ps_parser = __w_pdfjs_require__(42);
+
+class PDFFunctionFactory {
+ constructor({
+ xref,
+ isEvalSupported = true
+ }) {
+ this.xref = xref;
+ this.isEvalSupported = isEvalSupported !== false;
+ }
+
+ create(fn) {
+ return PDFFunction.parse({
+ xref: this.xref,
+ isEvalSupported: this.isEvalSupported,
+ fn
+ });
+ }
+
+ createFromArray(fnObj) {
+ return PDFFunction.parseArray({
+ xref: this.xref,
+ isEvalSupported: this.isEvalSupported,
+ fnObj
+ });
+ }
+
+}
+
+exports.PDFFunctionFactory = PDFFunctionFactory;
+
+function toNumberArray(arr) {
+ if (!Array.isArray(arr)) {
+ return null;
+ }
+
+ const length = arr.length;
+
+ for (let i = 0; i < length; i++) {
+ if (typeof arr[i] !== "number") {
+ const result = new Array(length);
+
+ for (let j = 0; j < length; j++) {
+ result[j] = +arr[j];
+ }
+
+ return result;
+ }
+ }
+
+ return arr;
+}
+
+var PDFFunction = function PDFFunctionClosure() {
+ const CONSTRUCT_SAMPLED = 0;
+ const CONSTRUCT_INTERPOLATED = 2;
+ const CONSTRUCT_STICHED = 3;
+ const CONSTRUCT_POSTSCRIPT = 4;
+ return {
+ getSampleArray(size, outputSize, bps, stream) {
+ var i, ii;
+ var length = 1;
+
+ for (i = 0, ii = size.length; i < ii; i++) {
+ length *= size[i];
+ }
+
+ length *= outputSize;
+ var array = new Array(length);
+ var codeSize = 0;
+ var codeBuf = 0;
+ var sampleMul = 1.0 / (2.0 ** bps - 1);
+ var strBytes = stream.getBytes((length * bps + 7) / 8);
+ var strIdx = 0;
+
+ for (i = 0; i < length; i++) {
+ while (codeSize < bps) {
+ codeBuf <<= 8;
+ codeBuf |= strBytes[strIdx++];
+ codeSize += 8;
+ }
+
+ codeSize -= bps;
+ array[i] = (codeBuf >> codeSize) * sampleMul;
+ codeBuf &= (1 << codeSize) - 1;
+ }
+
+ return array;
+ },
+
+ getIR({
+ xref,
+ isEvalSupported,
+ fn
+ }) {
+ var dict = fn.dict;
+
+ if (!dict) {
+ dict = fn;
+ }
+
+ var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript];
+ var typeNum = dict.get("FunctionType");
+ var typeFn = types[typeNum];
+
+ if (!typeFn) {
+ throw new _util.FormatError("Unknown type of function");
+ }
+
+ return typeFn.call(this, {
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ });
+ },
+
+ fromIR({
+ xref,
+ isEvalSupported,
+ IR
+ }) {
+ var type = IR[0];
+
+ switch (type) {
+ case CONSTRUCT_SAMPLED:
+ return this.constructSampledFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ });
+
+ case CONSTRUCT_INTERPOLATED:
+ return this.constructInterpolatedFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ });
+
+ case CONSTRUCT_STICHED:
+ return this.constructStichedFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ });
+
+ default:
+ return this.constructPostScriptFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ });
+ }
+ },
+
+ parse({
+ xref,
+ isEvalSupported,
+ fn
+ }) {
+ const IR = this.getIR({
+ xref,
+ isEvalSupported,
+ fn
+ });
+ return this.fromIR({
+ xref,
+ isEvalSupported,
+ IR
+ });
+ },
+
+ parseArray({
+ xref,
+ isEvalSupported,
+ fnObj
+ }) {
+ if (!Array.isArray(fnObj)) {
+ return this.parse({
+ xref,
+ isEvalSupported,
+ fn: fnObj
+ });
+ }
+
+ var fnArray = [];
+
+ for (var j = 0, jj = fnObj.length; j < jj; j++) {
+ fnArray.push(this.parse({
+ xref,
+ isEvalSupported,
+ fn: xref.fetchIfRef(fnObj[j])
+ }));
+ }
+
+ return function (src, srcOffset, dest, destOffset) {
+ for (var i = 0, ii = fnArray.length; i < ii; i++) {
+ fnArray[i](src, srcOffset, dest, destOffset + i);
+ }
+ };
+ },
+
+ constructSampled({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ }) {
+ function toMultiArray(arr) {
+ var inputLength = arr.length;
+ var out = [];
+ var index = 0;
+
+ for (var i = 0; i < inputLength; i += 2) {
+ out[index] = [arr[i], arr[i + 1]];
+ ++index;
+ }
+
+ return out;
+ }
+
+ var domain = toNumberArray(dict.getArray("Domain"));
+ var range = toNumberArray(dict.getArray("Range"));
+
+ if (!domain || !range) {
+ throw new _util.FormatError("No domain or range");
+ }
+
+ var inputSize = domain.length / 2;
+ var outputSize = range.length / 2;
+ domain = toMultiArray(domain);
+ range = toMultiArray(range);
+ var size = toNumberArray(dict.getArray("Size"));
+ var bps = dict.get("BitsPerSample");
+ var order = dict.get("Order") || 1;
+
+ if (order !== 1) {
+ (0, _util.info)("No support for cubic spline interpolation: " + order);
+ }
+
+ var encode = toNumberArray(dict.getArray("Encode"));
+
+ if (!encode) {
+ encode = [];
+
+ for (var i = 0; i < inputSize; ++i) {
+ encode.push([0, size[i] - 1]);
+ }
+ } else {
+ encode = toMultiArray(encode);
+ }
+
+ var decode = toNumberArray(dict.getArray("Decode"));
+
+ if (!decode) {
+ decode = range;
+ } else {
+ decode = toMultiArray(decode);
+ }
+
+ var samples = this.getSampleArray(size, outputSize, bps, fn);
+ return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, 2 ** bps - 1, range];
+ },
+
+ constructSampledFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ }) {
+ function interpolate(x, xmin, xmax, ymin, ymax) {
+ return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));
+ }
+
+ return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) {
+ var m = IR[1];
+ var domain = IR[2];
+ var encode = IR[3];
+ var decode = IR[4];
+ var samples = IR[5];
+ var size = IR[6];
+ var n = IR[7];
+ var range = IR[9];
+ var cubeVertices = 1 << m;
+ var cubeN = new Float64Array(cubeVertices);
+ var cubeVertex = new Uint32Array(cubeVertices);
+ var i, j;
+
+ for (j = 0; j < cubeVertices; j++) {
+ cubeN[j] = 1;
+ }
+
+ var k = n,
+ pos = 1;
+
+ for (i = 0; i < m; ++i) {
+ var domain_2i = domain[i][0];
+ var domain_2i_1 = domain[i][1];
+ var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);
+ var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);
+ var size_i = size[i];
+ e = Math.min(Math.max(e, 0), size_i - 1);
+ var e0 = e < size_i - 1 ? Math.floor(e) : e - 1;
+ var n0 = e0 + 1 - e;
+ var n1 = e - e0;
+ var offset0 = e0 * k;
+ var offset1 = offset0 + k;
+
+ for (j = 0; j < cubeVertices; j++) {
+ if (j & pos) {
+ cubeN[j] *= n1;
+ cubeVertex[j] += offset1;
+ } else {
+ cubeN[j] *= n0;
+ cubeVertex[j] += offset0;
+ }
+ }
+
+ k *= size_i;
+ pos <<= 1;
+ }
+
+ for (j = 0; j < n; ++j) {
+ var rj = 0;
+
+ for (i = 0; i < cubeVertices; i++) {
+ rj += samples[cubeVertex[i] + j] * cubeN[i];
+ }
+
+ rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
+ dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
+ }
+ };
+ },
+
+ constructInterpolated({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ }) {
+ var c0 = toNumberArray(dict.getArray("C0")) || [0];
+ var c1 = toNumberArray(dict.getArray("C1")) || [1];
+ var n = dict.get("N");
+ var length = c0.length;
+ var diff = [];
+
+ for (var i = 0; i < length; ++i) {
+ diff.push(c1[i] - c0[i]);
+ }
+
+ return [CONSTRUCT_INTERPOLATED, c0, diff, n];
+ },
+
+ constructInterpolatedFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ }) {
+ var c0 = IR[1];
+ var diff = IR[2];
+ var n = IR[3];
+ var length = diff.length;
+ return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) {
+ var x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;
+
+ for (var j = 0; j < length; ++j) {
+ dest[destOffset + j] = c0[j] + x * diff[j];
+ }
+ };
+ },
+
+ constructStiched({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ }) {
+ var domain = toNumberArray(dict.getArray("Domain"));
+
+ if (!domain) {
+ throw new _util.FormatError("No domain");
+ }
+
+ var inputSize = domain.length / 2;
+
+ if (inputSize !== 1) {
+ throw new _util.FormatError("Bad domain for stiched function");
+ }
+
+ var fnRefs = dict.get("Functions");
+ var fns = [];
+
+ for (var i = 0, ii = fnRefs.length; i < ii; ++i) {
+ fns.push(this.parse({
+ xref,
+ isEvalSupported,
+ fn: xref.fetchIfRef(fnRefs[i])
+ }));
+ }
+
+ var bounds = toNumberArray(dict.getArray("Bounds"));
+ var encode = toNumberArray(dict.getArray("Encode"));
+ return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
+ },
+
+ constructStichedFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ }) {
+ var domain = IR[1];
+ var bounds = IR[2];
+ var encode = IR[3];
+ var fns = IR[4];
+ var tmpBuf = new Float32Array(1);
+ return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) {
+ var clip = function constructStichedFromIRClip(v, min, max) {
+ if (v > max) {
+ v = max;
+ } else if (v < min) {
+ v = min;
+ }
+
+ return v;
+ };
+
+ var v = clip(src[srcOffset], domain[0], domain[1]);
+
+ for (var i = 0, ii = bounds.length; i < ii; ++i) {
+ if (v < bounds[i]) {
+ break;
+ }
+ }
+
+ var dmin = domain[0];
+
+ if (i > 0) {
+ dmin = bounds[i - 1];
+ }
+
+ var dmax = domain[1];
+
+ if (i < bounds.length) {
+ dmax = bounds[i];
+ }
+
+ var rmin = encode[2 * i];
+ var rmax = encode[2 * i + 1];
+ tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
+ fns[i](tmpBuf, 0, dest, destOffset);
+ };
+ },
+
+ constructPostScript({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ }) {
+ var domain = toNumberArray(dict.getArray("Domain"));
+ var range = toNumberArray(dict.getArray("Range"));
+
+ if (!domain) {
+ throw new _util.FormatError("No domain.");
+ }
+
+ if (!range) {
+ throw new _util.FormatError("No range.");
+ }
+
+ var lexer = new _ps_parser.PostScriptLexer(fn);
+ var parser = new _ps_parser.PostScriptParser(lexer);
+ var code = parser.parse();
+ return [CONSTRUCT_POSTSCRIPT, domain, range, code];
+ },
+
+ constructPostScriptFromIR({
+ xref,
+ isEvalSupported,
+ IR
+ }) {
+ var domain = IR[1];
+ var range = IR[2];
+ var code = IR[3];
+
+ if (isEvalSupported && _util.IsEvalSupportedCached.value) {
+ const compiled = new PostScriptCompiler().compile(code, domain, range);
+
+ if (compiled) {
+ return new Function("src", "srcOffset", "dest", "destOffset", compiled);
+ }
+ }
+
+ (0, _util.info)("Unable to compile PS function");
+ var numOutputs = range.length >> 1;
+ var numInputs = domain.length >> 1;
+ var evaluator = new PostScriptEvaluator(code);
+ var cache = Object.create(null);
+ var MAX_CACHE_SIZE = 2048 * 4;
+ var cache_available = MAX_CACHE_SIZE;
+ var tmpBuf = new Float32Array(numInputs);
+ return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) {
+ var i, value;
+ var key = "";
+ var input = tmpBuf;
+
+ for (i = 0; i < numInputs; i++) {
+ value = src[srcOffset + i];
+ input[i] = value;
+ key += value + "_";
+ }
+
+ var cachedValue = cache[key];
+
+ if (cachedValue !== undefined) {
+ dest.set(cachedValue, destOffset);
+ return;
+ }
+
+ var output = new Float32Array(numOutputs);
+ var stack = evaluator.execute(input);
+ var stackIndex = stack.length - numOutputs;
+
+ for (i = 0; i < numOutputs; i++) {
+ value = stack[stackIndex + i];
+ var bound = range[i * 2];
+
+ if (value < bound) {
+ value = bound;
+ } else {
+ bound = range[i * 2 + 1];
+
+ if (value > bound) {
+ value = bound;
+ }
+ }
+
+ output[i] = value;
+ }
+
+ if (cache_available > 0) {
+ cache_available--;
+ cache[key] = output;
+ }
+
+ dest.set(output, destOffset);
+ };
+ }
+
+ };
+}();
+
+function isPDFFunction(v) {
+ var fnDict;
+
+ if (typeof v !== "object") {
+ return false;
+ } else if ((0, _primitives.isDict)(v)) {
+ fnDict = v;
+ } else if ((0, _primitives.isStream)(v)) {
+ fnDict = v.dict;
+ } else {
+ return false;
+ }
+
+ return fnDict.has("FunctionType");
+}
+
+var PostScriptStack = function PostScriptStackClosure() {
+ var MAX_STACK_SIZE = 100;
+
+ function PostScriptStack(initialStack) {
+ this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0);
+ }
+
+ PostScriptStack.prototype = {
+ push: function PostScriptStack_push(value) {
+ if (this.stack.length >= MAX_STACK_SIZE) {
+ throw new Error("PostScript function stack overflow.");
+ }
+
+ this.stack.push(value);
+ },
+ pop: function PostScriptStack_pop() {
+ if (this.stack.length <= 0) {
+ throw new Error("PostScript function stack underflow.");
+ }
+
+ return this.stack.pop();
+ },
+ copy: function PostScriptStack_copy(n) {
+ if (this.stack.length + n >= MAX_STACK_SIZE) {
+ throw new Error("PostScript function stack overflow.");
+ }
+
+ var stack = this.stack;
+
+ for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
+ stack.push(stack[i]);
+ }
+ },
+ index: function PostScriptStack_index(n) {
+ this.push(this.stack[this.stack.length - n - 1]);
+ },
+ roll: function PostScriptStack_roll(n, p) {
+ var stack = this.stack;
+ var l = stack.length - n;
+ var r = stack.length - 1,
+ c = l + (p - Math.floor(p / n) * n),
+ i,
+ j,
+ t;
+
+ for (i = l, j = r; i < j; i++, j--) {
+ t = stack[i];
+ stack[i] = stack[j];
+ stack[j] = t;
+ }
+
+ for (i = l, j = c - 1; i < j; i++, j--) {
+ t = stack[i];
+ stack[i] = stack[j];
+ stack[j] = t;
+ }
+
+ for (i = c, j = r; i < j; i++, j--) {
+ t = stack[i];
+ stack[i] = stack[j];
+ stack[j] = t;
+ }
+ }
+ };
+ return PostScriptStack;
+}();
+
+var PostScriptEvaluator = function PostScriptEvaluatorClosure() {
+ function PostScriptEvaluator(operators) {
+ this.operators = operators;
+ }
+
+ PostScriptEvaluator.prototype = {
+ execute: function PostScriptEvaluator_execute(initialStack) {
+ var stack = new PostScriptStack(initialStack);
+ var counter = 0;
+ var operators = this.operators;
+ var length = operators.length;
+ var operator, a, b;
+
+ while (counter < length) {
+ operator = operators[counter++];
+
+ if (typeof operator === "number") {
+ stack.push(operator);
+ continue;
+ }
+
+ switch (operator) {
+ case "jz":
+ b = stack.pop();
+ a = stack.pop();
+
+ if (!a) {
+ counter = b;
+ }
+
+ break;
+
+ case "j":
+ a = stack.pop();
+ counter = a;
+ break;
+
+ case "abs":
+ a = stack.pop();
+ stack.push(Math.abs(a));
+ break;
+
+ case "add":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a + b);
+ break;
+
+ case "and":
+ b = stack.pop();
+ a = stack.pop();
+
+ if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+ stack.push(a && b);
+ } else {
+ stack.push(a & b);
+ }
+
+ break;
+
+ case "atan":
+ a = stack.pop();
+ stack.push(Math.atan(a));
+ break;
+
+ case "bitshift":
+ b = stack.pop();
+ a = stack.pop();
+
+ if (a > 0) {
+ stack.push(a << b);
+ } else {
+ stack.push(a >> b);
+ }
+
+ break;
+
+ case "ceiling":
+ a = stack.pop();
+ stack.push(Math.ceil(a));
+ break;
+
+ case "copy":
+ a = stack.pop();
+ stack.copy(a);
+ break;
+
+ case "cos":
+ a = stack.pop();
+ stack.push(Math.cos(a));
+ break;
+
+ case "cvi":
+ a = stack.pop() | 0;
+ stack.push(a);
+ break;
+
+ case "cvr":
+ break;
+
+ case "div":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a / b);
+ break;
+
+ case "dup":
+ stack.copy(1);
+ break;
+
+ case "eq":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a === b);
+ break;
+
+ case "exch":
+ stack.roll(2, 1);
+ break;
+
+ case "exp":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a ** b);
+ break;
+
+ case "false":
+ stack.push(false);
+ break;
+
+ case "floor":
+ a = stack.pop();
+ stack.push(Math.floor(a));
+ break;
+
+ case "ge":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a >= b);
+ break;
+
+ case "gt":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a > b);
+ break;
+
+ case "idiv":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a / b | 0);
+ break;
+
+ case "index":
+ a = stack.pop();
+ stack.index(a);
+ break;
+
+ case "le":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a <= b);
+ break;
+
+ case "ln":
+ a = stack.pop();
+ stack.push(Math.log(a));
+ break;
+
+ case "log":
+ a = stack.pop();
+ stack.push(Math.log(a) / Math.LN10);
+ break;
+
+ case "lt":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a < b);
+ break;
+
+ case "mod":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a % b);
+ break;
+
+ case "mul":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a * b);
+ break;
+
+ case "ne":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a !== b);
+ break;
+
+ case "neg":
+ a = stack.pop();
+ stack.push(-a);
+ break;
+
+ case "not":
+ a = stack.pop();
+
+ if ((0, _util.isBool)(a)) {
+ stack.push(!a);
+ } else {
+ stack.push(~a);
+ }
+
+ break;
+
+ case "or":
+ b = stack.pop();
+ a = stack.pop();
+
+ if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+ stack.push(a || b);
+ } else {
+ stack.push(a | b);
+ }
+
+ break;
+
+ case "pop":
+ stack.pop();
+ break;
+
+ case "roll":
+ b = stack.pop();
+ a = stack.pop();
+ stack.roll(a, b);
+ break;
+
+ case "round":
+ a = stack.pop();
+ stack.push(Math.round(a));
+ break;
+
+ case "sin":
+ a = stack.pop();
+ stack.push(Math.sin(a));
+ break;
+
+ case "sqrt":
+ a = stack.pop();
+ stack.push(Math.sqrt(a));
+ break;
+
+ case "sub":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a - b);
+ break;
+
+ case "true":
+ stack.push(true);
+ break;
+
+ case "truncate":
+ a = stack.pop();
+ a = a < 0 ? Math.ceil(a) : Math.floor(a);
+ stack.push(a);
+ break;
+
+ case "xor":
+ b = stack.pop();
+ a = stack.pop();
+
+ if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+ stack.push(a !== b);
+ } else {
+ stack.push(a ^ b);
+ }
+
+ break;
+
+ default:
+ throw new _util.FormatError(`Unknown operator ${operator}`);
+ }
+ }
+
+ return stack.stack;
+ }
+ };
+ return PostScriptEvaluator;
+}();
+
+exports.PostScriptEvaluator = PostScriptEvaluator;
+
+var PostScriptCompiler = function PostScriptCompilerClosure() {
+ function AstNode(type) {
+ this.type = type;
+ }
+
+ AstNode.prototype.visit = function (visitor) {
+ (0, _util.unreachable)("abstract method");
+ };
+
+ function AstArgument(index, min, max) {
+ AstNode.call(this, "args");
+ this.index = index;
+ this.min = min;
+ this.max = max;
+ }
+
+ AstArgument.prototype = Object.create(AstNode.prototype);
+
+ AstArgument.prototype.visit = function (visitor) {
+ visitor.visitArgument(this);
+ };
+
+ function AstLiteral(number) {
+ AstNode.call(this, "literal");
+ this.number = number;
+ this.min = number;
+ this.max = number;
+ }
+
+ AstLiteral.prototype = Object.create(AstNode.prototype);
+
+ AstLiteral.prototype.visit = function (visitor) {
+ visitor.visitLiteral(this);
+ };
+
+ function AstBinaryOperation(op, arg1, arg2, min, max) {
+ AstNode.call(this, "binary");
+ this.op = op;
+ this.arg1 = arg1;
+ this.arg2 = arg2;
+ this.min = min;
+ this.max = max;
+ }
+
+ AstBinaryOperation.prototype = Object.create(AstNode.prototype);
+
+ AstBinaryOperation.prototype.visit = function (visitor) {
+ visitor.visitBinaryOperation(this);
+ };
+
+ function AstMin(arg, max) {
+ AstNode.call(this, "max");
+ this.arg = arg;
+ this.min = arg.min;
+ this.max = max;
+ }
+
+ AstMin.prototype = Object.create(AstNode.prototype);
+
+ AstMin.prototype.visit = function (visitor) {
+ visitor.visitMin(this);
+ };
+
+ function AstVariable(index, min, max) {
+ AstNode.call(this, "var");
+ this.index = index;
+ this.min = min;
+ this.max = max;
+ }
+
+ AstVariable.prototype = Object.create(AstNode.prototype);
+
+ AstVariable.prototype.visit = function (visitor) {
+ visitor.visitVariable(this);
+ };
+
+ function AstVariableDefinition(variable, arg) {
+ AstNode.call(this, "definition");
+ this.variable = variable;
+ this.arg = arg;
+ }
+
+ AstVariableDefinition.prototype = Object.create(AstNode.prototype);
+
+ AstVariableDefinition.prototype.visit = function (visitor) {
+ visitor.visitVariableDefinition(this);
+ };
+
+ function ExpressionBuilderVisitor() {
+ this.parts = [];
+ }
+
+ ExpressionBuilderVisitor.prototype = {
+ visitArgument(arg) {
+ this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))");
+ },
+
+ visitVariable(variable) {
+ this.parts.push("v", variable.index);
+ },
+
+ visitLiteral(literal) {
+ this.parts.push(literal.number);
+ },
+
+ visitBinaryOperation(operation) {
+ this.parts.push("(");
+ operation.arg1.visit(this);
+ this.parts.push(" ", operation.op, " ");
+ operation.arg2.visit(this);
+ this.parts.push(")");
+ },
+
+ visitVariableDefinition(definition) {
+ this.parts.push("var ");
+ definition.variable.visit(this);
+ this.parts.push(" = ");
+ definition.arg.visit(this);
+ this.parts.push(";");
+ },
+
+ visitMin(max) {
+ this.parts.push("Math.min(");
+ max.arg.visit(this);
+ this.parts.push(", ", max.max, ")");
+ },
+
+ toString() {
+ return this.parts.join("");
+ }
+
+ };
+
+ function buildAddOperation(num1, num2) {
+ if (num2.type === "literal" && num2.number === 0) {
+ return num1;
+ }
+
+ if (num1.type === "literal" && num1.number === 0) {
+ return num2;
+ }
+
+ if (num2.type === "literal" && num1.type === "literal") {
+ return new AstLiteral(num1.number + num2.number);
+ }
+
+ return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max);
+ }
+
+ function buildMulOperation(num1, num2) {
+ if (num2.type === "literal") {
+ if (num2.number === 0) {
+ return new AstLiteral(0);
+ } else if (num2.number === 1) {
+ return num1;
+ } else if (num1.type === "literal") {
+ return new AstLiteral(num1.number * num2.number);
+ }
+ }
+
+ if (num1.type === "literal") {
+ if (num1.number === 0) {
+ return new AstLiteral(0);
+ } else if (num1.number === 1) {
+ return num2;
+ }
+ }
+
+ var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
+ var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
+ return new AstBinaryOperation("*", num1, num2, min, max);
+ }
+
+ function buildSubOperation(num1, num2) {
+ if (num2.type === "literal") {
+ if (num2.number === 0) {
+ return num1;
+ } else if (num1.type === "literal") {
+ return new AstLiteral(num1.number - num2.number);
+ }
+ }
+
+ if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) {
+ return num2.arg2;
+ }
+
+ return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min);
+ }
+
+ function buildMinOperation(num1, max) {
+ if (num1.min >= max) {
+ return new AstLiteral(max);
+ } else if (num1.max <= max) {
+ return num1;
+ }
+
+ return new AstMin(num1, max);
+ }
+
+ function PostScriptCompiler() {}
+
+ PostScriptCompiler.prototype = {
+ compile: function PostScriptCompiler_compile(code, domain, range) {
+ var stack = [];
+ var instructions = [];
+ var inputSize = domain.length >> 1,
+ outputSize = range.length >> 1;
+ var lastRegister = 0;
+ var n, j;
+ var num1, num2, ast1, ast2, tmpVar, item;
+
+ for (let i = 0; i < inputSize; i++) {
+ stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));
+ }
+
+ for (let i = 0, ii = code.length; i < ii; i++) {
+ item = code[i];
+
+ if (typeof item === "number") {
+ stack.push(new AstLiteral(item));
+ continue;
+ }
+
+ switch (item) {
+ case "add":
+ if (stack.length < 2) {
+ return null;
+ }
+
+ num2 = stack.pop();
+ num1 = stack.pop();
+ stack.push(buildAddOperation(num1, num2));
+ break;
+
+ case "cvr":
+ if (stack.length < 1) {
+ return null;
+ }
+
+ break;
+
+ case "mul":
+ if (stack.length < 2) {
+ return null;
+ }
+
+ num2 = stack.pop();
+ num1 = stack.pop();
+ stack.push(buildMulOperation(num1, num2));
+ break;
+
+ case "sub":
+ if (stack.length < 2) {
+ return null;
+ }
+
+ num2 = stack.pop();
+ num1 = stack.pop();
+ stack.push(buildSubOperation(num1, num2));
+ break;
+
+ case "exch":
+ if (stack.length < 2) {
+ return null;
+ }
+
+ ast1 = stack.pop();
+ ast2 = stack.pop();
+ stack.push(ast1, ast2);
+ break;
+
+ case "pop":
+ if (stack.length < 1) {
+ return null;
+ }
+
+ stack.pop();
+ break;
+
+ case "index":
+ if (stack.length < 1) {
+ return null;
+ }
+
+ num1 = stack.pop();
+
+ if (num1.type !== "literal") {
+ return null;
+ }
+
+ n = num1.number;
+
+ if (n < 0 || !Number.isInteger(n) || stack.length < n) {
+ return null;
+ }
+
+ ast1 = stack[stack.length - n - 1];
+
+ if (ast1.type === "literal" || ast1.type === "var") {
+ stack.push(ast1);
+ break;
+ }
+
+ tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
+ stack[stack.length - n - 1] = tmpVar;
+ stack.push(tmpVar);
+ instructions.push(new AstVariableDefinition(tmpVar, ast1));
+ break;
+
+ case "dup":
+ if (stack.length < 1) {
+ return null;
+ }
+
+ if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) {
+ num1 = stack.pop();
+ stack.push(buildMinOperation(num1, code[i + 1]));
+ i += 6;
+ break;
+ }
+
+ ast1 = stack[stack.length - 1];
+
+ if (ast1.type === "literal" || ast1.type === "var") {
+ stack.push(ast1);
+ break;
+ }
+
+ tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
+ stack[stack.length - 1] = tmpVar;
+ stack.push(tmpVar);
+ instructions.push(new AstVariableDefinition(tmpVar, ast1));
+ break;
+
+ case "roll":
+ if (stack.length < 2) {
+ return null;
+ }
+
+ num2 = stack.pop();
+ num1 = stack.pop();
+
+ if (num2.type !== "literal" || num1.type !== "literal") {
+ return null;
+ }
+
+ j = num2.number;
+ n = num1.number;
+
+ if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) {
+ return null;
+ }
+
+ j = (j % n + n) % n;
+
+ if (j === 0) {
+ break;
+ }
+
+ Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j));
+ break;
+
+ default:
+ return null;
+ }
+ }
+
+ if (stack.length !== outputSize) {
+ return null;
+ }
+
+ var result = [];
+ instructions.forEach(function (instruction) {
+ var statementBuilder = new ExpressionBuilderVisitor();
+ instruction.visit(statementBuilder);
+ result.push(statementBuilder.toString());
+ });
+ stack.forEach(function (expr, i) {
+ var statementBuilder = new ExpressionBuilderVisitor();
+ expr.visit(statementBuilder);
+ var min = range[i * 2],
+ max = range[i * 2 + 1];
+ var out = [statementBuilder.toString()];
+
+ if (min > expr.min) {
+ out.unshift("Math.max(", min, ", ");
+ out.push(")");
+ }
+
+ if (max < expr.max) {
+ out.unshift("Math.min(", max, ", ");
+ out.push(")");
+ }
+
+ out.unshift("dest[destOffset + ", i, "] = ");
+ out.push(";");
+ result.push(out.join(""));
+ });
+ return result.join("\n");
+ }
+ };
+ return PostScriptCompiler;
+}();
+
+exports.PostScriptCompiler = PostScriptCompiler;
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PostScriptParser = exports.PostScriptLexer = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(8);
+
+class PostScriptParser {
+ constructor(lexer) {
+ this.lexer = lexer;
+ this.operators = [];
+ this.token = null;
+ this.prev = null;
+ }
+
+ nextToken() {
+ this.prev = this.token;
+ this.token = this.lexer.getToken();
+ }
+
+ accept(type) {
+ if (this.token.type === type) {
+ this.nextToken();
+ return true;
+ }
+
+ return false;
+ }
+
+ expect(type) {
+ if (this.accept(type)) {
+ return true;
+ }
+
+ throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`);
+ }
+
+ parse() {
+ this.nextToken();
+ this.expect(PostScriptTokenTypes.LBRACE);
+ this.parseBlock();
+ this.expect(PostScriptTokenTypes.RBRACE);
+ return this.operators;
+ }
+
+ parseBlock() {
+ while (true) {
+ if (this.accept(PostScriptTokenTypes.NUMBER)) {
+ this.operators.push(this.prev.value);
+ } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
+ this.operators.push(this.prev.value);
+ } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+ this.parseCondition();
+ } else {
+ return;
+ }
+ }
+ }
+
+ parseCondition() {
+ const conditionLocation = this.operators.length;
+ this.operators.push(null, null);
+ this.parseBlock();
+ this.expect(PostScriptTokenTypes.RBRACE);
+
+ if (this.accept(PostScriptTokenTypes.IF)) {
+ this.operators[conditionLocation] = this.operators.length;
+ this.operators[conditionLocation + 1] = "jz";
+ } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+ const jumpLocation = this.operators.length;
+ this.operators.push(null, null);
+ const endOfTrue = this.operators.length;
+ this.parseBlock();
+ this.expect(PostScriptTokenTypes.RBRACE);
+ this.expect(PostScriptTokenTypes.IFELSE);
+ this.operators[jumpLocation] = this.operators.length;
+ this.operators[jumpLocation + 1] = "j";
+ this.operators[conditionLocation] = endOfTrue;
+ this.operators[conditionLocation + 1] = "jz";
+ } else {
+ throw new _util.FormatError("PS Function: error parsing conditional.");
+ }
+ }
+
+}
+
+exports.PostScriptParser = PostScriptParser;
+const PostScriptTokenTypes = {
+ LBRACE: 0,
+ RBRACE: 1,
+ NUMBER: 2,
+ OPERATOR: 3,
+ IF: 4,
+ IFELSE: 5
+};
+
+const PostScriptToken = function PostScriptTokenClosure() {
+ const opCache = Object.create(null);
+
+ class PostScriptToken {
+ constructor(type, value) {
+ this.type = type;
+ this.value = value;
+ }
+
+ static getOperator(op) {
+ const opValue = opCache[op];
+
+ if (opValue) {
+ return opValue;
+ }
+
+ return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
+ }
+
+ static get LBRACE() {
+ return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{"));
+ }
+
+ static get RBRACE() {
+ return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}"));
+ }
+
+ static get IF() {
+ return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF"));
+ }
+
+ static get IFELSE() {
+ return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE"));
+ }
+
+ }
+
+ return PostScriptToken;
+}();
+
+class PostScriptLexer {
+ constructor(stream) {
+ this.stream = stream;
+ this.nextChar();
+ this.strBuf = [];
+ }
+
+ nextChar() {
+ return this.currentChar = this.stream.getByte();
+ }
+
+ getToken() {
+ let comment = false;
+ let ch = this.currentChar;
+
+ while (true) {
+ if (ch < 0) {
+ return _primitives.EOF;
+ }
+
+ if (comment) {
+ if (ch === 0x0a || ch === 0x0d) {
+ comment = false;
+ }
+ } else if (ch === 0x25) {
+ comment = true;
+ } else if (!(0, _core_utils.isWhiteSpace)(ch)) {
+ break;
+ }
+
+ ch = this.nextChar();
+ }
+
+ switch (ch | 0) {
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case 0x2b:
+ case 0x2d:
+ case 0x2e:
+ return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());
+
+ case 0x7b:
+ this.nextChar();
+ return PostScriptToken.LBRACE;
+
+ case 0x7d:
+ this.nextChar();
+ return PostScriptToken.RBRACE;
+ }
+
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
+ strBuf[0] = String.fromCharCode(ch);
+
+ while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) {
+ strBuf.push(String.fromCharCode(ch));
+ }
+
+ const str = strBuf.join("");
+
+ switch (str.toLowerCase()) {
+ case "if":
+ return PostScriptToken.IF;
+
+ case "ifelse":
+ return PostScriptToken.IFELSE;
+
+ default:
+ return PostScriptToken.getOperator(str);
+ }
+ }
+
+ getNumber() {
+ let ch = this.currentChar;
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
+ strBuf[0] = String.fromCharCode(ch);
+
+ while ((ch = this.nextChar()) >= 0) {
+ if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) {
+ strBuf.push(String.fromCharCode(ch));
+ } else {
+ break;
+ }
+ }
+
+ const value = parseFloat(strBuf.join(""));
+
+ if (isNaN(value)) {
+ throw new _util.FormatError(`Invalid floating point number: ${value}`);
+ }
+
+ return value;
+ }
+
+}
+
+exports.PostScriptLexer = PostScriptLexer;
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.MurmurHash3_64 = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+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 ((0, _util.isString)(input)) {
+ 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.isArrayBuffer)(input)) {
+ data = input;
+ 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;
+ const hex1 = (h1 >>> 0).toString(16),
+ hex2 = (h2 >>> 0).toString(16);
+ return hex1.padStart(8, "0") + hex2.padStart(8, "0");
+ }
+
+}
+
+exports.MurmurHash3_64 = MurmurHash3_64;
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFImage = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _colorspace = __w_pdfjs_require__(23);
+
+var _stream = __w_pdfjs_require__(12);
+
+var _jpeg_stream = __w_pdfjs_require__(18);
+
+var _jpx = __w_pdfjs_require__(21);
+
+var PDFImage = function PDFImageClosure() {
+ function decodeAndClamp(value, addend, coefficient, max) {
+ value = addend + value * coefficient;
+
+ if (value < 0) {
+ value = 0;
+ } else if (value > max) {
+ value = max;
+ }
+
+ return value;
+ }
+
+ function resizeImageMask(src, bpc, w1, h1, w2, h2) {
+ var length = w2 * h2;
+ let dest;
+
+ if (bpc <= 8) {
+ dest = new Uint8Array(length);
+ } else if (bpc <= 16) {
+ dest = new Uint16Array(length);
+ } else {
+ dest = new Uint32Array(length);
+ }
+
+ var xRatio = w1 / w2;
+ var yRatio = h1 / h2;
+ var i,
+ j,
+ py,
+ newIndex = 0,
+ oldIndex;
+ var xScaled = new Uint16Array(w2);
+ var w1Scanline = w1;
+
+ for (i = 0; i < w2; i++) {
+ xScaled[i] = Math.floor(i * xRatio);
+ }
+
+ for (i = 0; i < h2; i++) {
+ py = Math.floor(i * yRatio) * w1Scanline;
+
+ for (j = 0; j < w2; j++) {
+ oldIndex = py + xScaled[j];
+ dest[newIndex++] = src[oldIndex];
+ }
+ }
+
+ return dest;
+ }
+
+ function PDFImage({
+ xref,
+ res,
+ image,
+ isInline = false,
+ smask = null,
+ mask = null,
+ isMask = false,
+ pdfFunctionFactory
+ }) {
+ this.image = image;
+ var dict = image.dict;
+ const filter = dict.get("Filter");
+
+ if ((0, _primitives.isName)(filter)) {
+ switch (filter.name) {
+ case "JPXDecode":
+ var jpxImage = new _jpx.JpxImage();
+ jpxImage.parseImageProperties(image.stream);
+ image.stream.reset();
+ image.width = jpxImage.width;
+ image.height = jpxImage.height;
+ image.bitsPerComponent = jpxImage.bitsPerComponent;
+ image.numComps = jpxImage.componentsCount;
+ break;
+
+ case "JBIG2Decode":
+ image.bitsPerComponent = 1;
+ image.numComps = 1;
+ break;
+ }
+ }
+
+ let width = dict.get("Width", "W");
+ let height = dict.get("Height", "H");
+
+ if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {
+ (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary.");
+ width = image.width;
+ height = image.height;
+ }
+
+ if (width < 1 || height < 1) {
+ throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`);
+ }
+
+ this.width = width;
+ this.height = height;
+ this.interpolate = dict.get("Interpolate", "I") || false;
+ this.imageMask = dict.get("ImageMask", "IM") || false;
+ this.matte = dict.get("Matte") || false;
+ var bitsPerComponent = image.bitsPerComponent;
+
+ if (!bitsPerComponent) {
+ bitsPerComponent = dict.get("BitsPerComponent", "BPC");
+
+ if (!bitsPerComponent) {
+ if (this.imageMask) {
+ bitsPerComponent = 1;
+ } else {
+ throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`);
+ }
+ }
+ }
+
+ this.bpc = bitsPerComponent;
+
+ if (!this.imageMask) {
+ var colorSpace = dict.get("ColorSpace", "CS");
+
+ if (!colorSpace) {
+ (0, _util.info)("JPX images (which do not require color spaces)");
+
+ switch (image.numComps) {
+ case 1:
+ colorSpace = _primitives.Name.get("DeviceGray");
+ break;
+
+ case 3:
+ colorSpace = _primitives.Name.get("DeviceRGB");
+ break;
+
+ case 4:
+ colorSpace = _primitives.Name.get("DeviceCMYK");
+ break;
+
+ default:
+ throw new Error(`JPX images with ${image.numComps} ` + "color components not supported.");
+ }
+ }
+
+ const resources = isInline ? res : null;
+ this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory);
+ this.numComps = this.colorSpace.numComps;
+ }
+
+ this.decode = dict.getArray("Decode", "D");
+ this.needsDecode = false;
+
+ if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
+ this.needsDecode = true;
+ var max = (1 << bitsPerComponent) - 1;
+ this.decodeCoefficients = [];
+ this.decodeAddends = [];
+ const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed";
+
+ for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
+ var dmin = this.decode[i];
+ var dmax = this.decode[i + 1];
+ this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;
+ this.decodeAddends[j] = isIndexed ? dmin : max * dmin;
+ }
+ }
+
+ if (smask) {
+ this.smask = new PDFImage({
+ xref,
+ res,
+ image: smask,
+ isInline,
+ pdfFunctionFactory
+ });
+ } else if (mask) {
+ if ((0, _primitives.isStream)(mask)) {
+ var maskDict = mask.dict,
+ imageMask = maskDict.get("ImageMask", "IM");
+
+ if (!imageMask) {
+ (0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
+ } else {
+ this.mask = new PDFImage({
+ xref,
+ res,
+ image: mask,
+ isInline,
+ isMask: true,
+ pdfFunctionFactory
+ });
+ }
+ } else {
+ this.mask = mask;
+ }
+ }
+ }
+
+ PDFImage.buildImage = function ({
+ xref,
+ res,
+ image,
+ isInline = false,
+ pdfFunctionFactory
+ }) {
+ const imageData = image;
+ let smaskData = null;
+ let maskData = null;
+ const smask = image.dict.get("SMask");
+ const mask = image.dict.get("Mask");
+
+ if (smask) {
+ smaskData = smask;
+ } else if (mask) {
+ if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) {
+ maskData = mask;
+ } else {
+ (0, _util.warn)("Unsupported mask format.");
+ }
+ }
+
+ return Promise.resolve(new PDFImage({
+ xref,
+ res,
+ image: imageData,
+ isInline,
+ smask: smaskData,
+ mask: maskData,
+ pdfFunctionFactory
+ }));
+ };
+
+ PDFImage.createMask = function ({
+ imgArray,
+ width,
+ height,
+ imageIsFromDecodeStream,
+ inverseDecode
+ }) {
+ var computedLength = (width + 7 >> 3) * height;
+ var actualLength = imgArray.byteLength;
+ var haveFullData = computedLength === actualLength;
+ var data, i;
+
+ if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
+ data = imgArray;
+ } else if (!inverseDecode) {
+ data = new Uint8ClampedArray(actualLength);
+ data.set(imgArray);
+ } else {
+ data = new Uint8ClampedArray(computedLength);
+ data.set(imgArray);
+
+ for (i = actualLength; i < computedLength; i++) {
+ data[i] = 0xff;
+ }
+ }
+
+ if (inverseDecode) {
+ for (i = 0; i < actualLength; i++) {
+ data[i] ^= 0xff;
+ }
+ }
+
+ return {
+ data,
+ width,
+ height
+ };
+ };
+
+ PDFImage.prototype = {
+ get drawWidth() {
+ return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0);
+ },
+
+ get drawHeight() {
+ return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0);
+ },
+
+ decodeBuffer(buffer) {
+ var bpc = this.bpc;
+ var numComps = this.numComps;
+ var decodeAddends = this.decodeAddends;
+ var decodeCoefficients = this.decodeCoefficients;
+ var max = (1 << bpc) - 1;
+ var i, ii;
+
+ if (bpc === 1) {
+ for (i = 0, ii = buffer.length; i < ii; i++) {
+ buffer[i] = +!buffer[i];
+ }
+
+ return;
+ }
+
+ var index = 0;
+
+ for (i = 0, ii = this.width * this.height; i < ii; i++) {
+ for (var j = 0; j < numComps; j++) {
+ buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);
+ index++;
+ }
+ }
+ },
+
+ getComponents(buffer) {
+ var bpc = this.bpc;
+
+ if (bpc === 8) {
+ return buffer;
+ }
+
+ var width = this.width;
+ var height = this.height;
+ var numComps = this.numComps;
+ var length = width * height * numComps;
+ var bufferPos = 0;
+ let output;
+
+ if (bpc <= 8) {
+ output = new Uint8Array(length);
+ } else if (bpc <= 16) {
+ output = new Uint16Array(length);
+ } else {
+ output = new Uint32Array(length);
+ }
+
+ var rowComps = width * numComps;
+ var max = (1 << bpc) - 1;
+ var i = 0,
+ ii,
+ buf;
+
+ if (bpc === 1) {
+ var mask, loop1End, loop2End;
+
+ for (var j = 0; j < height; j++) {
+ loop1End = i + (rowComps & ~7);
+ loop2End = i + rowComps;
+
+ while (i < loop1End) {
+ buf = buffer[bufferPos++];
+ output[i] = buf >> 7 & 1;
+ output[i + 1] = buf >> 6 & 1;
+ output[i + 2] = buf >> 5 & 1;
+ output[i + 3] = buf >> 4 & 1;
+ output[i + 4] = buf >> 3 & 1;
+ output[i + 5] = buf >> 2 & 1;
+ output[i + 6] = buf >> 1 & 1;
+ output[i + 7] = buf & 1;
+ i += 8;
+ }
+
+ if (i < loop2End) {
+ buf = buffer[bufferPos++];
+ mask = 128;
+
+ while (i < loop2End) {
+ output[i++] = +!!(buf & mask);
+ mask >>= 1;
+ }
+ }
+ }
+ } else {
+ var bits = 0;
+ buf = 0;
+
+ for (i = 0, ii = length; i < ii; ++i) {
+ if (i % rowComps === 0) {
+ buf = 0;
+ bits = 0;
+ }
+
+ while (bits < bpc) {
+ buf = buf << 8 | buffer[bufferPos++];
+ bits += 8;
+ }
+
+ var remainingBits = bits - bpc;
+ let value = buf >> remainingBits;
+
+ if (value < 0) {
+ value = 0;
+ } else if (value > max) {
+ value = max;
+ }
+
+ output[i] = value;
+ buf = buf & (1 << remainingBits) - 1;
+ bits = remainingBits;
+ }
+ }
+
+ return output;
+ },
+
+ fillOpacity(rgbaBuf, width, height, actualHeight, image) {
+ var smask = this.smask;
+ var mask = this.mask;
+ var alphaBuf, sw, sh, i, ii, j;
+
+ if (smask) {
+ sw = smask.width;
+ sh = smask.height;
+ alphaBuf = new Uint8ClampedArray(sw * sh);
+ smask.fillGrayBuffer(alphaBuf);
+
+ if (sw !== width || sh !== height) {
+ alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);
+ }
+ } else if (mask) {
+ if (mask instanceof PDFImage) {
+ sw = mask.width;
+ sh = mask.height;
+ alphaBuf = new Uint8ClampedArray(sw * sh);
+ mask.numComps = 1;
+ mask.fillGrayBuffer(alphaBuf);
+
+ for (i = 0, ii = sw * sh; i < ii; ++i) {
+ alphaBuf[i] = 255 - alphaBuf[i];
+ }
+
+ if (sw !== width || sh !== height) {
+ alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);
+ }
+ } else if (Array.isArray(mask)) {
+ alphaBuf = new Uint8ClampedArray(width * height);
+ var numComps = this.numComps;
+
+ for (i = 0, ii = width * height; i < ii; ++i) {
+ var opacity = 0;
+ var imageOffset = i * numComps;
+
+ for (j = 0; j < numComps; ++j) {
+ var color = image[imageOffset + j];
+ var maskOffset = j * 2;
+
+ if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
+ opacity = 255;
+ break;
+ }
+ }
+
+ alphaBuf[i] = opacity;
+ }
+ } else {
+ throw new _util.FormatError("Unknown mask format.");
+ }
+ }
+
+ if (alphaBuf) {
+ for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
+ rgbaBuf[j] = alphaBuf[i];
+ }
+ } else {
+ for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
+ rgbaBuf[j] = 255;
+ }
+ }
+ },
+
+ undoPreblend(buffer, width, height) {
+ var matte = this.smask && this.smask.matte;
+
+ if (!matte) {
+ return;
+ }
+
+ var matteRgb = this.colorSpace.getRgb(matte, 0);
+ var matteR = matteRgb[0];
+ var matteG = matteRgb[1];
+ var matteB = matteRgb[2];
+ var length = width * height * 4;
+
+ for (var i = 0; i < length; i += 4) {
+ var alpha = buffer[i + 3];
+
+ if (alpha === 0) {
+ buffer[i] = 255;
+ buffer[i + 1] = 255;
+ buffer[i + 2] = 255;
+ continue;
+ }
+
+ var k = 255 / alpha;
+ buffer[i] = (buffer[i] - matteR) * k + matteR;
+ buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;
+ buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
+ }
+ },
+
+ createImageData(forceRGBA = false) {
+ var drawWidth = this.drawWidth;
+ var drawHeight = this.drawHeight;
+ var imgData = {
+ width: drawWidth,
+ height: drawHeight,
+ kind: 0,
+ data: null
+ };
+ var numComps = this.numComps;
+ var originalWidth = this.width;
+ var originalHeight = this.height;
+ var bpc = this.bpc;
+ var rowBytes = originalWidth * numComps * bpc + 7 >> 3;
+ var imgArray;
+
+ if (!forceRGBA) {
+ var kind;
+
+ if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
+ kind = _util.ImageKind.GRAYSCALE_1BPP;
+ } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) {
+ kind = _util.ImageKind.RGB_24BPP;
+ }
+
+ if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {
+ imgData.kind = kind;
+ imgArray = this.getImageBytes(originalHeight * rowBytes);
+
+ if (this.image instanceof _stream.DecodeStream) {
+ imgData.data = imgArray;
+ } else {
+ var newArray = new Uint8ClampedArray(imgArray.length);
+ newArray.set(imgArray);
+ imgData.data = newArray;
+ }
+
+ if (this.needsDecode) {
+ (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale.");
+ var buffer = imgData.data;
+
+ for (var i = 0, ii = buffer.length; i < ii; i++) {
+ buffer[i] ^= 0xff;
+ }
+ }
+
+ return imgData;
+ }
+
+ if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {
+ let imageLength = originalHeight * rowBytes;
+
+ switch (this.colorSpace.name) {
+ case "DeviceGray":
+ imageLength *= 3;
+
+ case "DeviceRGB":
+ case "DeviceCMYK":
+ imgData.kind = _util.ImageKind.RGB_24BPP;
+ imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true);
+ return imgData;
+ }
+ }
+ }
+
+ imgArray = this.getImageBytes(originalHeight * rowBytes);
+ var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
+ var comps = this.getComponents(imgArray);
+ var alpha01, maybeUndoPreblend;
+
+ if (!forceRGBA && !this.smask && !this.mask) {
+ imgData.kind = _util.ImageKind.RGB_24BPP;
+ imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);
+ alpha01 = 0;
+ maybeUndoPreblend = false;
+ } else {
+ imgData.kind = _util.ImageKind.RGBA_32BPP;
+ imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4);
+ alpha01 = 1;
+ maybeUndoPreblend = true;
+ this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps);
+ }
+
+ if (this.needsDecode) {
+ this.decodeBuffer(comps);
+ }
+
+ this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);
+
+ if (maybeUndoPreblend) {
+ this.undoPreblend(imgData.data, drawWidth, actualHeight);
+ }
+
+ return imgData;
+ },
+
+ fillGrayBuffer(buffer) {
+ var numComps = this.numComps;
+
+ if (numComps !== 1) {
+ throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);
+ }
+
+ var width = this.width;
+ var height = this.height;
+ var bpc = this.bpc;
+ var rowBytes = width * numComps * bpc + 7 >> 3;
+ var imgArray = this.getImageBytes(height * rowBytes);
+ var comps = this.getComponents(imgArray);
+ var i, length;
+
+ if (bpc === 1) {
+ length = width * height;
+
+ if (this.needsDecode) {
+ for (i = 0; i < length; ++i) {
+ buffer[i] = comps[i] - 1 & 255;
+ }
+ } else {
+ for (i = 0; i < length; ++i) {
+ buffer[i] = -comps[i] & 255;
+ }
+ }
+
+ return;
+ }
+
+ if (this.needsDecode) {
+ this.decodeBuffer(comps);
+ }
+
+ length = width * height;
+ var scale = 255 / ((1 << bpc) - 1);
+
+ for (i = 0; i < length; ++i) {
+ buffer[i] = scale * comps[i];
+ }
+ },
+
+ getImageBytes(length, drawWidth, drawHeight, forceRGB = false) {
+ this.image.reset();
+ this.image.drawWidth = drawWidth || this.width;
+ this.image.drawHeight = drawHeight || this.height;
+ this.image.forceRGB = !!forceRGB;
+ return this.image.getBytes(length, true);
+ }
+
+ };
+ return PDFImage;
+}();
+
+exports.PDFImage = PDFImage;
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.MessageHandler = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+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 (typeof reason !== "object" || reason === null) {
+ return reason;
+ }
+
+ switch (reason.name) {
+ case "AbortException":
+ return new _util.AbortException(reason.message);
+
+ case "MissingPDFException":
+ return new _util.MissingPDFException(reason.message);
+
+ case "UnexpectedResponseException":
+ return new _util.UnexpectedResponseException(reason.message, reason.status);
+
+ case "UnknownErrorException":
+ return new _util.UnknownErrorException(reason.message, reason.details);
+
+ default:
+ return new _util.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.postMessageTransfers = true;
+ 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._postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ data
+ }, transfers);
+ }
+
+ sendWithPromise(actionName, data, transfers) {
+ const callbackId = this.callbackId++;
+ const capability = (0, _util.createPromiseCapability)();
+ this.callbackCapabilities[callbackId] = capability;
+
+ try {
+ this._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++;
+ const sourceName = this.sourceName;
+ const targetName = this.targetName;
+ const comObj = this.comObj;
+ return new ReadableStream({
+ start: controller => {
+ const startCapability = (0, _util.createPromiseCapability)();
+ this.streamControllers[streamId] = {
+ controller,
+ startCall: startCapability,
+ pullCall: null,
+ cancelCall: null,
+ isClosed: false
+ };
+
+ this._postMessage({
+ sourceName,
+ targetName,
+ action: actionName,
+ streamId,
+ data,
+ desiredSize: controller.desiredSize
+ }, transfers);
+
+ return startCapability.promise;
+ },
+ pull: controller => {
+ const pullCapability = (0, _util.createPromiseCapability)();
+ this.streamControllers[streamId].pullCall = pullCapability;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL,
+ streamId,
+ desiredSize: controller.desiredSize
+ });
+ return pullCapability.promise;
+ },
+ cancel: reason => {
+ (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
+ const cancelCapability = (0, _util.createPromiseCapability)();
+ 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 self = this;
+ const action = this.actionHandler[data.action];
+ const streamId = data.streamId;
+ const sourceName = this.sourceName;
+ const targetName = data.sourceName;
+ const comObj = this.comObj;
+ 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 = (0, _util.createPromiseCapability)();
+ this.ready = this.sinkCapability.promise;
+ }
+
+ self._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.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: (0, _util.createPromiseCapability)(),
+ 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;
+ const sourceName = this.sourceName;
+ const targetName = data.sourceName;
+ const comObj = this.comObj;
+
+ switch (data.stream) {
+ case StreamKind.START_COMPLETE:
+ if (data.success) {
+ this.streamControllers[streamId].startCall.resolve();
+ } else {
+ this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL_COMPLETE:
+ if (data.success) {
+ this.streamControllers[streamId].pullCall.resolve();
+ } else {
+ this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL:
+ if (!this.streamSinks[streamId]) {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId,
+ success: true
+ });
+ break;
+ }
+
+ if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {
+ this.streamSinks[streamId].sinkCapability.resolve();
+ }
+
+ this.streamSinks[streamId].desiredSize = data.desiredSize;
+ const {
+ onPull
+ } = this.streamSinks[data.streamId];
+ new Promise(function (resolve) {
+ resolve(onPull && 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.assert)(this.streamControllers[streamId], "enqueue should have stream controller");
+
+ if (this.streamControllers[streamId].isClosed) {
+ break;
+ }
+
+ this.streamControllers[streamId].controller.enqueue(data.chunk);
+ break;
+
+ case StreamKind.CLOSE:
+ (0, _util.assert)(this.streamControllers[streamId], "close should have stream controller");
+
+ if (this.streamControllers[streamId].isClosed) {
+ break;
+ }
+
+ this.streamControllers[streamId].isClosed = true;
+ this.streamControllers[streamId].controller.close();
+
+ this._deleteStreamController(streamId);
+
+ break;
+
+ case StreamKind.ERROR:
+ (0, _util.assert)(this.streamControllers[streamId], "error should have stream controller");
+ this.streamControllers[streamId].controller.error(wrapReason(data.reason));
+
+ this._deleteStreamController(streamId);
+
+ break;
+
+ case StreamKind.CANCEL_COMPLETE:
+ if (data.success) {
+ this.streamControllers[streamId].cancelCall.resolve();
+ } else {
+ this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));
+ }
+
+ this._deleteStreamController(streamId);
+
+ break;
+
+ case StreamKind.CANCEL:
+ if (!this.streamSinks[streamId]) {
+ break;
+ }
+
+ const {
+ onCancel
+ } = this.streamSinks[data.streamId];
+ new Promise(function (resolve) {
+ resolve(onCancel && 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)
+ });
+ });
+ this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));
+ this.streamSinks[streamId].isCancelled = true;
+ delete this.streamSinks[streamId];
+ break;
+
+ default:
+ throw new Error("Unexpected stream case");
+ }
+ }
+
+ async _deleteStreamController(streamId) {
+ await Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {
+ return capability && capability.promise;
+ }));
+ delete this.streamControllers[streamId];
+ }
+
+ _postMessage(message, transfers) {
+ if (transfers && this.postMessageTransfers) {
+ this.comObj.postMessage(message, transfers);
+ } else {
+ this.comObj.postMessage(message);
+ }
+ }
+
+ destroy() {
+ this.comObj.removeEventListener("message", this._onComObjOnMessage);
+ }
+
+}
+
+exports.MessageHandler = MessageHandler;
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFWorkerStream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+class PDFWorkerStream {
+ constructor(msgHandler) {
+ this._msgHandler = msgHandler;
+ this._contentLength = null;
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+
+ getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once.");
+ this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);
+ return this._fullRequestReader;
+ }
+
+ getRangeReader(begin, end) {
+ const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);
+
+ this._rangeRequestReaders.push(reader);
+
+ return reader;
+ }
+
+ cancelAllRequests(reason) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ const readers = this._rangeRequestReaders.slice(0);
+
+ readers.forEach(function (reader) {
+ reader.cancel(reason);
+ });
+ }
+
+}
+
+exports.PDFWorkerStream = PDFWorkerStream;
+
+class PDFWorkerStreamReader {
+ constructor(msgHandler) {
+ this._msgHandler = msgHandler;
+ this.onProgress = null;
+ this._contentLength = null;
+ this._isRangeSupported = false;
+ this._isStreamingSupported = false;
+
+ const readableStream = this._msgHandler.sendWithStream("GetReader");
+
+ this._reader = readableStream.getReader();
+ this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => {
+ this._isStreamingSupported = data.isStreamingSupported;
+ this._isRangeSupported = data.isRangeSupported;
+ this._contentLength = data.contentLength;
+ });
+ }
+
+ get headersReady() {
+ return this._headersReady;
+ }
+
+ get contentLength() {
+ return this._contentLength;
+ }
+
+ get isStreamingSupported() {
+ return this._isStreamingSupported;
+ }
+
+ get isRangeSupported() {
+ return this._isRangeSupported;
+ }
+
+ async read() {
+ const {
+ value,
+ done
+ } = await this._reader.read();
+
+ if (done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ return {
+ value: value.buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ this._reader.cancel(reason);
+ }
+
+}
+
+class PDFWorkerStreamRangeReader {
+ constructor(begin, end, msgHandler) {
+ this._msgHandler = msgHandler;
+ this.onProgress = null;
+
+ const readableStream = this._msgHandler.sendWithStream("GetRangeReader", {
+ begin,
+ end
+ });
+
+ this._reader = readableStream.getReader();
+ }
+
+ get isStreamingSupported() {
+ return false;
+ }
+
+ async read() {
+ const {
+ value,
+ done
+ } = await this._reader.read();
+
+ if (done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ return {
+ value: value.buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ this._reader.cancel(reason);
+ }
+
+}
+
+/***/ })
+/******/ ]);
+});
//# sourceMappingURL=pdf.worker.js.map
\ No newline at end of file
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/cmaps/LICENSE b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/cmaps/LICENSE
index b1ad168ad0dd09b578cafec31d2666049b4d8718..efb8b5b5819807ef4271792fc3911d39f7a4f34c 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/cmaps/LICENSE
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/cmaps/LICENSE
@@ -1,36 +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: -----------------------------------------------------------
+%%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/themes/hugo-theme-pdf-js/static/js/pdf-js/web/debugger.js b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/debugger.js
index 500522d84269cb964f815bf9ae4e1edb977d0ca3..47923aa82a42d5828123dd7ad2f67874ce5f70d3 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/debugger.js
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/debugger.js
@@ -1,624 +1,624 @@
-/* Copyright 2012 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.
- */
-/* eslint-disable no-var */
-
-"use strict";
-
-var FontInspector = (function FontInspectorClosure() {
- var fonts;
- var active = false;
- var fontAttribute = "data-font-name";
- function removeSelection() {
- const divs = document.querySelectorAll(`span[${fontAttribute}]`);
- for (const div of divs) {
- div.className = "";
- }
- }
- function resetSelection() {
- const divs = document.querySelectorAll(`span[${fontAttribute}]`);
- for (const div of divs) {
- div.className = "debuggerHideText";
- }
- }
- function selectFont(fontName, show) {
- const divs = document.querySelectorAll(
- `span[${fontAttribute}=${fontName}]`
- );
- for (const div of divs) {
- div.className = show ? "debuggerShowText" : "debuggerHideText";
- }
- }
- function textLayerClick(e) {
- if (
- !e.target.dataset.fontName ||
- e.target.tagName.toUpperCase() !== "SPAN"
- ) {
- return;
- }
- var fontName = e.target.dataset.fontName;
- var selects = document.getElementsByTagName("input");
- for (var i = 0; i < selects.length; ++i) {
- var select = selects[i];
- if (select.dataset.fontName !== fontName) {
- continue;
- }
- select.checked = !select.checked;
- selectFont(fontName, select.checked);
- select.scrollIntoView();
- }
- }
- return {
- // Properties/functions needed by PDFBug.
- id: "FontInspector",
- name: "Font Inspector",
- panel: null,
- manager: null,
- init: function init(pdfjsLib) {
- var panel = this.panel;
- var tmp = document.createElement("button");
- tmp.addEventListener("click", resetSelection);
- tmp.textContent = "Refresh";
- panel.appendChild(tmp);
-
- fonts = document.createElement("div");
- panel.appendChild(fonts);
- },
- cleanup: function cleanup() {
- fonts.textContent = "";
- },
- enabled: false,
- get active() {
- return active;
- },
- set active(value) {
- active = value;
- if (active) {
- document.body.addEventListener("click", textLayerClick, true);
- resetSelection();
- } else {
- document.body.removeEventListener("click", textLayerClick, true);
- removeSelection();
- }
- },
- // FontInspector specific functions.
- fontAdded: function fontAdded(fontObj, url) {
- function properties(obj, list) {
- var moreInfo = document.createElement("table");
- for (var i = 0; i < list.length; i++) {
- var tr = document.createElement("tr");
- var td1 = document.createElement("td");
- td1.textContent = list[i];
- tr.appendChild(td1);
- var td2 = document.createElement("td");
- td2.textContent = obj[list[i]].toString();
- tr.appendChild(td2);
- moreInfo.appendChild(tr);
- }
- return moreInfo;
- }
- var moreInfo = properties(fontObj, ["name", "type"]);
- const fontName = fontObj.loadedName;
- var font = document.createElement("div");
- var name = document.createElement("span");
- name.textContent = fontName;
- var download = document.createElement("a");
- if (url) {
- url = /url\(['"]?([^\)"']+)/.exec(url);
- download.href = url[1];
- } else if (fontObj.data) {
- download.href = URL.createObjectURL(
- new Blob([fontObj.data], { type: fontObj.mimeType })
- );
- }
- download.textContent = "Download";
- var logIt = document.createElement("a");
- logIt.href = "";
- logIt.textContent = "Log";
- logIt.addEventListener("click", function (event) {
- event.preventDefault();
- console.log(fontObj);
- });
- const select = document.createElement("input");
- select.setAttribute("type", "checkbox");
- select.dataset.fontName = fontName;
- select.addEventListener("click", function () {
- selectFont(fontName, select.checked);
- });
- font.appendChild(select);
- font.appendChild(name);
- font.appendChild(document.createTextNode(" "));
- font.appendChild(download);
- font.appendChild(document.createTextNode(" "));
- font.appendChild(logIt);
- font.appendChild(moreInfo);
- fonts.appendChild(font);
- // Somewhat of a hack, should probably add a hook for when the text layer
- // is done rendering.
- setTimeout(() => {
- if (this.active) {
- resetSelection();
- }
- }, 2000);
- },
- };
-})();
-
-var opMap;
-
-// Manages all the page steppers.
-var StepperManager = (function StepperManagerClosure() {
- var steppers = [];
- var stepperDiv = null;
- var stepperControls = null;
- var stepperChooser = null;
- var breakPoints = Object.create(null);
- return {
- // Properties/functions needed by PDFBug.
- id: "Stepper",
- name: "Stepper",
- panel: null,
- manager: null,
- init: function init(pdfjsLib) {
- var self = this;
- stepperControls = document.createElement("div");
- stepperChooser = document.createElement("select");
- stepperChooser.addEventListener("change", function (event) {
- self.selectStepper(this.value);
- });
- stepperControls.appendChild(stepperChooser);
- stepperDiv = document.createElement("div");
- this.panel.appendChild(stepperControls);
- this.panel.appendChild(stepperDiv);
- if (sessionStorage.getItem("pdfjsBreakPoints")) {
- breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints"));
- }
-
- opMap = Object.create(null);
- for (var key in pdfjsLib.OPS) {
- opMap[pdfjsLib.OPS[key]] = key;
- }
- },
- cleanup: function cleanup() {
- stepperChooser.textContent = "";
- stepperDiv.textContent = "";
- steppers = [];
- },
- enabled: false,
- active: false,
- // Stepper specific functions.
- create: function create(pageIndex) {
- var debug = document.createElement("div");
- debug.id = "stepper" + pageIndex;
- debug.setAttribute("hidden", true);
- debug.className = "stepper";
- stepperDiv.appendChild(debug);
- var b = document.createElement("option");
- b.textContent = "Page " + (pageIndex + 1);
- b.value = pageIndex;
- stepperChooser.appendChild(b);
- var initBreakPoints = breakPoints[pageIndex] || [];
- var stepper = new Stepper(debug, pageIndex, initBreakPoints);
- steppers.push(stepper);
- if (steppers.length === 1) {
- this.selectStepper(pageIndex, false);
- }
- return stepper;
- },
- selectStepper: function selectStepper(pageIndex, selectPanel) {
- var i;
- pageIndex = pageIndex | 0;
- if (selectPanel) {
- this.manager.selectPanel(this);
- }
- for (i = 0; i < steppers.length; ++i) {
- var stepper = steppers[i];
- if (stepper.pageIndex === pageIndex) {
- stepper.panel.removeAttribute("hidden");
- } else {
- stepper.panel.setAttribute("hidden", true);
- }
- }
- var options = stepperChooser.options;
- for (i = 0; i < options.length; ++i) {
- var option = options[i];
- option.selected = (option.value | 0) === pageIndex;
- }
- },
- saveBreakPoints: function saveBreakPoints(pageIndex, bps) {
- breakPoints[pageIndex] = bps;
- sessionStorage.setItem("pdfjsBreakPoints", JSON.stringify(breakPoints));
- },
- };
-})();
-
-// The stepper for each page's IRQueue.
-var Stepper = (function StepperClosure() {
- // Shorter way to create element and optionally set textContent.
- function c(tag, textContent) {
- var d = document.createElement(tag);
- if (textContent) {
- d.textContent = textContent;
- }
- return d;
- }
-
- function simplifyArgs(args) {
- if (typeof args === "string") {
- var MAX_STRING_LENGTH = 75;
- return args.length <= MAX_STRING_LENGTH
- ? args
- : args.substring(0, MAX_STRING_LENGTH) + "...";
- }
- if (typeof args !== "object" || args === null) {
- return args;
- }
- if ("length" in args) {
- // array
- var simpleArgs = [],
- i,
- ii;
- var MAX_ITEMS = 10;
- for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {
- simpleArgs.push(simplifyArgs(args[i]));
- }
- if (i < args.length) {
- simpleArgs.push("...");
- }
- return simpleArgs;
- }
- var simpleObj = {};
- for (var key in args) {
- simpleObj[key] = simplifyArgs(args[key]);
- }
- return simpleObj;
- }
-
- // eslint-disable-next-line no-shadow
- function Stepper(panel, pageIndex, initialBreakPoints) {
- this.panel = panel;
- this.breakPoint = 0;
- this.nextBreakPoint = null;
- this.pageIndex = pageIndex;
- this.breakPoints = initialBreakPoints;
- this.currentIdx = -1;
- this.operatorListIdx = 0;
- }
- Stepper.prototype = {
- init: function init(operatorList) {
- var panel = this.panel;
- var content = c("div", "c=continue, s=step");
- var table = c("table");
- content.appendChild(table);
- table.cellSpacing = 0;
- var headerRow = c("tr");
- table.appendChild(headerRow);
- headerRow.appendChild(c("th", "Break"));
- headerRow.appendChild(c("th", "Idx"));
- headerRow.appendChild(c("th", "fn"));
- headerRow.appendChild(c("th", "args"));
- panel.appendChild(content);
- this.table = table;
- this.updateOperatorList(operatorList);
- },
- updateOperatorList: function updateOperatorList(operatorList) {
- var self = this;
-
- function cboxOnClick() {
- var x = +this.dataset.idx;
- if (this.checked) {
- self.breakPoints.push(x);
- } else {
- self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
- }
- StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
- }
-
- var MAX_OPERATORS_COUNT = 15000;
- if (this.operatorListIdx > MAX_OPERATORS_COUNT) {
- return;
- }
-
- var chunk = document.createDocumentFragment();
- var operatorsToDisplay = Math.min(
- MAX_OPERATORS_COUNT,
- operatorList.fnArray.length
- );
- for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) {
- var line = c("tr");
- line.className = "line";
- line.dataset.idx = i;
- chunk.appendChild(line);
- var checked = this.breakPoints.includes(i);
- var args = operatorList.argsArray[i] || [];
-
- var breakCell = c("td");
- var cbox = c("input");
- cbox.type = "checkbox";
- cbox.className = "points";
- cbox.checked = checked;
- cbox.dataset.idx = i;
- cbox.onclick = cboxOnClick;
-
- breakCell.appendChild(cbox);
- line.appendChild(breakCell);
- line.appendChild(c("td", i.toString()));
- var fn = opMap[operatorList.fnArray[i]];
- var decArgs = args;
- if (fn === "showText") {
- var glyphs = args[0];
- var newArgs = [];
- var str = [];
- for (var j = 0; j < glyphs.length; j++) {
- var glyph = glyphs[j];
- if (typeof glyph === "object" && glyph !== null) {
- str.push(glyph.fontChar);
- } else {
- if (str.length > 0) {
- newArgs.push(str.join(""));
- str = [];
- }
- newArgs.push(glyph); // null or number
- }
- }
- if (str.length > 0) {
- newArgs.push(str.join(""));
- }
- decArgs = [newArgs];
- }
- line.appendChild(c("td", fn));
- line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs))));
- }
- if (operatorsToDisplay < operatorList.fnArray.length) {
- line = c("tr");
- var lastCell = c("td", "...");
- lastCell.colspan = 4;
- chunk.appendChild(lastCell);
- }
- this.operatorListIdx = operatorList.fnArray.length;
- this.table.appendChild(chunk);
- },
- getNextBreakPoint: function getNextBreakPoint() {
- this.breakPoints.sort(function (a, b) {
- return a - b;
- });
- for (var i = 0; i < this.breakPoints.length; i++) {
- if (this.breakPoints[i] > this.currentIdx) {
- return this.breakPoints[i];
- }
- }
- return null;
- },
- breakIt: function breakIt(idx, callback) {
- StepperManager.selectStepper(this.pageIndex, true);
- var self = this;
- var dom = document;
- self.currentIdx = idx;
- var listener = function (e) {
- switch (e.keyCode) {
- case 83: // step
- dom.removeEventListener("keydown", listener);
- self.nextBreakPoint = self.currentIdx + 1;
- self.goTo(-1);
- callback();
- break;
- case 67: // continue
- dom.removeEventListener("keydown", listener);
- var breakPoint = self.getNextBreakPoint();
- self.nextBreakPoint = breakPoint;
- self.goTo(-1);
- callback();
- break;
- }
- };
- dom.addEventListener("keydown", listener);
- self.goTo(idx);
- },
- goTo: function goTo(idx) {
- var allRows = this.panel.getElementsByClassName("line");
- for (var x = 0, xx = allRows.length; x < xx; ++x) {
- var row = allRows[x];
- if ((row.dataset.idx | 0) === idx) {
- row.style.backgroundColor = "rgb(251,250,207)";
- row.scrollIntoView();
- } else {
- row.style.backgroundColor = null;
- }
- }
- },
- };
- return Stepper;
-})();
-
-var Stats = (function Stats() {
- var stats = [];
- function clear(node) {
- while (node.hasChildNodes()) {
- node.removeChild(node.lastChild);
- }
- }
- function getStatIndex(pageNumber) {
- for (var i = 0, ii = stats.length; i < ii; ++i) {
- if (stats[i].pageNumber === pageNumber) {
- return i;
- }
- }
- return false;
- }
- return {
- // Properties/functions needed by PDFBug.
- id: "Stats",
- name: "Stats",
- panel: null,
- manager: null,
- init(pdfjsLib) {},
- enabled: false,
- active: false,
- // Stats specific functions.
- add(pageNumber, stat) {
- if (!stat) {
- return;
- }
- var statsIndex = getStatIndex(pageNumber);
- if (statsIndex !== false) {
- const b = stats[statsIndex];
- this.panel.removeChild(b.div);
- stats.splice(statsIndex, 1);
- }
- var wrapper = document.createElement("div");
- wrapper.className = "stats";
- var title = document.createElement("div");
- title.className = "title";
- title.textContent = "Page: " + pageNumber;
- var statsDiv = document.createElement("div");
- statsDiv.textContent = stat.toString();
- wrapper.appendChild(title);
- wrapper.appendChild(statsDiv);
- stats.push({ pageNumber, div: wrapper });
- stats.sort(function (a, b) {
- return a.pageNumber - b.pageNumber;
- });
- clear(this.panel);
- for (var i = 0, ii = stats.length; i < ii; ++i) {
- this.panel.appendChild(stats[i].div);
- }
- },
- cleanup() {
- stats = [];
- clear(this.panel);
- },
- };
-})();
-
-// Manages all the debugging tools.
-window.PDFBug = (function PDFBugClosure() {
- var panelWidth = 300;
- var buttons = [];
- var activePanel = null;
-
- return {
- tools: [FontInspector, StepperManager, Stats],
- enable(ids) {
- var all = false,
- tools = this.tools;
- if (ids.length === 1 && ids[0] === "all") {
- all = true;
- }
- for (var i = 0; i < tools.length; ++i) {
- var tool = tools[i];
- if (all || ids.includes(tool.id)) {
- tool.enabled = true;
- }
- }
- if (!all) {
- // Sort the tools by the order they are enabled.
- tools.sort(function (a, b) {
- var indexA = ids.indexOf(a.id);
- indexA = indexA < 0 ? tools.length : indexA;
- var indexB = ids.indexOf(b.id);
- indexB = indexB < 0 ? tools.length : indexB;
- return indexA - indexB;
- });
- }
- },
- init(pdfjsLib, container) {
- /*
- * Basic Layout:
- * PDFBug
- * Controls
- * Panels
- * Panel
- * Panel
- * ...
- */
- var ui = document.createElement("div");
- ui.id = "PDFBug";
-
- var controls = document.createElement("div");
- controls.setAttribute("class", "controls");
- ui.appendChild(controls);
-
- var panels = document.createElement("div");
- panels.setAttribute("class", "panels");
- ui.appendChild(panels);
-
- container.appendChild(ui);
- container.style.right = panelWidth + "px";
-
- // Initialize all the debugging tools.
- var tools = this.tools;
- var self = this;
- for (var i = 0; i < tools.length; ++i) {
- var tool = tools[i];
- var panel = document.createElement("div");
- var panelButton = document.createElement("button");
- panelButton.textContent = tool.name;
- panelButton.addEventListener(
- "click",
- (function (selected) {
- return function (event) {
- event.preventDefault();
- self.selectPanel(selected);
- };
- })(i)
- );
- controls.appendChild(panelButton);
- panels.appendChild(panel);
- tool.panel = panel;
- tool.manager = this;
- if (tool.enabled) {
- tool.init(pdfjsLib);
- } else {
- panel.textContent =
- tool.name +
- " is disabled. To enable add " +
- ' "' +
- tool.id +
- '" to the pdfBug parameter ' +
- "and refresh (separate multiple by commas).";
- }
- buttons.push(panelButton);
- }
- this.selectPanel(0);
- },
- cleanup() {
- for (var i = 0, ii = this.tools.length; i < ii; i++) {
- if (this.tools[i].enabled) {
- this.tools[i].cleanup();
- }
- }
- },
- selectPanel(index) {
- if (typeof index !== "number") {
- index = this.tools.indexOf(index);
- }
- if (index === activePanel) {
- return;
- }
- activePanel = index;
- var tools = this.tools;
- for (var j = 0; j < tools.length; ++j) {
- if (j === index) {
- buttons[j].setAttribute("class", "active");
- tools[j].active = true;
- tools[j].panel.removeAttribute("hidden");
- } else {
- buttons[j].setAttribute("class", "");
- tools[j].active = false;
- tools[j].panel.setAttribute("hidden", "true");
- }
- }
- },
- };
-})();
+/* Copyright 2012 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.
+ */
+/* eslint-disable no-var */
+
+"use strict";
+
+var FontInspector = (function FontInspectorClosure() {
+ var fonts;
+ var active = false;
+ var fontAttribute = "data-font-name";
+ function removeSelection() {
+ const divs = document.querySelectorAll(`span[${fontAttribute}]`);
+ for (const div of divs) {
+ div.className = "";
+ }
+ }
+ function resetSelection() {
+ const divs = document.querySelectorAll(`span[${fontAttribute}]`);
+ for (const div of divs) {
+ div.className = "debuggerHideText";
+ }
+ }
+ function selectFont(fontName, show) {
+ const divs = document.querySelectorAll(
+ `span[${fontAttribute}=${fontName}]`
+ );
+ for (const div of divs) {
+ div.className = show ? "debuggerShowText" : "debuggerHideText";
+ }
+ }
+ function textLayerClick(e) {
+ if (
+ !e.target.dataset.fontName ||
+ e.target.tagName.toUpperCase() !== "SPAN"
+ ) {
+ return;
+ }
+ var fontName = e.target.dataset.fontName;
+ var selects = document.getElementsByTagName("input");
+ for (var i = 0; i < selects.length; ++i) {
+ var select = selects[i];
+ if (select.dataset.fontName !== fontName) {
+ continue;
+ }
+ select.checked = !select.checked;
+ selectFont(fontName, select.checked);
+ select.scrollIntoView();
+ }
+ }
+ return {
+ // Properties/functions needed by PDFBug.
+ id: "FontInspector",
+ name: "Font Inspector",
+ panel: null,
+ manager: null,
+ init: function init(pdfjsLib) {
+ var panel = this.panel;
+ var tmp = document.createElement("button");
+ tmp.addEventListener("click", resetSelection);
+ tmp.textContent = "Refresh";
+ panel.appendChild(tmp);
+
+ fonts = document.createElement("div");
+ panel.appendChild(fonts);
+ },
+ cleanup: function cleanup() {
+ fonts.textContent = "";
+ },
+ enabled: false,
+ get active() {
+ return active;
+ },
+ set active(value) {
+ active = value;
+ if (active) {
+ document.body.addEventListener("click", textLayerClick, true);
+ resetSelection();
+ } else {
+ document.body.removeEventListener("click", textLayerClick, true);
+ removeSelection();
+ }
+ },
+ // FontInspector specific functions.
+ fontAdded: function fontAdded(fontObj, url) {
+ function properties(obj, list) {
+ var moreInfo = document.createElement("table");
+ for (var i = 0; i < list.length; i++) {
+ var tr = document.createElement("tr");
+ var td1 = document.createElement("td");
+ td1.textContent = list[i];
+ tr.appendChild(td1);
+ var td2 = document.createElement("td");
+ td2.textContent = obj[list[i]].toString();
+ tr.appendChild(td2);
+ moreInfo.appendChild(tr);
+ }
+ return moreInfo;
+ }
+ var moreInfo = properties(fontObj, ["name", "type"]);
+ const fontName = fontObj.loadedName;
+ var font = document.createElement("div");
+ var name = document.createElement("span");
+ name.textContent = fontName;
+ var download = document.createElement("a");
+ if (url) {
+ url = /url\(['"]?([^\)"']+)/.exec(url);
+ download.href = url[1];
+ } else if (fontObj.data) {
+ download.href = URL.createObjectURL(
+ new Blob([fontObj.data], { type: fontObj.mimeType })
+ );
+ }
+ download.textContent = "Download";
+ var logIt = document.createElement("a");
+ logIt.href = "";
+ logIt.textContent = "Log";
+ logIt.addEventListener("click", function (event) {
+ event.preventDefault();
+ console.log(fontObj);
+ });
+ const select = document.createElement("input");
+ select.setAttribute("type", "checkbox");
+ select.dataset.fontName = fontName;
+ select.addEventListener("click", function () {
+ selectFont(fontName, select.checked);
+ });
+ font.appendChild(select);
+ font.appendChild(name);
+ font.appendChild(document.createTextNode(" "));
+ font.appendChild(download);
+ font.appendChild(document.createTextNode(" "));
+ font.appendChild(logIt);
+ font.appendChild(moreInfo);
+ fonts.appendChild(font);
+ // Somewhat of a hack, should probably add a hook for when the text layer
+ // is done rendering.
+ setTimeout(() => {
+ if (this.active) {
+ resetSelection();
+ }
+ }, 2000);
+ },
+ };
+})();
+
+var opMap;
+
+// Manages all the page steppers.
+var StepperManager = (function StepperManagerClosure() {
+ var steppers = [];
+ var stepperDiv = null;
+ var stepperControls = null;
+ var stepperChooser = null;
+ var breakPoints = Object.create(null);
+ return {
+ // Properties/functions needed by PDFBug.
+ id: "Stepper",
+ name: "Stepper",
+ panel: null,
+ manager: null,
+ init: function init(pdfjsLib) {
+ var self = this;
+ stepperControls = document.createElement("div");
+ stepperChooser = document.createElement("select");
+ stepperChooser.addEventListener("change", function (event) {
+ self.selectStepper(this.value);
+ });
+ stepperControls.appendChild(stepperChooser);
+ stepperDiv = document.createElement("div");
+ this.panel.appendChild(stepperControls);
+ this.panel.appendChild(stepperDiv);
+ if (sessionStorage.getItem("pdfjsBreakPoints")) {
+ breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints"));
+ }
+
+ opMap = Object.create(null);
+ for (var key in pdfjsLib.OPS) {
+ opMap[pdfjsLib.OPS[key]] = key;
+ }
+ },
+ cleanup: function cleanup() {
+ stepperChooser.textContent = "";
+ stepperDiv.textContent = "";
+ steppers = [];
+ },
+ enabled: false,
+ active: false,
+ // Stepper specific functions.
+ create: function create(pageIndex) {
+ var debug = document.createElement("div");
+ debug.id = "stepper" + pageIndex;
+ debug.setAttribute("hidden", true);
+ debug.className = "stepper";
+ stepperDiv.appendChild(debug);
+ var b = document.createElement("option");
+ b.textContent = "Page " + (pageIndex + 1);
+ b.value = pageIndex;
+ stepperChooser.appendChild(b);
+ var initBreakPoints = breakPoints[pageIndex] || [];
+ var stepper = new Stepper(debug, pageIndex, initBreakPoints);
+ steppers.push(stepper);
+ if (steppers.length === 1) {
+ this.selectStepper(pageIndex, false);
+ }
+ return stepper;
+ },
+ selectStepper: function selectStepper(pageIndex, selectPanel) {
+ var i;
+ pageIndex = pageIndex | 0;
+ if (selectPanel) {
+ this.manager.selectPanel(this);
+ }
+ for (i = 0; i < steppers.length; ++i) {
+ var stepper = steppers[i];
+ if (stepper.pageIndex === pageIndex) {
+ stepper.panel.removeAttribute("hidden");
+ } else {
+ stepper.panel.setAttribute("hidden", true);
+ }
+ }
+ var options = stepperChooser.options;
+ for (i = 0; i < options.length; ++i) {
+ var option = options[i];
+ option.selected = (option.value | 0) === pageIndex;
+ }
+ },
+ saveBreakPoints: function saveBreakPoints(pageIndex, bps) {
+ breakPoints[pageIndex] = bps;
+ sessionStorage.setItem("pdfjsBreakPoints", JSON.stringify(breakPoints));
+ },
+ };
+})();
+
+// The stepper for each page's IRQueue.
+var Stepper = (function StepperClosure() {
+ // Shorter way to create element and optionally set textContent.
+ function c(tag, textContent) {
+ var d = document.createElement(tag);
+ if (textContent) {
+ d.textContent = textContent;
+ }
+ return d;
+ }
+
+ function simplifyArgs(args) {
+ if (typeof args === "string") {
+ var MAX_STRING_LENGTH = 75;
+ return args.length <= MAX_STRING_LENGTH
+ ? args
+ : args.substring(0, MAX_STRING_LENGTH) + "...";
+ }
+ if (typeof args !== "object" || args === null) {
+ return args;
+ }
+ if ("length" in args) {
+ // array
+ var simpleArgs = [],
+ i,
+ ii;
+ var MAX_ITEMS = 10;
+ for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {
+ simpleArgs.push(simplifyArgs(args[i]));
+ }
+ if (i < args.length) {
+ simpleArgs.push("...");
+ }
+ return simpleArgs;
+ }
+ var simpleObj = {};
+ for (var key in args) {
+ simpleObj[key] = simplifyArgs(args[key]);
+ }
+ return simpleObj;
+ }
+
+ // eslint-disable-next-line no-shadow
+ function Stepper(panel, pageIndex, initialBreakPoints) {
+ this.panel = panel;
+ this.breakPoint = 0;
+ this.nextBreakPoint = null;
+ this.pageIndex = pageIndex;
+ this.breakPoints = initialBreakPoints;
+ this.currentIdx = -1;
+ this.operatorListIdx = 0;
+ }
+ Stepper.prototype = {
+ init: function init(operatorList) {
+ var panel = this.panel;
+ var content = c("div", "c=continue, s=step");
+ var table = c("table");
+ content.appendChild(table);
+ table.cellSpacing = 0;
+ var headerRow = c("tr");
+ table.appendChild(headerRow);
+ headerRow.appendChild(c("th", "Break"));
+ headerRow.appendChild(c("th", "Idx"));
+ headerRow.appendChild(c("th", "fn"));
+ headerRow.appendChild(c("th", "args"));
+ panel.appendChild(content);
+ this.table = table;
+ this.updateOperatorList(operatorList);
+ },
+ updateOperatorList: function updateOperatorList(operatorList) {
+ var self = this;
+
+ function cboxOnClick() {
+ var x = +this.dataset.idx;
+ if (this.checked) {
+ self.breakPoints.push(x);
+ } else {
+ self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
+ }
+ StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
+ }
+
+ var MAX_OPERATORS_COUNT = 15000;
+ if (this.operatorListIdx > MAX_OPERATORS_COUNT) {
+ return;
+ }
+
+ var chunk = document.createDocumentFragment();
+ var operatorsToDisplay = Math.min(
+ MAX_OPERATORS_COUNT,
+ operatorList.fnArray.length
+ );
+ for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) {
+ var line = c("tr");
+ line.className = "line";
+ line.dataset.idx = i;
+ chunk.appendChild(line);
+ var checked = this.breakPoints.includes(i);
+ var args = operatorList.argsArray[i] || [];
+
+ var breakCell = c("td");
+ var cbox = c("input");
+ cbox.type = "checkbox";
+ cbox.className = "points";
+ cbox.checked = checked;
+ cbox.dataset.idx = i;
+ cbox.onclick = cboxOnClick;
+
+ breakCell.appendChild(cbox);
+ line.appendChild(breakCell);
+ line.appendChild(c("td", i.toString()));
+ var fn = opMap[operatorList.fnArray[i]];
+ var decArgs = args;
+ if (fn === "showText") {
+ var glyphs = args[0];
+ var newArgs = [];
+ var str = [];
+ for (var j = 0; j < glyphs.length; j++) {
+ var glyph = glyphs[j];
+ if (typeof glyph === "object" && glyph !== null) {
+ str.push(glyph.fontChar);
+ } else {
+ if (str.length > 0) {
+ newArgs.push(str.join(""));
+ str = [];
+ }
+ newArgs.push(glyph); // null or number
+ }
+ }
+ if (str.length > 0) {
+ newArgs.push(str.join(""));
+ }
+ decArgs = [newArgs];
+ }
+ line.appendChild(c("td", fn));
+ line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs))));
+ }
+ if (operatorsToDisplay < operatorList.fnArray.length) {
+ line = c("tr");
+ var lastCell = c("td", "...");
+ lastCell.colspan = 4;
+ chunk.appendChild(lastCell);
+ }
+ this.operatorListIdx = operatorList.fnArray.length;
+ this.table.appendChild(chunk);
+ },
+ getNextBreakPoint: function getNextBreakPoint() {
+ this.breakPoints.sort(function (a, b) {
+ return a - b;
+ });
+ for (var i = 0; i < this.breakPoints.length; i++) {
+ if (this.breakPoints[i] > this.currentIdx) {
+ return this.breakPoints[i];
+ }
+ }
+ return null;
+ },
+ breakIt: function breakIt(idx, callback) {
+ StepperManager.selectStepper(this.pageIndex, true);
+ var self = this;
+ var dom = document;
+ self.currentIdx = idx;
+ var listener = function (e) {
+ switch (e.keyCode) {
+ case 83: // step
+ dom.removeEventListener("keydown", listener);
+ self.nextBreakPoint = self.currentIdx + 1;
+ self.goTo(-1);
+ callback();
+ break;
+ case 67: // continue
+ dom.removeEventListener("keydown", listener);
+ var breakPoint = self.getNextBreakPoint();
+ self.nextBreakPoint = breakPoint;
+ self.goTo(-1);
+ callback();
+ break;
+ }
+ };
+ dom.addEventListener("keydown", listener);
+ self.goTo(idx);
+ },
+ goTo: function goTo(idx) {
+ var allRows = this.panel.getElementsByClassName("line");
+ for (var x = 0, xx = allRows.length; x < xx; ++x) {
+ var row = allRows[x];
+ if ((row.dataset.idx | 0) === idx) {
+ row.style.backgroundColor = "rgb(251,250,207)";
+ row.scrollIntoView();
+ } else {
+ row.style.backgroundColor = null;
+ }
+ }
+ },
+ };
+ return Stepper;
+})();
+
+var Stats = (function Stats() {
+ var stats = [];
+ function clear(node) {
+ while (node.hasChildNodes()) {
+ node.removeChild(node.lastChild);
+ }
+ }
+ function getStatIndex(pageNumber) {
+ for (var i = 0, ii = stats.length; i < ii; ++i) {
+ if (stats[i].pageNumber === pageNumber) {
+ return i;
+ }
+ }
+ return false;
+ }
+ return {
+ // Properties/functions needed by PDFBug.
+ id: "Stats",
+ name: "Stats",
+ panel: null,
+ manager: null,
+ init(pdfjsLib) {},
+ enabled: false,
+ active: false,
+ // Stats specific functions.
+ add(pageNumber, stat) {
+ if (!stat) {
+ return;
+ }
+ var statsIndex = getStatIndex(pageNumber);
+ if (statsIndex !== false) {
+ const b = stats[statsIndex];
+ this.panel.removeChild(b.div);
+ stats.splice(statsIndex, 1);
+ }
+ var wrapper = document.createElement("div");
+ wrapper.className = "stats";
+ var title = document.createElement("div");
+ title.className = "title";
+ title.textContent = "Page: " + pageNumber;
+ var statsDiv = document.createElement("div");
+ statsDiv.textContent = stat.toString();
+ wrapper.appendChild(title);
+ wrapper.appendChild(statsDiv);
+ stats.push({ pageNumber, div: wrapper });
+ stats.sort(function (a, b) {
+ return a.pageNumber - b.pageNumber;
+ });
+ clear(this.panel);
+ for (var i = 0, ii = stats.length; i < ii; ++i) {
+ this.panel.appendChild(stats[i].div);
+ }
+ },
+ cleanup() {
+ stats = [];
+ clear(this.panel);
+ },
+ };
+})();
+
+// Manages all the debugging tools.
+window.PDFBug = (function PDFBugClosure() {
+ var panelWidth = 300;
+ var buttons = [];
+ var activePanel = null;
+
+ return {
+ tools: [FontInspector, StepperManager, Stats],
+ enable(ids) {
+ var all = false,
+ tools = this.tools;
+ if (ids.length === 1 && ids[0] === "all") {
+ all = true;
+ }
+ for (var i = 0; i < tools.length; ++i) {
+ var tool = tools[i];
+ if (all || ids.includes(tool.id)) {
+ tool.enabled = true;
+ }
+ }
+ if (!all) {
+ // Sort the tools by the order they are enabled.
+ tools.sort(function (a, b) {
+ var indexA = ids.indexOf(a.id);
+ indexA = indexA < 0 ? tools.length : indexA;
+ var indexB = ids.indexOf(b.id);
+ indexB = indexB < 0 ? tools.length : indexB;
+ return indexA - indexB;
+ });
+ }
+ },
+ init(pdfjsLib, container) {
+ /*
+ * Basic Layout:
+ * PDFBug
+ * Controls
+ * Panels
+ * Panel
+ * Panel
+ * ...
+ */
+ var ui = document.createElement("div");
+ ui.id = "PDFBug";
+
+ var controls = document.createElement("div");
+ controls.setAttribute("class", "controls");
+ ui.appendChild(controls);
+
+ var panels = document.createElement("div");
+ panels.setAttribute("class", "panels");
+ ui.appendChild(panels);
+
+ container.appendChild(ui);
+ container.style.right = panelWidth + "px";
+
+ // Initialize all the debugging tools.
+ var tools = this.tools;
+ var self = this;
+ for (var i = 0; i < tools.length; ++i) {
+ var tool = tools[i];
+ var panel = document.createElement("div");
+ var panelButton = document.createElement("button");
+ panelButton.textContent = tool.name;
+ panelButton.addEventListener(
+ "click",
+ (function (selected) {
+ return function (event) {
+ event.preventDefault();
+ self.selectPanel(selected);
+ };
+ })(i)
+ );
+ controls.appendChild(panelButton);
+ panels.appendChild(panel);
+ tool.panel = panel;
+ tool.manager = this;
+ if (tool.enabled) {
+ tool.init(pdfjsLib);
+ } else {
+ panel.textContent =
+ tool.name +
+ " is disabled. To enable add " +
+ ' "' +
+ tool.id +
+ '" to the pdfBug parameter ' +
+ "and refresh (separate multiple by commas).";
+ }
+ buttons.push(panelButton);
+ }
+ this.selectPanel(0);
+ },
+ cleanup() {
+ for (var i = 0, ii = this.tools.length; i < ii; i++) {
+ if (this.tools[i].enabled) {
+ this.tools[i].cleanup();
+ }
+ }
+ },
+ selectPanel(index) {
+ if (typeof index !== "number") {
+ index = this.tools.indexOf(index);
+ }
+ if (index === activePanel) {
+ return;
+ }
+ activePanel = index;
+ var tools = this.tools;
+ for (var j = 0; j < tools.length; ++j) {
+ if (j === index) {
+ buttons[j].setAttribute("class", "active");
+ tools[j].active = true;
+ tools[j].panel.removeAttribute("hidden");
+ } else {
+ buttons[j].setAttribute("class", "");
+ tools[j].active = false;
+ tools[j].panel.setAttribute("hidden", "true");
+ }
+ }
+ },
+ };
+})();
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-check.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-check.svg
index 71cd16df576f158da70e8007c946cf25ad25e397..82517cc95fbcef28d7c381086d34fdf53297408f 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-check.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-check.svg
@@ -1,11 +1,11 @@
-
-
-
-
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-comment.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-comment.svg
index 86f1f17249f0a2e49e54a6610fa928c91815c2d7..36424f95f83c3ed7c8ff4b3611febba0f6462631 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-comment.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-comment.svg
@@ -1,16 +1,16 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-help.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-help.svg
index 00938fefe048b07fede7186d235179fe6ac2482c..7c610e1900216c4f6abfdc803fa29ffa6bd1a9be 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-help.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-help.svg
@@ -1,26 +1,26 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-insert.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-insert.svg
index 519ef6826e56b178cbad9d91adf0b7a870696602..e60c1a60c974b2de30ecdc01375eb78cba3112dc 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-insert.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-insert.svg
@@ -1,10 +1,10 @@
-
-
-
-
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-key.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-key.svg
index 8d09d5378d5be7d1350e08c3ece3d87e2e711a96..9b652b72e87733dd04cec60b2a1c052fae54d6f3 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-key.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-key.svg
@@ -1,11 +1,11 @@
-
-
-
-
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-newparagraph.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-newparagraph.svg
index 38d2497da9112076d3e88876d03aedbb1437a1a2..87cf16931627afe488900d09faa71581d60ed01d 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-newparagraph.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-newparagraph.svg
@@ -1,11 +1,11 @@
-
-
-
-
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-noicon.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-noicon.svg
index c07d1080832bebea22ad1cf45fe3bac16ca90642..b94b7101d11756fd298a444a72f3292689290ed9 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-noicon.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-noicon.svg
@@ -1,7 +1,7 @@
-
-
-
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-note.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-note.svg
index 70173651c7e2a3d53492f234e7444c9d775b3b2c..d9b9f7edf329cb2c87a027c4c0775c01379cb17b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-note.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-note.svg
@@ -1,42 +1,42 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-paragraph.svg b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-paragraph.svg
index 6ae5212b75d6855aa2cf7964de2b27650a6a2b80..1c9ddb6f155d5fed336802418bd3da88980ea41a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-paragraph.svg
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/images/annotation-paragraph.svg
@@ -1,16 +1,16 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ach/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ach/viewer.properties
index 57c6a9121ce62c96c0dc88e13d3a6ff67cf3537b..647621138027c9e5b8b4ce829c8c3457a1fac835 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ach/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ach/viewer.properties
@@ -1,207 +1,207 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pot buk mukato
-previous_label=Mukato
-next.title=Pot buk malubo
-next_label=Malubo
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pot buk
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=pi {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} me {{pagesCount}})
-
-zoom_out.title=Jwik Matidi
-zoom_out_label=Jwik Matidi
-zoom_in.title=Kwot Madit
-zoom_in_label=Kwot Madit
-zoom.title=Kwoti
-presentation_mode.title=Lokke i kit me tyer
-presentation_mode_label=Kit me tyer
-open_file.title=Yab Pwail
-open_file_label=Yab
-print.title=Go
-print_label=Go
-download.title=Gam
-download_label=Gam
-bookmark.title=Neno ma kombedi (lok onyo yab i dirica manyen)
-bookmark_label=Neno ma kombedi
-
-# Secondary toolbar and context menu
-tools.title=Gintic
-tools_label=Gintic
-first_page.title=Cit i pot buk mukwongo
-first_page.label=Cit i pot buk mukwongo
-first_page_label=Cit i pot buk mukwongo
-last_page.title=Cit i pot buk magiko
-last_page.label=Cit i pot buk magiko
-last_page_label=Cit i pot buk magiko
-page_rotate_cw.title=Wire i tung lacuc
-page_rotate_cw.label=Wire i tung lacuc
-page_rotate_cw_label=Wire i tung lacuc
-page_rotate_ccw.title=Wire i tung lacam
-page_rotate_ccw.label=Wire i tung lacam
-page_rotate_ccw_label=Wire i tung lacam
-
-cursor_text_select_tool.title=Cak gitic me yero coc
-cursor_text_select_tool_label=Gitic me yero coc
-cursor_hand_tool.title=Cak gitic me cing
-cursor_hand_tool_label=Gitic cing
-
-
-
-# Document properties dialog box
-document_properties.title=Jami me gin acoya…
-document_properties_label=Jami me gin acoya…
-document_properties_file_name=Nying pwail:
-document_properties_file_size=Dit pa pwail:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Wiye:
-document_properties_author=Ngat mucoyo:
-document_properties_subject=Subjek:
-document_properties_keywords=Lok mapire tek:
-document_properties_creation_date=Nino dwe me cwec:
-document_properties_modification_date=Nino dwe me yub:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Lacwec:
-document_properties_producer=Layub PDF:
-document_properties_version=Kit PDF:
-document_properties_page_count=Kwan me pot buk:
-document_properties_page_size=Dit pa potbuk:
-document_properties_page_size_unit_inches=i
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=atir
-document_properties_page_size_orientation_landscape=arii
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Waraga
-document_properties_page_size_name_legal=Cik
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=Eyo
-document_properties_linearized_no=Pe
-document_properties_close=Lor
-
-print_progress_message=Yubo coc me agoya…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Juki
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Lok gintic ma inget
-toggle_sidebar_notification.title=Lok lanyut me nget (wiyewiye tye i gin acoya/attachments)
-toggle_sidebar_label=Lok gintic ma inget
-document_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng)
-document_outline_label=Pek pa gin acoya
-attachments.title=Nyut twec
-attachments_label=Twec
-thumbs.title=Nyut cal
-thumbs_label=Cal
-findbar.title=Nong iye gin acoya
-findbar_label=Nong
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pot buk {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Cal me pot buk {{page}}
-
-# Find panel button title and messages
-find_input.title=Nong
-find_input.placeholder=Nong i dokumen…
-find_previous.title=Nong timme pa lok mukato
-find_previous_label=Mukato
-find_next.title=Nong timme pa lok malubo
-find_next_label=Malubo
-find_highlight=Wer weng
-find_match_case_label=Lok marwate
-find_reached_top=Oo iwi gin acoya, omede ki i tere
-find_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye
-find_not_found=Lok pe ononge
-
-# Error panel labels
-error_more_info=Ngec Mukene
-error_less_info=Ngec Manok
-error_close=Lor
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Kwena: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Can kikore {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Pwail: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rek: {{line}}
-rendering_error=Bal otime i kare me nyuto pot buk.
-
-# Predefined zoom values
-page_scale_width=Lac me iye pot buk
-page_scale_fit=Porre me pot buk
-page_scale_auto=Kwot pire kene
-page_scale_actual=Dite kikome
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Bal
-loading_error=Bal otime kun cano PDF.
-invalid_file_error=Pwail me PDF ma pe atir onyo obale woko.
-missing_file_error=Pwail me PDF tye ka rem.
-unexpected_response_error=Lagam mape kigeno pa lapok tic.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Lok angea manok]
-password_label=Ket mung me donyo me yabo pwail me PDF man.
-password_invalid=Mung me donyo pe atir. Tim ber i tem doki.
-password_ok=OK
-password_cancel=Juki
-
-printing_not_supported=Ciko: Layeny ma pe teno goyo liweng.
-printing_not_ready=Ciko: PDF pe ocane weng me agoya.
-web_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine.
-document_colors_not_allowed=Pe ki yee ki gin acoya me PDF me tic ki rangi gi kengi: Kijuko woko “Yee pot buk me yero rangi mamegi kengi” ki i layeny.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pot buk mukato
+previous_label=Mukato
+next.title=Pot buk malubo
+next_label=Malubo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pot buk
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=pi {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} me {{pagesCount}})
+
+zoom_out.title=Jwik Matidi
+zoom_out_label=Jwik Matidi
+zoom_in.title=Kwot Madit
+zoom_in_label=Kwot Madit
+zoom.title=Kwoti
+presentation_mode.title=Lokke i kit me tyer
+presentation_mode_label=Kit me tyer
+open_file.title=Yab Pwail
+open_file_label=Yab
+print.title=Go
+print_label=Go
+download.title=Gam
+download_label=Gam
+bookmark.title=Neno ma kombedi (lok onyo yab i dirica manyen)
+bookmark_label=Neno ma kombedi
+
+# Secondary toolbar and context menu
+tools.title=Gintic
+tools_label=Gintic
+first_page.title=Cit i pot buk mukwongo
+first_page.label=Cit i pot buk mukwongo
+first_page_label=Cit i pot buk mukwongo
+last_page.title=Cit i pot buk magiko
+last_page.label=Cit i pot buk magiko
+last_page_label=Cit i pot buk magiko
+page_rotate_cw.title=Wire i tung lacuc
+page_rotate_cw.label=Wire i tung lacuc
+page_rotate_cw_label=Wire i tung lacuc
+page_rotate_ccw.title=Wire i tung lacam
+page_rotate_ccw.label=Wire i tung lacam
+page_rotate_ccw_label=Wire i tung lacam
+
+cursor_text_select_tool.title=Cak gitic me yero coc
+cursor_text_select_tool_label=Gitic me yero coc
+cursor_hand_tool.title=Cak gitic me cing
+cursor_hand_tool_label=Gitic cing
+
+
+
+# Document properties dialog box
+document_properties.title=Jami me gin acoya…
+document_properties_label=Jami me gin acoya…
+document_properties_file_name=Nying pwail:
+document_properties_file_size=Dit pa pwail:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Wiye:
+document_properties_author=Ngat mucoyo:
+document_properties_subject=Subjek:
+document_properties_keywords=Lok mapire tek:
+document_properties_creation_date=Nino dwe me cwec:
+document_properties_modification_date=Nino dwe me yub:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Lacwec:
+document_properties_producer=Layub PDF:
+document_properties_version=Kit PDF:
+document_properties_page_count=Kwan me pot buk:
+document_properties_page_size=Dit pa potbuk:
+document_properties_page_size_unit_inches=i
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=atir
+document_properties_page_size_orientation_landscape=arii
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Waraga
+document_properties_page_size_name_legal=Cik
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Eyo
+document_properties_linearized_no=Pe
+document_properties_close=Lor
+
+print_progress_message=Yubo coc me agoya…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Juki
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Lok gintic ma inget
+toggle_sidebar_notification.title=Lok lanyut me nget (wiyewiye tye i gin acoya/attachments)
+toggle_sidebar_label=Lok gintic ma inget
+document_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng)
+document_outline_label=Pek pa gin acoya
+attachments.title=Nyut twec
+attachments_label=Twec
+thumbs.title=Nyut cal
+thumbs_label=Cal
+findbar.title=Nong iye gin acoya
+findbar_label=Nong
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pot buk {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Cal me pot buk {{page}}
+
+# Find panel button title and messages
+find_input.title=Nong
+find_input.placeholder=Nong i dokumen…
+find_previous.title=Nong timme pa lok mukato
+find_previous_label=Mukato
+find_next.title=Nong timme pa lok malubo
+find_next_label=Malubo
+find_highlight=Wer weng
+find_match_case_label=Lok marwate
+find_reached_top=Oo iwi gin acoya, omede ki i tere
+find_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye
+find_not_found=Lok pe ononge
+
+# Error panel labels
+error_more_info=Ngec Mukene
+error_less_info=Ngec Manok
+error_close=Lor
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Kwena: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Can kikore {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Pwail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rek: {{line}}
+rendering_error=Bal otime i kare me nyuto pot buk.
+
+# Predefined zoom values
+page_scale_width=Lac me iye pot buk
+page_scale_fit=Porre me pot buk
+page_scale_auto=Kwot pire kene
+page_scale_actual=Dite kikome
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Bal
+loading_error=Bal otime kun cano PDF.
+invalid_file_error=Pwail me PDF ma pe atir onyo obale woko.
+missing_file_error=Pwail me PDF tye ka rem.
+unexpected_response_error=Lagam mape kigeno pa lapok tic.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Lok angea manok]
+password_label=Ket mung me donyo me yabo pwail me PDF man.
+password_invalid=Mung me donyo pe atir. Tim ber i tem doki.
+password_ok=OK
+password_cancel=Juki
+
+printing_not_supported=Ciko: Layeny ma pe teno goyo liweng.
+printing_not_ready=Ciko: PDF pe ocane weng me agoya.
+web_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine.
+document_colors_not_allowed=Pe ki yee ki gin acoya me PDF me tic ki rangi gi kengi: Kijuko woko “Yee pot buk me yero rangi mamegi kengi” ki i layeny.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/af/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/af/viewer.properties
index 8cf088087abe18e8ef4a5aa0cd03b7b2ad068871..0dc47c5c058db2738a480b2a044fc405582c04ee 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/af/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/af/viewer.properties
@@ -1,184 +1,184 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Vorige bladsy
-previous_label=Vorige
-next.title=Volgende bladsy
-next_label=Volgende
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Bladsy
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=van {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} van {{pagesCount}})
-
-zoom_out.title=Zoem uit
-zoom_out_label=Zoem uit
-zoom_in.title=Zoem in
-zoom_in_label=Zoem in
-zoom.title=Zoem
-presentation_mode.title=Wissel na voorleggingsmodus
-presentation_mode_label=Voorleggingsmodus
-open_file.title=Open lêer
-open_file_label=Open
-print.title=Druk
-print_label=Druk
-download.title=Laai af
-download_label=Laai af
-bookmark.title=Huidige aansig (kopieer of open in nuwe venster)
-bookmark_label=Huidige aansig
-
-# Secondary toolbar and context menu
-tools.title=Nutsgoed
-tools_label=Nutsgoed
-first_page.title=Gaan na eerste bladsy
-first_page.label=Gaan na eerste bladsy
-first_page_label=Gaan na eerste bladsy
-last_page.title=Gaan na laaste bladsy
-last_page.label=Gaan na laaste bladsy
-last_page_label=Gaan na laaste bladsy
-page_rotate_cw.title=Roteer kloksgewys
-page_rotate_cw.label=Roteer kloksgewys
-page_rotate_cw_label=Roteer kloksgewys
-page_rotate_ccw.title=Roteer anti-kloksgewys
-page_rotate_ccw.label=Roteer anti-kloksgewys
-page_rotate_ccw_label=Roteer anti-kloksgewys
-
-cursor_text_select_tool.title=Aktiveer gereedskap om teks te merk
-cursor_text_select_tool_label=Teksmerkgereedskap
-cursor_hand_tool.title=Aktiveer handjie
-cursor_hand_tool_label=Handjie
-
-# Document properties dialog box
-document_properties.title=Dokumenteienskappe…
-document_properties_label=Dokumenteienskappe…
-document_properties_file_name=Lêernaam:
-document_properties_file_size=Lêergrootte:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kG ({{size_b}} grepe)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MG ({{size_b}} grepe)
-document_properties_title=Titel:
-document_properties_author=Outeur:
-document_properties_subject=Onderwerp:
-document_properties_keywords=Sleutelwoorde:
-document_properties_creation_date=Skeppingsdatum:
-document_properties_modification_date=Wysigingsdatum:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Skepper:
-document_properties_producer=PDF-vervaardiger:
-document_properties_version=PDF-weergawe:
-document_properties_page_count=Aantal bladsye:
-document_properties_close=Sluit
-
-print_progress_message=Berei tans dokument voor om te druk…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Kanselleer
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Sypaneel aan/af
-toggle_sidebar_notification.title=Sypaneel aan/af (dokument bevat skema/aanhegsels)
-toggle_sidebar_label=Sypaneel aan/af
-document_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou)
-document_outline_label=Dokumentoorsig
-attachments.title=Wys aanhegsels
-attachments_label=Aanhegsels
-thumbs.title=Wys duimnaels
-thumbs_label=Duimnaels
-findbar.title=Soek in dokument
-findbar_label=Vind
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Bladsy {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Duimnael van bladsy {{page}}
-
-# Find panel button title and messages
-find_input.title=Vind
-find_input.placeholder=Soek in dokument…
-find_previous.title=Vind die vorige voorkoms van die frase
-find_previous_label=Vorige
-find_next.title=Vind die volgende voorkoms van die frase
-find_next_label=Volgende
-find_highlight=Verlig almal
-find_match_case_label=Kassensitief
-find_reached_top=Bokant van dokument is bereik; gaan voort van onder af
-find_reached_bottom=Einde van dokument is bereik; gaan voort van bo af
-find_not_found=Frase nie gevind nie
-
-# Error panel labels
-error_more_info=Meer inligting
-error_less_info=Minder inligting
-error_close=Sluit
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (ID: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Boodskap: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stapel: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Lêer: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Lyn: {{line}}
-rendering_error='n Fout het voorgekom toe die bladsy weergegee is.
-
-# Predefined zoom values
-page_scale_width=Bladsywydte
-page_scale_fit=Pas bladsy
-page_scale_auto=Outomatiese zoem
-page_scale_actual=Werklike grootte
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Fout
-loading_error='n Fout het voorgekom met die laai van die PDF.
-invalid_file_error=Ongeldige of korrupte PDF-lêer.
-missing_file_error=PDF-lêer is weg.
-unexpected_response_error=Onverwagse antwoord van bediener.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}}-annotasie]
-password_label=Gee die wagwoord om dié PDF-lêer mee te open.
-password_invalid=Ongeldige wagwoord. Probeer gerus weer.
-password_ok=OK
-password_cancel=Kanselleer
-
-printing_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie.
-printing_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie.
-web_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie.
-document_colors_not_allowed=PDF-dokumente word nie toegelaat om hul eie kleure te gebruik nie: “Laat bladsye toe om hul eie kleure te kies” is gedeaktiveer in die blaaier.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Vorige bladsy
+previous_label=Vorige
+next.title=Volgende bladsy
+next_label=Volgende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Bladsy
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=van {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} van {{pagesCount}})
+
+zoom_out.title=Zoem uit
+zoom_out_label=Zoem uit
+zoom_in.title=Zoem in
+zoom_in_label=Zoem in
+zoom.title=Zoem
+presentation_mode.title=Wissel na voorleggingsmodus
+presentation_mode_label=Voorleggingsmodus
+open_file.title=Open lêer
+open_file_label=Open
+print.title=Druk
+print_label=Druk
+download.title=Laai af
+download_label=Laai af
+bookmark.title=Huidige aansig (kopieer of open in nuwe venster)
+bookmark_label=Huidige aansig
+
+# Secondary toolbar and context menu
+tools.title=Nutsgoed
+tools_label=Nutsgoed
+first_page.title=Gaan na eerste bladsy
+first_page.label=Gaan na eerste bladsy
+first_page_label=Gaan na eerste bladsy
+last_page.title=Gaan na laaste bladsy
+last_page.label=Gaan na laaste bladsy
+last_page_label=Gaan na laaste bladsy
+page_rotate_cw.title=Roteer kloksgewys
+page_rotate_cw.label=Roteer kloksgewys
+page_rotate_cw_label=Roteer kloksgewys
+page_rotate_ccw.title=Roteer anti-kloksgewys
+page_rotate_ccw.label=Roteer anti-kloksgewys
+page_rotate_ccw_label=Roteer anti-kloksgewys
+
+cursor_text_select_tool.title=Aktiveer gereedskap om teks te merk
+cursor_text_select_tool_label=Teksmerkgereedskap
+cursor_hand_tool.title=Aktiveer handjie
+cursor_hand_tool_label=Handjie
+
+# Document properties dialog box
+document_properties.title=Dokumenteienskappe…
+document_properties_label=Dokumenteienskappe…
+document_properties_file_name=Lêernaam:
+document_properties_file_size=Lêergrootte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kG ({{size_b}} grepe)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MG ({{size_b}} grepe)
+document_properties_title=Titel:
+document_properties_author=Outeur:
+document_properties_subject=Onderwerp:
+document_properties_keywords=Sleutelwoorde:
+document_properties_creation_date=Skeppingsdatum:
+document_properties_modification_date=Wysigingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Skepper:
+document_properties_producer=PDF-vervaardiger:
+document_properties_version=PDF-weergawe:
+document_properties_page_count=Aantal bladsye:
+document_properties_close=Sluit
+
+print_progress_message=Berei tans dokument voor om te druk…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Kanselleer
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sypaneel aan/af
+toggle_sidebar_notification.title=Sypaneel aan/af (dokument bevat skema/aanhegsels)
+toggle_sidebar_label=Sypaneel aan/af
+document_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou)
+document_outline_label=Dokumentoorsig
+attachments.title=Wys aanhegsels
+attachments_label=Aanhegsels
+thumbs.title=Wys duimnaels
+thumbs_label=Duimnaels
+findbar.title=Soek in dokument
+findbar_label=Vind
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Bladsy {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Duimnael van bladsy {{page}}
+
+# Find panel button title and messages
+find_input.title=Vind
+find_input.placeholder=Soek in dokument…
+find_previous.title=Vind die vorige voorkoms van die frase
+find_previous_label=Vorige
+find_next.title=Vind die volgende voorkoms van die frase
+find_next_label=Volgende
+find_highlight=Verlig almal
+find_match_case_label=Kassensitief
+find_reached_top=Bokant van dokument is bereik; gaan voort van onder af
+find_reached_bottom=Einde van dokument is bereik; gaan voort van bo af
+find_not_found=Frase nie gevind nie
+
+# Error panel labels
+error_more_info=Meer inligting
+error_less_info=Minder inligting
+error_close=Sluit
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ID: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Boodskap: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stapel: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Lêer: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lyn: {{line}}
+rendering_error='n Fout het voorgekom toe die bladsy weergegee is.
+
+# Predefined zoom values
+page_scale_width=Bladsywydte
+page_scale_fit=Pas bladsy
+page_scale_auto=Outomatiese zoem
+page_scale_actual=Werklike grootte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fout
+loading_error='n Fout het voorgekom met die laai van die PDF.
+invalid_file_error=Ongeldige of korrupte PDF-lêer.
+missing_file_error=PDF-lêer is weg.
+unexpected_response_error=Onverwagse antwoord van bediener.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotasie]
+password_label=Gee die wagwoord om dié PDF-lêer mee te open.
+password_invalid=Ongeldige wagwoord. Probeer gerus weer.
+password_ok=OK
+password_cancel=Kanselleer
+
+printing_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie.
+printing_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie.
+web_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie.
+document_colors_not_allowed=PDF-dokumente word nie toegelaat om hul eie kleure te gebruik nie: “Laat bladsye toe om hul eie kleure te kies” is gedeaktiveer in die blaaier.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/an/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/an/viewer.properties
index 35761347a272a8bc948f100d9143babb182dfb09..0fe91c3e054d738d1be6b158f175e434a4670800 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/an/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/an/viewer.properties
@@ -1,184 +1,184 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pachina anterior
-previous_label=Anterior
-next.title=Pachina siguient
-next_label=Siguient
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pachina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Achiquir
-zoom_out_label=Achiquir
-zoom_in.title=Agrandir
-zoom_in_label=Agrandir
-zoom.title=Grandaria
-presentation_mode.title=Cambear t'o modo de presentación
-presentation_mode_label=Modo de presentación
-open_file.title=Ubrir o fichero
-open_file_label=Ubrir
-print.title=Imprentar
-print_label=Imprentar
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar u ubrir en una nueva finestra)
-bookmark_label=Anvista actual
-
-# Secondary toolbar and context menu
-tools.title=Ferramientas
-tools_label=Ferramientas
-first_page.title=Ir ta la primer pachina
-first_page.label=Ir ta la primer pachina
-first_page_label=Ir ta la primer pachina
-last_page.title=Ir ta la zaguer pachina
-last_page.label=Ir ta la zaguera pachina
-last_page_label=Ir ta la zaguer pachina
-page_rotate_cw.title=Chirar enta la dreita
-page_rotate_cw.label=Chirar enta la dreita
-page_rotate_cw_label=Chira enta la dreita
-page_rotate_ccw.title=Chirar enta la zurda
-page_rotate_ccw.label=Chirar en sentiu antihorario
-page_rotate_ccw_label=Chirar enta la zurda
-
-cursor_text_select_tool.title=Activar la ferramienta de selección de texto
-cursor_text_select_tool_label=Ferramienta de selección de texto
-cursor_hand_tool.title=Activar la ferramienta man
-cursor_hand_tool_label=Ferramienta man
-
-# Document properties dialog box
-document_properties.title=Propiedatz d'o documento...
-document_properties_label=Propiedatz d'o documento...
-document_properties_file_name=Nombre de fichero:
-document_properties_file_size=Grandaria d'o fichero:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Titol:
-document_properties_author=Autor:
-document_properties_subject=Afer:
-document_properties_keywords=Parolas clau:
-document_properties_creation_date=Calendata de creyación:
-document_properties_modification_date=Calendata de modificación:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creyador:
-document_properties_producer=Creyador de PDF:
-document_properties_version=Versión de PDF:
-document_properties_page_count=Numero de pachinas:
-document_properties_close=Zarrar
-
-print_progress_message=Se ye preparando la documentación pa imprentar…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Amostrar u amagar a barra lateral
-toggle_sidebar_notification.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos)
-toggle_sidebar_label=Amostrar a barra lateral
-document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items)
-document_outline_label=Esquema d'o documento
-attachments.title=Amostrar os adchuntos
-attachments_label=Adchuntos
-thumbs.title=Amostrar as miniaturas
-thumbs_label=Miniaturas
-findbar.title=Trobar en o documento
-findbar_label=Trobar
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pachina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura d'a pachina {{page}}
-
-# Find panel button title and messages
-find_input.title=Trobar
-find_input.placeholder=Trobar en o documento…
-find_previous.title=Trobar l'anterior coincidencia d'a frase
-find_previous_label=Anterior
-find_next.title=Trobar a siguient coincidencia d'a frase
-find_next_label=Siguient
-find_highlight=Resaltar-lo tot
-find_match_case_label=Coincidencia de mayusclas/minusclas
-find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo
-find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto
-find_not_found=No s'ha trobau a frase
-
-# Error panel labels
-error_more_info=Mas información
-error_less_info=Menos información
-error_close=Zarrar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensache: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fichero: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linia: {{line}}
-rendering_error=Ha ocurriu una error en renderizar a pachina.
-
-# Predefined zoom values
-page_scale_width=Amplaria d'a pachina
-page_scale_fit=Achuste d'a pachina
-page_scale_auto=Grandaria automatica
-page_scale_actual=Grandaria actual
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=S'ha produciu una error en cargar o PDF.
-invalid_file_error=O PDF no ye valido u ye estorbau.
-missing_file_error=No i ha fichero PDF.
-unexpected_response_error=Respuesta a lo servicio inasperada.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotación {{type}}]
-password_label=Introduzca a clau ta ubrir iste fichero PDF.
-password_invalid=Clau invalida. Torna a intentar-lo.
-password_ok=Acceptar
-password_cancel=Cancelar
-
-printing_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions.
-printing_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo.
-web_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF.
-document_colors_not_allowed=Los documentos PDF no pueden fer servir las suyas propias colors: 'Permitir que as pachinas triguen as suyas propias colors' ye desactivau en o navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pachina anterior
+previous_label=Anterior
+next.title=Pachina siguient
+next_label=Siguient
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pachina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Achiquir
+zoom_out_label=Achiquir
+zoom_in.title=Agrandir
+zoom_in_label=Agrandir
+zoom.title=Grandaria
+presentation_mode.title=Cambear t'o modo de presentación
+presentation_mode_label=Modo de presentación
+open_file.title=Ubrir o fichero
+open_file_label=Ubrir
+print.title=Imprentar
+print_label=Imprentar
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar u ubrir en una nueva finestra)
+bookmark_label=Anvista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramientas
+tools_label=Ferramientas
+first_page.title=Ir ta la primer pachina
+first_page.label=Ir ta la primer pachina
+first_page_label=Ir ta la primer pachina
+last_page.title=Ir ta la zaguer pachina
+last_page.label=Ir ta la zaguera pachina
+last_page_label=Ir ta la zaguer pachina
+page_rotate_cw.title=Chirar enta la dreita
+page_rotate_cw.label=Chirar enta la dreita
+page_rotate_cw_label=Chira enta la dreita
+page_rotate_ccw.title=Chirar enta la zurda
+page_rotate_ccw.label=Chirar en sentiu antihorario
+page_rotate_ccw_label=Chirar enta la zurda
+
+cursor_text_select_tool.title=Activar la ferramienta de selección de texto
+cursor_text_select_tool_label=Ferramienta de selección de texto
+cursor_hand_tool.title=Activar la ferramienta man
+cursor_hand_tool_label=Ferramienta man
+
+# Document properties dialog box
+document_properties.title=Propiedatz d'o documento...
+document_properties_label=Propiedatz d'o documento...
+document_properties_file_name=Nombre de fichero:
+document_properties_file_size=Grandaria d'o fichero:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titol:
+document_properties_author=Autor:
+document_properties_subject=Afer:
+document_properties_keywords=Parolas clau:
+document_properties_creation_date=Calendata de creyación:
+document_properties_modification_date=Calendata de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creyador:
+document_properties_producer=Creyador de PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Numero de pachinas:
+document_properties_close=Zarrar
+
+print_progress_message=Se ye preparando la documentación pa imprentar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Amostrar u amagar a barra lateral
+toggle_sidebar_notification.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos)
+toggle_sidebar_label=Amostrar a barra lateral
+document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items)
+document_outline_label=Esquema d'o documento
+attachments.title=Amostrar os adchuntos
+attachments_label=Adchuntos
+thumbs.title=Amostrar as miniaturas
+thumbs_label=Miniaturas
+findbar.title=Trobar en o documento
+findbar_label=Trobar
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pachina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura d'a pachina {{page}}
+
+# Find panel button title and messages
+find_input.title=Trobar
+find_input.placeholder=Trobar en o documento…
+find_previous.title=Trobar l'anterior coincidencia d'a frase
+find_previous_label=Anterior
+find_next.title=Trobar a siguient coincidencia d'a frase
+find_next_label=Siguient
+find_highlight=Resaltar-lo tot
+find_match_case_label=Coincidencia de mayusclas/minusclas
+find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo
+find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto
+find_not_found=No s'ha trobau a frase
+
+# Error panel labels
+error_more_info=Mas información
+error_less_info=Menos información
+error_close=Zarrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensache: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichero: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linia: {{line}}
+rendering_error=Ha ocurriu una error en renderizar a pachina.
+
+# Predefined zoom values
+page_scale_width=Amplaria d'a pachina
+page_scale_fit=Achuste d'a pachina
+page_scale_auto=Grandaria automatica
+page_scale_actual=Grandaria actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=S'ha produciu una error en cargar o PDF.
+invalid_file_error=O PDF no ye valido u ye estorbau.
+missing_file_error=No i ha fichero PDF.
+unexpected_response_error=Respuesta a lo servicio inasperada.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduzca a clau ta ubrir iste fichero PDF.
+password_invalid=Clau invalida. Torna a intentar-lo.
+password_ok=Acceptar
+password_cancel=Cancelar
+
+printing_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions.
+printing_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo.
+web_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF.
+document_colors_not_allowed=Los documentos PDF no pueden fer servir las suyas propias colors: 'Permitir que as pachinas triguen as suyas propias colors' ye desactivau en o navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ar/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ar/viewer.properties
index b42ba74c24b884c8e1d8f3d9ca2dd74ce222abb0..4e85b55a541de3095676383ad2067d91cffd488a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ar/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ar/viewer.properties
@@ -1,246 +1,246 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=الصفحة السابقة
-previous_label=السابقة
-next.title=الصفحة التالية
-next_label=التالية
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=صفحة
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=من {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} من {{pagesCount}})
-
-zoom_out.title=بعّد
-zoom_out_label=بعّد
-zoom_in.title=قرّب
-zoom_in_label=قرّب
-zoom.title=التقريب
-presentation_mode.title=انتقل لوضع العرض التقديمي
-presentation_mode_label=وضع العرض التقديمي
-open_file.title=افتح ملفًا
-open_file_label=افتح
-print.title=اطبع
-print_label=اطبع
-download.title=نزّل
-download_label=نزّل
-bookmark.title=المنظور الحالي (انسخ أو افتح في نافذة جديدة)
-bookmark_label=المنظور الحالي
-
-# Secondary toolbar and context menu
-tools.title=الأدوات
-tools_label=الأدوات
-first_page.title=اذهب إلى الصفحة الأولى
-first_page.label=اذهب إلى الصفحة الأولى
-first_page_label=اذهب إلى الصفحة الأولى
-last_page.title=اذهب إلى الصفحة الأخيرة
-last_page.label=اذهب إلى الصفحة الأخيرة
-last_page_label=اذهب إلى الصفحة الأخيرة
-page_rotate_cw.title=أدر باتجاه عقارب الساعة
-page_rotate_cw.label=أدر باتجاه عقارب الساعة
-page_rotate_cw_label=أدر باتجاه عقارب الساعة
-page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة
-page_rotate_ccw.label=أدر بعكس اتجاه عقارب الساعة
-page_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة
-
-cursor_text_select_tool.title=فعّل أداة اختيار النص
-cursor_text_select_tool_label=أداة اختيار النص
-cursor_hand_tool.title=فعّل أداة اليد
-cursor_hand_tool_label=أداة اليد
-
-scroll_vertical.title=استخدم التمرير الرأسي
-scroll_vertical_label=التمرير الرأسي
-scroll_horizontal.title=استخدم التمرير الأفقي
-scroll_horizontal_label=التمرير الأفقي
-scroll_wrapped.title=استخدم التمرير الملتف
-scroll_wrapped_label=التمرير الملتف
-
-spread_none.title=لا تدمج هوامش الصفحات مع بعضها البعض
-spread_none_label=بلا هوامش
-spread_odd.title=ادمج هوامش الصفحات الفردية
-spread_odd_label=هوامش الصفحات الفردية
-spread_even.title=ادمج هوامش الصفحات الزوجية
-spread_even_label=هوامش الصفحات الزوجية
-
-# Document properties dialog box
-document_properties.title=خصائص المستند…
-document_properties_label=خصائص المستند…
-document_properties_file_name=اسم الملف:
-document_properties_file_size=حجم الملف:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت)
-document_properties_title=العنوان:
-document_properties_author=المؤلف:
-document_properties_subject=الموضوع:
-document_properties_keywords=الكلمات الأساسية:
-document_properties_creation_date=تاريخ الإنشاء:
-document_properties_modification_date=تاريخ التعديل:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}، {{time}}
-document_properties_creator=المنشئ:
-document_properties_producer=منتج PDF:
-document_properties_version=إصدارة PDF:
-document_properties_page_count=عدد الصفحات:
-document_properties_page_size=مقاس الورقة:
-document_properties_page_size_unit_inches=بوصة
-document_properties_page_size_unit_millimeters=ملم
-document_properties_page_size_orientation_portrait=طوليّ
-document_properties_page_size_orientation_landscape=عرضيّ
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=خطاب
-document_properties_page_size_name_legal=قانونيّ
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}، {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=العرض السريع عبر الوِب:
-document_properties_linearized_yes=نعم
-document_properties_linearized_no=لا
-document_properties_close=أغلق
-
-print_progress_message=يُحضّر المستند للطباعة…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}٪
-print_progress_close=ألغِ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=بدّل ظهور الشريط الجانبي
-toggle_sidebar_notification.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات)
-toggle_sidebar_label=بدّل ظهور الشريط الجانبي
-document_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر)
-document_outline_label=مخطط المستند
-attachments.title=اعرض المرفقات
-attachments_label=المُرفقات
-thumbs.title=اعرض مُصغرات
-thumbs_label=مُصغّرات
-findbar.title=ابحث في المستند
-findbar_label=ابحث
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=صفحة {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=مصغّرة صفحة {{page}}
-
-# Find panel button title and messages
-find_input.title=ابحث
-find_input.placeholder=ابحث في المستند…
-find_previous.title=ابحث عن التّواجد السّابق للعبارة
-find_previous_label=السابق
-find_next.title=ابحث عن التّواجد التّالي للعبارة
-find_next_label=التالي
-find_highlight=أبرِز الكل
-find_match_case_label=طابق حالة الأحرف
-find_entire_word_label=كلمات كاملة
-find_reached_top=تابعت من الأسفل بعدما وصلت إلى بداية المستند
-find_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} من أصل مطابقة واحدة
-find_match_count[two]={{current}} من أصل مطابقتين
-find_match_count[few]={{current}} من أصل {{total}} مطابقات
-find_match_count[many]={{current}} من أصل {{total}} مطابقة
-find_match_count[other]={{current}} من أصل {{total}} مطابقة
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=فقط
-find_match_count_limit[one]=أكثر من مطابقة واحدة
-find_match_count_limit[two]=أكثر من مطابقتين
-find_match_count_limit[few]=أكثر من {{limit}} مطابقات
-find_match_count_limit[many]=أكثر من {{limit}} مطابقة
-find_match_count_limit[other]=أكثر من {{limit}} مطابقة
-find_not_found=لا وجود للعبارة
-
-# Error panel labels
-error_more_info=معلومات أكثر
-error_less_info=معلومات أقل
-error_close=أغلق
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js ن{{version}} (بناء: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=الرسالة: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=الرصّة: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=الملف: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=السطر: {{line}}
-rendering_error=حدث خطأ أثناء عرض الصفحة.
-
-# Predefined zoom values
-page_scale_width=عرض الصفحة
-page_scale_fit=ملائمة الصفحة
-page_scale_auto=تقريب تلقائي
-page_scale_actual=الحجم الفعلي
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}٪
-
-# Loading indicator messages
-loading_error_indicator=عطل
-loading_error=حدث عطل أثناء تحميل ملف PDF.
-invalid_file_error=ملف PDF تالف أو غير صحيح.
-missing_file_error=ملف PDF غير موجود.
-unexpected_response_error=استجابة خادوم غير متوقعة.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}، {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[تعليق {{type}}]
-password_label=أدخل لكلمة السر لفتح هذا الملف.
-password_invalid=كلمة سر خطأ. من فضلك أعد المحاولة.
-password_ok=حسنا
-password_cancel=ألغِ
-
-printing_not_supported=تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل.
-printing_not_ready=تحذير: ملف PDF لم يُحمّل كاملًا للطباعة.
-web_fonts_disabled=خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة.
-document_colors_not_allowed=ليس مسموحًا لملفات PDF باستخدام ألوانها الخاصة: خيار ”اسمح للصفحات باختيار ألوانها الخاصة“ ليس مُفعّلًا في المتصفح.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=الصفحة السابقة
+previous_label=السابقة
+next.title=الصفحة التالية
+next_label=التالية
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=صفحة
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=من {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} من {{pagesCount}})
+
+zoom_out.title=بعّد
+zoom_out_label=بعّد
+zoom_in.title=قرّب
+zoom_in_label=قرّب
+zoom.title=التقريب
+presentation_mode.title=انتقل لوضع العرض التقديمي
+presentation_mode_label=وضع العرض التقديمي
+open_file.title=افتح ملفًا
+open_file_label=افتح
+print.title=اطبع
+print_label=اطبع
+download.title=نزّل
+download_label=نزّل
+bookmark.title=المنظور الحالي (انسخ أو افتح في نافذة جديدة)
+bookmark_label=المنظور الحالي
+
+# Secondary toolbar and context menu
+tools.title=الأدوات
+tools_label=الأدوات
+first_page.title=اذهب إلى الصفحة الأولى
+first_page.label=اذهب إلى الصفحة الأولى
+first_page_label=اذهب إلى الصفحة الأولى
+last_page.title=اذهب إلى الصفحة الأخيرة
+last_page.label=اذهب إلى الصفحة الأخيرة
+last_page_label=اذهب إلى الصفحة الأخيرة
+page_rotate_cw.title=أدر باتجاه عقارب الساعة
+page_rotate_cw.label=أدر باتجاه عقارب الساعة
+page_rotate_cw_label=أدر باتجاه عقارب الساعة
+page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة
+page_rotate_ccw.label=أدر بعكس اتجاه عقارب الساعة
+page_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة
+
+cursor_text_select_tool.title=فعّل أداة اختيار النص
+cursor_text_select_tool_label=أداة اختيار النص
+cursor_hand_tool.title=فعّل أداة اليد
+cursor_hand_tool_label=أداة اليد
+
+scroll_vertical.title=استخدم التمرير الرأسي
+scroll_vertical_label=التمرير الرأسي
+scroll_horizontal.title=استخدم التمرير الأفقي
+scroll_horizontal_label=التمرير الأفقي
+scroll_wrapped.title=استخدم التمرير الملتف
+scroll_wrapped_label=التمرير الملتف
+
+spread_none.title=لا تدمج هوامش الصفحات مع بعضها البعض
+spread_none_label=بلا هوامش
+spread_odd.title=ادمج هوامش الصفحات الفردية
+spread_odd_label=هوامش الصفحات الفردية
+spread_even.title=ادمج هوامش الصفحات الزوجية
+spread_even_label=هوامش الصفحات الزوجية
+
+# Document properties dialog box
+document_properties.title=خصائص المستند…
+document_properties_label=خصائص المستند…
+document_properties_file_name=اسم الملف:
+document_properties_file_size=حجم الملف:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت)
+document_properties_title=العنوان:
+document_properties_author=المؤلف:
+document_properties_subject=الموضوع:
+document_properties_keywords=الكلمات الأساسية:
+document_properties_creation_date=تاريخ الإنشاء:
+document_properties_modification_date=تاريخ التعديل:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=المنشئ:
+document_properties_producer=منتج PDF:
+document_properties_version=إصدارة PDF:
+document_properties_page_count=عدد الصفحات:
+document_properties_page_size=مقاس الورقة:
+document_properties_page_size_unit_inches=بوصة
+document_properties_page_size_unit_millimeters=ملم
+document_properties_page_size_orientation_portrait=طوليّ
+document_properties_page_size_orientation_landscape=عرضيّ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=خطاب
+document_properties_page_size_name_legal=قانونيّ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}، {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=العرض السريع عبر الوِب:
+document_properties_linearized_yes=نعم
+document_properties_linearized_no=لا
+document_properties_close=أغلق
+
+print_progress_message=يُحضّر المستند للطباعة…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}٪
+print_progress_close=ألغِ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=بدّل ظهور الشريط الجانبي
+toggle_sidebar_notification.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات)
+toggle_sidebar_label=بدّل ظهور الشريط الجانبي
+document_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر)
+document_outline_label=مخطط المستند
+attachments.title=اعرض المرفقات
+attachments_label=المُرفقات
+thumbs.title=اعرض مُصغرات
+thumbs_label=مُصغّرات
+findbar.title=ابحث في المستند
+findbar_label=ابحث
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=صفحة {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=مصغّرة صفحة {{page}}
+
+# Find panel button title and messages
+find_input.title=ابحث
+find_input.placeholder=ابحث في المستند…
+find_previous.title=ابحث عن التّواجد السّابق للعبارة
+find_previous_label=السابق
+find_next.title=ابحث عن التّواجد التّالي للعبارة
+find_next_label=التالي
+find_highlight=أبرِز الكل
+find_match_case_label=طابق حالة الأحرف
+find_entire_word_label=كلمات كاملة
+find_reached_top=تابعت من الأسفل بعدما وصلت إلى بداية المستند
+find_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} من أصل مطابقة واحدة
+find_match_count[two]={{current}} من أصل مطابقتين
+find_match_count[few]={{current}} من أصل {{total}} مطابقات
+find_match_count[many]={{current}} من أصل {{total}} مطابقة
+find_match_count[other]={{current}} من أصل {{total}} مطابقة
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=فقط
+find_match_count_limit[one]=أكثر من مطابقة واحدة
+find_match_count_limit[two]=أكثر من مطابقتين
+find_match_count_limit[few]=أكثر من {{limit}} مطابقات
+find_match_count_limit[many]=أكثر من {{limit}} مطابقة
+find_match_count_limit[other]=أكثر من {{limit}} مطابقة
+find_not_found=لا وجود للعبارة
+
+# Error panel labels
+error_more_info=معلومات أكثر
+error_less_info=معلومات أقل
+error_close=أغلق
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js ن{{version}} (بناء: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=الرسالة: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=الرصّة: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=الملف: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=السطر: {{line}}
+rendering_error=حدث خطأ أثناء عرض الصفحة.
+
+# Predefined zoom values
+page_scale_width=عرض الصفحة
+page_scale_fit=ملائمة الصفحة
+page_scale_auto=تقريب تلقائي
+page_scale_actual=الحجم الفعلي
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}٪
+
+# Loading indicator messages
+loading_error_indicator=عطل
+loading_error=حدث عطل أثناء تحميل ملف PDF.
+invalid_file_error=ملف PDF تالف أو غير صحيح.
+missing_file_error=ملف PDF غير موجود.
+unexpected_response_error=استجابة خادوم غير متوقعة.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}، {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[تعليق {{type}}]
+password_label=أدخل لكلمة السر لفتح هذا الملف.
+password_invalid=كلمة سر خطأ. من فضلك أعد المحاولة.
+password_ok=حسنا
+password_cancel=ألغِ
+
+printing_not_supported=تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل.
+printing_not_ready=تحذير: ملف PDF لم يُحمّل كاملًا للطباعة.
+web_fonts_disabled=خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة.
+document_colors_not_allowed=ليس مسموحًا لملفات PDF باستخدام ألوانها الخاصة: خيار ”اسمح للصفحات باختيار ألوانها الخاصة“ ليس مُفعّلًا في المتصفح.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ast/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ast/viewer.properties
index db66a56754b074fde7fd54786c3d9a5a45101ca9..a2a3951ac16763e7817c70b98934bddf660c0652 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ast/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ast/viewer.properties
@@ -1,207 +1,207 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Páxina anterior
-previous_label=Anterior
-next.title=Páxina siguiente
-next_label=Siguiente
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Páxina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Reducir
-zoom_out_label=Reducir
-zoom_in.title=Aumentar
-zoom_in_label=Aumentar
-zoom.title=Tamañu
-open_file.title=Abrir ficheru
-open_file_label=Abrir
-print.title=Imprentar
-print_label=Imprentar
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar o abrir nuna nueva ventana)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Ferramientes
-tools_label=Ferramientes
-first_page.title=Dir a la primer páxina
-first_page.label=Dir a la primer páxina
-first_page_label=Dir a la primer páxina
-last_page.title=Dir a la postrer páxina
-last_page.label=Dir a la cabera páxina
-last_page_label=Dir a la postrer páxina
-page_rotate_cw.title=Xirar en sen horariu
-page_rotate_cw_label=Xirar en sen horariu
-page_rotate_ccw.title=Xirar en sen antihorariu
-page_rotate_ccw_label=Xirar en sen antihorariu
-
-
-scroll_vertical_label=Desplazamientu vertical
-scroll_horizontal_label=Desplazamientu horizontal
-
-
-# Document properties dialog box
-document_properties.title=Propiedaes del documentu…
-document_properties_label=Propiedaes del documentu…
-document_properties_file_name=Nome de ficheru:
-document_properties_file_size=Tamañu de ficheru:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Títulu:
-document_properties_author=Autor:
-document_properties_subject=Asuntu:
-document_properties_keywords=Pallabres clave:
-document_properties_creation_date=Data de creación:
-document_properties_modification_date=Data de modificación:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creador:
-document_properties_producer=Productor PDF:
-document_properties_version=Versión PDF:
-document_properties_page_count=Númberu de páxines:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=Sí
-document_properties_linearized_no=Non
-document_properties_close=Zarrar
-
-print_progress_message=Tresnando documentu pa imprentar…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Encaboxar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Camudar barra llateral
-toggle_sidebar_label=Camudar barra llateral
-document_outline.title=Amosar esquema del documentu (duble clic pa espander/contrayer tolos elementos)
-document_outline_label=Esquema del documentu
-attachments.title=Amosar axuntos
-attachments_label=Axuntos
-thumbs.title=Amosar miniatures
-thumbs_label=Miniatures
-findbar.title=Guetar nel documentu
-findbar_label=Guetar
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Páxina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura de la páxina {{page}}
-
-# Find panel button title and messages
-find_input.title=Guetar
-find_input.placeholder=Guetar nel documentu…
-find_previous.title=Alcontrar l'anterior apaición de la fras
-find_previous_label=Anterior
-find_next.title=Alcontrar la siguiente apaición d'esta fras
-find_next_label=Siguiente
-find_highlight=Remarcar toos
-find_match_case_label=Coincidencia de mayús./minús.
-find_entire_word_label=Pallabres enteres
-find_reached_top=Algamóse'l principiu del documentu, siguir dende'l final
-find_reached_bottom=Algamóse'l final del documentu, siguir dende'l principiu
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_not_found=Frase non atopada
-
-# Error panel labels
-error_more_info=Más información
-error_less_info=Menos información
-error_close=Zarrar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensaxe: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Ficheru: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Llinia: {{line}}
-rendering_error=Hebo un fallu al renderizar la páxina.
-
-# Predefined zoom values
-page_scale_width=Anchor de la páxina
-page_scale_fit=Axuste de la páxina
-page_scale_auto=Tamañu automáticu
-page_scale_actual=Tamañu actual
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Fallu
-loading_error=Hebo un fallu al cargar el PDF.
-invalid_file_error=Ficheru PDF inválidu o corruptu.
-missing_file_error=Nun hai ficheru PDF.
-unexpected_response_error=Rempuesta inesperada del sirvidor.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotación {{type}}]
-password_label=Introduz la contraseña p'abrir esti ficheru PDF
-password_invalid=Contraseña non válida. Vuelvi a intentalo.
-password_ok=Aceutar
-password_cancel=Encaboxar
-
-printing_not_supported=Alvertencia: La imprentación entá nun ta sofitada dafechu nesti restolador.
-printing_not_ready=Avisu: Esti PDF nun se cargó completamente pa poder imprentase.
-web_fonts_disabled=Les fontes web tán desactivaes: ye imposible usar les fontes PDF embebíes.
-document_colors_not_allowed=Los documentos PDF nun tienen permisu pa usar les sos colores: «Permitir que les páxines escueyan les sos colores» ta desactivao nel restolador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Páxina anterior
+previous_label=Anterior
+next.title=Páxina siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Páxina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Tamañu
+open_file.title=Abrir ficheru
+open_file_label=Abrir
+print.title=Imprentar
+print_label=Imprentar
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir nuna nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramientes
+tools_label=Ferramientes
+first_page.title=Dir a la primer páxina
+first_page.label=Dir a la primer páxina
+first_page_label=Dir a la primer páxina
+last_page.title=Dir a la postrer páxina
+last_page.label=Dir a la cabera páxina
+last_page_label=Dir a la postrer páxina
+page_rotate_cw.title=Xirar en sen horariu
+page_rotate_cw_label=Xirar en sen horariu
+page_rotate_ccw.title=Xirar en sen antihorariu
+page_rotate_ccw_label=Xirar en sen antihorariu
+
+
+scroll_vertical_label=Desplazamientu vertical
+scroll_horizontal_label=Desplazamientu horizontal
+
+
+# Document properties dialog box
+document_properties.title=Propiedaes del documentu…
+document_properties_label=Propiedaes del documentu…
+document_properties_file_name=Nome de ficheru:
+document_properties_file_size=Tamañu de ficheru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Títulu:
+document_properties_author=Autor:
+document_properties_subject=Asuntu:
+document_properties_keywords=Pallabres clave:
+document_properties_creation_date=Data de creación:
+document_properties_modification_date=Data de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Númberu de páxines:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=Non
+document_properties_close=Zarrar
+
+print_progress_message=Tresnando documentu pa imprentar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Encaboxar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Camudar barra llateral
+toggle_sidebar_label=Camudar barra llateral
+document_outline.title=Amosar esquema del documentu (duble clic pa espander/contrayer tolos elementos)
+document_outline_label=Esquema del documentu
+attachments.title=Amosar axuntos
+attachments_label=Axuntos
+thumbs.title=Amosar miniatures
+thumbs_label=Miniatures
+findbar.title=Guetar nel documentu
+findbar_label=Guetar
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Páxina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la páxina {{page}}
+
+# Find panel button title and messages
+find_input.title=Guetar
+find_input.placeholder=Guetar nel documentu…
+find_previous.title=Alcontrar l'anterior apaición de la fras
+find_previous_label=Anterior
+find_next.title=Alcontrar la siguiente apaición d'esta fras
+find_next_label=Siguiente
+find_highlight=Remarcar toos
+find_match_case_label=Coincidencia de mayús./minús.
+find_entire_word_label=Pallabres enteres
+find_reached_top=Algamóse'l principiu del documentu, siguir dende'l final
+find_reached_bottom=Algamóse'l final del documentu, siguir dende'l principiu
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=Frase non atopada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Zarrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaxe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheru: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Llinia: {{line}}
+rendering_error=Hebo un fallu al renderizar la páxina.
+
+# Predefined zoom values
+page_scale_width=Anchor de la páxina
+page_scale_fit=Axuste de la páxina
+page_scale_auto=Tamañu automáticu
+page_scale_actual=Tamañu actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fallu
+loading_error=Hebo un fallu al cargar el PDF.
+invalid_file_error=Ficheru PDF inválidu o corruptu.
+missing_file_error=Nun hai ficheru PDF.
+unexpected_response_error=Rempuesta inesperada del sirvidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduz la contraseña p'abrir esti ficheru PDF
+password_invalid=Contraseña non válida. Vuelvi a intentalo.
+password_ok=Aceutar
+password_cancel=Encaboxar
+
+printing_not_supported=Alvertencia: La imprentación entá nun ta sofitada dafechu nesti restolador.
+printing_not_ready=Avisu: Esti PDF nun se cargó completamente pa poder imprentase.
+web_fonts_disabled=Les fontes web tán desactivaes: ye imposible usar les fontes PDF embebíes.
+document_colors_not_allowed=Los documentos PDF nun tienen permisu pa usar les sos colores: «Permitir que les páxines escueyan les sos colores» ta desactivao nel restolador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/az/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/az/viewer.properties
index 2c27d124693a0d824647637d7894d250c39486ad..19aa85098e68eb61b1566a9b4d12036769324ef6 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/az/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/az/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Əvvəlki səhifə
-previous_label=Əvvəlkini tap
-next.title=Növbəti səhifə
-next_label=İrəli
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Səhifə
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} / {{pagesCount}})
-
-zoom_out.title=Uzaqlaş
-zoom_out_label=Uzaqlaş
-zoom_in.title=Yaxınlaş
-zoom_in_label=Yaxınlaş
-zoom.title=Yaxınlaşdırma
-presentation_mode.title=Təqdimat Rejiminə Keç
-presentation_mode_label=Təqdimat Rejimi
-open_file.title=Fayl Aç
-open_file_label=Aç
-print.title=Yazdır
-print_label=Yazdır
-download.title=Yüklə
-download_label=Yüklə
-bookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç)
-bookmark_label=Hazırkı görünüş
-
-# Secondary toolbar and context menu
-tools.title=Alətlər
-tools_label=Alətlər
-first_page.title=İlk Səhifəyə get
-first_page.label=İlk Səhifəyə get
-first_page_label=İlk Səhifəyə get
-last_page.title=Son Səhifəyə get
-last_page.label=Son Səhifəyə get
-last_page_label=Son Səhifəyə get
-page_rotate_cw.title=Saat İstiqamətində Fırlat
-page_rotate_cw.label=Saat İstiqamətində Fırlat
-page_rotate_cw_label=Saat İstiqamətində Fırlat
-page_rotate_ccw.title=Saat İstiqamətinin Əksinə Fırlat
-page_rotate_ccw.label=Saat İstiqamətinin Əksinə Fırlat
-page_rotate_ccw_label=Saat İstiqamətinin Əksinə Fırlat
-
-cursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir
-cursor_text_select_tool_label=Yazı seçmə aləti
-cursor_hand_tool.title=Əl alətini aktivləşdir
-cursor_hand_tool_label=Əl aləti
-
-scroll_vertical.title=Şaquli sürüşdürmə işlət
-scroll_vertical_label=Şaquli sürüşdürmə
-scroll_horizontal.title=Üfüqi sürüşdürmə işlət
-scroll_horizontal_label=Üfüqi sürüşdürmə
-scroll_wrapped.title=Bükülü sürüşdürmə işlət
-scroll_wrapped_label=Bükülü sürüşdürmə
-
-spread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə
-spread_none_label=Birləşdirmə
-spread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat
-spread_odd_label=Tək nömrəli
-spread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat
-spread_even_label=Cüt nömrəli
-
-# Document properties dialog box
-document_properties.title=Sənəd xüsusiyyətləri…
-document_properties_label=Sənəd xüsusiyyətləri…
-document_properties_file_name=Fayl adı:
-document_properties_file_size=Fayl ölçüsü:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
-document_properties_title=Başlık:
-document_properties_author=Müəllif:
-document_properties_subject=Mövzu:
-document_properties_keywords=Açar sözlər:
-document_properties_creation_date=Yaradılış Tarixi :
-document_properties_modification_date=Dəyişdirilmə Tarixi :
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Yaradan:
-document_properties_producer=PDF yaradıcısı:
-document_properties_version=PDF versiyası:
-document_properties_page_count=Səhifə sayı:
-document_properties_page_size=Səhifə Ölçüsü:
-document_properties_page_size_unit_inches=inç
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portret
-document_properties_page_size_orientation_landscape=albom
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Məktub
-document_properties_page_size_name_legal=Hüquqi
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Bəli
-document_properties_linearized_no=Xeyr
-document_properties_close=Qapat
-
-print_progress_message=Sənəd çap üçün hazırlanır…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Ləğv et
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Yan Paneli Aç/Bağla
-toggle_sidebar_notification.title=Yan paneli çevir (sənəddə icmal/bağlama var)
-toggle_sidebar_label=Yan Paneli Aç/Bağla
-document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin)
-document_outline_label=Sənəd strukturu
-attachments.title=Bağlamaları göstər
-attachments_label=Bağlamalar
-thumbs.title=Kiçik şəkilləri göstər
-thumbs_label=Kiçik şəkillər
-findbar.title=Sənəddə Tap
-findbar_label=Tap
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Səhifə {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Səhifə{{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti
-
-# Find panel button title and messages
-find_input.title=Tap
-find_input.placeholder=Sənəddə tap…
-find_previous.title=Bir öncəki uyğun gələn sözü tapır
-find_previous_label=Geri
-find_next.title=Bir sonrakı uyğun gələn sözü tapır
-find_next_label=İrəli
-find_highlight=İşarələ
-find_match_case_label=Böyük/kiçik hərfə həssaslıq
-find_entire_word_label=Tam sözlər
-find_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir
-find_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} / {{total}} uyğunluq
-find_match_count[two]={{current}} / {{total}} uyğunluq
-find_match_count[few]={{current}} / {{total}} uyğunluq
-find_match_count[many]={{current}} / {{total}} uyğunluq
-find_match_count[other]={{current}} / {{total}} uyğunluq
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}}-dan çox uyğunluq
-find_match_count_limit[one]={{limit}}-dən çox uyğunluq
-find_match_count_limit[two]={{limit}}-dən çox uyğunluq
-find_match_count_limit[few]={{limit}} uyğunluqdan daha çox
-find_match_count_limit[many]={{limit}} uyğunluqdan daha çox
-find_match_count_limit[other]={{limit}} uyğunluqdan daha çox
-find_not_found=Uyğunlaşma tapılmadı
-
-# Error panel labels
-error_more_info=Daha çox məlumati
-error_less_info=Daha az məlumat
-error_close=Qapat
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (yığma: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=İsmarıc: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stek: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fayl: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Sətir: {{line}}
-rendering_error=Səhifə göstərilərkən səhv yarandı.
-
-# Predefined zoom values
-page_scale_width=Səhifə genişliyi
-page_scale_fit=Səhifəni sığdır
-page_scale_auto=Avtomatik yaxınlaşdır
-page_scale_actual=Hazırkı Həcm
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Səhv
-loading_error=PDF yüklenərkən bir səhv yarandı.
-invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl.
-missing_file_error=PDF fayl yoxdur.
-unexpected_response_error=Gözlənilməz server cavabı.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotasiyası]
-password_label=Bu PDF faylı açmaq üçün parolu daxil edin.
-password_invalid=Parol səhvdir. Bir daha yoxlayın.
-password_ok=Tamam
-password_cancel=Ləğv et
-
-printing_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir.
-printing_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib.
-web_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil.
-document_colors_not_allowed=PDF sənədlərə öz rənglərini işlətməyə icazə verilmir: “Səhifələrə öz rənglərini istifadə etməyə icazə ver”mə səyyahda söndürülüb.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Əvvəlki səhifə
+previous_label=Əvvəlkini tap
+next.title=Növbəti səhifə
+next_label=İrəli
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Səhifə
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Uzaqlaş
+zoom_out_label=Uzaqlaş
+zoom_in.title=Yaxınlaş
+zoom_in_label=Yaxınlaş
+zoom.title=Yaxınlaşdırma
+presentation_mode.title=Təqdimat Rejiminə Keç
+presentation_mode_label=Təqdimat Rejimi
+open_file.title=Fayl Aç
+open_file_label=Aç
+print.title=Yazdır
+print_label=Yazdır
+download.title=Yüklə
+download_label=Yüklə
+bookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç)
+bookmark_label=Hazırkı görünüş
+
+# Secondary toolbar and context menu
+tools.title=Alətlər
+tools_label=Alətlər
+first_page.title=İlk Səhifəyə get
+first_page.label=İlk Səhifəyə get
+first_page_label=İlk Səhifəyə get
+last_page.title=Son Səhifəyə get
+last_page.label=Son Səhifəyə get
+last_page_label=Son Səhifəyə get
+page_rotate_cw.title=Saat İstiqamətində Fırlat
+page_rotate_cw.label=Saat İstiqamətində Fırlat
+page_rotate_cw_label=Saat İstiqamətində Fırlat
+page_rotate_ccw.title=Saat İstiqamətinin Əksinə Fırlat
+page_rotate_ccw.label=Saat İstiqamətinin Əksinə Fırlat
+page_rotate_ccw_label=Saat İstiqamətinin Əksinə Fırlat
+
+cursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir
+cursor_text_select_tool_label=Yazı seçmə aləti
+cursor_hand_tool.title=Əl alətini aktivləşdir
+cursor_hand_tool_label=Əl aləti
+
+scroll_vertical.title=Şaquli sürüşdürmə işlət
+scroll_vertical_label=Şaquli sürüşdürmə
+scroll_horizontal.title=Üfüqi sürüşdürmə işlət
+scroll_horizontal_label=Üfüqi sürüşdürmə
+scroll_wrapped.title=Bükülü sürüşdürmə işlət
+scroll_wrapped_label=Bükülü sürüşdürmə
+
+spread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə
+spread_none_label=Birləşdirmə
+spread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat
+spread_odd_label=Tək nömrəli
+spread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat
+spread_even_label=Cüt nömrəli
+
+# Document properties dialog box
+document_properties.title=Sənəd xüsusiyyətləri…
+document_properties_label=Sənəd xüsusiyyətləri…
+document_properties_file_name=Fayl adı:
+document_properties_file_size=Fayl ölçüsü:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
+document_properties_title=Başlık:
+document_properties_author=Müəllif:
+document_properties_subject=Mövzu:
+document_properties_keywords=Açar sözlər:
+document_properties_creation_date=Yaradılış Tarixi :
+document_properties_modification_date=Dəyişdirilmə Tarixi :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yaradan:
+document_properties_producer=PDF yaradıcısı:
+document_properties_version=PDF versiyası:
+document_properties_page_count=Səhifə sayı:
+document_properties_page_size=Səhifə Ölçüsü:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portret
+document_properties_page_size_orientation_landscape=albom
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Məktub
+document_properties_page_size_name_legal=Hüquqi
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Bəli
+document_properties_linearized_no=Xeyr
+document_properties_close=Qapat
+
+print_progress_message=Sənəd çap üçün hazırlanır…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Ləğv et
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Yan Paneli Aç/Bağla
+toggle_sidebar_notification.title=Yan paneli çevir (sənəddə icmal/bağlama var)
+toggle_sidebar_label=Yan Paneli Aç/Bağla
+document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin)
+document_outline_label=Sənəd strukturu
+attachments.title=Bağlamaları göstər
+attachments_label=Bağlamalar
+thumbs.title=Kiçik şəkilləri göstər
+thumbs_label=Kiçik şəkillər
+findbar.title=Sənəddə Tap
+findbar_label=Tap
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Səhifə {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Səhifə{{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti
+
+# Find panel button title and messages
+find_input.title=Tap
+find_input.placeholder=Sənəddə tap…
+find_previous.title=Bir öncəki uyğun gələn sözü tapır
+find_previous_label=Geri
+find_next.title=Bir sonrakı uyğun gələn sözü tapır
+find_next_label=İrəli
+find_highlight=İşarələ
+find_match_case_label=Böyük/kiçik hərfə həssaslıq
+find_entire_word_label=Tam sözlər
+find_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir
+find_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} uyğunluq
+find_match_count[two]={{current}} / {{total}} uyğunluq
+find_match_count[few]={{current}} / {{total}} uyğunluq
+find_match_count[many]={{current}} / {{total}} uyğunluq
+find_match_count[other]={{current}} / {{total}} uyğunluq
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}}-dan çox uyğunluq
+find_match_count_limit[one]={{limit}}-dən çox uyğunluq
+find_match_count_limit[two]={{limit}}-dən çox uyğunluq
+find_match_count_limit[few]={{limit}} uyğunluqdan daha çox
+find_match_count_limit[many]={{limit}} uyğunluqdan daha çox
+find_match_count_limit[other]={{limit}} uyğunluqdan daha çox
+find_not_found=Uyğunlaşma tapılmadı
+
+# Error panel labels
+error_more_info=Daha çox məlumati
+error_less_info=Daha az məlumat
+error_close=Qapat
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (yığma: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=İsmarıc: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stek: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fayl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Sətir: {{line}}
+rendering_error=Səhifə göstərilərkən səhv yarandı.
+
+# Predefined zoom values
+page_scale_width=Səhifə genişliyi
+page_scale_fit=Səhifəni sığdır
+page_scale_auto=Avtomatik yaxınlaşdır
+page_scale_actual=Hazırkı Həcm
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Səhv
+loading_error=PDF yüklenərkən bir səhv yarandı.
+invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl.
+missing_file_error=PDF fayl yoxdur.
+unexpected_response_error=Gözlənilməz server cavabı.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotasiyası]
+password_label=Bu PDF faylı açmaq üçün parolu daxil edin.
+password_invalid=Parol səhvdir. Bir daha yoxlayın.
+password_ok=Tamam
+password_cancel=Ləğv et
+
+printing_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir.
+printing_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib.
+web_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil.
+document_colors_not_allowed=PDF sənədlərə öz rənglərini işlətməyə icazə verilmir: “Səhifələrə öz rənglərini istifadə etməyə icazə ver”mə səyyahda söndürülüb.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/be/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/be/viewer.properties
index 67cd0126ef46057fd0ce92f41821391315df50eb..e88e0c71096f3b1385ef6d0d9d9e8440e17d7a89 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/be/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/be/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Папярэдняя старонка
-previous_label=Папярэдняя
-next.title=Наступная старонка
-next_label=Наступная
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Старонка
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=з {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} з {{pagesCount}})
-
-zoom_out.title=Паменшыць
-zoom_out_label=Паменшыць
-zoom_in.title=Павялічыць
-zoom_in_label=Павялічыць
-zoom.title=Павялічэнне тэксту
-presentation_mode.title=Пераключыцца ў рэжым паказу
-presentation_mode_label=Рэжым паказу
-open_file.title=Адкрыць файл
-open_file_label=Адкрыць
-print.title=Друкаваць
-print_label=Друкаваць
-download.title=Сцягнуць
-download_label=Сцягнуць
-bookmark.title=Цяперашняя праява (скапіяваць або адчыніць у новым акне)
-bookmark_label=Цяперашняя праява
-
-# Secondary toolbar and context menu
-tools.title=Прылады
-tools_label=Прылады
-first_page.title=Перайсці на першую старонку
-first_page.label=Перайсці на першую старонку
-first_page_label=Перайсці на першую старонку
-last_page.title=Перайсці на апошнюю старонку
-last_page.label=Перайсці на апошнюю старонку
-last_page_label=Перайсці на апошнюю старонку
-page_rotate_cw.title=Павярнуць па сонцу
-page_rotate_cw.label=Павярнуць па сонцу
-page_rotate_cw_label=Павярнуць па сонцу
-page_rotate_ccw.title=Павярнуць супраць сонца
-page_rotate_ccw.label=Павярнуць супраць сонца
-page_rotate_ccw_label=Павярнуць супраць сонца
-
-cursor_text_select_tool.title=Уключыць прыладу выбару тэксту
-cursor_text_select_tool_label=Прылада выбару тэксту
-cursor_hand_tool.title=Уключыць ручную прыладу
-cursor_hand_tool_label=Ручная прылада
-
-scroll_vertical.title=Ужываць вертыкальную пракрутку
-scroll_vertical_label=Вертыкальная пракрутка
-scroll_horizontal.title=Ужываць гарызантальную пракрутку
-scroll_horizontal_label=Гарызантальная пракрутка
-scroll_wrapped.title=Ужываць маштабавальную пракрутку
-scroll_wrapped_label=Маштабавальная пракрутка
-
-spread_none.title=Не выкарыстоўваць разгорнутыя старонкі
-spread_none_label=Без разгорнутых старонак
-spread_odd.title=Разгорнутыя старонкі пачынаючы з няцотных нумароў
-spread_odd_label=Няцотныя старонкі злева
-spread_even.title=Разгорнутыя старонкі пачынаючы з цотных нумароў
-spread_even_label=Цотныя старонкі злева
-
-# Document properties dialog box
-document_properties.title=Уласцівасці дакумента…
-document_properties_label=Уласцівасці дакумента…
-document_properties_file_name=Назва файла:
-document_properties_file_size=Памер файла:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
-document_properties_title=Загаловак:
-document_properties_author=Аўтар:
-document_properties_subject=Тэма:
-document_properties_keywords=Ключавыя словы:
-document_properties_creation_date=Дата стварэння:
-document_properties_modification_date=Дата змянення:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Стваральнік:
-document_properties_producer=Вырабнік PDF:
-document_properties_version=Версія PDF:
-document_properties_page_count=Колькасць старонак:
-document_properties_page_size=Памер старонкі:
-document_properties_page_size_unit_inches=цаляў
-document_properties_page_size_unit_millimeters=мм
-document_properties_page_size_orientation_portrait=кніжная
-document_properties_page_size_orientation_landscape=альбомная
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Хуткі прагляд у Інтэрнэце:
-document_properties_linearized_yes=Так
-document_properties_linearized_no=Не
-document_properties_close=Закрыць
-
-print_progress_message=Падрыхтоўка дакумента да друку…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Скасаваць
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Паказаць/схаваць бакавую панэль
-toggle_sidebar_notification.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні)
-toggle_sidebar_label=Паказаць/схаваць бакавую панэль
-document_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы)
-document_outline_label=Структура дакумента
-attachments.title=Паказаць далучэнні
-attachments_label=Далучэнні
-thumbs.title=Паказ мініяцюр
-thumbs_label=Мініяцюры
-findbar.title=Пошук у дакуменце
-findbar_label=Знайсці
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Старонка {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Старонка {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Мініяцюра старонкі {{page}}
-
-# Find panel button title and messages
-find_input.title=Шукаць
-find_input.placeholder=Шукаць у дакуменце…
-find_previous.title=Знайсці папярэдні выпадак выразу
-find_previous_label=Папярэдні
-find_next.title=Знайсці наступны выпадак выразу
-find_next_label=Наступны
-find_highlight=Падфарбаваць усе
-find_match_case_label=Адрозніваць вялікія/малыя літары
-find_entire_word_label=Словы цалкам
-find_reached_top=Дасягнуты пачатак дакумента, працяг з канца
-find_reached_bottom=Дасягнуты канец дакумента, працяг з пачатку
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} з {{total}} супадзення
-find_match_count[two]={{current}} з {{total}} супадзенняў
-find_match_count[few]={{current}} з {{total}} супадзенняў
-find_match_count[many]={{current}} з {{total}} супадзенняў
-find_match_count[other]={{current}} з {{total}} супадзенняў
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Больш за {{limit}} супадзенняў
-find_match_count_limit[one]=Больш за {{limit}} супадзенне
-find_match_count_limit[two]=Больш за {{limit}} супадзенняў
-find_match_count_limit[few]=Больш за {{limit}} супадзенняў
-find_match_count_limit[many]=Больш за {{limit}} супадзенняў
-find_match_count_limit[other]=Больш за {{limit}} супадзенняў
-find_not_found=Выраз не знойдзены
-
-# Error panel labels
-error_more_info=Падрабязней
-error_less_info=Сцісла
-error_close=Закрыць
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js в{{version}} (зборка: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Паведамленне: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Стос: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Файл: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Радок: {{line}}
-rendering_error=Здарылася памылка падчас адлюстравання старонкі.
-
-# Predefined zoom values
-page_scale_width=Шырыня старонкі
-page_scale_fit=Уцісненне старонкі
-page_scale_auto=Аўтаматычнае павелічэнне
-page_scale_actual=Сапраўдны памер
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Памылка
-loading_error=Здарылася памылка падчас загрузкі PDF.
-invalid_file_error=Няспраўны або пашкоджаны файл PDF.
-missing_file_error=Адсутны файл PDF.
-unexpected_response_error=Нечаканы адказ сервера.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Увядзіце пароль, каб адкрыць гэты файл PDF.
-password_invalid=Нядзейсны пароль. Паспрабуйце зноў.
-password_ok=Добра
-password_cancel=Скасаваць
-
-printing_not_supported=Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам.
-printing_not_ready=Увага: PDF не сцягнуты цалкам для друкавання.
-web_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF.
-document_colors_not_allowed=PDF-дакументам не дазволена выкарыстоўваць свае колеры: у браўзеры адключаны параметр "Дазволіць вэб-сайтам выкарыстоўваць свае колеры".
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Папярэдняя старонка
+previous_label=Папярэдняя
+next.title=Наступная старонка
+next_label=Наступная
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Старонка
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=з {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} з {{pagesCount}})
+
+zoom_out.title=Паменшыць
+zoom_out_label=Паменшыць
+zoom_in.title=Павялічыць
+zoom_in_label=Павялічыць
+zoom.title=Павялічэнне тэксту
+presentation_mode.title=Пераключыцца ў рэжым паказу
+presentation_mode_label=Рэжым паказу
+open_file.title=Адкрыць файл
+open_file_label=Адкрыць
+print.title=Друкаваць
+print_label=Друкаваць
+download.title=Сцягнуць
+download_label=Сцягнуць
+bookmark.title=Цяперашняя праява (скапіяваць або адчыніць у новым акне)
+bookmark_label=Цяперашняя праява
+
+# Secondary toolbar and context menu
+tools.title=Прылады
+tools_label=Прылады
+first_page.title=Перайсці на першую старонку
+first_page.label=Перайсці на першую старонку
+first_page_label=Перайсці на першую старонку
+last_page.title=Перайсці на апошнюю старонку
+last_page.label=Перайсці на апошнюю старонку
+last_page_label=Перайсці на апошнюю старонку
+page_rotate_cw.title=Павярнуць па сонцу
+page_rotate_cw.label=Павярнуць па сонцу
+page_rotate_cw_label=Павярнуць па сонцу
+page_rotate_ccw.title=Павярнуць супраць сонца
+page_rotate_ccw.label=Павярнуць супраць сонца
+page_rotate_ccw_label=Павярнуць супраць сонца
+
+cursor_text_select_tool.title=Уключыць прыладу выбару тэксту
+cursor_text_select_tool_label=Прылада выбару тэксту
+cursor_hand_tool.title=Уключыць ручную прыладу
+cursor_hand_tool_label=Ручная прылада
+
+scroll_vertical.title=Ужываць вертыкальную пракрутку
+scroll_vertical_label=Вертыкальная пракрутка
+scroll_horizontal.title=Ужываць гарызантальную пракрутку
+scroll_horizontal_label=Гарызантальная пракрутка
+scroll_wrapped.title=Ужываць маштабавальную пракрутку
+scroll_wrapped_label=Маштабавальная пракрутка
+
+spread_none.title=Не выкарыстоўваць разгорнутыя старонкі
+spread_none_label=Без разгорнутых старонак
+spread_odd.title=Разгорнутыя старонкі пачынаючы з няцотных нумароў
+spread_odd_label=Няцотныя старонкі злева
+spread_even.title=Разгорнутыя старонкі пачынаючы з цотных нумароў
+spread_even_label=Цотныя старонкі злева
+
+# Document properties dialog box
+document_properties.title=Уласцівасці дакумента…
+document_properties_label=Уласцівасці дакумента…
+document_properties_file_name=Назва файла:
+document_properties_file_size=Памер файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Загаловак:
+document_properties_author=Аўтар:
+document_properties_subject=Тэма:
+document_properties_keywords=Ключавыя словы:
+document_properties_creation_date=Дата стварэння:
+document_properties_modification_date=Дата змянення:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Стваральнік:
+document_properties_producer=Вырабнік PDF:
+document_properties_version=Версія PDF:
+document_properties_page_count=Колькасць старонак:
+document_properties_page_size=Памер старонкі:
+document_properties_page_size_unit_inches=цаляў
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=кніжная
+document_properties_page_size_orientation_landscape=альбомная
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Хуткі прагляд у Інтэрнэце:
+document_properties_linearized_yes=Так
+document_properties_linearized_no=Не
+document_properties_close=Закрыць
+
+print_progress_message=Падрыхтоўка дакумента да друку…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Скасаваць
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Паказаць/схаваць бакавую панэль
+toggle_sidebar_notification.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні)
+toggle_sidebar_label=Паказаць/схаваць бакавую панэль
+document_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы)
+document_outline_label=Структура дакумента
+attachments.title=Паказаць далучэнні
+attachments_label=Далучэнні
+thumbs.title=Паказ мініяцюр
+thumbs_label=Мініяцюры
+findbar.title=Пошук у дакуменце
+findbar_label=Знайсці
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Старонка {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Старонка {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Мініяцюра старонкі {{page}}
+
+# Find panel button title and messages
+find_input.title=Шукаць
+find_input.placeholder=Шукаць у дакуменце…
+find_previous.title=Знайсці папярэдні выпадак выразу
+find_previous_label=Папярэдні
+find_next.title=Знайсці наступны выпадак выразу
+find_next_label=Наступны
+find_highlight=Падфарбаваць усе
+find_match_case_label=Адрозніваць вялікія/малыя літары
+find_entire_word_label=Словы цалкам
+find_reached_top=Дасягнуты пачатак дакумента, працяг з канца
+find_reached_bottom=Дасягнуты канец дакумента, працяг з пачатку
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} з {{total}} супадзення
+find_match_count[two]={{current}} з {{total}} супадзенняў
+find_match_count[few]={{current}} з {{total}} супадзенняў
+find_match_count[many]={{current}} з {{total}} супадзенняў
+find_match_count[other]={{current}} з {{total}} супадзенняў
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Больш за {{limit}} супадзенняў
+find_match_count_limit[one]=Больш за {{limit}} супадзенне
+find_match_count_limit[two]=Больш за {{limit}} супадзенняў
+find_match_count_limit[few]=Больш за {{limit}} супадзенняў
+find_match_count_limit[many]=Больш за {{limit}} супадзенняў
+find_match_count_limit[other]=Больш за {{limit}} супадзенняў
+find_not_found=Выраз не знойдзены
+
+# Error panel labels
+error_more_info=Падрабязней
+error_less_info=Сцісла
+error_close=Закрыць
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js в{{version}} (зборка: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Паведамленне: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стос: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Радок: {{line}}
+rendering_error=Здарылася памылка падчас адлюстравання старонкі.
+
+# Predefined zoom values
+page_scale_width=Шырыня старонкі
+page_scale_fit=Уцісненне старонкі
+page_scale_auto=Аўтаматычнае павелічэнне
+page_scale_actual=Сапраўдны памер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Памылка
+loading_error=Здарылася памылка падчас загрузкі PDF.
+invalid_file_error=Няспраўны або пашкоджаны файл PDF.
+missing_file_error=Адсутны файл PDF.
+unexpected_response_error=Нечаканы адказ сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Увядзіце пароль, каб адкрыць гэты файл PDF.
+password_invalid=Нядзейсны пароль. Паспрабуйце зноў.
+password_ok=Добра
+password_cancel=Скасаваць
+
+printing_not_supported=Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам.
+printing_not_ready=Увага: PDF не сцягнуты цалкам для друкавання.
+web_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF.
+document_colors_not_allowed=PDF-дакументам не дазволена выкарыстоўваць свае колеры: у браўзеры адключаны параметр "Дазволіць вэб-сайтам выкарыстоўваць свае колеры".
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bg/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bg/viewer.properties
index 713b1138ddde009dbfacac7f7ebb25565720f380..1927a18eae2c1508c03e3ad0e3677ec788449ab5 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bg/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bg/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Предишна страница
-previous_label=Предишна
-next.title=Следваща страница
-next_label=Следваща
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Страница
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=от {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} от {{pagesCount}})
-
-zoom_out.title=Намаляване
-zoom_out_label=Намаляване
-zoom_in.title=Увеличаване
-zoom_in_label=Увеличаване
-zoom.title=Мащабиране
-presentation_mode.title=Превключване към режим на представяне
-presentation_mode_label=Режим на представяне
-open_file.title=Отваряне на файл
-open_file_label=Отваряне
-print.title=Отпечатване
-print_label=Отпечатване
-download.title=Изтегляне
-download_label=Изтегляне
-bookmark.title=Текущ изглед (копиране или отваряне в нов прозорец)
-bookmark_label=Текущ изглед
-
-# Secondary toolbar and context menu
-tools.title=Инструменти
-tools_label=Инструменти
-first_page.title=Към първата страница
-first_page.label=Към първата страница
-first_page_label=Към първата страница
-last_page.title=Към последната страница
-last_page.label=Към последната страница
-last_page_label=Към последната страница
-page_rotate_cw.title=Завъртане по час. стрелка
-page_rotate_cw.label=Завъртане по часовниковата стрелка
-page_rotate_cw_label=Завъртане по часовниковата стрелка
-page_rotate_ccw.title=Завъртане обратно на час. стрелка
-page_rotate_ccw.label=Завъртане обратно на часовниковата стрелка
-page_rotate_ccw_label=Завъртане обратно на часовниковата стрелка
-
-cursor_text_select_tool.title=Включване на инструмента за избор на текст
-cursor_text_select_tool_label=Инструмент за избор на текст
-cursor_hand_tool.title=Включване на инструмента ръка
-cursor_hand_tool_label=Инструмент ръка
-
-scroll_vertical.title=Използване на вертикално плъзгане
-scroll_vertical_label=Вертикално плъзгане
-scroll_horizontal.title=Използване на хоризонтално
-scroll_horizontal_label=Хоризонтално плъзгане
-scroll_wrapped.title=Използване на мащабируемо плъзгане
-scroll_wrapped_label=Мащабируемо плъзгане
-
-spread_none.title=Режимът на сдвояване е изключен
-spread_none_label=Без сдвояване
-spread_odd.title=Сдвояване, започвайки от нечетните страници
-spread_odd_label=Нечетните отляво
-spread_even.title=Сдвояване, започвайки от четните страници
-spread_even_label=Четните отляво
-
-# Document properties dialog box
-document_properties.title=Свойства на документа…
-document_properties_label=Свойства на документа…
-document_properties_file_name=Име на файл:
-document_properties_file_size=Големина на файл:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} КБ ({{size_b}} байта)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} МБ ({{size_b}} байта)
-document_properties_title=Заглавие:
-document_properties_author=Автор:
-document_properties_subject=Тема:
-document_properties_keywords=Ключови думи:
-document_properties_creation_date=Дата на създаване:
-document_properties_modification_date=Дата на промяна:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Създател:
-document_properties_producer=PDF произведен от:
-document_properties_version=Издание на PDF:
-document_properties_page_count=Брой страници:
-document_properties_page_size=Размер на страницата:
-document_properties_page_size_unit_inches=инч
-document_properties_page_size_unit_millimeters=мм
-document_properties_page_size_orientation_portrait=портрет
-document_properties_page_size_orientation_landscape=пейзаж
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Правни въпроси
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Бърз преглед:
-document_properties_linearized_yes=Да
-document_properties_linearized_no=Не
-document_properties_close=Затваряне
-
-print_progress_message=Подготвяне на документа за отпечатване…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Отказ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Превключване на страничната лента
-toggle_sidebar_notification.title=Превключване на страничната лента (документи със структура/прикачени файлове)
-toggle_sidebar_label=Превключване на страничната лента
-document_outline.title=Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко)
-document_outline_label=Структура на документа
-attachments.title=Показване на притурките
-attachments_label=Притурки
-thumbs.title=Показване на миниатюрите
-thumbs_label=Миниатюри
-findbar.title=Намиране в документа
-findbar_label=Търсене
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Страница {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Миниатюра на страница {{page}}
-
-# Find panel button title and messages
-find_input.title=Търсене
-find_input.placeholder=Търсене в документа…
-find_previous.title=Намиране на предишно съвпадение на фразата
-find_previous_label=Предишна
-find_next.title=Намиране на следващо съвпадение на фразата
-find_next_label=Следваща
-find_highlight=Открояване на всички
-find_match_case_label=Съвпадение на регистъра
-find_entire_word_label=Цели думи
-find_reached_top=Достигнато е началото на документа, продължаване от края
-find_reached_bottom=Достигнат е краят на документа, продължаване от началото
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} от {{total}} съвпадение
-find_match_count[two]={{current}} от {{total}} съвпадения
-find_match_count[few]={{current}} от {{total}} съвпадения
-find_match_count[many]={{current}} от {{total}} съвпадения
-find_match_count[other]={{current}} от {{total}} съвпадения
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Повече от {{limit}} съвпадения
-find_match_count_limit[one]=Повече от {{limit}} съвпадение
-find_match_count_limit[two]=Повече от {{limit}} съвпадения
-find_match_count_limit[few]=Повече от {{limit}} съвпадения
-find_match_count_limit[many]=Повече от {{limit}} съвпадения
-find_match_count_limit[other]=Повече от {{limit}} съвпадения
-find_not_found=Фразата не е намерена
-
-# Error panel labels
-error_more_info=Повече информация
-error_less_info=По-малко информация
-error_close=Затваряне
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=Издание на PDF.js {{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Съобщение: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Стек: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Файл: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Ред: {{line}}
-rendering_error=Грешка при изчертаване на страницата.
-
-# Predefined zoom values
-page_scale_width=Ширина на страницата
-page_scale_fit=Вместване в страницата
-page_scale_auto=Автоматично мащабиране
-page_scale_actual=Действителен размер
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Грешка
-loading_error=Получи се грешка при зареждане на PDF-а.
-invalid_file_error=Невалиден или повреден PDF файл.
-missing_file_error=Липсващ PDF файл.
-unexpected_response_error=Неочакван отговор от сървъра.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Анотация {{type}}]
-password_label=Въведете парола за отваряне на този PDF файл.
-password_invalid=Невалидна парола. Моля, опитайте отново.
-password_ok=Добре
-password_cancel=Отказ
-
-printing_not_supported=Внимание: Този четец няма пълна поддръжка на отпечатване.
-printing_not_ready=Внимание: Този PDF файл не е напълно зареден за печат.
-web_fonts_disabled=Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове.
-document_colors_not_allowed=На документите от вид PDF не е разрешено да използват собствени цветове: „Разрешаване на страниците да избират собствени цветове“ е изключено в четеца.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Предишна страница
+previous_label=Предишна
+next.title=Следваща страница
+next_label=Следваща
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=от {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} от {{pagesCount}})
+
+zoom_out.title=Намаляване
+zoom_out_label=Намаляване
+zoom_in.title=Увеличаване
+zoom_in_label=Увеличаване
+zoom.title=Мащабиране
+presentation_mode.title=Превключване към режим на представяне
+presentation_mode_label=Режим на представяне
+open_file.title=Отваряне на файл
+open_file_label=Отваряне
+print.title=Отпечатване
+print_label=Отпечатване
+download.title=Изтегляне
+download_label=Изтегляне
+bookmark.title=Текущ изглед (копиране или отваряне в нов прозорец)
+bookmark_label=Текущ изглед
+
+# Secondary toolbar and context menu
+tools.title=Инструменти
+tools_label=Инструменти
+first_page.title=Към първата страница
+first_page.label=Към първата страница
+first_page_label=Към първата страница
+last_page.title=Към последната страница
+last_page.label=Към последната страница
+last_page_label=Към последната страница
+page_rotate_cw.title=Завъртане по час. стрелка
+page_rotate_cw.label=Завъртане по часовниковата стрелка
+page_rotate_cw_label=Завъртане по часовниковата стрелка
+page_rotate_ccw.title=Завъртане обратно на час. стрелка
+page_rotate_ccw.label=Завъртане обратно на часовниковата стрелка
+page_rotate_ccw_label=Завъртане обратно на часовниковата стрелка
+
+cursor_text_select_tool.title=Включване на инструмента за избор на текст
+cursor_text_select_tool_label=Инструмент за избор на текст
+cursor_hand_tool.title=Включване на инструмента ръка
+cursor_hand_tool_label=Инструмент ръка
+
+scroll_vertical.title=Използване на вертикално плъзгане
+scroll_vertical_label=Вертикално плъзгане
+scroll_horizontal.title=Използване на хоризонтално
+scroll_horizontal_label=Хоризонтално плъзгане
+scroll_wrapped.title=Използване на мащабируемо плъзгане
+scroll_wrapped_label=Мащабируемо плъзгане
+
+spread_none.title=Режимът на сдвояване е изключен
+spread_none_label=Без сдвояване
+spread_odd.title=Сдвояване, започвайки от нечетните страници
+spread_odd_label=Нечетните отляво
+spread_even.title=Сдвояване, започвайки от четните страници
+spread_even_label=Четните отляво
+
+# Document properties dialog box
+document_properties.title=Свойства на документа…
+document_properties_label=Свойства на документа…
+document_properties_file_name=Име на файл:
+document_properties_file_size=Големина на файл:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байта)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байта)
+document_properties_title=Заглавие:
+document_properties_author=Автор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключови думи:
+document_properties_creation_date=Дата на създаване:
+document_properties_modification_date=Дата на промяна:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Създател:
+document_properties_producer=PDF произведен от:
+document_properties_version=Издание на PDF:
+document_properties_page_count=Брой страници:
+document_properties_page_size=Размер на страницата:
+document_properties_page_size_unit_inches=инч
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=портрет
+document_properties_page_size_orientation_landscape=пейзаж
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Правни въпроси
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Бърз преглед:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Не
+document_properties_close=Затваряне
+
+print_progress_message=Подготвяне на документа за отпечатване…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Отказ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Превключване на страничната лента
+toggle_sidebar_notification.title=Превключване на страничната лента (документи със структура/прикачени файлове)
+toggle_sidebar_label=Превключване на страничната лента
+document_outline.title=Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко)
+document_outline_label=Структура на документа
+attachments.title=Показване на притурките
+attachments_label=Притурки
+thumbs.title=Показване на миниатюрите
+thumbs_label=Миниатюри
+findbar.title=Намиране в документа
+findbar_label=Търсене
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Миниатюра на страница {{page}}
+
+# Find panel button title and messages
+find_input.title=Търсене
+find_input.placeholder=Търсене в документа…
+find_previous.title=Намиране на предишно съвпадение на фразата
+find_previous_label=Предишна
+find_next.title=Намиране на следващо съвпадение на фразата
+find_next_label=Следваща
+find_highlight=Открояване на всички
+find_match_case_label=Съвпадение на регистъра
+find_entire_word_label=Цели думи
+find_reached_top=Достигнато е началото на документа, продължаване от края
+find_reached_bottom=Достигнат е краят на документа, продължаване от началото
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} от {{total}} съвпадение
+find_match_count[two]={{current}} от {{total}} съвпадения
+find_match_count[few]={{current}} от {{total}} съвпадения
+find_match_count[many]={{current}} от {{total}} съвпадения
+find_match_count[other]={{current}} от {{total}} съвпадения
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Повече от {{limit}} съвпадения
+find_match_count_limit[one]=Повече от {{limit}} съвпадение
+find_match_count_limit[two]=Повече от {{limit}} съвпадения
+find_match_count_limit[few]=Повече от {{limit}} съвпадения
+find_match_count_limit[many]=Повече от {{limit}} съвпадения
+find_match_count_limit[other]=Повече от {{limit}} съвпадения
+find_not_found=Фразата не е намерена
+
+# Error panel labels
+error_more_info=Повече информация
+error_less_info=По-малко информация
+error_close=Затваряне
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=Издание на PDF.js {{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Съобщение: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ред: {{line}}
+rendering_error=Грешка при изчертаване на страницата.
+
+# Predefined zoom values
+page_scale_width=Ширина на страницата
+page_scale_fit=Вместване в страницата
+page_scale_auto=Автоматично мащабиране
+page_scale_actual=Действителен размер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Грешка
+loading_error=Получи се грешка при зареждане на PDF-а.
+invalid_file_error=Невалиден или повреден PDF файл.
+missing_file_error=Липсващ PDF файл.
+unexpected_response_error=Неочакван отговор от сървъра.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Анотация {{type}}]
+password_label=Въведете парола за отваряне на този PDF файл.
+password_invalid=Невалидна парола. Моля, опитайте отново.
+password_ok=Добре
+password_cancel=Отказ
+
+printing_not_supported=Внимание: Този четец няма пълна поддръжка на отпечатване.
+printing_not_ready=Внимание: Този PDF файл не е напълно зареден за печат.
+web_fonts_disabled=Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове.
+document_colors_not_allowed=На документите от вид PDF не е разрешено да използват собствени цветове: „Разрешаване на страниците да избират собствени цветове“ е изключено в четеца.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bn/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bn/viewer.properties
index 52fec2c35f00e2d0a01a3470f024f13a329b5cc3..4a3ada0438c4820ca7d36fcf94e590f98742c309 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bn/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bn/viewer.properties
@@ -1,246 +1,246 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=পূর্ববর্তী পাতা
-previous_label=পূর্ববর্তী
-next.title=পরবর্তী পাতা
-next_label=পরবর্তী
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=পাতা
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} এর
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pagesCount}} এর {{pageNumber}})
-
-zoom_out.title=ছোট আকারে প্রদর্শন
-zoom_out_label=ছোট আকারে প্রদর্শন
-zoom_in.title=বড় আকারে প্রদর্শন
-zoom_in_label=বড় আকারে প্রদর্শন
-zoom.title=বড় আকারে প্রদর্শন
-presentation_mode.title=উপস্থাপনা মোডে স্যুইচ করুন
-presentation_mode_label=উপস্থাপনা মোড
-open_file.title=ফাইল খুলুন
-open_file_label=খুলুন
-print.title=মুদ্রণ
-print_label=মুদ্রণ
-download.title=ডাউনলোড
-download_label=ডাউনলোড
-bookmark.title=বর্তমান অবস্থা (অনুলিপি অথবা নতুন উইন্ডো তে খুলুন)
-bookmark_label=বর্তমান অবস্থা
-
-# Secondary toolbar and context menu
-tools.title=টুল
-tools_label=টুল
-first_page.title=প্রথম পাতায় যাও
-first_page.label=প্রথম পাতায় যাও
-first_page_label=প্রথম পাতায় যাও
-last_page.title=শেষ পাতায় যাও
-last_page.label=শেষ পাতায় যাও
-last_page_label=শেষ পাতায় যাও
-page_rotate_cw.title=ঘড়ির কাঁটার দিকে ঘোরাও
-page_rotate_cw.label=ঘড়ির কাঁটার দিকে ঘোরাও
-page_rotate_cw_label=ঘড়ির কাঁটার দিকে ঘোরাও
-page_rotate_ccw.title=ঘড়ির কাঁটার বিপরীতে ঘোরাও
-page_rotate_ccw.label=ঘড়ির কাঁটার বিপরীতে ঘোরাও
-page_rotate_ccw_label=ঘড়ির কাঁটার বিপরীতে ঘোরাও
-
-cursor_text_select_tool.title=লেখা নির্বাচক টুল সক্রিয় করুন
-cursor_text_select_tool_label=লেখা নির্বাচক টুল
-cursor_hand_tool.title=হ্যান্ড টুল সক্রিয় করুন
-cursor_hand_tool_label=হ্যান্ড টুল
-
-scroll_vertical.title=উলম্ব স্ক্রলিং ব্যবহার করুন
-scroll_vertical_label=উলম্ব স্ক্রলিং
-scroll_horizontal.title=অনুভূমিক স্ক্রলিং ব্যবহার করুন
-scroll_horizontal_label=অনুভূমিক স্ক্রলিং
-scroll_wrapped.title=Wrapped স্ক্রোলিং ব্যবহার করুন
-scroll_wrapped_label=Wrapped স্ক্রোলিং
-
-spread_none.title=পেজ স্প্রেডগুলোতে যোগদান করবেন না
-spread_none_label=Spreads নেই
-spread_odd_label=বিজোড় Spreads
-spread_even_label=জোড় Spreads
-
-# Document properties dialog box
-document_properties.title=নথি বৈশিষ্ট্য…
-document_properties_label=নথি বৈশিষ্ট্য…
-document_properties_file_name=ফাইলের নাম:
-document_properties_file_size=ফাইলের আকার:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} এমবি ({{size_b}} বাইট)
-document_properties_title=শিরোনাম:
-document_properties_author=লেখক:
-document_properties_subject=বিষয়:
-document_properties_keywords=কীওয়ার্ড:
-document_properties_creation_date=তৈরির তারিখ:
-document_properties_modification_date=পরিবর্তনের তারিখ:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=প্রস্তুতকারক:
-document_properties_producer=পিডিএফ প্রস্তুতকারক:
-document_properties_version=পিডিএফ সংষ্করণ:
-document_properties_page_count=মোট পাতা:
-document_properties_page_size=পাতার সাইজ:
-document_properties_page_size_unit_inches=এর মধ্যে
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=উলম্ব
-document_properties_page_size_orientation_landscape=অনুভূমিক
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=লেটার
-document_properties_page_size_name_legal=লীগাল
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=হ্যাঁ
-document_properties_linearized_no=না
-document_properties_close=বন্ধ
-
-print_progress_message=মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=বাতিল
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=সাইডবার টগল করুন
-toggle_sidebar_notification.title=সাইডবার টগল (নথিতে আউটলাইন/এটাচমেন্ট রয়েছে)
-toggle_sidebar_label=সাইডবার টগল করুন
-document_outline.title=নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন)
-document_outline_label=নথির রূপরেখা
-attachments.title=সংযুক্তি দেখাও
-attachments_label=সংযুক্তি
-thumbs.title=থাম্বনেইল সমূহ প্রদর্শন করুন
-thumbs_label=থাম্বনেইল সমূহ
-findbar.title=নথির মধ্যে খুঁজুন
-findbar_label=খুঁজুন
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=পাতা {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=পাতা {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} পাতার থাম্বনেইল
-
-# Find panel button title and messages
-find_input.title=খুঁজুন
-find_input.placeholder=নথির মধ্যে খুঁজুন…
-find_previous.title=বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান
-find_previous_label=পূর্ববর্তী
-find_next.title=বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান
-find_next_label=পরবর্তী
-find_highlight=সব হাইলাইট করা হবে
-find_match_case_label=অক্ষরের ছাঁদ মেলানো
-find_entire_word_label=সম্পূর্ণ শব্দ
-find_reached_top=পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে
-find_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} এর {{current}} মিল
-find_match_count[two]={{total}} এর {{current}} মিল
-find_match_count[few]={{total}} এর {{current}} মিল
-find_match_count[many]={{total}} এর {{current}} মিল
-find_match_count[other]={{total}} এর {{current}} মিল
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} এর বেশি মিল
-find_match_count_limit[one]={{limit}} এর বেশি মিল
-find_match_count_limit[two]={{limit}} এর বেশি মিল
-find_match_count_limit[few]={{limit}} এর বেশি মিল
-find_match_count_limit[many]={{limit}} এর বেশি মিল
-find_match_count_limit[other]={{limit}} এর বেশি মিল
-find_not_found=বাক্যাংশ পাওয়া যায়নি
-
-# Error panel labels
-error_more_info=আরও তথ্য
-error_less_info=কম তথ্য
-error_close=বন্ধ
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=বার্তা: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=নথি: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=লাইন: {{line}}
-rendering_error=পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে।
-
-# Predefined zoom values
-page_scale_width=পাতার প্রস্থ
-page_scale_fit=পাতা ফিট করুন
-page_scale_auto=স্বয়ংক্রিয় জুম
-page_scale_actual=প্রকৃত আকার
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=ত্রুটি
-loading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে।
-invalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল।
-missing_file_error=নিখোঁজ PDF ফাইল।
-unexpected_response_error=অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া।
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} টীকা]
-password_label=পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন।
-password_invalid=ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন।
-password_ok=ঠিক আছে
-password_cancel=বাতিল
-
-printing_not_supported=সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়।
-printing_not_ready=সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি।
-web_fonts_disabled=ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না।
-document_colors_not_allowed=পিডিএফ ডকুমেন্টকে তাদের নিজস্ব রঙ ব্যবহারে অনুমতি নেই: 'পাতা তাদের নিজেস্ব রঙ নির্বাচন করতে অনুমতি দিন' এই ব্রাউজারে নিষ্ক্রিয় রয়েছে।
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=পূর্ববর্তী পাতা
+previous_label=পূর্ববর্তী
+next.title=পরবর্তী পাতা
+next_label=পরবর্তী
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=পাতা
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} এর
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} এর {{pageNumber}})
+
+zoom_out.title=ছোট আকারে প্রদর্শন
+zoom_out_label=ছোট আকারে প্রদর্শন
+zoom_in.title=বড় আকারে প্রদর্শন
+zoom_in_label=বড় আকারে প্রদর্শন
+zoom.title=বড় আকারে প্রদর্শন
+presentation_mode.title=উপস্থাপনা মোডে স্যুইচ করুন
+presentation_mode_label=উপস্থাপনা মোড
+open_file.title=ফাইল খুলুন
+open_file_label=খুলুন
+print.title=মুদ্রণ
+print_label=মুদ্রণ
+download.title=ডাউনলোড
+download_label=ডাউনলোড
+bookmark.title=বর্তমান অবস্থা (অনুলিপি অথবা নতুন উইন্ডো তে খুলুন)
+bookmark_label=বর্তমান অবস্থা
+
+# Secondary toolbar and context menu
+tools.title=টুল
+tools_label=টুল
+first_page.title=প্রথম পাতায় যাও
+first_page.label=প্রথম পাতায় যাও
+first_page_label=প্রথম পাতায় যাও
+last_page.title=শেষ পাতায় যাও
+last_page.label=শেষ পাতায় যাও
+last_page_label=শেষ পাতায় যাও
+page_rotate_cw.title=ঘড়ির কাঁটার দিকে ঘোরাও
+page_rotate_cw.label=ঘড়ির কাঁটার দিকে ঘোরাও
+page_rotate_cw_label=ঘড়ির কাঁটার দিকে ঘোরাও
+page_rotate_ccw.title=ঘড়ির কাঁটার বিপরীতে ঘোরাও
+page_rotate_ccw.label=ঘড়ির কাঁটার বিপরীতে ঘোরাও
+page_rotate_ccw_label=ঘড়ির কাঁটার বিপরীতে ঘোরাও
+
+cursor_text_select_tool.title=লেখা নির্বাচক টুল সক্রিয় করুন
+cursor_text_select_tool_label=লেখা নির্বাচক টুল
+cursor_hand_tool.title=হ্যান্ড টুল সক্রিয় করুন
+cursor_hand_tool_label=হ্যান্ড টুল
+
+scroll_vertical.title=উলম্ব স্ক্রলিং ব্যবহার করুন
+scroll_vertical_label=উলম্ব স্ক্রলিং
+scroll_horizontal.title=অনুভূমিক স্ক্রলিং ব্যবহার করুন
+scroll_horizontal_label=অনুভূমিক স্ক্রলিং
+scroll_wrapped.title=Wrapped স্ক্রোলিং ব্যবহার করুন
+scroll_wrapped_label=Wrapped স্ক্রোলিং
+
+spread_none.title=পেজ স্প্রেডগুলোতে যোগদান করবেন না
+spread_none_label=Spreads নেই
+spread_odd_label=বিজোড় Spreads
+spread_even_label=জোড় Spreads
+
+# Document properties dialog box
+document_properties.title=নথি বৈশিষ্ট্য…
+document_properties_label=নথি বৈশিষ্ট্য…
+document_properties_file_name=ফাইলের নাম:
+document_properties_file_size=ফাইলের আকার:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} এমবি ({{size_b}} বাইট)
+document_properties_title=শিরোনাম:
+document_properties_author=লেখক:
+document_properties_subject=বিষয়:
+document_properties_keywords=কীওয়ার্ড:
+document_properties_creation_date=তৈরির তারিখ:
+document_properties_modification_date=পরিবর্তনের তারিখ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=প্রস্তুতকারক:
+document_properties_producer=পিডিএফ প্রস্তুতকারক:
+document_properties_version=পিডিএফ সংষ্করণ:
+document_properties_page_count=মোট পাতা:
+document_properties_page_size=পাতার সাইজ:
+document_properties_page_size_unit_inches=এর মধ্যে
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=উলম্ব
+document_properties_page_size_orientation_landscape=অনুভূমিক
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=লেটার
+document_properties_page_size_name_legal=লীগাল
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=হ্যাঁ
+document_properties_linearized_no=না
+document_properties_close=বন্ধ
+
+print_progress_message=মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=বাতিল
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=সাইডবার টগল করুন
+toggle_sidebar_notification.title=সাইডবার টগল (নথিতে আউটলাইন/এটাচমেন্ট রয়েছে)
+toggle_sidebar_label=সাইডবার টগল করুন
+document_outline.title=নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন)
+document_outline_label=নথির রূপরেখা
+attachments.title=সংযুক্তি দেখাও
+attachments_label=সংযুক্তি
+thumbs.title=থাম্বনেইল সমূহ প্রদর্শন করুন
+thumbs_label=থাম্বনেইল সমূহ
+findbar.title=নথির মধ্যে খুঁজুন
+findbar_label=খুঁজুন
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=পাতা {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=পাতা {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} পাতার থাম্বনেইল
+
+# Find panel button title and messages
+find_input.title=খুঁজুন
+find_input.placeholder=নথির মধ্যে খুঁজুন…
+find_previous.title=বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান
+find_previous_label=পূর্ববর্তী
+find_next.title=বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান
+find_next_label=পরবর্তী
+find_highlight=সব হাইলাইট করা হবে
+find_match_case_label=অক্ষরের ছাঁদ মেলানো
+find_entire_word_label=সম্পূর্ণ শব্দ
+find_reached_top=পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে
+find_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} এর {{current}} মিল
+find_match_count[two]={{total}} এর {{current}} মিল
+find_match_count[few]={{total}} এর {{current}} মিল
+find_match_count[many]={{total}} এর {{current}} মিল
+find_match_count[other]={{total}} এর {{current}} মিল
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} এর বেশি মিল
+find_match_count_limit[one]={{limit}} এর বেশি মিল
+find_match_count_limit[two]={{limit}} এর বেশি মিল
+find_match_count_limit[few]={{limit}} এর বেশি মিল
+find_match_count_limit[many]={{limit}} এর বেশি মিল
+find_match_count_limit[other]={{limit}} এর বেশি মিল
+find_not_found=বাক্যাংশ পাওয়া যায়নি
+
+# Error panel labels
+error_more_info=আরও তথ্য
+error_less_info=কম তথ্য
+error_close=বন্ধ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=বার্তা: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=নথি: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=লাইন: {{line}}
+rendering_error=পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে।
+
+# Predefined zoom values
+page_scale_width=পাতার প্রস্থ
+page_scale_fit=পাতা ফিট করুন
+page_scale_auto=স্বয়ংক্রিয় জুম
+page_scale_actual=প্রকৃত আকার
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ত্রুটি
+loading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে।
+invalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল।
+missing_file_error=নিখোঁজ PDF ফাইল।
+unexpected_response_error=অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} টীকা]
+password_label=পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন।
+password_invalid=ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন।
+password_ok=ঠিক আছে
+password_cancel=বাতিল
+
+printing_not_supported=সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়।
+printing_not_ready=সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি।
+web_fonts_disabled=ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না।
+document_colors_not_allowed=পিডিএফ ডকুমেন্টকে তাদের নিজস্ব রঙ ব্যবহারে অনুমতি নেই: 'পাতা তাদের নিজেস্ব রঙ নির্বাচন করতে অনুমতি দিন' এই ব্রাউজারে নিষ্ক্রিয় রয়েছে।
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bo/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bo/viewer.properties
index d35c453ddb774059f59be621e8b4bf21f613765a..99249137682d707b86a4f94881296d3f58e9bafe 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bo/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bo/viewer.properties
@@ -1,245 +1,245 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=དྲ་ངོས་སྔོན་མ
-previous_label=སྔོན་མ
-next.title=དྲ་ངོས་རྗེས་མ
-next_label=རྗེས་མ
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=ཤོག་ངོས
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=of {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=Zoom Out
-zoom_out_label=Zoom Out
-zoom_in.title=Zoom In
-zoom_in_label=Zoom In
-zoom.title=Zoom
-presentation_mode.title=Switch to Presentation Mode
-presentation_mode_label=Presentation Mode
-open_file.title=Open File
-open_file_label=Open
-print.title=Print
-print_label=Print
-download.title=Download
-download_label=Download
-bookmark.title=Current view (copy or open in new window)
-bookmark_label=Current View
-
-# Secondary toolbar and context menu
-tools.title=Tools
-tools_label=Tools
-first_page.title=Go to First Page
-first_page.label=Go to First Page
-first_page_label=Go to First Page
-last_page.title=Go to Last Page
-last_page.label=Go to Last Page
-last_page_label=Go to Last Page
-page_rotate_cw.title=Rotate Clockwise
-page_rotate_cw.label=Rotate Clockwise
-page_rotate_cw_label=Rotate Clockwise
-page_rotate_ccw.title=Rotate Counterclockwise
-page_rotate_ccw.label=Rotate Counterclockwise
-page_rotate_ccw_label=Rotate Counterclockwise
-
-cursor_text_select_tool.title=Enable Text Selection Tool
-cursor_text_select_tool_label=Text Selection Tool
-cursor_hand_tool.title=Enable Hand Tool
-cursor_hand_tool_label=Hand Tool
-
-scroll_vertical.title=Use Vertical Scrolling
-scroll_vertical_label=Vertical Scrolling
-scroll_horizontal.title=Use Horizontal Scrolling
-scroll_horizontal_label=Horizontal Scrolling
-scroll_wrapped.title=Use Wrapped Scrolling
-scroll_wrapped_label=Wrapped Scrolling
-
-spread_none.title=Do not join page spreads
-spread_none_label=No Spreads
-spread_odd.title=Join page spreads starting with odd-numbered pages
-spread_odd_label=Odd Spreads
-spread_even.title=Join page spreads starting with even-numbered pages
-spread_even_label=Even Spreads
-
-# Document properties dialog box
-document_properties.title=Document Properties…
-document_properties_label=Document Properties…
-document_properties_file_name=File name:
-document_properties_file_size=File size:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Title:
-document_properties_author=Author:
-document_properties_subject=Subject:
-document_properties_keywords=Keywords:
-document_properties_creation_date=Creation Date:
-document_properties_modification_date=Modification Date:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator:
-document_properties_producer=PDF Producer:
-document_properties_version=PDF Version:
-document_properties_page_count=Page Count:
-document_properties_page_size=Page Size:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portrait
-document_properties_page_size_orientation_landscape=landscape
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Yes
-document_properties_linearized_no=No
-document_properties_close=Close
-
-print_progress_message=Preparing document for printing…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancel
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toggle Sidebar
-toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
-toggle_sidebar_label=Toggle Sidebar
-document_outline.title=Show Document Outline (double-click to expand/collapse all items)
-document_outline_label=Document Outline
-attachments.title=Show Attachments
-attachments_label=Attachments
-thumbs.title=Show Thumbnails
-thumbs_label=Thumbnails
-findbar.title=Find in Document
-findbar_label=Find
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Page {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Thumbnail of Page {{page}}
-
-# Find panel button title and messages
-find_input.title=Find
-find_input.placeholder=Find in document…
-find_previous.title=Find the previous occurrence of the phrase
-find_previous_label=Previous
-find_next.title=Find the next occurrence of the phrase
-find_next_label=Next
-find_highlight=Highlight all
-find_match_case_label=Match case
-find_entire_word_label=Whole words
-find_reached_top=Reached top of document, continued from bottom
-find_reached_bottom=Reached end of document, continued from top
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} of {{total}} match
-find_match_count[two]={{current}} of {{total}} matches
-find_match_count[few]={{current}} of {{total}} matches
-find_match_count[many]={{current}} of {{total}} matches
-find_match_count[other]={{current}} of {{total}} matches
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=More than {{limit}} matches
-find_match_count_limit[one]=More than {{limit}} match
-find_match_count_limit[two]=More than {{limit}} matches
-find_match_count_limit[few]=More than {{limit}} matches
-find_match_count_limit[many]=More than {{limit}} matches
-find_match_count_limit[other]=More than {{limit}} matches
-find_not_found=Phrase not found
-
-# Error panel labels
-error_more_info=More Information
-error_less_info=Less Information
-error_close=Close
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Line: {{line}}
-rendering_error=An error occurred while rendering the page.
-
-# Predefined zoom values
-page_scale_width=Page Width
-page_scale_fit=Page Fit
-page_scale_auto=Automatic Zoom
-page_scale_actual=Actual Size
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=An error occurred while loading the PDF.
-invalid_file_error=Invalid or corrupted PDF file.
-missing_file_error=Missing PDF file.
-unexpected_response_error=Unexpected server response.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Enter the password to open this PDF file.
-password_invalid=Invalid password. Please try again.
-password_ok=OK
-password_cancel=Cancel
-
-printing_not_supported=Warning: Printing is not fully supported by this browser.
-printing_not_ready=Warning: The PDF is not fully loaded for printing.
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
-document_colors_not_allowed=PDF documents are not allowed to use their own colors: “Allow pages to choose their own colors” is deactivated in the browser.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=དྲ་ངོས་སྔོན་མ
+previous_label=སྔོན་མ
+next.title=དྲ་ངོས་རྗེས་མ
+next_label=རྗེས་མ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ཤོག་ངོས
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw.label=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Find
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
+document_colors_not_allowed=PDF documents are not allowed to use their own colors: “Allow pages to choose their own colors” is deactivated in the browser.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/br/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/br/viewer.properties
index 14c2a5e4f67cd4c26203e43f4a5239ff342109e4..44e75dd2bbc273b21dcde05da0cb3075282e18a3 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/br/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/br/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pajenn a-raok
-previous_label=A-raok
-next.title=Pajenn war-lerc'h
-next_label=War-lerc'h
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pajenn
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=eus {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} war {{pagesCount}})
-
-zoom_out.title=Zoum bihanaat
-zoom_out_label=Zoum bihanaat
-zoom_in.title=Zoum brasaat
-zoom_in_label=Zoum brasaat
-zoom.title=Zoum
-presentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn
-presentation_mode_label=Mod kinnigadenn
-open_file.title=Digeriñ ur restr
-open_file_label=Digeriñ ur restr
-print.title=Moullañ
-print_label=Moullañ
-download.title=Pellgargañ
-download_label=Pellgargañ
-bookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez)
-bookmark_label=Gwel bremanel
-
-# Secondary toolbar and context menu
-tools.title=Ostilhoù
-tools_label=Ostilhoù
-first_page.title=Mont d'ar bajenn gentañ
-first_page.label=Mont d'ar bajenn gentañ
-first_page_label=Mont d'ar bajenn gentañ
-last_page.title=Mont d'ar bajenn diwezhañ
-last_page.label=Mont d'ar bajenn diwezhañ
-last_page_label=Mont d'ar bajenn diwezhañ
-page_rotate_cw.title=C'hwelañ gant roud ar bizied
-page_rotate_cw.label=C'hwelañ gant roud ar bizied
-page_rotate_cw_label=C'hwelañ gant roud ar bizied
-page_rotate_ccw.title=C'hwelañ gant roud gin ar bizied
-page_rotate_ccw.label=C'hwelañ gant roud gin ar bizied
-page_rotate_ccw_label=C'hwelañ gant roud gin ar bizied
-
-cursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn
-cursor_text_select_tool_label=Ostilh diuzañ testenn
-cursor_hand_tool.title=Gweredekaat an ostilh dorn
-cursor_hand_tool_label=Ostilh dorn
-
-scroll_vertical.title=Arverañ an dibunañ a-blom
-scroll_vertical_label=Dibunañ a-serzh
-scroll_horizontal.title=Arverañ an dibunañ a-blaen
-scroll_horizontal_label=Dibunañ a-blaen
-scroll_wrapped.title=Arverañ an dibunañ paket
-scroll_wrapped_label=Dibunañ paket
-
-spread_none.title=Chom hep stagañ ar skignadurioù
-spread_none_label=Skignadenn ebet
-spread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar
-spread_odd_label=Pajennoù ampar
-spread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par
-spread_even_label=Pajennoù par
-
-# Document properties dialog box
-document_properties.title=Perzhioù an teul…
-document_properties_label=Perzhioù an teul…
-document_properties_file_name=Anv restr :
-document_properties_file_size=Ment ar restr :
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit)
-document_properties_title=Titl :
-document_properties_author=Aozer :
-document_properties_subject=Danvez :
-document_properties_keywords=Gerioù-alc'hwez :
-document_properties_creation_date=Deiziad krouiñ :
-document_properties_modification_date=Deiziad kemmañ :
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Krouer :
-document_properties_producer=Kenderc'her PDF :
-document_properties_version=Handelv PDF :
-document_properties_page_count=Niver a bajennoù :
-document_properties_page_size=Ment ar bajenn:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=poltred
-document_properties_page_size_orientation_landscape=gweledva
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Lizher
-document_properties_page_size_name_legal=Lezennel
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Gwel Web Herrek:
-document_properties_linearized_yes=Ya
-document_properties_linearized_no=Ket
-document_properties_close=Serriñ
-
-print_progress_message=O prientiñ an teul evit moullañ...
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Nullañ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez
-toggle_sidebar_notification.title=Trec'haoliñ ar verrenn-gostez (ur steuñv pe stagadennoù a zo en teul)
-toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez
-document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)
-document_outline_label=Sinedoù an teuliad
-attachments.title=Diskouez ar c'henstagadurioù
-attachments_label=Kenstagadurioù
-thumbs.title=Diskouez ar melvennoù
-thumbs_label=Melvennoù
-findbar.title=Klask e-barzh an teuliad
-findbar_label=Klask
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pajenn {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pajenn {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Melvenn ar bajenn {{page}}
-
-# Find panel button title and messages
-find_input.title=Klask
-find_input.placeholder=Klask e-barzh an teuliad
-find_previous.title=Kavout an tamm frazenn kent o klotañ ganti
-find_previous_label=Kent
-find_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti
-find_next_label=War-lerc'h
-find_highlight=Usskediñ pep tra
-find_match_case_label=Teurel evezh ouzh ar pennlizherennoù
-find_entire_word_label=Gerioù a-bezh
-find_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz
-find_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=Klotadenn {{current}} war {{total}}
-find_match_count[two]=Klotadenn {{current}} war {{total}}
-find_match_count[few]=Klotadenn {{current}} war {{total}}
-find_match_count[many]=Klotadenn {{current}} war {{total}}
-find_match_count[other]=Klotadenn {{current}} war {{total}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù
-find_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù
-find_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù
-find_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù
-find_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù
-find_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù
-find_not_found=N'haller ket kavout ar frazenn
-
-# Error panel labels
-error_more_info=Muioc'h a ditouroù
-error_less_info=Nebeutoc'h a ditouroù
-error_close=Serriñ
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js handelv {{version}} (kempunadur : {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Kemennadenn : {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Torn : {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Restr : {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linenn : {{line}}
-rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.
-
-# Predefined zoom values
-page_scale_width=Led ar bajenn
-page_scale_fit=Pajenn a-bezh
-page_scale_auto=Zoum emgefreek
-page_scale_actual=Ment wir
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Fazi
-loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.
-invalid_file_error=Restr PDF didalvoudek pe kontronet.
-missing_file_error=Restr PDF o vankout.
-unexpected_response_error=Respont dic'hortoz a-berzh an dafariad
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Notennañ]
-password_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ.
-password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij.
-password_ok=Mat eo
-password_cancel=Nullañ
-
-printing_not_supported=Kemenn : N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.
-printing_not_ready=Kemenn : N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.
-web_fonts_disabled=Diweredekaet eo an nodrezhoù web : n'haller ket arverañ an nodrezhoù PDF enframmet.
-document_colors_not_allowed=N'eo ket aotreet an teuliadoù PDF da arverañ o livioù dezho : diweredekaet eo “Aotren ar pajennoù da zibab o livioù dezho” e-barzh ar merdeer.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pajenn a-raok
+previous_label=A-raok
+next.title=Pajenn war-lerc'h
+next_label=War-lerc'h
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pajenn
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=eus {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} war {{pagesCount}})
+
+zoom_out.title=Zoum bihanaat
+zoom_out_label=Zoum bihanaat
+zoom_in.title=Zoum brasaat
+zoom_in_label=Zoum brasaat
+zoom.title=Zoum
+presentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn
+presentation_mode_label=Mod kinnigadenn
+open_file.title=Digeriñ ur restr
+open_file_label=Digeriñ ur restr
+print.title=Moullañ
+print_label=Moullañ
+download.title=Pellgargañ
+download_label=Pellgargañ
+bookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez)
+bookmark_label=Gwel bremanel
+
+# Secondary toolbar and context menu
+tools.title=Ostilhoù
+tools_label=Ostilhoù
+first_page.title=Mont d'ar bajenn gentañ
+first_page.label=Mont d'ar bajenn gentañ
+first_page_label=Mont d'ar bajenn gentañ
+last_page.title=Mont d'ar bajenn diwezhañ
+last_page.label=Mont d'ar bajenn diwezhañ
+last_page_label=Mont d'ar bajenn diwezhañ
+page_rotate_cw.title=C'hwelañ gant roud ar bizied
+page_rotate_cw.label=C'hwelañ gant roud ar bizied
+page_rotate_cw_label=C'hwelañ gant roud ar bizied
+page_rotate_ccw.title=C'hwelañ gant roud gin ar bizied
+page_rotate_ccw.label=C'hwelañ gant roud gin ar bizied
+page_rotate_ccw_label=C'hwelañ gant roud gin ar bizied
+
+cursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn
+cursor_text_select_tool_label=Ostilh diuzañ testenn
+cursor_hand_tool.title=Gweredekaat an ostilh dorn
+cursor_hand_tool_label=Ostilh dorn
+
+scroll_vertical.title=Arverañ an dibunañ a-blom
+scroll_vertical_label=Dibunañ a-serzh
+scroll_horizontal.title=Arverañ an dibunañ a-blaen
+scroll_horizontal_label=Dibunañ a-blaen
+scroll_wrapped.title=Arverañ an dibunañ paket
+scroll_wrapped_label=Dibunañ paket
+
+spread_none.title=Chom hep stagañ ar skignadurioù
+spread_none_label=Skignadenn ebet
+spread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar
+spread_odd_label=Pajennoù ampar
+spread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par
+spread_even_label=Pajennoù par
+
+# Document properties dialog box
+document_properties.title=Perzhioù an teul…
+document_properties_label=Perzhioù an teul…
+document_properties_file_name=Anv restr :
+document_properties_file_size=Ment ar restr :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit)
+document_properties_title=Titl :
+document_properties_author=Aozer :
+document_properties_subject=Danvez :
+document_properties_keywords=Gerioù-alc'hwez :
+document_properties_creation_date=Deiziad krouiñ :
+document_properties_modification_date=Deiziad kemmañ :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Krouer :
+document_properties_producer=Kenderc'her PDF :
+document_properties_version=Handelv PDF :
+document_properties_page_count=Niver a bajennoù :
+document_properties_page_size=Ment ar bajenn:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=poltred
+document_properties_page_size_orientation_landscape=gweledva
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Lizher
+document_properties_page_size_name_legal=Lezennel
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gwel Web Herrek:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Ket
+document_properties_close=Serriñ
+
+print_progress_message=O prientiñ an teul evit moullañ...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nullañ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez
+toggle_sidebar_notification.title=Trec'haoliñ ar verrenn-gostez (ur steuñv pe stagadennoù a zo en teul)
+toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez
+document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)
+document_outline_label=Sinedoù an teuliad
+attachments.title=Diskouez ar c'henstagadurioù
+attachments_label=Kenstagadurioù
+thumbs.title=Diskouez ar melvennoù
+thumbs_label=Melvennoù
+findbar.title=Klask e-barzh an teuliad
+findbar_label=Klask
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pajenn {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pajenn {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Melvenn ar bajenn {{page}}
+
+# Find panel button title and messages
+find_input.title=Klask
+find_input.placeholder=Klask e-barzh an teuliad
+find_previous.title=Kavout an tamm frazenn kent o klotañ ganti
+find_previous_label=Kent
+find_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti
+find_next_label=War-lerc'h
+find_highlight=Usskediñ pep tra
+find_match_case_label=Teurel evezh ouzh ar pennlizherennoù
+find_entire_word_label=Gerioù a-bezh
+find_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz
+find_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Klotadenn {{current}} war {{total}}
+find_match_count[two]=Klotadenn {{current}} war {{total}}
+find_match_count[few]=Klotadenn {{current}} war {{total}}
+find_match_count[many]=Klotadenn {{current}} war {{total}}
+find_match_count[other]=Klotadenn {{current}} war {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù
+find_not_found=N'haller ket kavout ar frazenn
+
+# Error panel labels
+error_more_info=Muioc'h a ditouroù
+error_less_info=Nebeutoc'h a ditouroù
+error_close=Serriñ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js handelv {{version}} (kempunadur : {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Kemennadenn : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Torn : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Restr : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linenn : {{line}}
+rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.
+
+# Predefined zoom values
+page_scale_width=Led ar bajenn
+page_scale_fit=Pajenn a-bezh
+page_scale_auto=Zoum emgefreek
+page_scale_actual=Ment wir
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fazi
+loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.
+invalid_file_error=Restr PDF didalvoudek pe kontronet.
+missing_file_error=Restr PDF o vankout.
+unexpected_response_error=Respont dic'hortoz a-berzh an dafariad
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Notennañ]
+password_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ.
+password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij.
+password_ok=Mat eo
+password_cancel=Nullañ
+
+printing_not_supported=Kemenn : N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.
+printing_not_ready=Kemenn : N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.
+web_fonts_disabled=Diweredekaet eo an nodrezhoù web : n'haller ket arverañ an nodrezhoù PDF enframmet.
+document_colors_not_allowed=N'eo ket aotreet an teuliadoù PDF da arverañ o livioù dezho : diweredekaet eo “Aotren ar pajennoù da zibab o livioù dezho” e-barzh ar merdeer.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/brx/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/brx/viewer.properties
index 234bca1fe95794c37adf51e6eb89041953495665..16311cfb2e1f35c9e998a9c8bdb81fb4ba871c7c 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/brx/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/brx/viewer.properties
@@ -1,211 +1,211 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=आगोलनि बिलाइ
-previous_label=आगोलनि
-next.title=उननि बिलाइ
-next_label=उननि
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=बिलाइ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} नि
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pagesCount}} नि {{pageNumber}})
-
-zoom_out.title=फिसायै जुम खालाम
-zoom_out_label=फिसायै जुम खालाम
-zoom_in.title=गेदेरै जुम खालाम
-zoom_in_label=गेदेरै जुम खालाम
-zoom.title=जुम खालाम
-presentation_mode.title=दिन्थिफुंनाय म'डआव थां
-presentation_mode_label=दिन्थिफुंनाय म'ड
-open_file.title=फाइलखौ खेव
-open_file_label=खेव
-print.title=साफाय
-print_label=साफाय
-download.title=डाउनल'ड खालाम
-download_label=डाउनल'ड खालाम
-bookmark.title=दानि नुथाय (गोदान उइन्ड'आव कपि खालाम एबा खेव)
-bookmark_label=दानि नुथाय
-
-# Secondary toolbar and context menu
-tools.title=टुल
-tools_label=टुल
-first_page.title=गिबि बिलाइआव थां
-first_page.label=गिबि बिलाइआव थां
-first_page_label=गिबि बिलाइआव थां
-last_page.title=जोबथा बिलाइआव थां
-last_page.label=जोबथा बिलाइआव थां
-last_page_label=जोबथा बिलाइआव थां
-page_rotate_cw.title=घरि गिदिंनाय फार्से फिदिं
-page_rotate_cw.label=घरि गिदिंनाय फार्से फिदिं
-page_rotate_cw_label=घरि गिदिंनाय फार्से फिदिं
-page_rotate_ccw.title=घरि गिदिंनाय उल्था फार्से फिदिं
-page_rotate_ccw.label=घरि गिदिंनाय उल्था फार्से फिदिं
-page_rotate_ccw_label=घरि गिदिंनाय उल्था फार्से फिदिं
-
-
-
-
-# Document properties dialog box
-document_properties.title=फोरमान बिलाइनि आखुथाय...
-document_properties_label=फोरमान बिलाइनि आखुथाय...
-document_properties_file_name=फाइलनि मुं:
-document_properties_file_size=फाइलनि महर:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} बाइट)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} बाइट)
-document_properties_title=बिमुं:
-document_properties_author=लिरगिरि:
-document_properties_subject=आयदा:
-document_properties_keywords=गाहाय सोदोब:
-document_properties_creation_date=सोरजिनाय अक्ट':
-document_properties_modification_date=सुद्रायनाय अक्ट':
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=सोरजिग्रा:
-document_properties_producer=PDF दिहुनग्रा:
-document_properties_version=PDF बिसान:
-document_properties_page_count=बिलाइनि हिसाब:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=प'र्ट्रेट
-document_properties_page_size_orientation_landscape=लेण्डस्केप
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=लायजाम
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=नंगौ
-document_properties_linearized_no=नङा
-document_properties_close=बन्द खालाम
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=नेवसि
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=टग्गल साइडबार
-toggle_sidebar_label=टग्गल साइडबार
-document_outline_label=फोरमान बिलाइ सिमा हांखो
-attachments.title=नांजाब होनायखौ दिन्थि
-attachments_label=नांजाब होनाय
-thumbs.title=थामनेइलखौ दिन्थि
-thumbs_label=थामनेइल
-findbar.title=फोरमान बिलाइआव नागिरना दिहुन
-findbar_label=नायगिरना दिहुन
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=बिलाइ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=बिलाइ {{page}} नि थामनेइल
-
-# Find panel button title and messages
-find_input.title=नायगिरना दिहुन
-find_input.placeholder=फोरमान बिलाइआव नागिरना दिहुन...
-find_previous.title=बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर
-find_previous_label=आगोलनि
-find_next.title=बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर
-find_next_label=उननि
-find_highlight=गासैखौबो हाइलाइट खालाम
-find_match_case_label=गोरोबनाय केस
-find_reached_top=थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
-find_reached_bottom=बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_not_found=बाथ्रा खोन्दोब मोनाखै
-
-# Error panel labels
-error_more_info=गोबां फोरमायथिहोग्रा
-error_less_info=खम फोरमायथिहोग्रा
-error_close=बन्द खालाम
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=खौरां: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=स्टेक: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=फाइल: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=सारि: {{line}}
-rendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों।
-
-# Predefined zoom values
-page_scale_width=बिलाइनि गुवार
-page_scale_fit=बिलाइ गोरोबनाय
-page_scale_auto=गावनोगाव जुम
-page_scale_actual=थार महर
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=गोरोन्थि
-loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय।
-invalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल
-missing_file_error=गोमानाय PDF फाइल
-unexpected_response_error=मिजिंथियै सार्भार फिननाय।
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} सोदोब बेखेवनाय]
-password_label=बे PDF फाइलखौ खेवनो पासवार्ड हाबहो।
-password_invalid=बाहायजायै पासवार्ड। अननानै फिन नाजा।
-password_ok=OK
-password_cancel=नेवसि
-
-printing_not_supported=सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया।
-printing_not_ready=सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै।
-web_fonts_disabled=वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै।
-document_colors_not_allowed=PDF फोरमान बिलाइखौ बिसोरनि निजि गाब बाहायनो गनायथि होनाय जाया: 'बिसोरनि निजि गाब बासिखनो बिलाइखौ गनायथि हो'-खौ ब्राउजारआव लोरबां खालामनाय जायो।
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=आगोलनि बिलाइ
+previous_label=आगोलनि
+next.title=उननि बिलाइ
+next_label=उननि
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=बिलाइ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} नि
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} नि {{pageNumber}})
+
+zoom_out.title=फिसायै जुम खालाम
+zoom_out_label=फिसायै जुम खालाम
+zoom_in.title=गेदेरै जुम खालाम
+zoom_in_label=गेदेरै जुम खालाम
+zoom.title=जुम खालाम
+presentation_mode.title=दिन्थिफुंनाय म'डआव थां
+presentation_mode_label=दिन्थिफुंनाय म'ड
+open_file.title=फाइलखौ खेव
+open_file_label=खेव
+print.title=साफाय
+print_label=साफाय
+download.title=डाउनल'ड खालाम
+download_label=डाउनल'ड खालाम
+bookmark.title=दानि नुथाय (गोदान उइन्ड'आव कपि खालाम एबा खेव)
+bookmark_label=दानि नुथाय
+
+# Secondary toolbar and context menu
+tools.title=टुल
+tools_label=टुल
+first_page.title=गिबि बिलाइआव थां
+first_page.label=गिबि बिलाइआव थां
+first_page_label=गिबि बिलाइआव थां
+last_page.title=जोबथा बिलाइआव थां
+last_page.label=जोबथा बिलाइआव थां
+last_page_label=जोबथा बिलाइआव थां
+page_rotate_cw.title=घरि गिदिंनाय फार्से फिदिं
+page_rotate_cw.label=घरि गिदिंनाय फार्से फिदिं
+page_rotate_cw_label=घरि गिदिंनाय फार्से फिदिं
+page_rotate_ccw.title=घरि गिदिंनाय उल्था फार्से फिदिं
+page_rotate_ccw.label=घरि गिदिंनाय उल्था फार्से फिदिं
+page_rotate_ccw_label=घरि गिदिंनाय उल्था फार्से फिदिं
+
+
+
+
+# Document properties dialog box
+document_properties.title=फोरमान बिलाइनि आखुथाय...
+document_properties_label=फोरमान बिलाइनि आखुथाय...
+document_properties_file_name=फाइलनि मुं:
+document_properties_file_size=फाइलनि महर:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} बाइट)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} बाइट)
+document_properties_title=बिमुं:
+document_properties_author=लिरगिरि:
+document_properties_subject=आयदा:
+document_properties_keywords=गाहाय सोदोब:
+document_properties_creation_date=सोरजिनाय अक्ट':
+document_properties_modification_date=सुद्रायनाय अक्ट':
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=सोरजिग्रा:
+document_properties_producer=PDF दिहुनग्रा:
+document_properties_version=PDF बिसान:
+document_properties_page_count=बिलाइनि हिसाब:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=प'र्ट्रेट
+document_properties_page_size_orientation_landscape=लेण्डस्केप
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=लायजाम
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=नंगौ
+document_properties_linearized_no=नङा
+document_properties_close=बन्द खालाम
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=नेवसि
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=टग्गल साइडबार
+toggle_sidebar_label=टग्गल साइडबार
+document_outline_label=फोरमान बिलाइ सिमा हांखो
+attachments.title=नांजाब होनायखौ दिन्थि
+attachments_label=नांजाब होनाय
+thumbs.title=थामनेइलखौ दिन्थि
+thumbs_label=थामनेइल
+findbar.title=फोरमान बिलाइआव नागिरना दिहुन
+findbar_label=नायगिरना दिहुन
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=बिलाइ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=बिलाइ {{page}} नि थामनेइल
+
+# Find panel button title and messages
+find_input.title=नायगिरना दिहुन
+find_input.placeholder=फोरमान बिलाइआव नागिरना दिहुन...
+find_previous.title=बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर
+find_previous_label=आगोलनि
+find_next.title=बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर
+find_next_label=उननि
+find_highlight=गासैखौबो हाइलाइट खालाम
+find_match_case_label=गोरोबनाय केस
+find_reached_top=थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
+find_reached_bottom=बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_not_found=बाथ्रा खोन्दोब मोनाखै
+
+# Error panel labels
+error_more_info=गोबां फोरमायथिहोग्रा
+error_less_info=खम फोरमायथिहोग्रा
+error_close=बन्द खालाम
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=खौरां: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्टेक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=सारि: {{line}}
+rendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों।
+
+# Predefined zoom values
+page_scale_width=बिलाइनि गुवार
+page_scale_fit=बिलाइ गोरोबनाय
+page_scale_auto=गावनोगाव जुम
+page_scale_actual=थार महर
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=गोरोन्थि
+loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय।
+invalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल
+missing_file_error=गोमानाय PDF फाइल
+unexpected_response_error=मिजिंथियै सार्भार फिननाय।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} सोदोब बेखेवनाय]
+password_label=बे PDF फाइलखौ खेवनो पासवार्ड हाबहो।
+password_invalid=बाहायजायै पासवार्ड। अननानै फिन नाजा।
+password_ok=OK
+password_cancel=नेवसि
+
+printing_not_supported=सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया।
+printing_not_ready=सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै।
+web_fonts_disabled=वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै।
+document_colors_not_allowed=PDF फोरमान बिलाइखौ बिसोरनि निजि गाब बाहायनो गनायथि होनाय जाया: 'बिसोरनि निजि गाब बासिखनो बिलाइखौ गनायथि हो'-खौ ब्राउजारआव लोरबां खालामनाय जायो।
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bs/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bs/viewer.properties
index 6c2122b82031d350af093835c50471e3b910709a..2d6af058e0209ec6ab8649897b518a06501bb2c2 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bs/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/bs/viewer.properties
@@ -1,201 +1,201 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Prethodna strana
-previous_label=Prethodna
-next.title=Sljedeća strna
-next_label=Sljedeća
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Strana
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=od {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} od {{pagesCount}})
-
-zoom_out.title=Umanji
-zoom_out_label=Umanji
-zoom_in.title=Uvećaj
-zoom_in_label=Uvećaj
-zoom.title=Uvećanje
-presentation_mode.title=Prebaci se u prezentacijski režim
-presentation_mode_label=Prezentacijski režim
-open_file.title=Otvori fajl
-open_file_label=Otvori
-print.title=Štampaj
-print_label=Štampaj
-download.title=Preuzmi
-download_label=Preuzmi
-bookmark.title=Trenutni prikaz (kopiraj ili otvori u novom prozoru)
-bookmark_label=Trenutni prikaz
-
-# Secondary toolbar and context menu
-tools.title=Alati
-tools_label=Alati
-first_page.title=Idi na prvu stranu
-first_page.label=Idi na prvu stranu
-first_page_label=Idi na prvu stranu
-last_page.title=Idi na zadnju stranu
-last_page.label=Idi na zadnju stranu
-last_page_label=Idi na zadnju stranu
-page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
-page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu
-page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
-page_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu
-page_rotate_ccw.label=Rotiraj suprotno smjeru kazaljke na satu
-page_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu
-
-cursor_text_select_tool.title=Omogući alat za označavanje teksta
-cursor_text_select_tool_label=Alat za označavanje teksta
-cursor_hand_tool.title=Omogući ručni alat
-cursor_hand_tool_label=Ručni alat
-
-# Document properties dialog box
-document_properties.title=Svojstva dokumenta...
-document_properties_label=Svojstva dokumenta...
-document_properties_file_name=Naziv fajla:
-document_properties_file_size=Veličina fajla:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bajta)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajta)
-document_properties_title=Naslov:
-document_properties_author=Autor:
-document_properties_subject=Predmet:
-document_properties_keywords=Ključne riječi:
-document_properties_creation_date=Datum kreiranja:
-document_properties_modification_date=Datum promjene:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Kreator:
-document_properties_producer=PDF stvaratelj:
-document_properties_version=PDF verzija:
-document_properties_page_count=Broj stranica:
-document_properties_page_size=Veličina stranice:
-document_properties_page_size_unit_inches=u
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=uspravno
-document_properties_page_size_orientation_landscape=vodoravno
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Pismo
-document_properties_page_size_name_legal=Pravni
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-document_properties_close=Zatvori
-
-print_progress_message=Pripremam dokument za štampu…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Otkaži
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Uključi/isključi bočnu traku
-toggle_sidebar_notification.title=Uključi/isključi sidebar (dokument sadrži outline/priloge)
-toggle_sidebar_label=Uključi/isključi bočnu traku
-document_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki)
-document_outline_label=Konture dokumenta
-attachments.title=Prikaži priloge
-attachments_label=Prilozi
-thumbs.title=Prikaži thumbnailove
-thumbs_label=Thumbnailovi
-findbar.title=Pronađi u dokumentu
-findbar_label=Pronađi
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Strana {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Thumbnail strane {{page}}
-
-# Find panel button title and messages
-find_input.title=Pronađi
-find_input.placeholder=Pronađi u dokumentu…
-find_previous.title=Pronađi prethodno pojavljivanje fraze
-find_previous_label=Prethodno
-find_next.title=Pronađi sljedeće pojavljivanje fraze
-find_next_label=Sljedeće
-find_highlight=Označi sve
-find_match_case_label=Osjetljivost na karaktere
-find_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna
-find_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha
-find_not_found=Fraza nije pronađena
-
-# Error panel labels
-error_more_info=Više informacija
-error_less_info=Manje informacija
-error_close=Zatvori
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Poruka: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fajl: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linija: {{line}}
-rendering_error=Došlo je do greške prilikom renderiranja strane.
-
-# Predefined zoom values
-page_scale_width=Širina strane
-page_scale_fit=Uklopi stranu
-page_scale_auto=Automatsko uvećanje
-page_scale_actual=Stvarna veličina
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Greška
-loading_error=Došlo je do greške prilikom učitavanja PDF-a.
-invalid_file_error=Neispravan ili oštećen PDF fajl.
-missing_file_error=Nedostaje PDF fajl.
-unexpected_response_error=Neočekivani odgovor servera.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} pribilješka]
-password_label=Upišite lozinku da biste otvorili ovaj PDF fajl.
-password_invalid=Pogrešna lozinka. Pokušajte ponovo.
-password_ok=OK
-password_cancel=Otkaži
-
-printing_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru.
-printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za štampanje.
-web_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove.
-document_colors_not_allowed=PDF dokumentima nije dozvoljeno da koriste vlastite boje: 'Dozvoli stranicama da izaberu vlastite boje' je deaktivirano u browseru.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prethodna strana
+previous_label=Prethodna
+next.title=Sljedeća strna
+next_label=Sljedeća
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strana
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Umanji
+zoom_out_label=Umanji
+zoom_in.title=Uvećaj
+zoom_in_label=Uvećaj
+zoom.title=Uvećanje
+presentation_mode.title=Prebaci se u prezentacijski režim
+presentation_mode_label=Prezentacijski režim
+open_file.title=Otvori fajl
+open_file_label=Otvori
+print.title=Štampaj
+print_label=Štampaj
+download.title=Preuzmi
+download_label=Preuzmi
+bookmark.title=Trenutni prikaz (kopiraj ili otvori u novom prozoru)
+bookmark_label=Trenutni prikaz
+
+# Secondary toolbar and context menu
+tools.title=Alati
+tools_label=Alati
+first_page.title=Idi na prvu stranu
+first_page.label=Idi na prvu stranu
+first_page_label=Idi na prvu stranu
+last_page.title=Idi na zadnju stranu
+last_page.label=Idi na zadnju stranu
+last_page_label=Idi na zadnju stranu
+page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
+page_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu
+page_rotate_ccw.label=Rotiraj suprotno smjeru kazaljke na satu
+page_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu
+
+cursor_text_select_tool.title=Omogući alat za označavanje teksta
+cursor_text_select_tool_label=Alat za označavanje teksta
+cursor_hand_tool.title=Omogući ručni alat
+cursor_hand_tool_label=Ručni alat
+
+# Document properties dialog box
+document_properties.title=Svojstva dokumenta...
+document_properties_label=Svojstva dokumenta...
+document_properties_file_name=Naziv fajla:
+document_properties_file_size=Veličina fajla:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajta)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajta)
+document_properties_title=Naslov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=Ključne riječi:
+document_properties_creation_date=Datum kreiranja:
+document_properties_modification_date=Datum promjene:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kreator:
+document_properties_producer=PDF stvaratelj:
+document_properties_version=PDF verzija:
+document_properties_page_count=Broj stranica:
+document_properties_page_size=Veličina stranice:
+document_properties_page_size_unit_inches=u
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=uspravno
+document_properties_page_size_orientation_landscape=vodoravno
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Pismo
+document_properties_page_size_name_legal=Pravni
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_close=Zatvori
+
+print_progress_message=Pripremam dokument za štampu…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Otkaži
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Uključi/isključi bočnu traku
+toggle_sidebar_notification.title=Uključi/isključi sidebar (dokument sadrži outline/priloge)
+toggle_sidebar_label=Uključi/isključi bočnu traku
+document_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki)
+document_outline_label=Konture dokumenta
+attachments.title=Prikaži priloge
+attachments_label=Prilozi
+thumbs.title=Prikaži thumbnailove
+thumbs_label=Thumbnailovi
+findbar.title=Pronađi u dokumentu
+findbar_label=Pronađi
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail strane {{page}}
+
+# Find panel button title and messages
+find_input.title=Pronađi
+find_input.placeholder=Pronađi u dokumentu…
+find_previous.title=Pronađi prethodno pojavljivanje fraze
+find_previous_label=Prethodno
+find_next.title=Pronađi sljedeće pojavljivanje fraze
+find_next_label=Sljedeće
+find_highlight=Označi sve
+find_match_case_label=Osjetljivost na karaktere
+find_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna
+find_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha
+find_not_found=Fraza nije pronađena
+
+# Error panel labels
+error_more_info=Više informacija
+error_less_info=Manje informacija
+error_close=Zatvori
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Poruka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fajl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linija: {{line}}
+rendering_error=Došlo je do greške prilikom renderiranja strane.
+
+# Predefined zoom values
+page_scale_width=Širina strane
+page_scale_fit=Uklopi stranu
+page_scale_auto=Automatsko uvećanje
+page_scale_actual=Stvarna veličina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Greška
+loading_error=Došlo je do greške prilikom učitavanja PDF-a.
+invalid_file_error=Neispravan ili oštećen PDF fajl.
+missing_file_error=Nedostaje PDF fajl.
+unexpected_response_error=Neočekivani odgovor servera.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} pribilješka]
+password_label=Upišite lozinku da biste otvorili ovaj PDF fajl.
+password_invalid=Pogrešna lozinka. Pokušajte ponovo.
+password_ok=OK
+password_cancel=Otkaži
+
+printing_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru.
+printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za štampanje.
+web_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove.
+document_colors_not_allowed=PDF dokumentima nije dozvoljeno da koriste vlastite boje: 'Dozvoli stranicama da izaberu vlastite boje' je deaktivirano u browseru.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ca/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ca/viewer.properties
index 924637aaf75bdadf7d80e7e33db1d3ac83fe180d..89f41e8ace7147215c0c261d6978071426ce4dca 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ca/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ca/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pàgina anterior
-previous_label=Anterior
-next.title=Pàgina següent
-next_label=Següent
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pàgina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Redueix
-zoom_out_label=Redueix
-zoom_in.title=Amplia
-zoom_in_label=Amplia
-zoom.title=Escala
-presentation_mode.title=Canvia al mode de presentació
-presentation_mode_label=Mode de presentació
-open_file.title=Obre el fitxer
-open_file_label=Obre
-print.title=Imprimeix
-print_label=Imprimeix
-download.title=Baixa
-download_label=Baixa
-bookmark.title=Vista actual (copia o obre en una finestra nova)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Eines
-tools_label=Eines
-first_page.title=Vés a la primera pàgina
-first_page.label=Vés a la primera pàgina
-first_page_label=Vés a la primera pàgina
-last_page.title=Vés a l'última pàgina
-last_page.label=Vés a l'última pàgina
-last_page_label=Vés a l'última pàgina
-page_rotate_cw.title=Gira cap a la dreta
-page_rotate_cw.label=Gira cap a la dreta
-page_rotate_cw_label=Gira cap a la dreta
-page_rotate_ccw.title=Gira cap a l'esquerra
-page_rotate_ccw.label=Gira cap a l'esquerra
-page_rotate_ccw_label=Gira cap a l'esquerra
-
-cursor_text_select_tool.title=Habilita l'eina de selecció de text
-cursor_text_select_tool_label=Eina de selecció de text
-cursor_hand_tool.title=Habilita l'eina de mà
-cursor_hand_tool_label=Eina de mà
-
-scroll_vertical.title=Utilitza el desplaçament vertical
-scroll_vertical_label=Desplaçament vertical
-scroll_horizontal.title=Utilitza el desplaçament horitzontal
-scroll_horizontal_label=Desplaçament horitzontal
-scroll_wrapped.title=Activa el desplaçament continu
-scroll_wrapped_label=Desplaçament continu
-
-spread_none.title=No agrupis les pàgines de dues en dues
-spread_none_label=Una sola pàgina
-spread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar
-spread_odd_label=Doble pàgina (senar)
-spread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell
-spread_even_label=Doble pàgina (parell)
-
-# Document properties dialog box
-document_properties.title=Propietats del document…
-document_properties_label=Propietats del document…
-document_properties_file_name=Nom del fitxer:
-document_properties_file_size=Mida del fitxer:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Títol:
-document_properties_author=Autor:
-document_properties_subject=Assumpte:
-document_properties_keywords=Paraules clau:
-document_properties_creation_date=Data de creació:
-document_properties_modification_date=Data de modificació:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creador:
-document_properties_producer=Generador de PDF:
-document_properties_version=Versió de PDF:
-document_properties_page_count=Nombre de pàgines:
-document_properties_page_size=Mida de la pàgina:
-document_properties_page_size_unit_inches=polzades
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertical
-document_properties_page_size_orientation_landscape=apaïsat
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista web ràpida:
-document_properties_linearized_yes=Sí
-document_properties_linearized_no=No
-document_properties_close=Tanca
-
-print_progress_message=S'està preparant la impressió del document…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancel·la
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Mostra/amaga la barra lateral
-toggle_sidebar_notification.title=Mostra/amaga la barra lateral (el document conté un esquema o adjuncions)
-toggle_sidebar_label=Mostra/amaga la barra lateral
-document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)
-document_outline_label=Contorn del document
-attachments.title=Mostra les adjuncions
-attachments_label=Adjuncions
-thumbs.title=Mostra les miniatures
-thumbs_label=Miniatures
-findbar.title=Cerca al document
-findbar_label=Cerca
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pàgina {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pàgina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura de la pàgina {{page}}
-
-# Find panel button title and messages
-find_input.title=Cerca
-find_input.placeholder=Cerca al document…
-find_previous.title=Cerca l'anterior coincidència de l'expressió
-find_previous_label=Anterior
-find_next.title=Cerca la següent coincidència de l'expressió
-find_next_label=Següent
-find_highlight=Ressalta-ho tot
-find_match_case_label=Distingeix entre majúscules i minúscules
-find_entire_word_label=Paraules senceres
-find_reached_top=S'ha arribat al principi del document, es continua pel final
-find_reached_bottom=S'ha arribat al final del document, es continua pel principi
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} coincidència
-find_match_count[two]={{current}} de {{total}} coincidències
-find_match_count[few]={{current}} de {{total}} coincidències
-find_match_count[many]={{current}} de {{total}} coincidències
-find_match_count[other]={{current}} de {{total}} coincidències
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Més de {{limit}} coincidències
-find_match_count_limit[one]=Més d'{{limit}} coincidència
-find_match_count_limit[two]=Més de {{limit}} coincidències
-find_match_count_limit[few]=Més de {{limit}} coincidències
-find_match_count_limit[many]=Més de {{limit}} coincidències
-find_match_count_limit[other]=Més de {{limit}} coincidències
-find_not_found=No s'ha trobat l'expressió
-
-# Error panel labels
-error_more_info=Més informació
-error_less_info=Menys informació
-error_close=Tanca
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (muntatge: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Missatge: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fitxer: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Línia: {{line}}
-rendering_error=S'ha produït un error mentre es renderitzava la pàgina.
-
-# Predefined zoom values
-page_scale_width=Amplària de la pàgina
-page_scale_fit=Ajusta la pàgina
-page_scale_auto=Zoom automàtic
-page_scale_actual=Mida real
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=S'ha produït un error en carregar el PDF.
-invalid_file_error=El fitxer PDF no és vàlid o està malmès.
-missing_file_error=Falta el fitxer PDF.
-unexpected_response_error=Resposta inesperada del servidor.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotació {{type}}]
-password_label=Introduïu la contrasenya per obrir aquest fitxer PDF.
-password_invalid=La contrasenya no és vàlida. Torneu-ho a provar.
-password_ok=D'acord
-password_cancel=Cancel·la
-
-printing_not_supported=Avís: la impressió no és plenament funcional en aquest navegador.
-printing_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo.
-web_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF.
-document_colors_not_allowed=Els documents PDF no poden usar els seus colors propis: «Permet a les pàgines triar els colors propis» es troba desactivat al navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pàgina anterior
+previous_label=Anterior
+next.title=Pàgina següent
+next_label=Següent
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pàgina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Redueix
+zoom_out_label=Redueix
+zoom_in.title=Amplia
+zoom_in_label=Amplia
+zoom.title=Escala
+presentation_mode.title=Canvia al mode de presentació
+presentation_mode_label=Mode de presentació
+open_file.title=Obre el fitxer
+open_file_label=Obre
+print.title=Imprimeix
+print_label=Imprimeix
+download.title=Baixa
+download_label=Baixa
+bookmark.title=Vista actual (copia o obre en una finestra nova)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Eines
+tools_label=Eines
+first_page.title=Vés a la primera pàgina
+first_page.label=Vés a la primera pàgina
+first_page_label=Vés a la primera pàgina
+last_page.title=Vés a l'última pàgina
+last_page.label=Vés a l'última pàgina
+last_page_label=Vés a l'última pàgina
+page_rotate_cw.title=Gira cap a la dreta
+page_rotate_cw.label=Gira cap a la dreta
+page_rotate_cw_label=Gira cap a la dreta
+page_rotate_ccw.title=Gira cap a l'esquerra
+page_rotate_ccw.label=Gira cap a l'esquerra
+page_rotate_ccw_label=Gira cap a l'esquerra
+
+cursor_text_select_tool.title=Habilita l'eina de selecció de text
+cursor_text_select_tool_label=Eina de selecció de text
+cursor_hand_tool.title=Habilita l'eina de mà
+cursor_hand_tool_label=Eina de mà
+
+scroll_vertical.title=Utilitza el desplaçament vertical
+scroll_vertical_label=Desplaçament vertical
+scroll_horizontal.title=Utilitza el desplaçament horitzontal
+scroll_horizontal_label=Desplaçament horitzontal
+scroll_wrapped.title=Activa el desplaçament continu
+scroll_wrapped_label=Desplaçament continu
+
+spread_none.title=No agrupis les pàgines de dues en dues
+spread_none_label=Una sola pàgina
+spread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar
+spread_odd_label=Doble pàgina (senar)
+spread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell
+spread_even_label=Doble pàgina (parell)
+
+# Document properties dialog box
+document_properties.title=Propietats del document…
+document_properties_label=Propietats del document…
+document_properties_file_name=Nom del fitxer:
+document_properties_file_size=Mida del fitxer:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Títol:
+document_properties_author=Autor:
+document_properties_subject=Assumpte:
+document_properties_keywords=Paraules clau:
+document_properties_creation_date=Data de creació:
+document_properties_modification_date=Data de modificació:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Generador de PDF:
+document_properties_version=Versió de PDF:
+document_properties_page_count=Nombre de pàgines:
+document_properties_page_size=Mida de la pàgina:
+document_properties_page_size_unit_inches=polzades
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=apaïsat
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web ràpida:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Tanca
+
+print_progress_message=S'està preparant la impressió del document…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel·la
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Mostra/amaga la barra lateral
+toggle_sidebar_notification.title=Mostra/amaga la barra lateral (el document conté un esquema o adjuncions)
+toggle_sidebar_label=Mostra/amaga la barra lateral
+document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)
+document_outline_label=Contorn del document
+attachments.title=Mostra les adjuncions
+attachments_label=Adjuncions
+thumbs.title=Mostra les miniatures
+thumbs_label=Miniatures
+findbar.title=Cerca al document
+findbar_label=Cerca
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pàgina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pàgina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la pàgina {{page}}
+
+# Find panel button title and messages
+find_input.title=Cerca
+find_input.placeholder=Cerca al document…
+find_previous.title=Cerca l'anterior coincidència de l'expressió
+find_previous_label=Anterior
+find_next.title=Cerca la següent coincidència de l'expressió
+find_next_label=Següent
+find_highlight=Ressalta-ho tot
+find_match_case_label=Distingeix entre majúscules i minúscules
+find_entire_word_label=Paraules senceres
+find_reached_top=S'ha arribat al principi del document, es continua pel final
+find_reached_bottom=S'ha arribat al final del document, es continua pel principi
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidència
+find_match_count[two]={{current}} de {{total}} coincidències
+find_match_count[few]={{current}} de {{total}} coincidències
+find_match_count[many]={{current}} de {{total}} coincidències
+find_match_count[other]={{current}} de {{total}} coincidències
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Més de {{limit}} coincidències
+find_match_count_limit[one]=Més d'{{limit}} coincidència
+find_match_count_limit[two]=Més de {{limit}} coincidències
+find_match_count_limit[few]=Més de {{limit}} coincidències
+find_match_count_limit[many]=Més de {{limit}} coincidències
+find_match_count_limit[other]=Més de {{limit}} coincidències
+find_not_found=No s'ha trobat l'expressió
+
+# Error panel labels
+error_more_info=Més informació
+error_less_info=Menys informació
+error_close=Tanca
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (muntatge: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Missatge: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fitxer: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línia: {{line}}
+rendering_error=S'ha produït un error mentre es renderitzava la pàgina.
+
+# Predefined zoom values
+page_scale_width=Amplària de la pàgina
+page_scale_fit=Ajusta la pàgina
+page_scale_auto=Zoom automàtic
+page_scale_actual=Mida real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=S'ha produït un error en carregar el PDF.
+invalid_file_error=El fitxer PDF no és vàlid o està malmès.
+missing_file_error=Falta el fitxer PDF.
+unexpected_response_error=Resposta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotació {{type}}]
+password_label=Introduïu la contrasenya per obrir aquest fitxer PDF.
+password_invalid=La contrasenya no és vàlida. Torneu-ho a provar.
+password_ok=D'acord
+password_cancel=Cancel·la
+
+printing_not_supported=Avís: la impressió no és plenament funcional en aquest navegador.
+printing_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo.
+web_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF.
+document_colors_not_allowed=Els documents PDF no poden usar els seus colors propis: «Permet a les pàgines triar els colors propis» es troba desactivat al navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cak/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cak/viewer.properties
index c105d8252b3cb6011f91e9350901c9ee104a7d09..47c9fe7027f36ecae786142423a6d179158d2f8e 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cak/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cak/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Jun kan ruxaq
-previous_label=Chuwäch
-next.title=Jun chik ruxaq
-next_label=Jun chik
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Ruxaq
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=richin {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} richin {{pagesCount}})
-
-zoom_out.title=Tich'utinirisäx
-zoom_out_label=Tich'utinirisäx
-zoom_in.title=Tinimirisäx
-zoom_in_label=Tinimirisäx
-zoom.title=Sum
-presentation_mode.title=Tijal ri rub'anikil niwachin
-presentation_mode_label=Pa rub'eyal niwachin
-open_file.title=Tijaq yakb'äl
-open_file_label=Tijaq
-print.title=Titz'ajb'äx
-print_label=Titz'ajb'äx
-download.title=Tiqasäx
-download_label=Tiqasäx
-bookmark.title=Rutz'etik wakami (tiwachib'ëx o tijaq pa jun k'ak'a' tzuwäch)
-bookmark_label=Rutzub'al wakami
-
-# Secondary toolbar and context menu
-tools.title=Samajib'äl
-tools_label=Samajib'äl
-first_page.title=Tib'e pa nab'ey ruxaq
-first_page.label=Tib'e pa nab'ey ruxaq
-first_page_label=Tib'e pa nab'ey ruxaq
-last_page.title=Tib'e pa ruk'isib'äl ruxaq
-last_page.label=Tib'e pa ruk'isib'äl ruxaq
-last_page_label=Tib'e pa ruk'isib'äl ruxaq
-page_rotate_cw.title=Tisutïx pan ajkiq'a'
-page_rotate_cw.label=Tisutïx pan ajkiq'a'
-page_rotate_cw_label=Tisutïx pan ajkiq'a'
-page_rotate_ccw.title=Tisutïx pan ajxokon
-page_rotate_ccw.label=Tisutïx pan ajxokon
-page_rotate_ccw_label=Tisutïx pan ajxokon
-
-cursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij
-cursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij
-cursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl
-cursor_hand_tool_label=Q'ab'aj Samajib'äl
-
-scroll_vertical.title=Tokisäx Pa'äl Q'axanem
-scroll_vertical_label=Pa'äl Q'axanem
-scroll_horizontal.title=Tokisäx Kotz'öl Q'axanem
-scroll_horizontal_label=Kotz'öl Q'axanem
-scroll_wrapped.title=Tokisäx Tzub'aj Q'axanem
-scroll_wrapped_label=Tzub'aj Q'axanem
-
-spread_none.title=Man ketun taq ruxaq pa rub'eyal wuj
-spread_none_label=Majun Rub'eyal
-spread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al
-spread_odd_label=Man K'ulaj Ta Rub'eyal
-spread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al
-spread_even_label=K'ulaj Rub'eyal
-
-# Document properties dialog box
-document_properties.title=Taq richinil wuj…
-document_properties_label=Taq richinil wuj…
-document_properties_file_name=Rub'i' yakb'äl:
-document_properties_file_size=Runimilem yakb'äl:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=B'i'aj:
-document_properties_author=B'anel:
-document_properties_subject=Taqikil:
-document_properties_keywords=Kixe'el taq tzij:
-document_properties_creation_date=Ruq'ijul xtz'uk:
-document_properties_modification_date=Ruq'ijul xjalwachïx:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Q'inonel:
-document_properties_producer=PDF b'anöy:
-document_properties_version=PDF ruwäch:
-document_properties_page_count=Jarupe' ruxaq:
-document_properties_page_size=Runimilem ri Ruxaq:
-document_properties_page_size_unit_inches=pa
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=rupalem
-document_properties_page_size_orientation_landscape=rukotz'olem
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Loman wuj
-document_properties_page_size_name_legal=Nïm wuj
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Anin Rutz'etik Ajk'amaya'l:
-document_properties_linearized_yes=Ja'
-document_properties_linearized_no=Mani
-document_properties_close=Titz'apïx
-
-print_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Tiq'at
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Tijal ri ajxikin kajtz'ik
-toggle_sidebar_notification.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqoj taq yakb'äl)
-toggle_sidebar_label=Tijal ri ajxikin kajtz'ik
-document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal)
-document_outline_label=Ruch'akulal wuj
-attachments.title=Kek'ut pe ri taq taqoj
-attachments_label=Taq taqoj
-thumbs.title=Kek'ut pe taq ch'utiq
-thumbs_label=Koköj
-findbar.title=Tikanöx chupam ri wuj
-findbar_label=Tikanöx
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Ruxaq {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Ruxaq {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}}
-
-# Find panel button title and messages
-find_input.title=Tikanöx
-find_input.placeholder=Tikanöx pa wuj…
-find_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj
-find_previous_label=Jun kan
-find_next.title=Tib'e pa ri jun chik pajtzij xilitäj
-find_next_label=Jun chik
-find_highlight=Tiya' retal ronojel
-find_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib'
-find_entire_word_label=Tz'aqät taq tzij
-find_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl
-find_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} richin {{total}} nuk'äm ri'
-find_match_count[two]={{current}} richin {{total}} nikik'äm ki'
-find_match_count[few]={{current}} richin {{total}} nikik'äm ki'
-find_match_count[many]={{current}} richin {{total}} nikik'äm ki'
-find_match_count[other]={{current}} richin {{total}} nikik'äm ki'
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki'
-find_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri'
-find_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki'
-find_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki'
-find_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki'
-find_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki'
-find_not_found=Man xilitäj ta ri pajtzij
-
-# Error panel labels
-error_more_info=Ch'aqa' chik rutzijol
-error_less_info=Jub'a' ok rutzijol
-error_close=Titz'apïx
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Uqxa'n: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Tzub'aj: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Yakb'äl: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=B'ey: {{line}}
-rendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq.
-
-# Predefined zoom values
-page_scale_width=Ruwa ruxaq
-page_scale_fit=Tinuk' ruxaq
-page_scale_auto=Yonil chi nimilem
-page_scale_actual=Runimilem
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Sachoj
-loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF .
-invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl.
-missing_file_error=Man xilitäj ta ri PDF yakb'äl.
-unexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Tz'ib'anïk]
-password_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF.
-password_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik.
-password_ok=Ütz
-password_cancel=Tiq'at
-
-printing_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'.
-printing_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx.
-web_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk
-document_colors_not_allowed=Ri taq wuj pa PDF man ya'on ta q'ij chi ke richin nikokisaj ri taq kib'onil: “Tiya' q'ij chi ke ri taq ruxaq chi kekicha' ri taq kib'onil” chupun pa ri awokik'amaya'l.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Jun kan ruxaq
+previous_label=Chuwäch
+next.title=Jun chik ruxaq
+next_label=Jun chik
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Ruxaq
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=richin {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} richin {{pagesCount}})
+
+zoom_out.title=Tich'utinirisäx
+zoom_out_label=Tich'utinirisäx
+zoom_in.title=Tinimirisäx
+zoom_in_label=Tinimirisäx
+zoom.title=Sum
+presentation_mode.title=Tijal ri rub'anikil niwachin
+presentation_mode_label=Pa rub'eyal niwachin
+open_file.title=Tijaq yakb'äl
+open_file_label=Tijaq
+print.title=Titz'ajb'äx
+print_label=Titz'ajb'äx
+download.title=Tiqasäx
+download_label=Tiqasäx
+bookmark.title=Rutz'etik wakami (tiwachib'ëx o tijaq pa jun k'ak'a' tzuwäch)
+bookmark_label=Rutzub'al wakami
+
+# Secondary toolbar and context menu
+tools.title=Samajib'äl
+tools_label=Samajib'äl
+first_page.title=Tib'e pa nab'ey ruxaq
+first_page.label=Tib'e pa nab'ey ruxaq
+first_page_label=Tib'e pa nab'ey ruxaq
+last_page.title=Tib'e pa ruk'isib'äl ruxaq
+last_page.label=Tib'e pa ruk'isib'äl ruxaq
+last_page_label=Tib'e pa ruk'isib'äl ruxaq
+page_rotate_cw.title=Tisutïx pan ajkiq'a'
+page_rotate_cw.label=Tisutïx pan ajkiq'a'
+page_rotate_cw_label=Tisutïx pan ajkiq'a'
+page_rotate_ccw.title=Tisutïx pan ajxokon
+page_rotate_ccw.label=Tisutïx pan ajxokon
+page_rotate_ccw_label=Tisutïx pan ajxokon
+
+cursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij
+cursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij
+cursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl
+cursor_hand_tool_label=Q'ab'aj Samajib'äl
+
+scroll_vertical.title=Tokisäx Pa'äl Q'axanem
+scroll_vertical_label=Pa'äl Q'axanem
+scroll_horizontal.title=Tokisäx Kotz'öl Q'axanem
+scroll_horizontal_label=Kotz'öl Q'axanem
+scroll_wrapped.title=Tokisäx Tzub'aj Q'axanem
+scroll_wrapped_label=Tzub'aj Q'axanem
+
+spread_none.title=Man ketun taq ruxaq pa rub'eyal wuj
+spread_none_label=Majun Rub'eyal
+spread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al
+spread_odd_label=Man K'ulaj Ta Rub'eyal
+spread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al
+spread_even_label=K'ulaj Rub'eyal
+
+# Document properties dialog box
+document_properties.title=Taq richinil wuj…
+document_properties_label=Taq richinil wuj…
+document_properties_file_name=Rub'i' yakb'äl:
+document_properties_file_size=Runimilem yakb'äl:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=B'i'aj:
+document_properties_author=B'anel:
+document_properties_subject=Taqikil:
+document_properties_keywords=Kixe'el taq tzij:
+document_properties_creation_date=Ruq'ijul xtz'uk:
+document_properties_modification_date=Ruq'ijul xjalwachïx:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Q'inonel:
+document_properties_producer=PDF b'anöy:
+document_properties_version=PDF ruwäch:
+document_properties_page_count=Jarupe' ruxaq:
+document_properties_page_size=Runimilem ri Ruxaq:
+document_properties_page_size_unit_inches=pa
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=rupalem
+document_properties_page_size_orientation_landscape=rukotz'olem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Loman wuj
+document_properties_page_size_name_legal=Nïm wuj
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Anin Rutz'etik Ajk'amaya'l:
+document_properties_linearized_yes=Ja'
+document_properties_linearized_no=Mani
+document_properties_close=Titz'apïx
+
+print_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Tiq'at
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Tijal ri ajxikin kajtz'ik
+toggle_sidebar_notification.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqoj taq yakb'äl)
+toggle_sidebar_label=Tijal ri ajxikin kajtz'ik
+document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal)
+document_outline_label=Ruch'akulal wuj
+attachments.title=Kek'ut pe ri taq taqoj
+attachments_label=Taq taqoj
+thumbs.title=Kek'ut pe taq ch'utiq
+thumbs_label=Koköj
+findbar.title=Tikanöx chupam ri wuj
+findbar_label=Tikanöx
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Ruxaq {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Ruxaq {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}}
+
+# Find panel button title and messages
+find_input.title=Tikanöx
+find_input.placeholder=Tikanöx pa wuj…
+find_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj
+find_previous_label=Jun kan
+find_next.title=Tib'e pa ri jun chik pajtzij xilitäj
+find_next_label=Jun chik
+find_highlight=Tiya' retal ronojel
+find_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib'
+find_entire_word_label=Tz'aqät taq tzij
+find_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl
+find_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} richin {{total}} nuk'äm ri'
+find_match_count[two]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[few]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[many]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[other]={{current}} richin {{total}} nikik'äm ki'
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri'
+find_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki'
+find_not_found=Man xilitäj ta ri pajtzij
+
+# Error panel labels
+error_more_info=Ch'aqa' chik rutzijol
+error_less_info=Jub'a' ok rutzijol
+error_close=Titz'apïx
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Uqxa'n: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Tzub'aj: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Yakb'äl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=B'ey: {{line}}
+rendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq.
+
+# Predefined zoom values
+page_scale_width=Ruwa ruxaq
+page_scale_fit=Tinuk' ruxaq
+page_scale_auto=Yonil chi nimilem
+page_scale_actual=Runimilem
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Sachoj
+loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF .
+invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl.
+missing_file_error=Man xilitäj ta ri PDF yakb'äl.
+unexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Tz'ib'anïk]
+password_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF.
+password_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik.
+password_ok=Ütz
+password_cancel=Tiq'at
+
+printing_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'.
+printing_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx.
+web_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk
+document_colors_not_allowed=Ri taq wuj pa PDF man ya'on ta q'ij chi ke richin nikokisaj ri taq kib'onil: “Tiya' q'ij chi ke ri taq ruxaq chi kekicha' ri taq kib'onil” chupun pa ri awokik'amaya'l.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cs/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cs/viewer.properties
index 6310f637cfb43472a3aa77d592a40fa8066efc52..dff0fdc77261f1f4d228a095ec675bc4cfafd5ff 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cs/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cs/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Přejde na předchozí stránku
-previous_label=Předchozí
-next.title=Přejde na následující stránku
-next_label=Další
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Stránka
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=z {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} z {{pagesCount}})
-
-zoom_out.title=Zmenší velikost
-zoom_out_label=Zmenšit
-zoom_in.title=Zvětší velikost
-zoom_in_label=Zvětšit
-zoom.title=Nastaví velikost
-presentation_mode.title=Přepne do režimu prezentace
-presentation_mode_label=Režim prezentace
-open_file.title=Otevře soubor
-open_file_label=Otevřít
-print.title=Vytiskne dokument
-print_label=Vytisknout
-download.title=Stáhne dokument
-download_label=Stáhnout
-bookmark.title=Současný pohled (kopírovat nebo otevřít v novém okně)
-bookmark_label=Současný pohled
-
-# Secondary toolbar and context menu
-tools.title=Nástroje
-tools_label=Nástroje
-first_page.title=Přejde na první stránku
-first_page.label=Přejít na první stránku
-first_page_label=Přejít na první stránku
-last_page.title=Přejde na poslední stránku
-last_page.label=Přejít na poslední stránku
-last_page_label=Přejít na poslední stránku
-page_rotate_cw.title=Otočí po směru hodin
-page_rotate_cw.label=Otočit po směru hodin
-page_rotate_cw_label=Otočit po směru hodin
-page_rotate_ccw.title=Otočí proti směru hodin
-page_rotate_ccw.label=Otočit proti směru hodin
-page_rotate_ccw_label=Otočit proti směru hodin
-
-cursor_text_select_tool.title=Povolí výběr textu
-cursor_text_select_tool_label=Výběr textu
-cursor_hand_tool.title=Povolí nástroj ručička
-cursor_hand_tool_label=Nástroj ručička
-
-scroll_vertical.title=Použít svislé posouvání
-scroll_vertical_label=Svislé posouvání
-scroll_horizontal.title=Použít vodorovné posouvání
-scroll_horizontal_label=Vodorovné posouvání
-scroll_wrapped.title=Použít postupné posouvání
-scroll_wrapped_label=Postupné posouvání
-
-spread_none.title=Nesdružovat stránky
-spread_none_label=Žádné sdružení
-spread_odd.title=Sdruží stránky s umístěním lichých vlevo
-spread_odd_label=Sdružení stránek (liché vlevo)
-spread_even.title=Sdruží stránky s umístěním sudých vlevo
-spread_even_label=Sdružení stránek (sudé vlevo)
-
-# Document properties dialog box
-document_properties.title=Vlastnosti dokumentu…
-document_properties_label=Vlastnosti dokumentu…
-document_properties_file_name=Název souboru:
-document_properties_file_size=Velikost souboru:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bajtů)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajtů)
-document_properties_title=Název stránky:
-document_properties_author=Autor:
-document_properties_subject=Předmět:
-document_properties_keywords=Klíčová slova:
-document_properties_creation_date=Datum vytvoření:
-document_properties_modification_date=Datum úpravy:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Vytvořil:
-document_properties_producer=Tvůrce PDF:
-document_properties_version=Verze PDF:
-document_properties_page_count=Počet stránek:
-document_properties_page_size=Velikost stránky:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=na výšku
-document_properties_page_size_orientation_landscape=na šířku
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Dopis
-document_properties_page_size_name_legal=Právní dokument
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Rychlé zobrazování z webu:
-document_properties_linearized_yes=Ano
-document_properties_linearized_no=Ne
-document_properties_close=Zavřít
-
-print_progress_message=Příprava dokumentu pro tisk…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}} %
-print_progress_close=Zrušit
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Postranní lišta
-toggle_sidebar_notification.title=Přepne postranní lištu (dokument obsahuje osnovu/přílohy)
-toggle_sidebar_label=Postranní lišta
-document_outline.title=Zobrazí osnovu dokumentu (dvojité klepnutí rozbalí/sbalí všechny položky)
-document_outline_label=Osnova dokumentu
-attachments.title=Zobrazí přílohy
-attachments_label=Přílohy
-thumbs.title=Zobrazí náhledy
-thumbs_label=Náhledy
-findbar.title=Najde v dokumentu
-findbar_label=Najít
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Strana {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Strana {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Náhled strany {{page}}
-
-# Find panel button title and messages
-find_input.title=Najít
-find_input.placeholder=Najít v dokumentu…
-find_previous.title=Najde předchozí výskyt hledaného textu
-find_previous_label=Předchozí
-find_next.title=Najde další výskyt hledaného textu
-find_next_label=Další
-find_highlight=Zvýraznit
-find_match_case_label=Rozlišovat velikost
-find_entire_word_label=Celá slova
-find_reached_top=Dosažen začátek dokumentu, pokračuje se od konce
-find_reached_bottom=Dosažen konec dokumentu, pokračuje se od začátku
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}}. z {{total}} výskytu
-find_match_count[two]={{current}}. z {{total}} výskytů
-find_match_count[few]={{current}}. z {{total}} výskytů
-find_match_count[many]={{current}}. z {{total}} výskytů
-find_match_count[other]={{current}}. z {{total}} výskytů
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Více než {{limit}} výskytů
-find_match_count_limit[one]=Více než {{limit}} výskyt
-find_match_count_limit[two]=Více než {{limit}} výskyty
-find_match_count_limit[few]=Více než {{limit}} výskyty
-find_match_count_limit[many]=Více než {{limit}} výskytů
-find_match_count_limit[other]=Více než {{limit}} výskytů
-find_not_found=Hledaný text nenalezen
-
-# Error panel labels
-error_more_info=Více informací
-error_less_info=Méně informací
-error_close=Zavřít
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (sestavení: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Zpráva: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Zásobník: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Soubor: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Řádek: {{line}}
-rendering_error=Při vykreslování stránky nastala chyba.
-
-# Predefined zoom values
-page_scale_width=Podle šířky
-page_scale_fit=Podle výšky
-page_scale_auto=Automatická velikost
-page_scale_actual=Skutečná velikost
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Chyba
-loading_error=Při nahrávání PDF nastala chyba.
-invalid_file_error=Neplatný nebo chybný soubor PDF.
-missing_file_error=Chybí soubor PDF.
-unexpected_response_error=Neočekávaná odpověď serveru.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotace typu {{type}}]
-password_label=Pro otevření PDF souboru vložte heslo.
-password_invalid=Neplatné heslo. Zkuste to znovu.
-password_ok=OK
-password_cancel=Zrušit
-
-printing_not_supported=Upozornění: Tisk není v tomto prohlížeči plně podporován.
-printing_not_ready=Upozornění: Dokument PDF není kompletně načten.
-web_fonts_disabled=Webová písma jsou zakázána, proto není možné použít vložená písma PDF.
-document_colors_not_allowed=PDF dokumenty nemají povoleno používat vlastní barvy: volba 'Povolit stránkám používat vlastní barvy' je v prohlížeči deaktivována.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Přejde na předchozí stránku
+previous_label=Předchozí
+next.title=Přejde na následující stránku
+next_label=Další
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stránka
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Zmenší velikost
+zoom_out_label=Zmenšit
+zoom_in.title=Zvětší velikost
+zoom_in_label=Zvětšit
+zoom.title=Nastaví velikost
+presentation_mode.title=Přepne do režimu prezentace
+presentation_mode_label=Režim prezentace
+open_file.title=Otevře soubor
+open_file_label=Otevřít
+print.title=Vytiskne dokument
+print_label=Vytisknout
+download.title=Stáhne dokument
+download_label=Stáhnout
+bookmark.title=Současný pohled (kopírovat nebo otevřít v novém okně)
+bookmark_label=Současný pohled
+
+# Secondary toolbar and context menu
+tools.title=Nástroje
+tools_label=Nástroje
+first_page.title=Přejde na první stránku
+first_page.label=Přejít na první stránku
+first_page_label=Přejít na první stránku
+last_page.title=Přejde na poslední stránku
+last_page.label=Přejít na poslední stránku
+last_page_label=Přejít na poslední stránku
+page_rotate_cw.title=Otočí po směru hodin
+page_rotate_cw.label=Otočit po směru hodin
+page_rotate_cw_label=Otočit po směru hodin
+page_rotate_ccw.title=Otočí proti směru hodin
+page_rotate_ccw.label=Otočit proti směru hodin
+page_rotate_ccw_label=Otočit proti směru hodin
+
+cursor_text_select_tool.title=Povolí výběr textu
+cursor_text_select_tool_label=Výběr textu
+cursor_hand_tool.title=Povolí nástroj ručička
+cursor_hand_tool_label=Nástroj ručička
+
+scroll_vertical.title=Použít svislé posouvání
+scroll_vertical_label=Svislé posouvání
+scroll_horizontal.title=Použít vodorovné posouvání
+scroll_horizontal_label=Vodorovné posouvání
+scroll_wrapped.title=Použít postupné posouvání
+scroll_wrapped_label=Postupné posouvání
+
+spread_none.title=Nesdružovat stránky
+spread_none_label=Žádné sdružení
+spread_odd.title=Sdruží stránky s umístěním lichých vlevo
+spread_odd_label=Sdružení stránek (liché vlevo)
+spread_even.title=Sdruží stránky s umístěním sudých vlevo
+spread_even_label=Sdružení stránek (sudé vlevo)
+
+# Document properties dialog box
+document_properties.title=Vlastnosti dokumentu…
+document_properties_label=Vlastnosti dokumentu…
+document_properties_file_name=Název souboru:
+document_properties_file_size=Velikost souboru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtů)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtů)
+document_properties_title=Název stránky:
+document_properties_author=Autor:
+document_properties_subject=Předmět:
+document_properties_keywords=Klíčová slova:
+document_properties_creation_date=Datum vytvoření:
+document_properties_modification_date=Datum úpravy:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Vytvořil:
+document_properties_producer=Tvůrce PDF:
+document_properties_version=Verze PDF:
+document_properties_page_count=Počet stránek:
+document_properties_page_size=Velikost stránky:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=na výšku
+document_properties_page_size_orientation_landscape=na šířku
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Dopis
+document_properties_page_size_name_legal=Právní dokument
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rychlé zobrazování z webu:
+document_properties_linearized_yes=Ano
+document_properties_linearized_no=Ne
+document_properties_close=Zavřít
+
+print_progress_message=Příprava dokumentu pro tisk…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Zrušit
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Postranní lišta
+toggle_sidebar_notification.title=Přepne postranní lištu (dokument obsahuje osnovu/přílohy)
+toggle_sidebar_label=Postranní lišta
+document_outline.title=Zobrazí osnovu dokumentu (dvojité klepnutí rozbalí/sbalí všechny položky)
+document_outline_label=Osnova dokumentu
+attachments.title=Zobrazí přílohy
+attachments_label=Přílohy
+thumbs.title=Zobrazí náhledy
+thumbs_label=Náhledy
+findbar.title=Najde v dokumentu
+findbar_label=Najít
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Strana {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Náhled strany {{page}}
+
+# Find panel button title and messages
+find_input.title=Najít
+find_input.placeholder=Najít v dokumentu…
+find_previous.title=Najde předchozí výskyt hledaného textu
+find_previous_label=Předchozí
+find_next.title=Najde další výskyt hledaného textu
+find_next_label=Další
+find_highlight=Zvýraznit
+find_match_case_label=Rozlišovat velikost
+find_entire_word_label=Celá slova
+find_reached_top=Dosažen začátek dokumentu, pokračuje se od konce
+find_reached_bottom=Dosažen konec dokumentu, pokračuje se od začátku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}}. z {{total}} výskytu
+find_match_count[two]={{current}}. z {{total}} výskytů
+find_match_count[few]={{current}}. z {{total}} výskytů
+find_match_count[many]={{current}}. z {{total}} výskytů
+find_match_count[other]={{current}}. z {{total}} výskytů
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Více než {{limit}} výskytů
+find_match_count_limit[one]=Více než {{limit}} výskyt
+find_match_count_limit[two]=Více než {{limit}} výskyty
+find_match_count_limit[few]=Více než {{limit}} výskyty
+find_match_count_limit[many]=Více než {{limit}} výskytů
+find_match_count_limit[other]=Více než {{limit}} výskytů
+find_not_found=Hledaný text nenalezen
+
+# Error panel labels
+error_more_info=Více informací
+error_less_info=Méně informací
+error_close=Zavřít
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (sestavení: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Zpráva: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Zásobník: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Soubor: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Řádek: {{line}}
+rendering_error=Při vykreslování stránky nastala chyba.
+
+# Predefined zoom values
+page_scale_width=Podle šířky
+page_scale_fit=Podle výšky
+page_scale_auto=Automatická velikost
+page_scale_actual=Skutečná velikost
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Chyba
+loading_error=Při nahrávání PDF nastala chyba.
+invalid_file_error=Neplatný nebo chybný soubor PDF.
+missing_file_error=Chybí soubor PDF.
+unexpected_response_error=Neočekávaná odpověď serveru.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotace typu {{type}}]
+password_label=Pro otevření PDF souboru vložte heslo.
+password_invalid=Neplatné heslo. Zkuste to znovu.
+password_ok=OK
+password_cancel=Zrušit
+
+printing_not_supported=Upozornění: Tisk není v tomto prohlížeči plně podporován.
+printing_not_ready=Upozornění: Dokument PDF není kompletně načten.
+web_fonts_disabled=Webová písma jsou zakázána, proto není možné použít vložená písma PDF.
+document_colors_not_allowed=PDF dokumenty nemají povoleno používat vlastní barvy: volba 'Povolit stránkám používat vlastní barvy' je v prohlížeči deaktivována.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cy/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cy/viewer.properties
index dc4fb2ea40bc35f70201cf165f90567070e855be..2e0d27bb8d92cf3623f6199daf1edd2aae63216c 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cy/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/cy/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Tudalen Flaenorol
-previous_label=Blaenorol
-next.title=Tudalen Nesaf
-next_label=Nesaf
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Tudalen
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=o {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} o {{pagesCount}})
-
-zoom_out.title=Chwyddo Allan
-zoom_out_label=Chwyddo Allan
-zoom_in.title=Chwyddo Mewn
-zoom_in_label=Chwyddo Mewn
-zoom.title=Chwyddo
-presentation_mode.title=Newid i'r Modd Cyflwyno
-presentation_mode_label=Modd Cyflwyno
-open_file.title=Agor Ffeil
-open_file_label=Agor
-print.title=Argraffu
-print_label=Argraffu
-download.title=Llwyth
-download_label=Llwytho i Lawr
-bookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd)
-bookmark_label=Golwg Gyfredol
-
-# Secondary toolbar and context menu
-tools.title=Offer
-tools_label=Offer
-first_page.title=Mynd i'r Dudalen Gyntaf
-first_page.label=Mynd i'r Dudalen Gyntaf
-first_page_label=Mynd i'r Dudalen Gyntaf
-last_page.title=Mynd i'r Dudalen Olaf
-last_page.label=Mynd i'r Dudalen Olaf
-last_page_label=Mynd i'r Dudalen Olaf
-page_rotate_cw.title=Cylchdroi Clocwedd
-page_rotate_cw.label=Cylchdroi Clocwedd
-page_rotate_cw_label=Cylchdroi Clocwedd
-page_rotate_ccw.title=Cylchdroi Gwrthglocwedd
-page_rotate_ccw.label=Cylchdroi Gwrthglocwedd
-page_rotate_ccw_label=Cylchdroi Gwrthglocwedd
-
-cursor_text_select_tool.title=Galluogi Dewis Offeryn Testun
-cursor_text_select_tool_label=Offeryn Dewis Testun
-cursor_hand_tool.title=Galluogi Offeryn Llaw
-cursor_hand_tool_label=Offeryn Llaw
-
-scroll_vertical.title=Defnyddio Sgrolio Fertigol
-scroll_vertical_label=Sgrolio Fertigol
-scroll_horizontal.title=Defnyddio Sgrolio Fertigol
-scroll_horizontal_label=Sgrolio Fertigol
-scroll_wrapped.title=Defnyddio Sgrolio Amlapio
-scroll_wrapped_label=Sgrolio Amlapio
-
-spread_none.title=Peidio uno taeniadau canol
-spread_none_label=Dim Taeniadau
-spread_odd.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau odrif
-spread_odd_label=Taeniadau Odrifau
-spread_even.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau eilrif
-spread_even_label=Taeniadau Eilrif
-
-# Document properties dialog box
-document_properties.title=Priodweddau Dogfen…
-document_properties_label=Priodweddau Dogfen…
-document_properties_file_name=Enw ffeil:
-document_properties_file_size=Maint ffeil:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} beit)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} beit)
-document_properties_title=Teitl:
-document_properties_author=Awdur:
-document_properties_subject=Pwnc:
-document_properties_keywords=Allweddair:
-document_properties_creation_date=Dyddiad Creu:
-document_properties_modification_date=Dyddiad Addasu:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Crewr:
-document_properties_producer=Cynhyrchydd PDF:
-document_properties_version=Fersiwn PDF:
-document_properties_page_count=Cyfrif Tudalen:
-document_properties_page_size=Maint Tudalen:
-document_properties_page_size_unit_inches=o fewn
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portread
-document_properties_page_size_orientation_landscape=tirlun
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Llythyr
-document_properties_page_size_name_legal=Cyfreithiol
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Golwg Gwe Cyflym:
-document_properties_linearized_yes=Iawn
-document_properties_linearized_no=Na
-document_properties_close=Cau
-
-print_progress_message=Paratoi dogfen ar gyfer ei hargraffu…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Diddymu
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toglo'r Bar Ochr
-toggle_sidebar_notification.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys outline/attachments)
-toggle_sidebar_label=Toglo'r Bar Ochr
-document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem)
-document_outline_label=Amlinelliad Dogfen
-attachments.title=Dangos Atodiadau
-attachments_label=Atodiadau
-thumbs.title=Dangos Lluniau Bach
-thumbs_label=Lluniau Bach
-findbar.title=Canfod yn y Ddogfen
-findbar_label=Canfod
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Tudalen {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Tudalen {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Llun Bach Tudalen {{page}}
-
-# Find panel button title and messages
-find_input.title=Canfod
-find_input.placeholder=Canfod yn y ddogfen…
-find_previous.title=Canfod enghraifft flaenorol o'r ymadrodd
-find_previous_label=Blaenorol
-find_next.title=Canfod enghraifft nesaf yr ymadrodd
-find_next_label=Nesaf
-find_highlight=Amlygu popeth
-find_match_case_label=Cydweddu maint
-find_entire_word_label=Geiriau cyfan
-find_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod
-find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} o {{total}} cydweddiad
-find_match_count[two]={{current}} o {{total}} cydweddiad
-find_match_count[few]={{current}} o {{total}} cydweddiad
-find_match_count[many]={{current}} o {{total}} cydweddiad
-find_match_count[other]={{current}} o {{total}} cydweddiad
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mwy na {{limit}} cydweddiad
-find_match_count_limit[one]=Mwy na {{limit}} cydweddiad
-find_match_count_limit[two]=Mwy na {{limit}} cydweddiad
-find_match_count_limit[few]=Mwy na {{limit}} cydweddiad
-find_match_count_limit[many]=Mwy na {{limit}} cydweddiad
-find_match_count_limit[other]=Mwy na {{limit}} cydweddiad
-find_not_found=Heb ganfod ymadrodd
-
-# Error panel labels
-error_more_info=Rhagor o Wybodaeth
-error_less_info=Llai o wybodaeth
-error_close=Cau
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Neges: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stac: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Ffeil: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Llinell: {{line}}
-rendering_error=Digwyddodd gwall wrth adeiladu'r dudalen.
-
-# Predefined zoom values
-page_scale_width=Lled Tudalen
-page_scale_fit=Ffit Tudalen
-page_scale_auto=Chwyddo Awtomatig
-page_scale_actual=Maint Gwirioneddol
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Gwall
-loading_error=Digwyddodd gwall wrth lwytho'r PDF.
-invalid_file_error=Ffeil PDF annilys neu llwgr.
-missing_file_error=Ffeil PDF coll.
-unexpected_response_error=Ymateb annisgwyl gan y gweinydd.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anodiad {{type}} ]
-password_label=Rhowch gyfrinair i agor y PDF.
-password_invalid=Cyfrinair annilys. Ceisiwch eto.
-password_ok=Iawn
-password_cancel=Diddymu
-
-printing_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr.
-printing_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu.
-web_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig.
-document_colors_not_allowed=Nid oes caniatâd i ddogfennau PDF i ddefnyddio eu lliwiau eu hunain: Mae “Caniatáu i dudalennau ddefnyddio eu lliwiau eu hunain” wedi ei atal yn y porwr.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Tudalen Flaenorol
+previous_label=Blaenorol
+next.title=Tudalen Nesaf
+next_label=Nesaf
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Tudalen
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=o {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} o {{pagesCount}})
+
+zoom_out.title=Chwyddo Allan
+zoom_out_label=Chwyddo Allan
+zoom_in.title=Chwyddo Mewn
+zoom_in_label=Chwyddo Mewn
+zoom.title=Chwyddo
+presentation_mode.title=Newid i'r Modd Cyflwyno
+presentation_mode_label=Modd Cyflwyno
+open_file.title=Agor Ffeil
+open_file_label=Agor
+print.title=Argraffu
+print_label=Argraffu
+download.title=Llwyth
+download_label=Llwytho i Lawr
+bookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd)
+bookmark_label=Golwg Gyfredol
+
+# Secondary toolbar and context menu
+tools.title=Offer
+tools_label=Offer
+first_page.title=Mynd i'r Dudalen Gyntaf
+first_page.label=Mynd i'r Dudalen Gyntaf
+first_page_label=Mynd i'r Dudalen Gyntaf
+last_page.title=Mynd i'r Dudalen Olaf
+last_page.label=Mynd i'r Dudalen Olaf
+last_page_label=Mynd i'r Dudalen Olaf
+page_rotate_cw.title=Cylchdroi Clocwedd
+page_rotate_cw.label=Cylchdroi Clocwedd
+page_rotate_cw_label=Cylchdroi Clocwedd
+page_rotate_ccw.title=Cylchdroi Gwrthglocwedd
+page_rotate_ccw.label=Cylchdroi Gwrthglocwedd
+page_rotate_ccw_label=Cylchdroi Gwrthglocwedd
+
+cursor_text_select_tool.title=Galluogi Dewis Offeryn Testun
+cursor_text_select_tool_label=Offeryn Dewis Testun
+cursor_hand_tool.title=Galluogi Offeryn Llaw
+cursor_hand_tool_label=Offeryn Llaw
+
+scroll_vertical.title=Defnyddio Sgrolio Fertigol
+scroll_vertical_label=Sgrolio Fertigol
+scroll_horizontal.title=Defnyddio Sgrolio Fertigol
+scroll_horizontal_label=Sgrolio Fertigol
+scroll_wrapped.title=Defnyddio Sgrolio Amlapio
+scroll_wrapped_label=Sgrolio Amlapio
+
+spread_none.title=Peidio uno taeniadau canol
+spread_none_label=Dim Taeniadau
+spread_odd.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau odrif
+spread_odd_label=Taeniadau Odrifau
+spread_even.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau eilrif
+spread_even_label=Taeniadau Eilrif
+
+# Document properties dialog box
+document_properties.title=Priodweddau Dogfen…
+document_properties_label=Priodweddau Dogfen…
+document_properties_file_name=Enw ffeil:
+document_properties_file_size=Maint ffeil:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} beit)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} beit)
+document_properties_title=Teitl:
+document_properties_author=Awdur:
+document_properties_subject=Pwnc:
+document_properties_keywords=Allweddair:
+document_properties_creation_date=Dyddiad Creu:
+document_properties_modification_date=Dyddiad Addasu:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Crewr:
+document_properties_producer=Cynhyrchydd PDF:
+document_properties_version=Fersiwn PDF:
+document_properties_page_count=Cyfrif Tudalen:
+document_properties_page_size=Maint Tudalen:
+document_properties_page_size_unit_inches=o fewn
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portread
+document_properties_page_size_orientation_landscape=tirlun
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Llythyr
+document_properties_page_size_name_legal=Cyfreithiol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Golwg Gwe Cyflym:
+document_properties_linearized_yes=Iawn
+document_properties_linearized_no=Na
+document_properties_close=Cau
+
+print_progress_message=Paratoi dogfen ar gyfer ei hargraffu…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Diddymu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toglo'r Bar Ochr
+toggle_sidebar_notification.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys outline/attachments)
+toggle_sidebar_label=Toglo'r Bar Ochr
+document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem)
+document_outline_label=Amlinelliad Dogfen
+attachments.title=Dangos Atodiadau
+attachments_label=Atodiadau
+thumbs.title=Dangos Lluniau Bach
+thumbs_label=Lluniau Bach
+findbar.title=Canfod yn y Ddogfen
+findbar_label=Canfod
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Tudalen {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Tudalen {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Llun Bach Tudalen {{page}}
+
+# Find panel button title and messages
+find_input.title=Canfod
+find_input.placeholder=Canfod yn y ddogfen…
+find_previous.title=Canfod enghraifft flaenorol o'r ymadrodd
+find_previous_label=Blaenorol
+find_next.title=Canfod enghraifft nesaf yr ymadrodd
+find_next_label=Nesaf
+find_highlight=Amlygu popeth
+find_match_case_label=Cydweddu maint
+find_entire_word_label=Geiriau cyfan
+find_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod
+find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} o {{total}} cydweddiad
+find_match_count[two]={{current}} o {{total}} cydweddiad
+find_match_count[few]={{current}} o {{total}} cydweddiad
+find_match_count[many]={{current}} o {{total}} cydweddiad
+find_match_count[other]={{current}} o {{total}} cydweddiad
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[one]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[two]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[few]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[many]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[other]=Mwy na {{limit}} cydweddiad
+find_not_found=Heb ganfod ymadrodd
+
+# Error panel labels
+error_more_info=Rhagor o Wybodaeth
+error_less_info=Llai o wybodaeth
+error_close=Cau
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Neges: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stac: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ffeil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Llinell: {{line}}
+rendering_error=Digwyddodd gwall wrth adeiladu'r dudalen.
+
+# Predefined zoom values
+page_scale_width=Lled Tudalen
+page_scale_fit=Ffit Tudalen
+page_scale_auto=Chwyddo Awtomatig
+page_scale_actual=Maint Gwirioneddol
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Gwall
+loading_error=Digwyddodd gwall wrth lwytho'r PDF.
+invalid_file_error=Ffeil PDF annilys neu llwgr.
+missing_file_error=Ffeil PDF coll.
+unexpected_response_error=Ymateb annisgwyl gan y gweinydd.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anodiad {{type}} ]
+password_label=Rhowch gyfrinair i agor y PDF.
+password_invalid=Cyfrinair annilys. Ceisiwch eto.
+password_ok=Iawn
+password_cancel=Diddymu
+
+printing_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr.
+printing_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu.
+web_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig.
+document_colors_not_allowed=Nid oes caniatâd i ddogfennau PDF i ddefnyddio eu lliwiau eu hunain: Mae “Caniatáu i dudalennau ddefnyddio eu lliwiau eu hunain” wedi ei atal yn y porwr.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/da/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/da/viewer.properties
index 4f05fd980f7dd6c6a83308ce73370b17223ee87f..e69bbe701c70eac4be8d0b10595388f15a33f046 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/da/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/da/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Forrige side
-previous_label=Forrige
-next.title=Næste side
-next_label=Næste
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Side
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=af {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} af {{pagesCount}})
-
-zoom_out.title=Zoom ud
-zoom_out_label=Zoom ud
-zoom_in.title=Zoom ind
-zoom_in_label=Zoom ind
-zoom.title=Zoom
-print.title=Udskriv
-print_label=Udskriv
-presentation_mode.title=Skift til fuldskærmsvisning
-presentation_mode_label=Fuldskærmsvisning
-open_file.title=Åbn fil
-open_file_label=Åbn
-download.title=Hent
-download_label=Hent
-bookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue)
-bookmark_label=Aktuel visning
-
-# Secondary toolbar and context menu
-tools.title=Funktioner
-tools_label=Funktioner
-first_page.title=Gå til første side
-first_page.label=Gå til første side
-first_page_label=Gå til første side
-last_page.title=Gå til sidste side
-last_page.label=Gå til sidste side
-last_page_label=Gå til sidste side
-page_rotate_cw.title=Roter med uret
-page_rotate_cw.label=Roter med uret
-page_rotate_cw_label=Roter med uret
-page_rotate_ccw.title=Roter mod uret
-page_rotate_ccw.label=Roter mod uret
-page_rotate_ccw_label=Roter mod uret
-
-cursor_text_select_tool.title=Aktiver markeringsværktøj
-cursor_text_select_tool_label=Markeringsværktøj
-cursor_hand_tool.title=Aktiver håndværktøj
-cursor_hand_tool_label=Håndværktøj
-
-scroll_vertical.title=Brug vertikal scrolling
-scroll_vertical_label=Vertikal scrolling
-scroll_horizontal.title=Brug horisontal scrolling
-scroll_horizontal_label=Horisontal scrolling
-scroll_wrapped.title=Brug ombrudt scrolling
-scroll_wrapped_label=Ombrudt scrolling
-
-spread_none.title=Vis enkeltsider
-spread_none_label=Enkeltsider
-spread_odd.title=Vis opslag med ulige sidenumre til venstre
-spread_odd_label=Opslag med forside
-spread_even.title=Vis opslag med lige sidenumre til venstre
-spread_even_label=Opslag uden forside
-
-# Document properties dialog box
-document_properties.title=Dokumentegenskaber…
-document_properties_label=Dokumentegenskaber…
-document_properties_file_name=Filnavn:
-document_properties_file_size=Filstørrelse:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Titel:
-document_properties_author=Forfatter:
-document_properties_subject=Emne:
-document_properties_keywords=Nøgleord:
-document_properties_creation_date=Oprettet:
-document_properties_modification_date=Redigeret:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Program:
-document_properties_producer=PDF-producent:
-document_properties_version=PDF-version:
-document_properties_page_count=Antal sider:
-document_properties_page_size=Sidestørrelse:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=stående
-document_properties_page_size_orientation_landscape=liggende
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Hurtig web-visning:
-document_properties_linearized_yes=Ja
-document_properties_linearized_no=Nej
-document_properties_close=Luk
-
-print_progress_message=Forbereder dokument til udskrivning…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Annuller
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Slå sidepanel til eller fra
-toggle_sidebar_notification.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer)
-toggle_sidebar_label=Slå sidepanel til eller fra
-document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer)
-document_outline_label=Dokument-disposition
-attachments.title=Vis vedhæftede filer
-attachments_label=Vedhæftede filer
-thumbs.title=Vis miniaturer
-thumbs_label=Miniaturer
-findbar.title=Find i dokument
-findbar_label=Find
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Side {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Side {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniature af side {{page}}
-
-# Find panel button title and messages
-find_input.title=Find
-find_input.placeholder=Find i dokument…
-find_previous.title=Find den forrige forekomst
-find_previous_label=Forrige
-find_next.title=Find den næste forekomst
-find_next_label=Næste
-find_highlight=Fremhæv alle
-find_match_case_label=Forskel på store og små bogstaver
-find_entire_word_label=Hele ord
-find_reached_top=Toppen af siden blev nået, fortsatte fra bunden
-find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} af {{total}} forekomst
-find_match_count[two]={{current}} af {{total}} forekomster
-find_match_count[few]={{current}} af {{total}} forekomster
-find_match_count[many]={{current}} af {{total}} forekomster
-find_match_count[other]={{current}} af {{total}} forekomster
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mere end {{limit}} forekomster
-find_match_count_limit[one]=Mere end {{limit}} forekomst
-find_match_count_limit[two]=Mere end {{limit}} forekomster
-find_match_count_limit[few]=Mere end {{limit}} forekomster
-find_match_count_limit[many]=Mere end {{limit}} forekomster
-find_match_count_limit[other]=Mere end {{limit}} forekomster
-find_not_found=Der blev ikke fundet noget
-
-# Error panel labels
-error_more_info=Mere information
-error_less_info=Mindre information
-error_close=Luk
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Fejlmeddelelse: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fil: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linje: {{line}}
-rendering_error=Der opstod en fejl ved generering af siden.
-
-# Predefined zoom values
-page_scale_width=Sidebredde
-page_scale_fit=Tilpas til side
-page_scale_auto=Automatisk zoom
-page_scale_actual=Faktisk størrelse
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Fejl
-loading_error=Der opstod en fejl ved indlæsning af PDF-filen.
-invalid_file_error=PDF-filen er ugyldig eller ødelagt.
-missing_file_error=Manglende PDF-fil.
-unexpected_response_error=Uventet svar fra serveren.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}}kommentar]
-password_label=Angiv adgangskode til at åbne denne PDF-fil.
-password_invalid=Ugyldig adgangskode. Prøv igen.
-password_ok=OK
-password_cancel=Fortryd
-
-printing_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren.
-printing_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning.
-web_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes.
-document_colors_not_allowed=PDF-dokumenter må ikke bruge deres egne farver: 'Tillad sider at vælge deres egne farver' er deaktiveret i browseren.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Forrige side
+previous_label=Forrige
+next.title=Næste side
+next_label=Næste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=af {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} af {{pagesCount}})
+
+zoom_out.title=Zoom ud
+zoom_out_label=Zoom ud
+zoom_in.title=Zoom ind
+zoom_in_label=Zoom ind
+zoom.title=Zoom
+print.title=Udskriv
+print_label=Udskriv
+presentation_mode.title=Skift til fuldskærmsvisning
+presentation_mode_label=Fuldskærmsvisning
+open_file.title=Åbn fil
+open_file_label=Åbn
+download.title=Hent
+download_label=Hent
+bookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue)
+bookmark_label=Aktuel visning
+
+# Secondary toolbar and context menu
+tools.title=Funktioner
+tools_label=Funktioner
+first_page.title=Gå til første side
+first_page.label=Gå til første side
+first_page_label=Gå til første side
+last_page.title=Gå til sidste side
+last_page.label=Gå til sidste side
+last_page_label=Gå til sidste side
+page_rotate_cw.title=Roter med uret
+page_rotate_cw.label=Roter med uret
+page_rotate_cw_label=Roter med uret
+page_rotate_ccw.title=Roter mod uret
+page_rotate_ccw.label=Roter mod uret
+page_rotate_ccw_label=Roter mod uret
+
+cursor_text_select_tool.title=Aktiver markeringsværktøj
+cursor_text_select_tool_label=Markeringsværktøj
+cursor_hand_tool.title=Aktiver håndværktøj
+cursor_hand_tool_label=Håndværktøj
+
+scroll_vertical.title=Brug vertikal scrolling
+scroll_vertical_label=Vertikal scrolling
+scroll_horizontal.title=Brug horisontal scrolling
+scroll_horizontal_label=Horisontal scrolling
+scroll_wrapped.title=Brug ombrudt scrolling
+scroll_wrapped_label=Ombrudt scrolling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltsider
+spread_odd.title=Vis opslag med ulige sidenumre til venstre
+spread_odd_label=Opslag med forside
+spread_even.title=Vis opslag med lige sidenumre til venstre
+spread_even_label=Opslag uden forside
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaber…
+document_properties_label=Dokumentegenskaber…
+document_properties_file_name=Filnavn:
+document_properties_file_size=Filstørrelse:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Forfatter:
+document_properties_subject=Emne:
+document_properties_keywords=Nøgleord:
+document_properties_creation_date=Oprettet:
+document_properties_modification_date=Redigeret:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Program:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-version:
+document_properties_page_count=Antal sider:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stående
+document_properties_page_size_orientation_landscape=liggende
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hurtig web-visning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nej
+document_properties_close=Luk
+
+print_progress_message=Forbereder dokument til udskrivning…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annuller
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå sidepanel til eller fra
+toggle_sidebar_notification.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer)
+toggle_sidebar_label=Slå sidepanel til eller fra
+document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer)
+document_outline_label=Dokument-disposition
+attachments.title=Vis vedhæftede filer
+attachments_label=Vedhæftede filer
+thumbs.title=Vis miniaturer
+thumbs_label=Miniaturer
+findbar.title=Find i dokument
+findbar_label=Find
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniature af side {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find i dokument…
+find_previous.title=Find den forrige forekomst
+find_previous_label=Forrige
+find_next.title=Find den næste forekomst
+find_next_label=Næste
+find_highlight=Fremhæv alle
+find_match_case_label=Forskel på store og små bogstaver
+find_entire_word_label=Hele ord
+find_reached_top=Toppen af siden blev nået, fortsatte fra bunden
+find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} af {{total}} forekomst
+find_match_count[two]={{current}} af {{total}} forekomster
+find_match_count[few]={{current}} af {{total}} forekomster
+find_match_count[many]={{current}} af {{total}} forekomster
+find_match_count[other]={{current}} af {{total}} forekomster
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mere end {{limit}} forekomster
+find_match_count_limit[one]=Mere end {{limit}} forekomst
+find_match_count_limit[two]=Mere end {{limit}} forekomster
+find_match_count_limit[few]=Mere end {{limit}} forekomster
+find_match_count_limit[many]=Mere end {{limit}} forekomster
+find_match_count_limit[other]=Mere end {{limit}} forekomster
+find_not_found=Der blev ikke fundet noget
+
+# Error panel labels
+error_more_info=Mere information
+error_less_info=Mindre information
+error_close=Luk
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Fejlmeddelelse: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=Der opstod en fejl ved generering af siden.
+
+# Predefined zoom values
+page_scale_width=Sidebredde
+page_scale_fit=Tilpas til side
+page_scale_auto=Automatisk zoom
+page_scale_actual=Faktisk størrelse
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fejl
+loading_error=Der opstod en fejl ved indlæsning af PDF-filen.
+invalid_file_error=PDF-filen er ugyldig eller ødelagt.
+missing_file_error=Manglende PDF-fil.
+unexpected_response_error=Uventet svar fra serveren.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}kommentar]
+password_label=Angiv adgangskode til at åbne denne PDF-fil.
+password_invalid=Ugyldig adgangskode. Prøv igen.
+password_ok=OK
+password_cancel=Fortryd
+
+printing_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren.
+printing_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning.
+web_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes.
+document_colors_not_allowed=PDF-dokumenter må ikke bruge deres egne farver: 'Tillad sider at vælge deres egne farver' er deaktiveret i browseren.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/de/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/de/viewer.properties
index 84240bb2068614009bd3032d1044f4889f1e9c1c..bc441c92f32d24e330cf5c18ca5231eec93fa72a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/de/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/de/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Eine Seite zurück
-previous_label=Zurück
-next.title=Eine Seite vor
-next_label=Vor
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Seite
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=von {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} von {{pagesCount}})
-
-zoom_out.title=Verkleinern
-zoom_out_label=Verkleinern
-zoom_in.title=Vergrößern
-zoom_in_label=Vergrößern
-zoom.title=Zoom
-presentation_mode.title=In Präsentationsmodus wechseln
-presentation_mode_label=Präsentationsmodus
-open_file.title=Datei öffnen
-open_file_label=Öffnen
-print.title=Drucken
-print_label=Drucken
-download.title=Dokument speichern
-download_label=Speichern
-bookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster)
-bookmark_label=Aktuelle Ansicht
-
-# Secondary toolbar and context menu
-tools.title=Werkzeuge
-tools_label=Werkzeuge
-first_page.title=Erste Seite anzeigen
-first_page.label=Erste Seite anzeigen
-first_page_label=Erste Seite anzeigen
-last_page.title=Letzte Seite anzeigen
-last_page.label=Letzte Seite anzeigen
-last_page_label=Letzte Seite anzeigen
-page_rotate_cw.title=Im Uhrzeigersinn drehen
-page_rotate_cw.label=Im Uhrzeigersinn drehen
-page_rotate_cw_label=Im Uhrzeigersinn drehen
-page_rotate_ccw.title=Gegen Uhrzeigersinn drehen
-page_rotate_ccw.label=Gegen Uhrzeigersinn drehen
-page_rotate_ccw_label=Gegen Uhrzeigersinn drehen
-
-cursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren
-cursor_text_select_tool_label=Textauswahl-Werkzeug
-cursor_hand_tool.title=Hand-Werkzeug aktivieren
-cursor_hand_tool_label=Hand-Werkzeug
-
-scroll_vertical.title=Seiten übereinander anordnen
-scroll_vertical_label=Vertikale Seitenanordnung
-scroll_horizontal.title=Seiten nebeneinander anordnen
-scroll_horizontal_label=Horizontale Seitenanordnung
-scroll_wrapped.title=Seiten neben- und übereinander anordnen, anhängig vom Platz
-scroll_wrapped_label=Kombinierte Seitenanordnung
-
-spread_none.title=Seiten nicht nebeneinander anzeigen
-spread_none_label=Einzelne Seiten
-spread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen
-spread_odd_label=Ungerade + gerade Seite
-spread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen
-spread_even_label=Gerade + ungerade Seite
-
-# Document properties dialog box
-document_properties.title=Dokumenteigenschaften
-document_properties_label=Dokumenteigenschaften…
-document_properties_file_name=Dateiname:
-document_properties_file_size=Dateigröße:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} Bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} Bytes)
-document_properties_title=Titel:
-document_properties_author=Autor:
-document_properties_subject=Thema:
-document_properties_keywords=Stichwörter:
-document_properties_creation_date=Erstelldatum:
-document_properties_modification_date=Bearbeitungsdatum:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}} {{time}}
-document_properties_creator=Anwendung:
-document_properties_producer=PDF erstellt mit:
-document_properties_version=PDF-Version:
-document_properties_page_count=Seitenzahl:
-document_properties_page_size=Seitengröße:
-document_properties_page_size_unit_inches=Zoll
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=Hochformat
-document_properties_page_size_orientation_landscape=Querformat
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Schnelle Webanzeige:
-document_properties_linearized_yes=Ja
-document_properties_linearized_no=Nein
-document_properties_close=Schließen
-
-print_progress_message=Dokument wird für Drucken vorbereitet…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}} %
-print_progress_close=Abbrechen
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Sidebar umschalten
-toggle_sidebar_notification.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge)
-toggle_sidebar_label=Sidebar umschalten
-document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)
-document_outline_label=Dokumentstruktur
-attachments.title=Anhänge anzeigen
-attachments_label=Anhänge
-thumbs.title=Miniaturansichten anzeigen
-thumbs_label=Miniaturansichten
-findbar.title=Dokument durchsuchen
-findbar_label=Suchen
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Seite {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Seite {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniaturansicht von Seite {{page}}
-
-# Find panel button title and messages
-find_input.title=Suchen
-find_input.placeholder=Im Dokument suchen…
-find_previous.title=Vorheriges Vorkommen des Suchbegriffs finden
-find_previous_label=Zurück
-find_next.title=Nächstes Vorkommen des Suchbegriffs finden
-find_next_label=Weiter
-find_highlight=Alle hervorheben
-find_match_case_label=Groß-/Kleinschreibung beachten
-find_entire_word_label=Ganze Wörter
-find_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort
-find_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} von {{total}} Übereinstimmung
-find_match_count[two]={{current}} von {{total}} Übereinstimmungen
-find_match_count[few]={{current}} von {{total}} Übereinstimmungen
-find_match_count[many]={{current}} von {{total}} Übereinstimmungen
-find_match_count[other]={{current}} von {{total}} Übereinstimmungen
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen
-find_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung
-find_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen
-find_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen
-find_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen
-find_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen
-find_not_found=Suchbegriff nicht gefunden
-
-# Error panel labels
-error_more_info=Mehr Informationen
-error_less_info=Weniger Informationen
-error_close=Schließen
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js Version {{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Nachricht: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Aufrufliste: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Datei: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Zeile: {{line}}
-rendering_error=Beim Darstellen der Seite trat ein Fehler auf.
-
-# Predefined zoom values
-page_scale_width=Seitenbreite
-page_scale_fit=Seitengröße
-page_scale_auto=Automatischer Zoom
-page_scale_actual=Originalgröße
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Fehler
-loading_error=Beim Laden der PDF-Datei trat ein Fehler auf.
-invalid_file_error=Ungültige oder beschädigte PDF-Datei
-missing_file_error=Fehlende PDF-Datei
-unexpected_response_error=Unerwartete Antwort des Servers
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anlage: {{type}}]
-password_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein.
-password_invalid=Falsches Passwort. Bitte versuchen Sie es erneut.
-password_ok=OK
-password_cancel=Abbrechen
-
-printing_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt.
-printing_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen.
-web_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden.
-document_colors_not_allowed=PDF-Dokumenten ist es nicht erlaubt, ihre eigenen Farben zu verwenden: 'Seiten das Verwenden von eigenen Farben erlauben' ist im Browser deaktiviert.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Eine Seite zurück
+previous_label=Zurück
+next.title=Eine Seite vor
+next_label=Vor
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Seite
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=von {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} von {{pagesCount}})
+
+zoom_out.title=Verkleinern
+zoom_out_label=Verkleinern
+zoom_in.title=Vergrößern
+zoom_in_label=Vergrößern
+zoom.title=Zoom
+presentation_mode.title=In Präsentationsmodus wechseln
+presentation_mode_label=Präsentationsmodus
+open_file.title=Datei öffnen
+open_file_label=Öffnen
+print.title=Drucken
+print_label=Drucken
+download.title=Dokument speichern
+download_label=Speichern
+bookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster)
+bookmark_label=Aktuelle Ansicht
+
+# Secondary toolbar and context menu
+tools.title=Werkzeuge
+tools_label=Werkzeuge
+first_page.title=Erste Seite anzeigen
+first_page.label=Erste Seite anzeigen
+first_page_label=Erste Seite anzeigen
+last_page.title=Letzte Seite anzeigen
+last_page.label=Letzte Seite anzeigen
+last_page_label=Letzte Seite anzeigen
+page_rotate_cw.title=Im Uhrzeigersinn drehen
+page_rotate_cw.label=Im Uhrzeigersinn drehen
+page_rotate_cw_label=Im Uhrzeigersinn drehen
+page_rotate_ccw.title=Gegen Uhrzeigersinn drehen
+page_rotate_ccw.label=Gegen Uhrzeigersinn drehen
+page_rotate_ccw_label=Gegen Uhrzeigersinn drehen
+
+cursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren
+cursor_text_select_tool_label=Textauswahl-Werkzeug
+cursor_hand_tool.title=Hand-Werkzeug aktivieren
+cursor_hand_tool_label=Hand-Werkzeug
+
+scroll_vertical.title=Seiten übereinander anordnen
+scroll_vertical_label=Vertikale Seitenanordnung
+scroll_horizontal.title=Seiten nebeneinander anordnen
+scroll_horizontal_label=Horizontale Seitenanordnung
+scroll_wrapped.title=Seiten neben- und übereinander anordnen, anhängig vom Platz
+scroll_wrapped_label=Kombinierte Seitenanordnung
+
+spread_none.title=Seiten nicht nebeneinander anzeigen
+spread_none_label=Einzelne Seiten
+spread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen
+spread_odd_label=Ungerade + gerade Seite
+spread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen
+spread_even_label=Gerade + ungerade Seite
+
+# Document properties dialog box
+document_properties.title=Dokumenteigenschaften
+document_properties_label=Dokumenteigenschaften…
+document_properties_file_name=Dateiname:
+document_properties_file_size=Dateigröße:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} Bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} Bytes)
+document_properties_title=Titel:
+document_properties_author=Autor:
+document_properties_subject=Thema:
+document_properties_keywords=Stichwörter:
+document_properties_creation_date=Erstelldatum:
+document_properties_modification_date=Bearbeitungsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Anwendung:
+document_properties_producer=PDF erstellt mit:
+document_properties_version=PDF-Version:
+document_properties_page_count=Seitenzahl:
+document_properties_page_size=Seitengröße:
+document_properties_page_size_unit_inches=Zoll
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Hochformat
+document_properties_page_size_orientation_landscape=Querformat
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Schnelle Webanzeige:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nein
+document_properties_close=Schließen
+
+print_progress_message=Dokument wird für Drucken vorbereitet…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Abbrechen
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sidebar umschalten
+toggle_sidebar_notification.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge)
+toggle_sidebar_label=Sidebar umschalten
+document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)
+document_outline_label=Dokumentstruktur
+attachments.title=Anhänge anzeigen
+attachments_label=Anhänge
+thumbs.title=Miniaturansichten anzeigen
+thumbs_label=Miniaturansichten
+findbar.title=Dokument durchsuchen
+findbar_label=Suchen
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Seite {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Seite {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturansicht von Seite {{page}}
+
+# Find panel button title and messages
+find_input.title=Suchen
+find_input.placeholder=Im Dokument suchen…
+find_previous.title=Vorheriges Vorkommen des Suchbegriffs finden
+find_previous_label=Zurück
+find_next.title=Nächstes Vorkommen des Suchbegriffs finden
+find_next_label=Weiter
+find_highlight=Alle hervorheben
+find_match_case_label=Groß-/Kleinschreibung beachten
+find_entire_word_label=Ganze Wörter
+find_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort
+find_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} von {{total}} Übereinstimmung
+find_match_count[two]={{current}} von {{total}} Übereinstimmungen
+find_match_count[few]={{current}} von {{total}} Übereinstimmungen
+find_match_count[many]={{current}} von {{total}} Übereinstimmungen
+find_match_count[other]={{current}} von {{total}} Übereinstimmungen
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung
+find_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen
+find_not_found=Suchbegriff nicht gefunden
+
+# Error panel labels
+error_more_info=Mehr Informationen
+error_less_info=Weniger Informationen
+error_close=Schließen
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js Version {{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Nachricht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Aufrufliste: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datei: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Zeile: {{line}}
+rendering_error=Beim Darstellen der Seite trat ein Fehler auf.
+
+# Predefined zoom values
+page_scale_width=Seitenbreite
+page_scale_fit=Seitengröße
+page_scale_auto=Automatischer Zoom
+page_scale_actual=Originalgröße
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Fehler
+loading_error=Beim Laden der PDF-Datei trat ein Fehler auf.
+invalid_file_error=Ungültige oder beschädigte PDF-Datei
+missing_file_error=Fehlende PDF-Datei
+unexpected_response_error=Unerwartete Antwort des Servers
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anlage: {{type}}]
+password_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein.
+password_invalid=Falsches Passwort. Bitte versuchen Sie es erneut.
+password_ok=OK
+password_cancel=Abbrechen
+
+printing_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt.
+printing_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen.
+web_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden.
+document_colors_not_allowed=PDF-Dokumenten ist es nicht erlaubt, ihre eigenen Farben zu verwenden: 'Seiten das Verwenden von eigenen Farben erlauben' ist im Browser deaktiviert.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/dsb/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/dsb/viewer.properties
index eb567ecb6f86bd652b681de06cdad46098f2b1f5..597a76cba6039e5f878bc95b991a20a1f957225c 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/dsb/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/dsb/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pjerwjejšny bok
-previous_label=Slědk
-next.title=Pśiducy bok
-next_label=Dalej
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Bok
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=z {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} z {{pagesCount}})
-
-zoom_out.title=Pómjeńšyś
-zoom_out_label=Pómjeńšyś
-zoom_in.title=Pówětšyś
-zoom_in_label=Pówětšyś
-zoom.title=Skalěrowanje
-presentation_mode.title=Do prezentaciskego modusa pśejś
-presentation_mode_label=Prezentaciski modus
-open_file.title=Dataju wócyniś
-open_file_label=Wócyniś
-print.title=Śišćaś
-print_label=Śišćaś
-download.title=Ześěgnuś
-download_label=Ześěgnuś
-bookmark.title=Aktualny naglěd (kopěrowaś abo w nowem woknje wócyniś)
-bookmark_label=Aktualny naglěd
-
-# Secondary toolbar and context menu
-tools.title=Rědy
-tools_label=Rědy
-first_page.title=K prědnemu bokoju
-first_page.label=K prědnemu bokoju
-first_page_label=K prědnemu bokoju
-last_page.title=K slědnemu bokoju
-last_page.label=K slědnemu bokoju
-last_page_label=K slědnemu bokoju
-page_rotate_cw.title=Wobwjertnuś ako špěra źo
-page_rotate_cw.label=Wobwjertnuś ako špěra źo
-page_rotate_cw_label=Wobwjertnuś ako špěra źo
-page_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo
-page_rotate_ccw.label=Wobwjertnuś nawopaki ako špěra źo
-page_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo
-
-cursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś
-cursor_text_select_tool_label=Rěd za wuběranje teksta
-cursor_hand_tool.title=Rucny rěd zmóžniś
-cursor_hand_tool_label=Rucny rěd
-
-scroll_vertical.title=Wertikalne suwanje wužywaś
-scroll_vertical_label=Wertikalnje suwanje
-scroll_horizontal.title=Horicontalne suwanje wužywaś
-scroll_horizontal_label=Horicontalne suwanje
-scroll_wrapped.title=Pózlažke suwanje wužywaś
-scroll_wrapped_label=Pózlažke suwanje
-
-spread_none.title=Boki njezwězaś
-spread_none_label=Žeden dwójny bok
-spread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś
-spread_odd_label=Njerowne boki
-spread_even.title=Boki zachopinajucy z rownymi bokami zwězaś
-spread_even_label=Rowne boki
-
-# Document properties dialog box
-document_properties.title=Dokumentowe kakosći…
-document_properties_label=Dokumentowe kakosći…
-document_properties_file_name=Mě dataje:
-document_properties_file_size=Wjelikosć dataje:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
-document_properties_title=Titel:
-document_properties_author=Awtor:
-document_properties_subject=Tema:
-document_properties_keywords=Klucowe słowa:
-document_properties_creation_date=Datum napóranja:
-document_properties_modification_date=Datum změny:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Awtor:
-document_properties_producer=PDF-gótowaŕ:
-document_properties_version=PDF-wersija:
-document_properties_page_count=Licba bokow:
-document_properties_page_size=Wjelikosć boka:
-document_properties_page_size_unit_inches=col
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=wusoki format
-document_properties_page_size_orientation_landscape=prěcny format
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Jo
-document_properties_linearized_no=Ně
-document_properties_close=Zacyniś
-
-print_progress_message=Dokument pśigótujo se za śišćanje…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Pśetergnuś
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Bócnicu pokazaś/schowaś
-toggle_sidebar_notification.title=Bocnicu pśešaltowaś (dokument wopśimujo pśeglěd/pśipiski)
-toggle_sidebar_label=Bócnicu pokazaś/schowaś
-document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali)
-document_outline_label=Dokumentowa struktura
-attachments.title=Pśidanki pokazaś
-attachments_label=Pśidanki
-thumbs.title=Miniatury pokazaś
-thumbs_label=Miniatury
-findbar.title=W dokumenśe pytaś
-findbar_label=Pytaś
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Bok {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Bok {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura boka {{page}}
-
-# Find panel button title and messages
-find_input.title=Pytaś
-find_input.placeholder=W dokumenśe pytaś…
-find_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś
-find_previous_label=Slědk
-find_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś
-find_next_label=Dalej
-find_highlight=Wšykne wuzwignuś
-find_match_case_label=Na wjelikopisanje źiwaś
-find_entire_word_label=Cełe słowa
-find_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom
-find_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} z {{total}} wótpowědnika
-find_match_count[two]={{current}} z {{total}} wótpowědnikowu
-find_match_count[few]={{current}} z {{total}} wótpowědnikow
-find_match_count[many]={{current}} z {{total}} wótpowědnikow
-find_match_count[other]={{current}} z {{total}} wótpowědnikow
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow
-find_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik
-find_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika
-find_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki
-find_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow
-find_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow
-find_not_found=Pytański wuraz njejo se namakał
-
-# Error panel labels
-error_more_info=Wěcej informacijow
-error_less_info=Mjenjej informacijow
-error_close=Zacyniś
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Powěźenka: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Lisćina zawołanjow: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Dataja: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Smužka: {{line}}
-rendering_error=Pśi zwobraznjanju boka jo zmólka nastała.
-
-# Predefined zoom values
-page_scale_width=Šyrokosć boka
-page_scale_fit=Wjelikosć boka
-page_scale_auto=Awtomatiske skalěrowanje
-page_scale_actual=Aktualna wjelikosć
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Zmólka
-loading_error=Pśi zacytowanju PDF jo zmólka nastała.
-invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja.
-missing_file_error=Felujuca PDF-dataja.
-unexpected_response_error=Njewócakane serwerowe wótegrono.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Typ pśipiskow: {{type}}]
-password_label=Zapódajśo gronidło, aby PDF-dataju wócynił.
-password_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz.
-password_ok=W pórěźe
-password_cancel=Pśetergnuś
-
-printing_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak.
-printing_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał.
-web_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś.
-document_colors_not_allowed=PDF-dokumenty njesměju swóje barwy wužywaś: 'Bokam dowóliś, swóje barwy wužywaś' jo we wobglědowaku znjemóžnjone.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pjerwjejšny bok
+previous_label=Slědk
+next.title=Pśiducy bok
+next_label=Dalej
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Bok
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pómjeńšyś
+zoom_out_label=Pómjeńšyś
+zoom_in.title=Pówětšyś
+zoom_in_label=Pówětšyś
+zoom.title=Skalěrowanje
+presentation_mode.title=Do prezentaciskego modusa pśejś
+presentation_mode_label=Prezentaciski modus
+open_file.title=Dataju wócyniś
+open_file_label=Wócyniś
+print.title=Śišćaś
+print_label=Śišćaś
+download.title=Ześěgnuś
+download_label=Ześěgnuś
+bookmark.title=Aktualny naglěd (kopěrowaś abo w nowem woknje wócyniś)
+bookmark_label=Aktualny naglěd
+
+# Secondary toolbar and context menu
+tools.title=Rědy
+tools_label=Rědy
+first_page.title=K prědnemu bokoju
+first_page.label=K prědnemu bokoju
+first_page_label=K prědnemu bokoju
+last_page.title=K slědnemu bokoju
+last_page.label=K slědnemu bokoju
+last_page_label=K slědnemu bokoju
+page_rotate_cw.title=Wobwjertnuś ako špěra źo
+page_rotate_cw.label=Wobwjertnuś ako špěra źo
+page_rotate_cw_label=Wobwjertnuś ako špěra źo
+page_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo
+page_rotate_ccw.label=Wobwjertnuś nawopaki ako špěra źo
+page_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo
+
+cursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś
+cursor_text_select_tool_label=Rěd za wuběranje teksta
+cursor_hand_tool.title=Rucny rěd zmóžniś
+cursor_hand_tool_label=Rucny rěd
+
+scroll_vertical.title=Wertikalne suwanje wužywaś
+scroll_vertical_label=Wertikalnje suwanje
+scroll_horizontal.title=Horicontalne suwanje wužywaś
+scroll_horizontal_label=Horicontalne suwanje
+scroll_wrapped.title=Pózlažke suwanje wužywaś
+scroll_wrapped_label=Pózlažke suwanje
+
+spread_none.title=Boki njezwězaś
+spread_none_label=Žeden dwójny bok
+spread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś
+spread_odd_label=Njerowne boki
+spread_even.title=Boki zachopinajucy z rownymi bokami zwězaś
+spread_even_label=Rowne boki
+
+# Document properties dialog box
+document_properties.title=Dokumentowe kakosći…
+document_properties_label=Dokumentowe kakosći…
+document_properties_file_name=Mě dataje:
+document_properties_file_size=Wjelikosć dataje:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
+document_properties_title=Titel:
+document_properties_author=Awtor:
+document_properties_subject=Tema:
+document_properties_keywords=Klucowe słowa:
+document_properties_creation_date=Datum napóranja:
+document_properties_modification_date=Datum změny:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Awtor:
+document_properties_producer=PDF-gótowaŕ:
+document_properties_version=PDF-wersija:
+document_properties_page_count=Licba bokow:
+document_properties_page_size=Wjelikosć boka:
+document_properties_page_size_unit_inches=col
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=wusoki format
+document_properties_page_size_orientation_landscape=prěcny format
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Jo
+document_properties_linearized_no=Ně
+document_properties_close=Zacyniś
+
+print_progress_message=Dokument pśigótujo se za śišćanje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Pśetergnuś
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Bócnicu pokazaś/schowaś
+toggle_sidebar_notification.title=Bocnicu pśešaltowaś (dokument wopśimujo pśeglěd/pśipiski)
+toggle_sidebar_label=Bócnicu pokazaś/schowaś
+document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali)
+document_outline_label=Dokumentowa struktura
+attachments.title=Pśidanki pokazaś
+attachments_label=Pśidanki
+thumbs.title=Miniatury pokazaś
+thumbs_label=Miniatury
+findbar.title=W dokumenśe pytaś
+findbar_label=Pytaś
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Bok {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Bok {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura boka {{page}}
+
+# Find panel button title and messages
+find_input.title=Pytaś
+find_input.placeholder=W dokumenśe pytaś…
+find_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś
+find_previous_label=Slědk
+find_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś
+find_next_label=Dalej
+find_highlight=Wšykne wuzwignuś
+find_match_case_label=Na wjelikopisanje źiwaś
+find_entire_word_label=Cełe słowa
+find_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom
+find_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} z {{total}} wótpowědnika
+find_match_count[two]={{current}} z {{total}} wótpowědnikowu
+find_match_count[few]={{current}} z {{total}} wótpowědnikow
+find_match_count[many]={{current}} z {{total}} wótpowědnikow
+find_match_count[other]={{current}} z {{total}} wótpowědnikow
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow
+find_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik
+find_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika
+find_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki
+find_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow
+find_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow
+find_not_found=Pytański wuraz njejo se namakał
+
+# Error panel labels
+error_more_info=Wěcej informacijow
+error_less_info=Mjenjej informacijow
+error_close=Zacyniś
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Powěźenka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Lisćina zawołanjow: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dataja: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Smužka: {{line}}
+rendering_error=Pśi zwobraznjanju boka jo zmólka nastała.
+
+# Predefined zoom values
+page_scale_width=Šyrokosć boka
+page_scale_fit=Wjelikosć boka
+page_scale_auto=Awtomatiske skalěrowanje
+page_scale_actual=Aktualna wjelikosć
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Zmólka
+loading_error=Pśi zacytowanju PDF jo zmólka nastała.
+invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja.
+missing_file_error=Felujuca PDF-dataja.
+unexpected_response_error=Njewócakane serwerowe wótegrono.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Typ pśipiskow: {{type}}]
+password_label=Zapódajśo gronidło, aby PDF-dataju wócynił.
+password_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz.
+password_ok=W pórěźe
+password_cancel=Pśetergnuś
+
+printing_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak.
+printing_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał.
+web_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś.
+document_colors_not_allowed=PDF-dokumenty njesměju swóje barwy wužywaś: 'Bokam dowóliś, swóje barwy wužywaś' jo we wobglědowaku znjemóžnjone.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/el/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/el/viewer.properties
index d7a6abc106967eacf1a4cf11a42b809314d6465e..e12cfe8e3807426bb807b55a8d4dae98c5b14171 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/el/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/el/viewer.properties
@@ -1,246 +1,246 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Προηγούμενη σελίδα
-previous_label=Προηγούμενη
-next.title=Επόμενη σελίδα
-next_label=Επόμενη
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Σελίδα
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=από {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} από {{pagesCount}})
-
-zoom_out.title=Σμίκρυνση
-zoom_out_label=Σμίκρυνση
-zoom_in.title=Μεγέθυνση
-zoom_in_label=Μεγέθυνση
-zoom.title=Ζουμ
-presentation_mode.title=Εναλλαγή σε λειτουργία παρουσίασης
-presentation_mode_label=Λειτουργία παρουσίασης
-open_file.title=Άνοιγμα αρχείου
-open_file_label=Άνοιγμα
-print.title=Εκτύπωση
-print_label=Εκτύπωση
-download.title=Λήψη
-download_label=Λήψη
-bookmark.title=Τρέχουσα προβολή (αντιγραφή ή άνοιγμα σε νέο παράθυρο)
-bookmark_label=Τρέχουσα προβολή
-
-# Secondary toolbar and context menu
-tools.title=Εργαλεία
-tools_label=Εργαλεία
-first_page.title=Μετάβαση στην πρώτη σελίδα
-first_page.label=Μετάβαση στην πρώτη σελίδα
-first_page_label=Μετάβαση στην πρώτη σελίδα
-last_page.title=Μετάβαση στην τελευταία σελίδα
-last_page.label=Μετάβαση στην τελευταία σελίδα
-last_page_label=Μετάβαση στην τελευταία σελίδα
-page_rotate_cw.title=Δεξιόστροφη περιστροφή
-page_rotate_cw.label=Δεξιόστροφη περιστροφή
-page_rotate_cw_label=Δεξιόστροφη περιστροφή
-page_rotate_ccw.title=Αριστερόστροφη περιστροφή
-page_rotate_ccw.label=Αριστερόστροφη περιστροφή
-page_rotate_ccw_label=Αριστερόστροφη περιστροφή
-
-cursor_text_select_tool.title=Ενεργοποίηση εργαλείου επιλογής κειμένου
-cursor_text_select_tool_label=Εργαλείο επιλογής κειμένου
-cursor_hand_tool.title=Ενεργοποίηση εργαλείου χεριού
-cursor_hand_tool_label=Εργαλείο χεριού
-
-scroll_vertical.title=Χρήση κάθετης κύλισης
-scroll_vertical_label=Κάθετη κύλιση
-scroll_horizontal.title=Χρήση οριζόντιας κύλισης
-scroll_horizontal_label=Οριζόντια κύλιση
-scroll_wrapped.title=Χρήση κυκλικής κύλισης
-scroll_wrapped_label=Κυκλική κύλιση
-
-spread_none.title=Να μην γίνει σύνδεση επεκτάσεων σελίδων
-spread_none_label=Χωρίς επεκτάσεις
-spread_odd.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες
-spread_odd_label=Μονές επεκτάσεις
-spread_even.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες
-spread_even_label=Ζυγές επεκτάσεις
-
-# Document properties dialog box
-document_properties.title=Ιδιότητες εγγράφου…
-document_properties_label=Ιδιότητες εγγράφου…
-document_properties_file_name=Όνομα αρχείου:
-document_properties_file_size=Μέγεθος αρχείου:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Τίτλος:
-document_properties_author=Συγγραφέας:
-document_properties_subject=Θέμα:
-document_properties_keywords=Λέξεις κλειδιά:
-document_properties_creation_date=Ημερομηνία δημιουργίας:
-document_properties_modification_date=Ημερομηνία τροποποίησης:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Δημιουργός:
-document_properties_producer=Παραγωγός PDF:
-document_properties_version=Έκδοση PDF:
-document_properties_page_count=Αριθμός σελίδων:
-document_properties_page_size=Μέγεθος σελίδας:
-document_properties_page_size_unit_inches=ίντσες
-document_properties_page_size_unit_millimeters=χιλιοστά
-document_properties_page_size_orientation_portrait=κατακόρυφα
-document_properties_page_size_orientation_landscape=οριζόντια
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Επιστολή
-document_properties_page_size_name_legal=Τύπου Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Ταχεία προβολή ιστού:
-document_properties_linearized_yes=Ναι
-document_properties_linearized_no=Όχι
-document_properties_close=Κλείσιμο
-
-print_progress_message=Προετοιμασία του εγγράφου για εκτύπωση…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Άκυρο
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=(Απ)ενεργοποίηση πλευρικής στήλης
-toggle_sidebar_notification.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει περίγραμμα/συνημμένα)
-toggle_sidebar_label=(Απ)ενεργοποίηση πλευρικής στήλης
-document_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων)
-document_outline_label=Διάρθρωση εγγράφου
-attachments.title=Προβολή συνημμένων
-attachments_label=Συνημμένα
-thumbs.title=Προβολή μικρογραφιών
-thumbs_label=Μικρογραφίες
-findbar.title=Εύρεση στο έγγραφο
-findbar_label=Εύρεση
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Σελίδα {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Μικρογραφία της σελίδας {{page}}
-
-# Find panel button title and messages
-find_input.title=Εύρεση
-find_input.placeholder=Εύρεση στο έγγραφο…
-find_previous.title=Εύρεση της προηγούμενης εμφάνισης της φράσης
-find_previous_label=Προηγούμενο
-find_next.title=Εύρεση της επόμενης εμφάνισης της φράσης
-find_next_label=Επόμενο
-find_highlight=Επισήμανση όλων
-find_match_case_label=Ταίριασμα χαρακτήρα
-find_entire_word_label=Ολόκληρες λέξεις
-find_reached_top=Έλευση στην αρχή του εγγράφου, συνέχεια από το τέλος
-find_reached_bottom=Έλευση στο τέλος του εγγράφου, συνέχεια από την αρχή
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} από {{total}} αντιστοιχία
-find_match_count[two]={{current}} από {{total}} αντιστοιχίες
-find_match_count[few]={{current}} από {{total}} αντιστοιχίες
-find_match_count[many]={{current}} από {{total}} αντιστοιχίες
-find_match_count[other]={{current}} από {{total}} αντιστοιχίες
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Περισσότερες από {{limit}} αντιστοιχίες
-find_match_count_limit[one]=Περισσότερες από {{limit}} αντιστοιχία
-find_match_count_limit[two]=Περισσότερες από {{limit}} αντιστοιχίες
-find_match_count_limit[few]=Περισσότερες από {{limit}} αντιστοιχίες
-find_match_count_limit[many]=Περισσότερες από {{limit}} αντιστοιχίες
-find_match_count_limit[other]=Περισσότερες από {{limit}} αντιστοιχίες
-find_not_found=Η φράση δεν βρέθηκε
-
-# Error panel labels
-error_more_info=Περισσότερες πληροφορίες
-error_less_info=Λιγότερες πληροφορίες
-error_close=Κλείσιμο
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Μήνυμα: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Στοίβα: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Αρχείο: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Γραμμή: {{line}}
-rendering_error=Προέκυψε σφάλμα κατά την ανάλυση της σελίδας.
-
-# Predefined zoom values
-page_scale_width=Πλάτος σελίδας
-page_scale_fit=Μέγεθος σελίδας
-page_scale_auto=Αυτόματο ζουμ
-page_scale_actual=Πραγματικό μέγεθος
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Σφάλμα
-loading_error=Προέκυψε ένα σφάλμα κατά τη φόρτωση του PDF.
-invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF.
-missing_file_error=Λείπει αρχείο PDF.
-unexpected_response_error=Μη αναμενόμενη απόκριση από το διακομιστή.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Σχόλιο]
-password_label=Εισαγωγή κωδικού για το άνοιγμα του PDF αρχείου.
-password_invalid=Μη έγκυρος κωδικός. Προσπαθείστε ξανά.
-password_ok=ΟΚ
-password_cancel=Ακύρωση
-
-printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από αυτόν τον περιηγητή.
-printing_not_ready=Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση.
-web_fonts_disabled=Οι γραμματοσειρές Web απενεργοποιημένες: αδυναμία χρήσης των ενσωματωμένων γραμματοσειρών PDF.
-document_colors_not_allowed=Στα PDF έγγραφα δεν επιτρέπεται να χρησιμοποιούν τα δικά τους χρώματα: Το “Να επιτρέπεται στις σελίδες να επιλέγουν τα δικά τους χρώματα” είναι απενεργοποιημένο στον περιηγητή.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Προηγούμενη σελίδα
+previous_label=Προηγούμενη
+next.title=Επόμενη σελίδα
+next_label=Επόμενη
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Σελίδα
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=από {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} από {{pagesCount}})
+
+zoom_out.title=Σμίκρυνση
+zoom_out_label=Σμίκρυνση
+zoom_in.title=Μεγέθυνση
+zoom_in_label=Μεγέθυνση
+zoom.title=Ζουμ
+presentation_mode.title=Εναλλαγή σε λειτουργία παρουσίασης
+presentation_mode_label=Λειτουργία παρουσίασης
+open_file.title=Άνοιγμα αρχείου
+open_file_label=Άνοιγμα
+print.title=Εκτύπωση
+print_label=Εκτύπωση
+download.title=Λήψη
+download_label=Λήψη
+bookmark.title=Τρέχουσα προβολή (αντιγραφή ή άνοιγμα σε νέο παράθυρο)
+bookmark_label=Τρέχουσα προβολή
+
+# Secondary toolbar and context menu
+tools.title=Εργαλεία
+tools_label=Εργαλεία
+first_page.title=Μετάβαση στην πρώτη σελίδα
+first_page.label=Μετάβαση στην πρώτη σελίδα
+first_page_label=Μετάβαση στην πρώτη σελίδα
+last_page.title=Μετάβαση στην τελευταία σελίδα
+last_page.label=Μετάβαση στην τελευταία σελίδα
+last_page_label=Μετάβαση στην τελευταία σελίδα
+page_rotate_cw.title=Δεξιόστροφη περιστροφή
+page_rotate_cw.label=Δεξιόστροφη περιστροφή
+page_rotate_cw_label=Δεξιόστροφη περιστροφή
+page_rotate_ccw.title=Αριστερόστροφη περιστροφή
+page_rotate_ccw.label=Αριστερόστροφη περιστροφή
+page_rotate_ccw_label=Αριστερόστροφη περιστροφή
+
+cursor_text_select_tool.title=Ενεργοποίηση εργαλείου επιλογής κειμένου
+cursor_text_select_tool_label=Εργαλείο επιλογής κειμένου
+cursor_hand_tool.title=Ενεργοποίηση εργαλείου χεριού
+cursor_hand_tool_label=Εργαλείο χεριού
+
+scroll_vertical.title=Χρήση κάθετης κύλισης
+scroll_vertical_label=Κάθετη κύλιση
+scroll_horizontal.title=Χρήση οριζόντιας κύλισης
+scroll_horizontal_label=Οριζόντια κύλιση
+scroll_wrapped.title=Χρήση κυκλικής κύλισης
+scroll_wrapped_label=Κυκλική κύλιση
+
+spread_none.title=Να μην γίνει σύνδεση επεκτάσεων σελίδων
+spread_none_label=Χωρίς επεκτάσεις
+spread_odd.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες
+spread_odd_label=Μονές επεκτάσεις
+spread_even.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες
+spread_even_label=Ζυγές επεκτάσεις
+
+# Document properties dialog box
+document_properties.title=Ιδιότητες εγγράφου…
+document_properties_label=Ιδιότητες εγγράφου…
+document_properties_file_name=Όνομα αρχείου:
+document_properties_file_size=Μέγεθος αρχείου:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Τίτλος:
+document_properties_author=Συγγραφέας:
+document_properties_subject=Θέμα:
+document_properties_keywords=Λέξεις κλειδιά:
+document_properties_creation_date=Ημερομηνία δημιουργίας:
+document_properties_modification_date=Ημερομηνία τροποποίησης:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Δημιουργός:
+document_properties_producer=Παραγωγός PDF:
+document_properties_version=Έκδοση PDF:
+document_properties_page_count=Αριθμός σελίδων:
+document_properties_page_size=Μέγεθος σελίδας:
+document_properties_page_size_unit_inches=ίντσες
+document_properties_page_size_unit_millimeters=χιλιοστά
+document_properties_page_size_orientation_portrait=κατακόρυφα
+document_properties_page_size_orientation_landscape=οριζόντια
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Επιστολή
+document_properties_page_size_name_legal=Τύπου Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ταχεία προβολή ιστού:
+document_properties_linearized_yes=Ναι
+document_properties_linearized_no=Όχι
+document_properties_close=Κλείσιμο
+
+print_progress_message=Προετοιμασία του εγγράφου για εκτύπωση…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Άκυρο
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=(Απ)ενεργοποίηση πλευρικής στήλης
+toggle_sidebar_notification.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει περίγραμμα/συνημμένα)
+toggle_sidebar_label=(Απ)ενεργοποίηση πλευρικής στήλης
+document_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων)
+document_outline_label=Διάρθρωση εγγράφου
+attachments.title=Προβολή συνημμένων
+attachments_label=Συνημμένα
+thumbs.title=Προβολή μικρογραφιών
+thumbs_label=Μικρογραφίες
+findbar.title=Εύρεση στο έγγραφο
+findbar_label=Εύρεση
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Σελίδα {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Μικρογραφία της σελίδας {{page}}
+
+# Find panel button title and messages
+find_input.title=Εύρεση
+find_input.placeholder=Εύρεση στο έγγραφο…
+find_previous.title=Εύρεση της προηγούμενης εμφάνισης της φράσης
+find_previous_label=Προηγούμενο
+find_next.title=Εύρεση της επόμενης εμφάνισης της φράσης
+find_next_label=Επόμενο
+find_highlight=Επισήμανση όλων
+find_match_case_label=Ταίριασμα χαρακτήρα
+find_entire_word_label=Ολόκληρες λέξεις
+find_reached_top=Έλευση στην αρχή του εγγράφου, συνέχεια από το τέλος
+find_reached_bottom=Έλευση στο τέλος του εγγράφου, συνέχεια από την αρχή
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} από {{total}} αντιστοιχία
+find_match_count[two]={{current}} από {{total}} αντιστοιχίες
+find_match_count[few]={{current}} από {{total}} αντιστοιχίες
+find_match_count[many]={{current}} από {{total}} αντιστοιχίες
+find_match_count[other]={{current}} από {{total}} αντιστοιχίες
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[one]=Περισσότερες από {{limit}} αντιστοιχία
+find_match_count_limit[two]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[few]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[many]=Περισσότερες από {{limit}} αντιστοιχίες
+find_match_count_limit[other]=Περισσότερες από {{limit}} αντιστοιχίες
+find_not_found=Η φράση δεν βρέθηκε
+
+# Error panel labels
+error_more_info=Περισσότερες πληροφορίες
+error_less_info=Λιγότερες πληροφορίες
+error_close=Κλείσιμο
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Μήνυμα: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Στοίβα: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Αρχείο: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Γραμμή: {{line}}
+rendering_error=Προέκυψε σφάλμα κατά την ανάλυση της σελίδας.
+
+# Predefined zoom values
+page_scale_width=Πλάτος σελίδας
+page_scale_fit=Μέγεθος σελίδας
+page_scale_auto=Αυτόματο ζουμ
+page_scale_actual=Πραγματικό μέγεθος
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Σφάλμα
+loading_error=Προέκυψε ένα σφάλμα κατά τη φόρτωση του PDF.
+invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF.
+missing_file_error=Λείπει αρχείο PDF.
+unexpected_response_error=Μη αναμενόμενη απόκριση από το διακομιστή.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Σχόλιο]
+password_label=Εισαγωγή κωδικού για το άνοιγμα του PDF αρχείου.
+password_invalid=Μη έγκυρος κωδικός. Προσπαθείστε ξανά.
+password_ok=ΟΚ
+password_cancel=Ακύρωση
+
+printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από αυτόν τον περιηγητή.
+printing_not_ready=Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση.
+web_fonts_disabled=Οι γραμματοσειρές Web απενεργοποιημένες: αδυναμία χρήσης των ενσωματωμένων γραμματοσειρών PDF.
+document_colors_not_allowed=Στα PDF έγγραφα δεν επιτρέπεται να χρησιμοποιούν τα δικά τους χρώματα: Το “Να επιτρέπεται στις σελίδες να επιλέγουν τα δικά τους χρώματα” είναι απενεργοποιημένο στον περιηγητή.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-CA/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-CA/viewer.properties
index df7a68774d4c113d72b82b2ae3b0122d5ea88c65..b23adeaaf812473d05279d0f012871b556cf3feb 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-CA/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-CA/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Previous Page
-previous_label=Previous
-next.title=Next Page
-next_label=Next
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Page
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=of {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=Zoom Out
-zoom_out_label=Zoom Out
-zoom_in.title=Zoom In
-zoom_in_label=Zoom In
-zoom.title=Zoom
-presentation_mode.title=Switch to Presentation Mode
-presentation_mode_label=Presentation Mode
-open_file.title=Open File
-open_file_label=Open
-print.title=Print
-print_label=Print
-download.title=Download
-download_label=Download
-bookmark.title=Current view (copy or open in new window)
-bookmark_label=Current View
-
-# Secondary toolbar and context menu
-tools.title=Tools
-tools_label=Tools
-first_page.title=Go to First Page
-first_page.label=Go to First Page
-first_page_label=Go to First Page
-last_page.title=Go to Last Page
-last_page.label=Go to Last Page
-last_page_label=Go to Last Page
-page_rotate_cw.title=Rotate Clockwise
-page_rotate_cw.label=Rotate Clockwise
-page_rotate_cw_label=Rotate Clockwise
-page_rotate_ccw.title=Rotate Anti-Clockwise
-page_rotate_ccw.label=Rotate Anti-Clockwise
-page_rotate_ccw_label=Rotate Anti-Clockwise
-
-cursor_text_select_tool.title=Enable Text Selection Tool
-cursor_text_select_tool_label=Text Selection Tool
-cursor_hand_tool.title=Enable Hand Tool
-cursor_hand_tool_label=Hand Tool
-
-scroll_vertical.title=Use Vertical Scrolling
-scroll_vertical_label=Vertical Scrolling
-scroll_horizontal.title=Use Horizontal Scrolling
-scroll_horizontal_label=Horizontal Scrolling
-scroll_wrapped.title=Use Wrapped Scrolling
-scroll_wrapped_label=Wrapped Scrolling
-
-spread_none.title=Do not join page spreads
-spread_none_label=No Spreads
-spread_odd.title=Join page spreads starting with odd-numbered pages
-spread_odd_label=Odd Spreads
-spread_even.title=Join page spreads starting with even-numbered pages
-spread_even_label=Even Spreads
-
-# Document properties dialog box
-document_properties.title=Document Properties…
-document_properties_label=Document Properties…
-document_properties_file_name=File name:
-document_properties_file_size=File size:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Title:
-document_properties_author=Author:
-document_properties_subject=Subject:
-document_properties_keywords=Keywords:
-document_properties_creation_date=Creation Date:
-document_properties_modification_date=Modification Date:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator:
-document_properties_producer=PDF Producer:
-document_properties_version=PDF Version:
-document_properties_page_count=Page Count:
-document_properties_page_size=Page Size:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portrait
-document_properties_page_size_orientation_landscape=landscape
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Yes
-document_properties_linearized_no=No
-document_properties_close=Close
-
-print_progress_message=Preparing document for printing…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancel
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toggle Sidebar
-toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
-toggle_sidebar_label=Toggle Sidebar
-document_outline.title=Show Document Outline (double-click to expand/collapse all items)
-document_outline_label=Document Outline
-attachments.title=Show Attachments
-attachments_label=Attachments
-thumbs.title=Show Thumbnails
-thumbs_label=Thumbnails
-findbar.title=Find in Document
-findbar_label=Find
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Page {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Page {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Thumbnail of Page {{page}}
-
-# Find panel button title and messages
-find_input.title=Find
-find_input.placeholder=Find in document…
-find_previous.title=Find the previous occurrence of the phrase
-find_previous_label=Previous
-find_next.title=Find the next occurrence of the phrase
-find_next_label=Next
-find_highlight=Highlight all
-find_match_case_label=Match case
-find_entire_word_label=Whole words
-find_reached_top=Reached top of document, continued from bottom
-find_reached_bottom=Reached end of document, continued from top
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} of {{total}} match
-find_match_count[two]={{current}} of {{total}} matches
-find_match_count[few]={{current}} of {{total}} matches
-find_match_count[many]={{current}} of {{total}} matches
-find_match_count[other]={{current}} of {{total}} matches
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=More than {{limit}} matches
-find_match_count_limit[one]=More than {{limit}} match
-find_match_count_limit[two]=More than {{limit}} matches
-find_match_count_limit[few]=More than {{limit}} matches
-find_match_count_limit[many]=More than {{limit}} matches
-find_match_count_limit[other]=More than {{limit}} matches
-find_not_found=Phrase not found
-
-# Error panel labels
-error_more_info=More Information
-error_less_info=Less Information
-error_close=Close
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Line: {{line}}
-rendering_error=An error occurred while rendering the page.
-
-# Predefined zoom values
-page_scale_width=Page Width
-page_scale_fit=Page Fit
-page_scale_auto=Automatic Zoom
-page_scale_actual=Actual Size
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=An error occurred while loading the PDF.
-invalid_file_error=Invalid or corrupted PDF file.
-missing_file_error=Missing PDF file.
-unexpected_response_error=Unexpected server response.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Enter the password to open this PDF file.
-password_invalid=Invalid password. Please try again.
-password_ok=OK
-password_cancel=Cancel
-
-printing_not_supported=Warning: Printing is not fully supported by this browser.
-printing_not_ready=Warning: The PDF is not fully loaded for printing.
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
-document_colors_not_allowed=PDF documents are not allowed to use their own colours: “Allow pages to choose their own colours” is deactivated in the browser.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Anti-Clockwise
+page_rotate_ccw.label=Rotate Anti-Clockwise
+page_rotate_ccw_label=Rotate Anti-Clockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Find
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
+document_colors_not_allowed=PDF documents are not allowed to use their own colours: “Allow pages to choose their own colours” is deactivated in the browser.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-GB/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-GB/viewer.properties
index df7a68774d4c113d72b82b2ae3b0122d5ea88c65..b23adeaaf812473d05279d0f012871b556cf3feb 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-GB/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-GB/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Previous Page
-previous_label=Previous
-next.title=Next Page
-next_label=Next
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Page
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=of {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=Zoom Out
-zoom_out_label=Zoom Out
-zoom_in.title=Zoom In
-zoom_in_label=Zoom In
-zoom.title=Zoom
-presentation_mode.title=Switch to Presentation Mode
-presentation_mode_label=Presentation Mode
-open_file.title=Open File
-open_file_label=Open
-print.title=Print
-print_label=Print
-download.title=Download
-download_label=Download
-bookmark.title=Current view (copy or open in new window)
-bookmark_label=Current View
-
-# Secondary toolbar and context menu
-tools.title=Tools
-tools_label=Tools
-first_page.title=Go to First Page
-first_page.label=Go to First Page
-first_page_label=Go to First Page
-last_page.title=Go to Last Page
-last_page.label=Go to Last Page
-last_page_label=Go to Last Page
-page_rotate_cw.title=Rotate Clockwise
-page_rotate_cw.label=Rotate Clockwise
-page_rotate_cw_label=Rotate Clockwise
-page_rotate_ccw.title=Rotate Anti-Clockwise
-page_rotate_ccw.label=Rotate Anti-Clockwise
-page_rotate_ccw_label=Rotate Anti-Clockwise
-
-cursor_text_select_tool.title=Enable Text Selection Tool
-cursor_text_select_tool_label=Text Selection Tool
-cursor_hand_tool.title=Enable Hand Tool
-cursor_hand_tool_label=Hand Tool
-
-scroll_vertical.title=Use Vertical Scrolling
-scroll_vertical_label=Vertical Scrolling
-scroll_horizontal.title=Use Horizontal Scrolling
-scroll_horizontal_label=Horizontal Scrolling
-scroll_wrapped.title=Use Wrapped Scrolling
-scroll_wrapped_label=Wrapped Scrolling
-
-spread_none.title=Do not join page spreads
-spread_none_label=No Spreads
-spread_odd.title=Join page spreads starting with odd-numbered pages
-spread_odd_label=Odd Spreads
-spread_even.title=Join page spreads starting with even-numbered pages
-spread_even_label=Even Spreads
-
-# Document properties dialog box
-document_properties.title=Document Properties…
-document_properties_label=Document Properties…
-document_properties_file_name=File name:
-document_properties_file_size=File size:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Title:
-document_properties_author=Author:
-document_properties_subject=Subject:
-document_properties_keywords=Keywords:
-document_properties_creation_date=Creation Date:
-document_properties_modification_date=Modification Date:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator:
-document_properties_producer=PDF Producer:
-document_properties_version=PDF Version:
-document_properties_page_count=Page Count:
-document_properties_page_size=Page Size:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portrait
-document_properties_page_size_orientation_landscape=landscape
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Yes
-document_properties_linearized_no=No
-document_properties_close=Close
-
-print_progress_message=Preparing document for printing…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancel
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toggle Sidebar
-toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
-toggle_sidebar_label=Toggle Sidebar
-document_outline.title=Show Document Outline (double-click to expand/collapse all items)
-document_outline_label=Document Outline
-attachments.title=Show Attachments
-attachments_label=Attachments
-thumbs.title=Show Thumbnails
-thumbs_label=Thumbnails
-findbar.title=Find in Document
-findbar_label=Find
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Page {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Page {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Thumbnail of Page {{page}}
-
-# Find panel button title and messages
-find_input.title=Find
-find_input.placeholder=Find in document…
-find_previous.title=Find the previous occurrence of the phrase
-find_previous_label=Previous
-find_next.title=Find the next occurrence of the phrase
-find_next_label=Next
-find_highlight=Highlight all
-find_match_case_label=Match case
-find_entire_word_label=Whole words
-find_reached_top=Reached top of document, continued from bottom
-find_reached_bottom=Reached end of document, continued from top
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} of {{total}} match
-find_match_count[two]={{current}} of {{total}} matches
-find_match_count[few]={{current}} of {{total}} matches
-find_match_count[many]={{current}} of {{total}} matches
-find_match_count[other]={{current}} of {{total}} matches
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=More than {{limit}} matches
-find_match_count_limit[one]=More than {{limit}} match
-find_match_count_limit[two]=More than {{limit}} matches
-find_match_count_limit[few]=More than {{limit}} matches
-find_match_count_limit[many]=More than {{limit}} matches
-find_match_count_limit[other]=More than {{limit}} matches
-find_not_found=Phrase not found
-
-# Error panel labels
-error_more_info=More Information
-error_less_info=Less Information
-error_close=Close
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Line: {{line}}
-rendering_error=An error occurred while rendering the page.
-
-# Predefined zoom values
-page_scale_width=Page Width
-page_scale_fit=Page Fit
-page_scale_auto=Automatic Zoom
-page_scale_actual=Actual Size
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=An error occurred while loading the PDF.
-invalid_file_error=Invalid or corrupted PDF file.
-missing_file_error=Missing PDF file.
-unexpected_response_error=Unexpected server response.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Enter the password to open this PDF file.
-password_invalid=Invalid password. Please try again.
-password_ok=OK
-password_cancel=Cancel
-
-printing_not_supported=Warning: Printing is not fully supported by this browser.
-printing_not_ready=Warning: The PDF is not fully loaded for printing.
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
-document_colors_not_allowed=PDF documents are not allowed to use their own colours: “Allow pages to choose their own colours” is deactivated in the browser.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Anti-Clockwise
+page_rotate_ccw.label=Rotate Anti-Clockwise
+page_rotate_ccw_label=Rotate Anti-Clockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Find
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
+document_colors_not_allowed=PDF documents are not allowed to use their own colours: “Allow pages to choose their own colours” is deactivated in the browser.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-US/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-US/viewer.properties
index 6f7598e3dac62f51cc52764726ed641177557af4..90b5af5c2bcfeced05f243f943f6509573f17406 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-US/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/en-US/viewer.properties
@@ -1,247 +1,247 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Previous Page
-previous_label=Previous
-next.title=Next Page
-next_label=Next
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Page
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=of {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=Zoom Out
-zoom_out_label=Zoom Out
-zoom_in.title=Zoom In
-zoom_in_label=Zoom In
-zoom.title=Zoom
-presentation_mode.title=Switch to Presentation Mode
-presentation_mode_label=Presentation Mode
-open_file.title=Open File
-open_file_label=Open
-print.title=Print
-print_label=Print
-download.title=Download
-download_label=Download
-bookmark.title=Current view (copy or open in new window)
-bookmark_label=Current View
-
-# Secondary toolbar and context menu
-tools.title=Tools
-tools_label=Tools
-first_page.title=Go to First Page
-first_page.label=Go to First Page
-first_page_label=Go to First Page
-last_page.title=Go to Last Page
-last_page.label=Go to Last Page
-last_page_label=Go to Last Page
-page_rotate_cw.title=Rotate Clockwise
-page_rotate_cw.label=Rotate Clockwise
-page_rotate_cw_label=Rotate Clockwise
-page_rotate_ccw.title=Rotate Counterclockwise
-page_rotate_ccw.label=Rotate Counterclockwise
-page_rotate_ccw_label=Rotate Counterclockwise
-
-cursor_text_select_tool.title=Enable Text Selection Tool
-cursor_text_select_tool_label=Text Selection Tool
-cursor_hand_tool.title=Enable Hand Tool
-cursor_hand_tool_label=Hand Tool
-
-scroll_vertical.title=Use Vertical Scrolling
-scroll_vertical_label=Vertical Scrolling
-scroll_horizontal.title=Use Horizontal Scrolling
-scroll_horizontal_label=Horizontal Scrolling
-scroll_wrapped.title=Use Wrapped Scrolling
-scroll_wrapped_label=Wrapped Scrolling
-
-spread_none.title=Do not join page spreads
-spread_none_label=No Spreads
-spread_odd.title=Join page spreads starting with odd-numbered pages
-spread_odd_label=Odd Spreads
-spread_even.title=Join page spreads starting with even-numbered pages
-spread_even_label=Even Spreads
-
-# Document properties dialog box
-document_properties.title=Document Properties…
-document_properties_label=Document Properties…
-document_properties_file_name=File name:
-document_properties_file_size=File size:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Title:
-document_properties_author=Author:
-document_properties_subject=Subject:
-document_properties_keywords=Keywords:
-document_properties_creation_date=Creation Date:
-document_properties_modification_date=Modification Date:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator:
-document_properties_producer=PDF Producer:
-document_properties_version=PDF Version:
-document_properties_page_count=Page Count:
-document_properties_page_size=Page Size:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portrait
-document_properties_page_size_orientation_landscape=landscape
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Yes
-document_properties_linearized_no=No
-document_properties_close=Close
-
-print_progress_message=Preparing document for printing…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancel
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toggle Sidebar
-toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
-toggle_sidebar_label=Toggle Sidebar
-document_outline.title=Show Document Outline (double-click to expand/collapse all items)
-document_outline_label=Document Outline
-attachments.title=Show Attachments
-attachments_label=Attachments
-thumbs.title=Show Thumbnails
-thumbs_label=Thumbnails
-findbar.title=Find in Document
-findbar_label=Find
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Page {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Page {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Thumbnail of Page {{page}}
-
-# Find panel button title and messages
-find_input.title=Find
-find_input.placeholder=Find in document…
-find_previous.title=Find the previous occurrence of the phrase
-find_previous_label=Previous
-find_next.title=Find the next occurrence of the phrase
-find_next_label=Next
-find_highlight=Highlight all
-find_match_case_label=Match case
-find_entire_word_label=Whole words
-find_reached_top=Reached top of document, continued from bottom
-find_reached_bottom=Reached end of document, continued from top
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} of {{total}} match
-find_match_count[two]={{current}} of {{total}} matches
-find_match_count[few]={{current}} of {{total}} matches
-find_match_count[many]={{current}} of {{total}} matches
-find_match_count[other]={{current}} of {{total}} matches
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=More than {{limit}} matches
-find_match_count_limit[one]=More than {{limit}} match
-find_match_count_limit[two]=More than {{limit}} matches
-find_match_count_limit[few]=More than {{limit}} matches
-find_match_count_limit[many]=More than {{limit}} matches
-find_match_count_limit[other]=More than {{limit}} matches
-find_not_found=Phrase not found
-
-# Error panel labels
-error_more_info=More Information
-error_less_info=Less Information
-error_close=Close
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Line: {{line}}
-rendering_error=An error occurred while rendering the page.
-
-# Predefined zoom values
-page_scale_width=Page Width
-page_scale_fit=Page Fit
-page_scale_auto=Automatic Zoom
-page_scale_actual=Actual Size
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=An error occurred while loading the PDF.
-invalid_file_error=Invalid or corrupted PDF file.
-missing_file_error=Missing PDF file.
-unexpected_response_error=Unexpected server response.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Enter the password to open this PDF file.
-password_invalid=Invalid password. Please try again.
-password_ok=OK
-password_cancel=Cancel
-
-printing_not_supported=Warning: Printing is not fully supported by this browser.
-printing_not_ready=Warning: The PDF is not fully loaded for printing.
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw.label=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Find
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eo/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eo/viewer.properties
index bca7c4568337ac09870972ff7adfd9fb6fd3026e..317ae38fde39f5dab860eddf45fd760849d36c56 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eo/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eo/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Antaŭa paĝo
-previous_label=Malantaŭen
-next.title=Venonta paĝo
-next_label=Antaŭen
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Paĝo
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=el {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} el {{pagesCount}})
-
-zoom_out.title=Malpligrandigi
-zoom_out_label=Malpligrandigi
-zoom_in.title=Pligrandigi
-zoom_in_label=Pligrandigi
-zoom.title=Pligrandigilo
-presentation_mode.title=Iri al prezenta reĝimo
-presentation_mode_label=Prezenta reĝimo
-open_file.title=Malfermi dosieron
-open_file_label=Malfermi
-print.title=Presi
-print_label=Presi
-download.title=Elŝuti
-download_label=Elŝuti
-bookmark.title=Nuna vido (kopii aŭ malfermi en nova fenestro)
-bookmark_label=Nuna vido
-
-# Secondary toolbar and context menu
-tools.title=Iloj
-tools_label=Iloj
-first_page.title=Iri al la unua paĝo
-first_page.label=Iri al la unua paĝo
-first_page_label=Iri al la unua paĝo
-last_page.title=Iri al la lasta paĝo
-last_page.label=Iri al la lasta paĝo
-last_page_label=Iri al la lasta paĝo
-page_rotate_cw.title=Rotaciigi dekstrume
-page_rotate_cw.label=Rotaciigi dekstrume
-page_rotate_cw_label=Rotaciigi dekstrume
-page_rotate_ccw.title=Rotaciigi maldekstrume
-page_rotate_ccw.label=Rotaciigi maldekstrume
-page_rotate_ccw_label=Rotaciigi maldekstrume
-
-cursor_text_select_tool.title=Aktivigi tekstan elektilon
-cursor_text_select_tool_label=Teksta elektilo
-cursor_hand_tool.title=Aktivigi ilon de mano
-cursor_hand_tool_label=Ilo de mano
-
-scroll_vertical.title=Uzi vertikalan ŝovadon
-scroll_vertical_label=Vertikala ŝovado
-scroll_horizontal.title=Uzi horizontalan ŝovadon
-scroll_horizontal_label=Horizontala ŝovado
-scroll_wrapped.title=Uzi ambaŭdirektan ŝovadon
-scroll_wrapped_label=Ambaŭdirekta ŝovado
-
-spread_none.title=Ne montri paĝojn po du
-spread_none_label=Unupaĝa vido
-spread_odd.title=Kunigi paĝojn komencante per nepara paĝo
-spread_odd_label=Po du paĝoj, neparaj maldekstre
-spread_even.title=Kunigi paĝojn komencante per para paĝo
-spread_even_label=Po du paĝoj, paraj maldekstre
-
-# Document properties dialog box
-document_properties.title=Atributoj de dokumento…
-document_properties_label=Atributoj de dokumento…
-document_properties_file_name=Nomo de dosiero:
-document_properties_file_size=Grando de dosiero:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KO ({{size_b}} oktetoj)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MO ({{size_b}} oktetoj)
-document_properties_title=Titolo:
-document_properties_author=Aŭtoro:
-document_properties_subject=Temo:
-document_properties_keywords=Ŝlosilvorto:
-document_properties_creation_date=Dato de kreado:
-document_properties_modification_date=Dato de modifo:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Kreinto:
-document_properties_producer=Produktinto de PDF:
-document_properties_version=Versio de PDF:
-document_properties_page_count=Nombro de paĝoj:
-document_properties_page_size=Grando de paĝo:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertikala
-document_properties_page_size_orientation_landscape=horizontala
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letera
-document_properties_page_size_name_legal=Jura
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Rapida tekstaĵa vido:
-document_properties_linearized_yes=Jes
-document_properties_linearized_no=Ne
-document_properties_close=Fermi
-
-print_progress_message=Preparo de dokumento por presi ĝin …
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Nuligi
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Montri/kaŝi flankan strion
-toggle_sidebar_notification.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/aneksaĵojn)
-toggle_sidebar_label=Montri/kaŝi flankan strion
-document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn)
-document_outline_label=Konturo de dokumento
-attachments.title=Montri kunsendaĵojn
-attachments_label=Kunsendaĵojn
-thumbs.title=Montri miniaturojn
-thumbs_label=Miniaturoj
-findbar.title=Serĉi en dokumento
-findbar_label=Serĉi
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Paĝo {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Paĝo {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniaturo de paĝo {{page}}
-
-# Find panel button title and messages
-find_input.title=Serĉi
-find_input.placeholder=Serĉi en dokumento…
-find_previous.title=Serĉi la antaŭan aperon de la frazo
-find_previous_label=Malantaŭen
-find_next.title=Serĉi la venontan aperon de la frazo
-find_next_label=Antaŭen
-find_highlight=Elstarigi ĉiujn
-find_match_case_label=Distingi inter majuskloj kaj minuskloj
-find_entire_word_label=Tutaj vortoj
-find_reached_top=Komenco de la dokumento atingita, daŭrigado ekde la fino
-find_reached_bottom=Fino de la dokumento atingita, daŭrigado ekde la komenco
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} el {{total}} kongruo
-find_match_count[two]={{current}} el {{total}} kongruoj
-find_match_count[few]={{current}} el {{total}} kongruoj
-find_match_count[many]={{current}} el {{total}} kongruoj
-find_match_count[other]={{current}} el {{total}} kongruoj
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Pli ol {{limit}} kongruoj
-find_match_count_limit[one]=Pli ol {{limit}} kongruo
-find_match_count_limit[two]=Pli ol {{limit}} kongruoj
-find_match_count_limit[few]=Pli ol {{limit}} kongruoj
-find_match_count_limit[many]=Pli ol {{limit}} kongruoj
-find_match_count_limit[other]=Pli ol {{limit}} kongruoj
-find_not_found=Frazo ne trovita
-
-# Error panel labels
-error_more_info=Pli da informo
-error_less_info=Malpli da informo
-error_close=Fermi
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mesaĝo: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stako: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Dosiero: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linio: {{line}}
-rendering_error=Okazis eraro dum la montro de la paĝo.
-
-# Predefined zoom values
-page_scale_width=Larĝo de paĝo
-page_scale_fit=Adapti paĝon
-page_scale_auto=Aŭtomata skalo
-page_scale_actual=Reala grando
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Eraro
-loading_error=Okazis eraro dum la ŝargado de la PDF dosiero.
-invalid_file_error=Nevalida aŭ difektita PDF dosiero.
-missing_file_error=Mankas dosiero PDF.
-unexpected_response_error=Neatendita respondo de servilo.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Prinoto: {{type}}]
-password_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF.
-password_invalid=Nevalida pasvorto. Bonvolu provi denove.
-password_ok=Akcepti
-password_cancel=Nuligi
-
-printing_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon.
-printing_not_ready=Averto: la PDF dosiero ne estas plene ŝargita por presado.
-web_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF.
-document_colors_not_allowed=PDF dokumentoj ne rajtas uzi siajn proprajn kolorojn: 'Permesi al paĝoj uzi siajn proprajn kolorojn' ne estas aktiva en la retumilo.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Antaŭa paĝo
+previous_label=Malantaŭen
+next.title=Venonta paĝo
+next_label=Antaŭen
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Paĝo
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=el {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} el {{pagesCount}})
+
+zoom_out.title=Malpligrandigi
+zoom_out_label=Malpligrandigi
+zoom_in.title=Pligrandigi
+zoom_in_label=Pligrandigi
+zoom.title=Pligrandigilo
+presentation_mode.title=Iri al prezenta reĝimo
+presentation_mode_label=Prezenta reĝimo
+open_file.title=Malfermi dosieron
+open_file_label=Malfermi
+print.title=Presi
+print_label=Presi
+download.title=Elŝuti
+download_label=Elŝuti
+bookmark.title=Nuna vido (kopii aŭ malfermi en nova fenestro)
+bookmark_label=Nuna vido
+
+# Secondary toolbar and context menu
+tools.title=Iloj
+tools_label=Iloj
+first_page.title=Iri al la unua paĝo
+first_page.label=Iri al la unua paĝo
+first_page_label=Iri al la unua paĝo
+last_page.title=Iri al la lasta paĝo
+last_page.label=Iri al la lasta paĝo
+last_page_label=Iri al la lasta paĝo
+page_rotate_cw.title=Rotaciigi dekstrume
+page_rotate_cw.label=Rotaciigi dekstrume
+page_rotate_cw_label=Rotaciigi dekstrume
+page_rotate_ccw.title=Rotaciigi maldekstrume
+page_rotate_ccw.label=Rotaciigi maldekstrume
+page_rotate_ccw_label=Rotaciigi maldekstrume
+
+cursor_text_select_tool.title=Aktivigi tekstan elektilon
+cursor_text_select_tool_label=Teksta elektilo
+cursor_hand_tool.title=Aktivigi ilon de mano
+cursor_hand_tool_label=Ilo de mano
+
+scroll_vertical.title=Uzi vertikalan ŝovadon
+scroll_vertical_label=Vertikala ŝovado
+scroll_horizontal.title=Uzi horizontalan ŝovadon
+scroll_horizontal_label=Horizontala ŝovado
+scroll_wrapped.title=Uzi ambaŭdirektan ŝovadon
+scroll_wrapped_label=Ambaŭdirekta ŝovado
+
+spread_none.title=Ne montri paĝojn po du
+spread_none_label=Unupaĝa vido
+spread_odd.title=Kunigi paĝojn komencante per nepara paĝo
+spread_odd_label=Po du paĝoj, neparaj maldekstre
+spread_even.title=Kunigi paĝojn komencante per para paĝo
+spread_even_label=Po du paĝoj, paraj maldekstre
+
+# Document properties dialog box
+document_properties.title=Atributoj de dokumento…
+document_properties_label=Atributoj de dokumento…
+document_properties_file_name=Nomo de dosiero:
+document_properties_file_size=Grando de dosiero:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KO ({{size_b}} oktetoj)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MO ({{size_b}} oktetoj)
+document_properties_title=Titolo:
+document_properties_author=Aŭtoro:
+document_properties_subject=Temo:
+document_properties_keywords=Ŝlosilvorto:
+document_properties_creation_date=Dato de kreado:
+document_properties_modification_date=Dato de modifo:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kreinto:
+document_properties_producer=Produktinto de PDF:
+document_properties_version=Versio de PDF:
+document_properties_page_count=Nombro de paĝoj:
+document_properties_page_size=Grando de paĝo:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertikala
+document_properties_page_size_orientation_landscape=horizontala
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letera
+document_properties_page_size_name_legal=Jura
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rapida tekstaĵa vido:
+document_properties_linearized_yes=Jes
+document_properties_linearized_no=Ne
+document_properties_close=Fermi
+
+print_progress_message=Preparo de dokumento por presi ĝin …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nuligi
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Montri/kaŝi flankan strion
+toggle_sidebar_notification.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/aneksaĵojn)
+toggle_sidebar_label=Montri/kaŝi flankan strion
+document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn)
+document_outline_label=Konturo de dokumento
+attachments.title=Montri kunsendaĵojn
+attachments_label=Kunsendaĵojn
+thumbs.title=Montri miniaturojn
+thumbs_label=Miniaturoj
+findbar.title=Serĉi en dokumento
+findbar_label=Serĉi
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Paĝo {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Paĝo {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturo de paĝo {{page}}
+
+# Find panel button title and messages
+find_input.title=Serĉi
+find_input.placeholder=Serĉi en dokumento…
+find_previous.title=Serĉi la antaŭan aperon de la frazo
+find_previous_label=Malantaŭen
+find_next.title=Serĉi la venontan aperon de la frazo
+find_next_label=Antaŭen
+find_highlight=Elstarigi ĉiujn
+find_match_case_label=Distingi inter majuskloj kaj minuskloj
+find_entire_word_label=Tutaj vortoj
+find_reached_top=Komenco de la dokumento atingita, daŭrigado ekde la fino
+find_reached_bottom=Fino de la dokumento atingita, daŭrigado ekde la komenco
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} el {{total}} kongruo
+find_match_count[two]={{current}} el {{total}} kongruoj
+find_match_count[few]={{current}} el {{total}} kongruoj
+find_match_count[many]={{current}} el {{total}} kongruoj
+find_match_count[other]={{current}} el {{total}} kongruoj
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Pli ol {{limit}} kongruoj
+find_match_count_limit[one]=Pli ol {{limit}} kongruo
+find_match_count_limit[two]=Pli ol {{limit}} kongruoj
+find_match_count_limit[few]=Pli ol {{limit}} kongruoj
+find_match_count_limit[many]=Pli ol {{limit}} kongruoj
+find_match_count_limit[other]=Pli ol {{limit}} kongruoj
+find_not_found=Frazo ne trovita
+
+# Error panel labels
+error_more_info=Pli da informo
+error_less_info=Malpli da informo
+error_close=Fermi
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaĝo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stako: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dosiero: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linio: {{line}}
+rendering_error=Okazis eraro dum la montro de la paĝo.
+
+# Predefined zoom values
+page_scale_width=Larĝo de paĝo
+page_scale_fit=Adapti paĝon
+page_scale_auto=Aŭtomata skalo
+page_scale_actual=Reala grando
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Eraro
+loading_error=Okazis eraro dum la ŝargado de la PDF dosiero.
+invalid_file_error=Nevalida aŭ difektita PDF dosiero.
+missing_file_error=Mankas dosiero PDF.
+unexpected_response_error=Neatendita respondo de servilo.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Prinoto: {{type}}]
+password_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF.
+password_invalid=Nevalida pasvorto. Bonvolu provi denove.
+password_ok=Akcepti
+password_cancel=Nuligi
+
+printing_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon.
+printing_not_ready=Averto: la PDF dosiero ne estas plene ŝargita por presado.
+web_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF.
+document_colors_not_allowed=PDF dokumentoj ne rajtas uzi siajn proprajn kolorojn: 'Permesi al paĝoj uzi siajn proprajn kolorojn' ne estas aktiva en la retumilo.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-AR/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-AR/viewer.properties
index 1d22fbad6626614deccf44deacc5f84d1723f8c2..d2684ca4a9a045cecacf455194bd6632eaa4606e 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-AR/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-AR/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Página anterior
-previous_label=Anterior
-next.title=Página siguiente
-next_label=Siguiente
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Página
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=( {{pageNumber}} de {{pagesCount}} )
-
-zoom_out.title=Alejar
-zoom_out_label=Alejar
-zoom_in.title=Acercar
-zoom_in_label=Acercar
-zoom.title=Zoom
-presentation_mode.title=Cambiar a modo presentación
-presentation_mode_label=Modo presentación
-open_file.title=Abrir archivo
-open_file_label=Abrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar o abrir en nueva ventana)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Herramientas
-tools_label=Herramientas
-first_page.title=Ir a primera página
-first_page.label=Ir a primera página
-first_page_label=Ir a primera página
-last_page.title=Ir a última página
-last_page.label=Ir a última página
-last_page_label=Ir a última página
-page_rotate_cw.title=Rotar horario
-page_rotate_cw.label=Rotar horario
-page_rotate_cw_label=Rotar horario
-page_rotate_ccw.title=Rotar antihorario
-page_rotate_ccw.label=Rotar antihorario
-page_rotate_ccw_label=Rotar antihorario
-
-cursor_text_select_tool.title=Habilitar herramienta de selección de texto
-cursor_text_select_tool_label=Herramienta de selección de texto
-cursor_hand_tool.title=Habilitar herramienta mano
-cursor_hand_tool_label=Herramienta mano
-
-scroll_vertical.title=Usar desplazamiento vertical
-scroll_vertical_label=Desplazamiento vertical
-scroll_horizontal.title=Usar desplazamiento vertical
-scroll_horizontal_label=Desplazamiento horizontal
-scroll_wrapped.title=Usar desplazamiento encapsulado
-scroll_wrapped_label=Desplazamiento encapsulado
-
-spread_none.title=No unir páginas dobles
-spread_none_label=Sin dobles
-spread_odd.title=Unir páginas dobles comenzando con las impares
-spread_odd_label=Dobles impares
-spread_even.title=Unir páginas dobles comenzando con las pares
-spread_even_label=Dobles pares
-
-# Document properties dialog box
-document_properties.title=Propiedades del documento…
-document_properties_label=Propiedades del documento…
-document_properties_file_name=Nombre de archivo:
-document_properties_file_size=Tamaño de archovo:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Título:
-document_properties_author=Autor:
-document_properties_subject=Asunto:
-document_properties_keywords=Palabras clave:
-document_properties_creation_date=Fecha de creación:
-document_properties_modification_date=Fecha de modificación:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creador:
-document_properties_producer=PDF Productor:
-document_properties_version=Versión de PDF:
-document_properties_page_count=Cantidad de páginas:
-document_properties_page_size=Tamaño de página:
-document_properties_page_size_unit_inches=en
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=normal
-document_properties_page_size_orientation_landscape=apaisado
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista rápida de la Web:
-document_properties_linearized_yes=Sí
-document_properties_linearized_no=No
-document_properties_close=Cerrar
-
-print_progress_message=Preparando documento para imprimir…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Alternar barra lateral
-toggle_sidebar_notification.title=Intercambiar barra lateral (el documento contiene esquema/adjuntos)
-toggle_sidebar_label=Alternar barra lateral
-document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems)
-document_outline_label=Esquema del documento
-attachments.title=Mostrar adjuntos
-attachments_label=Adjuntos
-thumbs.title=Mostrar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Buscar en documento
-findbar_label=Buscar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Página {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Página {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura de página {{page}}
-
-# Find panel button title and messages
-find_input.title=Buscar
-find_input.placeholder=Buscar en documento…
-find_previous.title=Buscar la aparición anterior de la frase
-find_previous_label=Anterior
-find_next.title=Buscar la siguiente aparición de la frase
-find_next_label=Siguiente
-find_highlight=Resaltar todo
-find_match_case_label=Coincidir mayúsculas
-find_entire_word_label=Palabras completas
-find_reached_top=Inicio de documento alcanzado, continuando desde abajo
-find_reached_bottom=Fin de documento alcanzando, continuando desde arriba
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} coincidencias
-find_match_count[two]={{current}} de {{total}} coincidencias
-find_match_count[few]={{current}} de {{total}} coincidencias
-find_match_count[many]={{current}} de {{total}} coincidencias
-find_match_count[other]={{current}} de {{total}} coincidencias
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Más de {{limit}} coincidencias
-find_match_count_limit[one]=Más de {{limit}} coinciden
-find_match_count_limit[two]=Más de {{limit}} coincidencias
-find_match_count_limit[few]=Más de {{limit}} coincidencias
-find_match_count_limit[many]=Más de {{limit}} coincidencias
-find_match_count_limit[other]=Más de {{limit}} coincidencias
-find_not_found=Frase no encontrada
-
-# Error panel labels
-error_more_info=Más información
-error_less_info=Menos información
-error_close=Cerrar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensaje: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Archivo: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Línea: {{line}}
-rendering_error=Ocurrió un error al dibujar la página.
-
-# Predefined zoom values
-page_scale_width=Ancho de página
-page_scale_fit=Ajustar página
-page_scale_auto=Zoom automático
-page_scale_actual=Tamaño real
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Ocurrió un error al cargar el PDF.
-invalid_file_error=Archivo PDF no válido o cocrrupto.
-missing_file_error=Archivo PDF faltante.
-unexpected_response_error=Respuesta del servidor inesperada.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Anotación]
-password_label=Ingrese la contraseña para abrir este archivo PDF
-password_invalid=Contraseña inválida. Intente nuevamente.
-password_ok=Aceptar
-password_cancel=Cancelar
-
-printing_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador.
-printing_not_ready=Advertencia: El PDF no está completamente cargado para impresión.
-web_fonts_disabled=Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF.
-document_colors_not_allowed=Los documentos PDF no tienen permitido usar sus propios colores: 'Permitir a las páginas elegir sus propios colores' está desactivado en el navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=( {{pageNumber}} de {{pagesCount}} )
+
+zoom_out.title=Alejar
+zoom_out_label=Alejar
+zoom_in.title=Acercar
+zoom_in_label=Acercar
+zoom.title=Zoom
+presentation_mode.title=Cambiar a modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a primera página
+first_page.label=Ir a primera página
+first_page_label=Ir a primera página
+last_page.title=Ir a última página
+last_page.label=Ir a última página
+last_page_label=Ir a última página
+page_rotate_cw.title=Rotar horario
+page_rotate_cw.label=Rotar horario
+page_rotate_cw_label=Rotar horario
+page_rotate_ccw.title=Rotar antihorario
+page_rotate_ccw.label=Rotar antihorario
+page_rotate_ccw_label=Rotar antihorario
+
+cursor_text_select_tool.title=Habilitar herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Habilitar herramienta mano
+cursor_hand_tool_label=Herramienta mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento vertical
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento encapsulado
+scroll_wrapped_label=Desplazamiento encapsulado
+
+spread_none.title=No unir páginas dobles
+spread_none_label=Sin dobles
+spread_odd.title=Unir páginas dobles comenzando con las impares
+spread_odd_label=Dobles impares
+spread_even.title=Unir páginas dobles comenzando con las pares
+spread_even_label=Dobles pares
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño de archovo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=PDF Productor:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Cantidad de páginas:
+document_properties_page_size=Tamaño de página:
+document_properties_page_size_unit_inches=en
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=normal
+document_properties_page_size_orientation_landscape=apaisado
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la Web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para imprimir…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar barra lateral
+toggle_sidebar_notification.title=Intercambiar barra lateral (el documento contiene esquema/adjuntos)
+toggle_sidebar_label=Alternar barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en documento
+findbar_label=Buscar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en documento…
+find_previous.title=Buscar la aparición anterior de la frase
+find_previous_label=Anterior
+find_next.title=Buscar la siguiente aparición de la frase
+find_next_label=Siguiente
+find_highlight=Resaltar todo
+find_match_case_label=Coincidir mayúsculas
+find_entire_word_label=Palabras completas
+find_reached_top=Inicio de documento alcanzado, continuando desde abajo
+find_reached_bottom=Fin de documento alcanzando, continuando desde arriba
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencias
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coinciden
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Ocurrió un error al dibujar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajustar página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Archivo PDF no válido o cocrrupto.
+missing_file_error=Archivo PDF faltante.
+unexpected_response_error=Respuesta del servidor inesperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotación]
+password_label=Ingrese la contraseña para abrir este archivo PDF
+password_invalid=Contraseña inválida. Intente nuevamente.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador.
+printing_not_ready=Advertencia: El PDF no está completamente cargado para impresión.
+web_fonts_disabled=Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF.
+document_colors_not_allowed=Los documentos PDF no tienen permitido usar sus propios colores: 'Permitir a las páginas elegir sus propios colores' está desactivado en el navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-CL/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-CL/viewer.properties
index f7f621f595717147b3c7714397033e4a042b8666..5c9ad43db4f4b3c2113858c71d62f939dd5e9aa9 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-CL/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-CL/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Página anterior
-previous_label=Anterior
-next.title=Página siguiente
-next_label=Siguiente
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Página
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Alejar
-zoom_out_label=Alejar
-zoom_in.title=Acercar
-zoom_in_label=Acercar
-zoom.title=Ampliación
-presentation_mode.title=Cambiar al modo de presentación
-presentation_mode_label=Modo de presentación
-open_file.title=Abrir archivo
-open_file_label=Abrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar o abrir en nueva ventana)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Herramientas
-tools_label=Herramientas
-first_page.title=Ir a la primera página
-first_page.label=Ir a la primera página
-first_page_label=Ir a la primera página
-last_page.title=Ir a la última página
-last_page.label=Ir a la última página
-last_page_label=Ir a la última página
-page_rotate_cw.title=Girar a la derecha
-page_rotate_cw.label=Girar a la derecha
-page_rotate_cw_label=Girar a la derecha
-page_rotate_ccw.title=Girar a la izquierda
-page_rotate_ccw.label=Girar a la izquierda
-page_rotate_ccw_label=Girar a la izquierda
-
-cursor_text_select_tool.title=Activar la herramienta de selección de texto
-cursor_text_select_tool_label=Herramienta de selección de texto
-cursor_hand_tool.title=Activar la herramienta de mano
-cursor_hand_tool_label=Herramienta de mano
-
-scroll_vertical.title=Usar desplazamiento vertical
-scroll_vertical_label=Desplazamiento vertical
-scroll_horizontal.title=Usar desplazamiento horizontal
-scroll_horizontal_label=Desplazamiento horizontal
-scroll_wrapped.title=Usar desplazamiento en bloque
-scroll_wrapped_label=Desplazamiento en bloque
-
-spread_none.title=No juntar páginas a modo de libro
-spread_none_label=Vista de una página
-spread_odd.title=Junta las páginas partiendo con una de número impar
-spread_odd_label=Vista de libro impar
-spread_even.title=Junta las páginas partiendo con una de número par
-spread_even_label=Vista de libro par
-
-# Document properties dialog box
-document_properties.title=Propiedades del documento…
-document_properties_label=Propiedades del documento…
-document_properties_file_name=Nombre de archivo:
-document_properties_file_size=Tamaño del archivo:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Título:
-document_properties_author=Autor:
-document_properties_subject=Asunto:
-document_properties_keywords=Palabras clave:
-document_properties_creation_date=Fecha de creación:
-document_properties_modification_date=Fecha de modificación:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creador:
-document_properties_producer=Productor del PDF:
-document_properties_version=Versión de PDF:
-document_properties_page_count=Cantidad de páginas:
-document_properties_page_size=Tamaño de la página:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertical
-document_properties_page_size_orientation_landscape=horizontal
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Oficio
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista rápida en Web:
-document_properties_linearized_yes=Sí
-document_properties_linearized_no=No
-document_properties_close=Cerrar
-
-print_progress_message=Preparando documento para impresión…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Barra lateral
-toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)
-toggle_sidebar_label=Mostrar u ocultar la barra lateral
-document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
-document_outline_label=Esquema del documento
-attachments.title=Mostrar adjuntos
-attachments_label=Adjuntos
-thumbs.title=Mostrar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Buscar en el documento
-findbar_label=Buscar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Página {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Página {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura de la página {{page}}
-
-# Find panel button title and messages
-find_input.title=Encontrar
-find_input.placeholder=Encontrar en el documento…
-find_previous.title=Buscar la aparición anterior de la frase
-find_previous_label=Previo
-find_next.title=Buscar la siguiente aparición de la frase
-find_next_label=Siguiente
-find_highlight=Destacar todos
-find_match_case_label=Coincidir mayús./minús.
-find_entire_word_label=Palabras completas
-find_reached_top=Se alcanzó el inicio del documento, continuando desde el final
-find_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} coincidencia
-find_match_count[two]={{current}} de {{total}} coincidencias
-find_match_count[few]={{current}} de {{total}} coincidencias
-find_match_count[many]={{current}} de {{total}} coincidencias
-find_match_count[other]={{current}} de {{total}} coincidencias
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Más de {{limit}} coincidencias
-find_match_count_limit[one]=Más de {{limit}} coincidencia
-find_match_count_limit[two]=Más de {{limit}} coincidencias
-find_match_count_limit[few]=Más de {{limit}} coincidencias
-find_match_count_limit[many]=Más de {{limit}} coincidencias
-find_match_count_limit[other]=Más de {{limit}} coincidencias
-find_not_found=Frase no encontrada
-
-# Error panel labels
-error_more_info=Más información
-error_less_info=Menos información
-error_close=Cerrar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (compilación: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensaje: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Archivo: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Línea: {{line}}
-rendering_error=Ha ocurrido un error al renderizar la página.
-
-# Predefined zoom values
-page_scale_width=Ancho de página
-page_scale_fit=Ajuste de página
-page_scale_auto=Aumento automático
-page_scale_actual=Tamaño actual
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Ha ocurrido un error al cargar el PDF.
-invalid_file_error=Archivo PDF inválido o corrupto.
-missing_file_error=Falta el archivo PDF.
-unexpected_response_error=Respuesta del servidor inesperada.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Anotación]
-password_label=Ingrese la contraseña para abrir este archivo PDF.
-password_invalid=Contraseña inválida. Por favor, vuelve a intentarlo.
-password_ok=Aceptar
-password_cancel=Cancelar
-
-printing_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador.
-printing_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso.
-web_fonts_disabled=Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas.
-document_colors_not_allowed=Los documentos PDF no tienen permitido usar sus propios colores: 'Permitir a las páginas elegir sus propios colores' está desactivado en el navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Alejar
+zoom_out_label=Alejar
+zoom_in.title=Acercar
+zoom_in_label=Acercar
+zoom.title=Ampliación
+presentation_mode.title=Cambiar al modo de presentación
+presentation_mode_label=Modo de presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page.label=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page.label=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Girar a la derecha
+page_rotate_cw.label=Girar a la derecha
+page_rotate_cw_label=Girar a la derecha
+page_rotate_ccw.title=Girar a la izquierda
+page_rotate_ccw.label=Girar a la izquierda
+page_rotate_ccw_label=Girar a la izquierda
+
+cursor_text_select_tool.title=Activar la herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar la herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento en bloque
+scroll_wrapped_label=Desplazamiento en bloque
+
+spread_none.title=No juntar páginas a modo de libro
+spread_none_label=Vista de una página
+spread_odd.title=Junta las páginas partiendo con una de número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Junta las páginas partiendo con una de número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño del archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor del PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Cantidad de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Oficio
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida en Web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Barra lateral
+toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)
+toggle_sidebar_label=Mostrar u ocultar la barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Encontrar
+find_input.placeholder=Encontrar en el documento…
+find_previous.title=Buscar la aparición anterior de la frase
+find_previous_label=Previo
+find_next.title=Buscar la siguiente aparición de la frase
+find_next_label=Siguiente
+find_highlight=Destacar todos
+find_match_case_label=Coincidir mayús./minús.
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, continuando desde el final
+find_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilación: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Ha ocurrido un error al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajuste de página
+page_scale_auto=Aumento automático
+page_scale_actual=Tamaño actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Ha ocurrido un error al cargar el PDF.
+invalid_file_error=Archivo PDF inválido o corrupto.
+missing_file_error=Falta el archivo PDF.
+unexpected_response_error=Respuesta del servidor inesperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotación]
+password_label=Ingrese la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña inválida. Por favor, vuelve a intentarlo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador.
+printing_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso.
+web_fonts_disabled=Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas.
+document_colors_not_allowed=Los documentos PDF no tienen permitido usar sus propios colores: 'Permitir a las páginas elegir sus propios colores' está desactivado en el navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-ES/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-ES/viewer.properties
index cef373a1f5bca7fd6d2fa540a778aae6172527fa..98d4845e4b52db3a9f9d57dbd215884ae6c31742 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-ES/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-ES/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Página anterior
-previous_label=Anterior
-next.title=Página siguiente
-next_label=Siguiente
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Página
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Reducir
-zoom_out_label=Reducir
-zoom_in.title=Aumentar
-zoom_in_label=Aumentar
-zoom.title=Tamaño
-presentation_mode.title=Cambiar al modo presentación
-presentation_mode_label=Modo presentación
-open_file.title=Abrir archivo
-open_file_label=Abrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Herramientas
-tools_label=Herramientas
-first_page.title=Ir a la primera página
-first_page.label=Ir a la primera página
-first_page_label=Ir a la primera página
-last_page.title=Ir a la última página
-last_page.label=Ir a la última página
-last_page_label=Ir a la última página
-page_rotate_cw.title=Rotar en sentido horario
-page_rotate_cw.label=Rotar en sentido horario
-page_rotate_cw_label=Rotar en sentido horario
-page_rotate_ccw.title=Rotar en sentido antihorario
-page_rotate_ccw.label=Rotar en sentido antihorario
-page_rotate_ccw_label=Rotar en sentido antihorario
-
-cursor_text_select_tool.title=Activar herramienta de selección de texto
-cursor_text_select_tool_label=Herramienta de selección de texto
-cursor_hand_tool.title=Activar herramienta de mano
-cursor_hand_tool_label=Herramienta de mano
-
-scroll_vertical.title=Usar desplazamiento vertical
-scroll_vertical_label=Desplazamiento vertical
-scroll_horizontal.title=Usar desplazamiento horizontal
-scroll_horizontal_label=Desplazamiento horizontal
-scroll_wrapped.title=Usar desplazamiento en bloque
-scroll_wrapped_label=Desplazamiento en bloque
-
-spread_none.title=No juntar páginas en vista de libro
-spread_none_label=Vista de libro
-spread_odd.title=Juntar las páginas partiendo de una con número impar
-spread_odd_label=Vista de libro impar
-spread_even.title=Juntar las páginas partiendo de una con número par
-spread_even_label=Vista de libro par
-
-# Document properties dialog box
-document_properties.title=Propiedades del documento…
-document_properties_label=Propiedades del documento…
-document_properties_file_name=Nombre de archivo:
-document_properties_file_size=Tamaño de archivo:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Título:
-document_properties_author=Autor:
-document_properties_subject=Asunto:
-document_properties_keywords=Palabras clave:
-document_properties_creation_date=Fecha de creación:
-document_properties_modification_date=Fecha de modificación:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creador:
-document_properties_producer=Productor PDF:
-document_properties_version=Versión PDF:
-document_properties_page_count=Número de páginas:
-document_properties_page_size=Tamaño de la página:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertical
-document_properties_page_size_orientation_landscape=horizontal
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista rápida de la web:
-document_properties_linearized_yes=Sí
-document_properties_linearized_no=No
-document_properties_close=Cerrar
-
-print_progress_message=Preparando documento para impresión…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Cambiar barra lateral
-toggle_sidebar_notification.title=Alternar panel lateral (el documento contiene un esquema o adjuntos)
-toggle_sidebar_label=Cambiar barra lateral
-document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos)
-document_outline_label=Resumen de documento
-attachments.title=Mostrar adjuntos
-attachments_label=Adjuntos
-thumbs.title=Mostrar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Buscar en el documento
-findbar_label=Buscar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Página {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Página {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura de la página {{page}}
-
-# Find panel button title and messages
-find_input.title=Buscar
-find_input.placeholder=Buscar en el documento…
-find_previous.title=Encontrar la anterior aparición de la frase
-find_previous_label=Anterior
-find_next.title=Encontrar la siguiente aparición de esta frase
-find_next_label=Siguiente
-find_highlight=Resaltar todos
-find_match_case_label=Coincidencia de mayús./minús.
-find_entire_word_label=Palabras completas
-find_reached_top=Se alcanzó el inicio del documento, se continúa desde el final
-find_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} coincidencia
-find_match_count[two]={{current}} de {{total}} coincidencias
-find_match_count[few]={{current}} de {{total}} coincidencias
-find_match_count[many]={{current}} de {{total}} coincidencias
-find_match_count[other]={{current}} de {{total}} coincidencias
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Más de {{limit}} coincidencias
-find_match_count_limit[one]=Más de {{limit}} coincidencia
-find_match_count_limit[two]=Más de {{limit}} coincidencias
-find_match_count_limit[few]=Más de {{limit}} coincidencias
-find_match_count_limit[many]=Más de {{limit}} coincidencias
-find_match_count_limit[other]=Más de {{limit}} coincidencias
-find_not_found=Frase no encontrada
-
-# Error panel labels
-error_more_info=Más información
-error_less_info=Menos información
-error_close=Cerrar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensaje: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Archivo: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Línea: {{line}}
-rendering_error=Ocurrió un error al renderizar la página.
-
-# Predefined zoom values
-page_scale_width=Anchura de la página
-page_scale_fit=Ajuste de la página
-page_scale_auto=Tamaño automático
-page_scale_actual=Tamaño real
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Ocurrió un error al cargar el PDF.
-invalid_file_error=Fichero PDF no válido o corrupto.
-missing_file_error=No hay fichero PDF.
-unexpected_response_error=Respuesta inesperada del servidor.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotación {{type}}]
-password_label=Introduzca la contraseña para abrir este archivo PDF.
-password_invalid=Contraseña no válida. Vuelva a intentarlo.
-password_ok=Aceptar
-password_cancel=Cancelar
-
-printing_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador.
-printing_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse.
-web_fonts_disabled=Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas.
-document_colors_not_allowed=Los documentos PDF no tienen permitido usar sus propios colores: 'Permitir a las páginas elegir sus propios colores' está desactivado en el navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Tamaño
+presentation_mode.title=Cambiar al modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page.label=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page.label=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Rotar en sentido horario
+page_rotate_cw.label=Rotar en sentido horario
+page_rotate_cw_label=Rotar en sentido horario
+page_rotate_ccw.title=Rotar en sentido antihorario
+page_rotate_ccw.label=Rotar en sentido antihorario
+page_rotate_ccw_label=Rotar en sentido antihorario
+
+cursor_text_select_tool.title=Activar herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento en bloque
+scroll_wrapped_label=Desplazamiento en bloque
+
+spread_none.title=No juntar páginas en vista de libro
+spread_none_label=Vista de libro
+spread_odd.title=Juntar las páginas partiendo de una con número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Juntar las páginas partiendo de una con número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño de archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Cambiar barra lateral
+toggle_sidebar_notification.title=Alternar panel lateral (el documento contiene un esquema o adjuntos)
+toggle_sidebar_label=Cambiar barra lateral
+document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Resumen de documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en el documento…
+find_previous.title=Encontrar la anterior aparición de la frase
+find_previous_label=Anterior
+find_next.title=Encontrar la siguiente aparición de esta frase
+find_next_label=Siguiente
+find_highlight=Resaltar todos
+find_match_case_label=Coincidencia de mayús./minús.
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, se continúa desde el final
+find_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Ocurrió un error al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Anchura de la página
+page_scale_fit=Ajuste de la página
+page_scale_auto=Tamaño automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Fichero PDF no válido o corrupto.
+missing_file_error=No hay fichero PDF.
+unexpected_response_error=Respuesta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduzca la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña no válida. Vuelva a intentarlo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador.
+printing_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse.
+web_fonts_disabled=Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas.
+document_colors_not_allowed=Los documentos PDF no tienen permitido usar sus propios colores: 'Permitir a las páginas elegir sus propios colores' está desactivado en el navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-MX/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-MX/viewer.properties
index 88a82826ede006acf601f5f54355d77955aa4f41..6a0b12a112d4159498d2786d644a13e5b3208530 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-MX/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/es-MX/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Página anterior
-previous_label=Anterior
-next.title=Página siguiente
-next_label=Siguiente
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Página
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Reducir
-zoom_out_label=Reducir
-zoom_in.title=Aumentar
-zoom_in_label=Aumentar
-zoom.title=Zoom
-presentation_mode.title=Cambiar al modo presentación
-presentation_mode_label=Modo presentación
-open_file.title=Abrir archivo
-open_file_label=Abrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Herramientas
-tools_label=Herramientas
-first_page.title=Ir a la primera página
-first_page.label=Ir a la primera página
-first_page_label=Ir a la primera página
-last_page.title=Ir a la última página
-last_page.label=Ir a la última página
-last_page_label=Ir a la última página
-page_rotate_cw.title=Girar a la derecha
-page_rotate_cw.label=Girar a la derecha
-page_rotate_cw_label=Girar a la derecha
-page_rotate_ccw.title=Girar a la izquierda
-page_rotate_ccw.label=Girar a la izquierda
-page_rotate_ccw_label=Girar a la izquierda
-
-cursor_text_select_tool.title=Activar la herramienta de selección de texto
-cursor_text_select_tool_label=Herramienta de selección de texto
-cursor_hand_tool.title=Activar la herramienta de mano
-cursor_hand_tool_label=Herramienta de mano
-
-scroll_vertical.title=Usar desplazamiento vertical
-scroll_vertical_label=Desplazamiento vertical
-scroll_horizontal.title=Usar desplazamiento horizontal
-scroll_horizontal_label=Desplazamiento horizontal
-scroll_wrapped.title=Usar desplazamiento encapsulado
-scroll_wrapped_label=Desplazamiento encapsulado
-
-spread_none.title=No unir páginas separadas
-spread_none_label=Vista de una página
-spread_odd.title=Unir las páginas partiendo con una de número impar
-spread_odd_label=Vista de libro impar
-spread_even.title=Juntar las páginas partiendo con una de número par
-spread_even_label=Vista de libro par
-
-# Document properties dialog box
-document_properties.title=Propiedades del documento…
-document_properties_label=Propiedades del documento…
-document_properties_file_name=Nombre del archivo:
-document_properties_file_size=Tamaño del archivo:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Título:
-document_properties_author=Autor:
-document_properties_subject=Asunto:
-document_properties_keywords=Palabras claves:
-document_properties_creation_date=Fecha de creación:
-document_properties_modification_date=Fecha de modificación:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creador:
-document_properties_producer=Productor PDF:
-document_properties_version=Versión PDF:
-document_properties_page_count=Número de páginas:
-document_properties_page_size=Tamaño de la página:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertical
-document_properties_page_size_orientation_landscape=horizontal
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Oficio
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista rápida de la web:
-document_properties_linearized_yes=Sí
-document_properties_linearized_no=No
-document_properties_close=Cerrar
-
-print_progress_message=Preparando documento para impresión…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Cambiar barra lateral
-toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)
-toggle_sidebar_label=Cambiar barra lateral
-document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
-document_outline_label=Esquema del documento
-attachments.title=Mostrar adjuntos
-attachments_label=Adjuntos
-thumbs.title=Mostrar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Buscar en el documento
-findbar_label=Buscar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Página {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Página {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura de la página {{page}}
-
-# Find panel button title and messages
-find_input.title=Buscar
-find_input.placeholder=Buscar en el documento…
-find_previous.title=Ir a la anterior frase encontrada
-find_previous_label=Anterior
-find_next.title=Ir a la siguiente frase encontrada
-find_next_label=Siguiente
-find_highlight=Resaltar todo
-find_match_case_label=Coincidir con mayúsculas y minúsculas
-find_entire_word_label=Palabras completas
-find_reached_top=Se alcanzó el inicio del documento, se buscará al final
-find_reached_bottom=Se alcanzó el final del documento, se buscará al inicio
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} coincidencia
-find_match_count[two]={{current}} de {{total}} coincidencias
-find_match_count[few]={{current}} de {{total}} coincidencias
-find_match_count[many]={{current}} de {{total}} coincidencias
-find_match_count[other]={{current}} de {{total}} coincidencias
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Más de {{limit}} coincidencias
-find_match_count_limit[one]=Más de {{limit}} coinciden
-find_match_count_limit[two]=Más de {{limit}} coincidencias
-find_match_count_limit[few]=Más de {{limit}} coincidencias
-find_match_count_limit[many]=Más de {{limit}} coincidencias
-find_match_count_limit[other]=Más de {{limit}} coincidencias
-find_not_found=No se encontró la frase
-
-# Error panel labels
-error_more_info=Más información
-error_less_info=Menos información
-error_close=Cerrar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensaje: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Archivo: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Línea: {{line}}
-rendering_error=Un error ocurrió al renderizar la página.
-
-# Predefined zoom values
-page_scale_width=Ancho de página
-page_scale_fit=Ajustar página
-page_scale_auto=Zoom automático
-page_scale_actual=Tamaño real
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Un error ocurrió al cargar el PDF.
-invalid_file_error=Archivo PDF invalido o dañado.
-missing_file_error=Archivo PDF no encontrado.
-unexpected_response_error=Respuesta inesperada del servidor.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} anotación]
-password_label=Ingresa la contraseña para abrir este archivo PDF.
-password_invalid=Contraseña inválida. Por favor intenta de nuevo.
-password_ok=Aceptar
-password_cancel=Cancelar
-
-printing_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador.
-printing_not_ready=Advertencia: El PDF no cargo completamente para impresión.
-web_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas.
-document_colors_not_allowed=Los documentos PDF no tienen permiso de usar sus propios colores: 'Permitir que las páginas elijan sus propios colores' esta desactivada en el navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Zoom
+presentation_mode.title=Cambiar al modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page.label=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page.label=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Girar a la derecha
+page_rotate_cw.label=Girar a la derecha
+page_rotate_cw_label=Girar a la derecha
+page_rotate_ccw.title=Girar a la izquierda
+page_rotate_ccw.label=Girar a la izquierda
+page_rotate_ccw_label=Girar a la izquierda
+
+cursor_text_select_tool.title=Activar la herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar la herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento encapsulado
+scroll_wrapped_label=Desplazamiento encapsulado
+
+spread_none.title=No unir páginas separadas
+spread_none_label=Vista de una página
+spread_odd.title=Unir las páginas partiendo con una de número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Juntar las páginas partiendo con una de número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre del archivo:
+document_properties_file_size=Tamaño del archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras claves:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Oficio
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la web:
+document_properties_linearized_yes=Sí
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Cambiar barra lateral
+toggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)
+toggle_sidebar_label=Cambiar barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en el documento…
+find_previous.title=Ir a la anterior frase encontrada
+find_previous_label=Anterior
+find_next.title=Ir a la siguiente frase encontrada
+find_next_label=Siguiente
+find_highlight=Resaltar todo
+find_match_case_label=Coincidir con mayúsculas y minúsculas
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, se buscará al final
+find_reached_bottom=Se alcanzó el final del documento, se buscará al inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coinciden
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=No se encontró la frase
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Línea: {{line}}
+rendering_error=Un error ocurrió al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajustar página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Un error ocurrió al cargar el PDF.
+invalid_file_error=Archivo PDF invalido o dañado.
+missing_file_error=Archivo PDF no encontrado.
+unexpected_response_error=Respuesta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} anotación]
+password_label=Ingresa la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña inválida. Por favor intenta de nuevo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador.
+printing_not_ready=Advertencia: El PDF no cargo completamente para impresión.
+web_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas.
+document_colors_not_allowed=Los documentos PDF no tienen permiso de usar sus propios colores: 'Permitir que las páginas elijan sus propios colores' esta desactivada en el navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/et/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/et/viewer.properties
index 11f47c1c2345bfbc2863c243f414fa6e1ea4ae1a..929c6cd9c9d259105ce5a8a9f8f7afac831018de 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/et/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/et/viewer.properties
@@ -1,246 +1,246 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Eelmine lehekülg
-previous_label=Eelmine
-next.title=Järgmine lehekülg
-next_label=Järgmine
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Leht
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}}/{{pagesCount}})
-
-zoom_out.title=Vähenda
-zoom_out_label=Vähenda
-zoom_in.title=Suurenda
-zoom_in_label=Suurenda
-zoom.title=Suurendamine
-presentation_mode.title=Lülitu esitlusrežiimi
-presentation_mode_label=Esitlusrežiim
-open_file.title=Ava fail
-open_file_label=Ava
-print.title=Prindi
-print_label=Prindi
-download.title=Laadi alla
-download_label=Laadi alla
-bookmark.title=Praegune vaade (kopeeri või ava uues aknas)
-bookmark_label=Praegune vaade
-
-# Secondary toolbar and context menu
-tools.title=Tööriistad
-tools_label=Tööriistad
-first_page.title=Mine esimesele leheküljele
-first_page.label=Mine esimesele leheküljele
-first_page_label=Mine esimesele leheküljele
-last_page.title=Mine viimasele leheküljele
-last_page.label=Mine viimasele leheküljele
-last_page_label=Mine viimasele leheküljele
-page_rotate_cw.title=Pööra päripäeva
-page_rotate_cw.label=Pööra päripäeva
-page_rotate_cw_label=Pööra päripäeva
-page_rotate_ccw.title=Pööra vastupäeva
-page_rotate_ccw.label=Pööra vastupäeva
-page_rotate_ccw_label=Pööra vastupäeva
-
-cursor_text_select_tool.title=Luba teksti valimise tööriist
-cursor_text_select_tool_label=Teksti valimise tööriist
-cursor_hand_tool.title=Luba sirvimistööriist
-cursor_hand_tool_label=Sirvimistööriist
-
-scroll_vertical.title=Kasuta vertikaalset kerimist
-scroll_vertical_label=Vertikaalne kerimine
-scroll_horizontal.title=Kasuta horisontaalset kerimist
-scroll_horizontal_label=Horisontaalne kerimine
-scroll_wrapped.title=Kasuta rohkem mahutavat kerimist
-scroll_wrapped_label=Rohkem mahutav kerimine
-
-spread_none.title=Ära kõrvuta lehekülgi
-spread_none_label=Lehtede kõrvutamine puudub
-spread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega
-spread_odd_label=Kõrvutamine paaritute numbritega alustades
-spread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega
-spread_even_label=Kõrvutamine paarisnumbritega alustades
-
-# Document properties dialog box
-document_properties.title=Dokumendi omadused…
-document_properties_label=Dokumendi omadused…
-document_properties_file_name=Faili nimi:
-document_properties_file_size=Faili suurus:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KiB ({{size_b}} baiti)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MiB ({{size_b}} baiti)
-document_properties_title=Pealkiri:
-document_properties_author=Autor:
-document_properties_subject=Teema:
-document_properties_keywords=Märksõnad:
-document_properties_creation_date=Loodud:
-document_properties_modification_date=Muudetud:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}} {{time}}
-document_properties_creator=Looja:
-document_properties_producer=Generaator:
-document_properties_version=Generaatori versioon:
-document_properties_page_count=Lehekülgi:
-document_properties_page_size=Lehe suurus:
-document_properties_page_size_unit_inches=tolli
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertikaalpaigutus
-document_properties_page_size_orientation_landscape=rõhtpaigutus
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized="Fast Web View" tugi:
-document_properties_linearized_yes=Jah
-document_properties_linearized_no=Ei
-document_properties_close=Sulge
-
-print_progress_message=Dokumendi ettevalmistamine printimiseks…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Loobu
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Näita külgriba
-toggle_sidebar_notification.title=Näita külgriba (dokument sisaldab sisukorda/manuseid)
-toggle_sidebar_label=Näita külgriba
-document_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa)
-document_outline_label=Näita sisukorda
-attachments.title=Näita manuseid
-attachments_label=Manused
-thumbs.title=Näita pisipilte
-thumbs_label=Pisipildid
-findbar.title=Otsi dokumendist
-findbar_label=Otsi
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}}. lehekülg
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}}. lehekülje pisipilt
-
-# Find panel button title and messages
-find_input.title=Otsi
-find_input.placeholder=Otsi dokumendist…
-find_previous.title=Otsi fraasi eelmine esinemiskoht
-find_previous_label=Eelmine
-find_next.title=Otsi fraasi järgmine esinemiskoht
-find_next_label=Järgmine
-find_highlight=Too kõik esile
-find_match_case_label=Tõstutundlik
-find_entire_word_label=Täissõnad
-find_reached_top=Jõuti dokumendi algusesse, jätkati lõpust
-find_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=vaste {{current}}/{{total}}
-find_match_count[two]=vaste {{current}}/{{total}}
-find_match_count[few]=vaste {{current}}/{{total}}
-find_match_count[many]=vaste {{current}}/{{total}}
-find_match_count[other]=vaste {{current}}/{{total}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Rohkem kui {{limit}} vastet
-find_match_count_limit[one]=Rohkem kui {{limit}} vaste
-find_match_count_limit[two]=Rohkem kui {{limit}} vastet
-find_match_count_limit[few]=Rohkem kui {{limit}} vastet
-find_match_count_limit[many]=Rohkem kui {{limit}} vastet
-find_match_count_limit[other]=Rohkem kui {{limit}} vastet
-find_not_found=Fraasi ei leitud
-
-# Error panel labels
-error_more_info=Rohkem teavet
-error_less_info=Vähem teavet
-error_close=Sulge
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Teade: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fail: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rida: {{line}}
-rendering_error=Lehe renderdamisel esines viga.
-
-# Predefined zoom values
-page_scale_width=Mahuta laiusele
-page_scale_fit=Mahuta leheküljele
-page_scale_auto=Automaatne suurendamine
-page_scale_actual=Tegelik suurus
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Viga
-loading_error=PDFi laadimisel esines viga.
-invalid_file_error=Vigane või rikutud PDF-fail.
-missing_file_error=PDF-fail puudub.
-unexpected_response_error=Ootamatu vastus serverilt.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}} {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=PDF-faili avamiseks sisesta parool.
-password_invalid=Vigane parool. Palun proovi uuesti.
-password_ok=Sobib
-password_cancel=Loobu
-
-printing_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud.
-printing_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud.
-web_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada.
-document_colors_not_allowed=PDF-dokumentidel pole oma värvide kasutamine lubatud: “Veebilehtedel on lubatud kasutada oma värve” on brauseris deaktiveeritud.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Eelmine lehekülg
+previous_label=Eelmine
+next.title=Järgmine lehekülg
+next_label=Järgmine
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Leht
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}/{{pagesCount}})
+
+zoom_out.title=Vähenda
+zoom_out_label=Vähenda
+zoom_in.title=Suurenda
+zoom_in_label=Suurenda
+zoom.title=Suurendamine
+presentation_mode.title=Lülitu esitlusrežiimi
+presentation_mode_label=Esitlusrežiim
+open_file.title=Ava fail
+open_file_label=Ava
+print.title=Prindi
+print_label=Prindi
+download.title=Laadi alla
+download_label=Laadi alla
+bookmark.title=Praegune vaade (kopeeri või ava uues aknas)
+bookmark_label=Praegune vaade
+
+# Secondary toolbar and context menu
+tools.title=Tööriistad
+tools_label=Tööriistad
+first_page.title=Mine esimesele leheküljele
+first_page.label=Mine esimesele leheküljele
+first_page_label=Mine esimesele leheküljele
+last_page.title=Mine viimasele leheküljele
+last_page.label=Mine viimasele leheküljele
+last_page_label=Mine viimasele leheküljele
+page_rotate_cw.title=Pööra päripäeva
+page_rotate_cw.label=Pööra päripäeva
+page_rotate_cw_label=Pööra päripäeva
+page_rotate_ccw.title=Pööra vastupäeva
+page_rotate_ccw.label=Pööra vastupäeva
+page_rotate_ccw_label=Pööra vastupäeva
+
+cursor_text_select_tool.title=Luba teksti valimise tööriist
+cursor_text_select_tool_label=Teksti valimise tööriist
+cursor_hand_tool.title=Luba sirvimistööriist
+cursor_hand_tool_label=Sirvimistööriist
+
+scroll_vertical.title=Kasuta vertikaalset kerimist
+scroll_vertical_label=Vertikaalne kerimine
+scroll_horizontal.title=Kasuta horisontaalset kerimist
+scroll_horizontal_label=Horisontaalne kerimine
+scroll_wrapped.title=Kasuta rohkem mahutavat kerimist
+scroll_wrapped_label=Rohkem mahutav kerimine
+
+spread_none.title=Ära kõrvuta lehekülgi
+spread_none_label=Lehtede kõrvutamine puudub
+spread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega
+spread_odd_label=Kõrvutamine paaritute numbritega alustades
+spread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega
+spread_even_label=Kõrvutamine paarisnumbritega alustades
+
+# Document properties dialog box
+document_properties.title=Dokumendi omadused…
+document_properties_label=Dokumendi omadused…
+document_properties_file_name=Faili nimi:
+document_properties_file_size=Faili suurus:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KiB ({{size_b}} baiti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MiB ({{size_b}} baiti)
+document_properties_title=Pealkiri:
+document_properties_author=Autor:
+document_properties_subject=Teema:
+document_properties_keywords=Märksõnad:
+document_properties_creation_date=Loodud:
+document_properties_modification_date=Muudetud:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Looja:
+document_properties_producer=Generaator:
+document_properties_version=Generaatori versioon:
+document_properties_page_count=Lehekülgi:
+document_properties_page_size=Lehe suurus:
+document_properties_page_size_unit_inches=tolli
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertikaalpaigutus
+document_properties_page_size_orientation_landscape=rõhtpaigutus
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized="Fast Web View" tugi:
+document_properties_linearized_yes=Jah
+document_properties_linearized_no=Ei
+document_properties_close=Sulge
+
+print_progress_message=Dokumendi ettevalmistamine printimiseks…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Loobu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Näita külgriba
+toggle_sidebar_notification.title=Näita külgriba (dokument sisaldab sisukorda/manuseid)
+toggle_sidebar_label=Näita külgriba
+document_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa)
+document_outline_label=Näita sisukorda
+attachments.title=Näita manuseid
+attachments_label=Manused
+thumbs.title=Näita pisipilte
+thumbs_label=Pisipildid
+findbar.title=Otsi dokumendist
+findbar_label=Otsi
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. lehekülg
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. lehekülje pisipilt
+
+# Find panel button title and messages
+find_input.title=Otsi
+find_input.placeholder=Otsi dokumendist…
+find_previous.title=Otsi fraasi eelmine esinemiskoht
+find_previous_label=Eelmine
+find_next.title=Otsi fraasi järgmine esinemiskoht
+find_next_label=Järgmine
+find_highlight=Too kõik esile
+find_match_case_label=Tõstutundlik
+find_entire_word_label=Täissõnad
+find_reached_top=Jõuti dokumendi algusesse, jätkati lõpust
+find_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=vaste {{current}}/{{total}}
+find_match_count[two]=vaste {{current}}/{{total}}
+find_match_count[few]=vaste {{current}}/{{total}}
+find_match_count[many]=vaste {{current}}/{{total}}
+find_match_count[other]=vaste {{current}}/{{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Rohkem kui {{limit}} vastet
+find_match_count_limit[one]=Rohkem kui {{limit}} vaste
+find_match_count_limit[two]=Rohkem kui {{limit}} vastet
+find_match_count_limit[few]=Rohkem kui {{limit}} vastet
+find_match_count_limit[many]=Rohkem kui {{limit}} vastet
+find_match_count_limit[other]=Rohkem kui {{limit}} vastet
+find_not_found=Fraasi ei leitud
+
+# Error panel labels
+error_more_info=Rohkem teavet
+error_less_info=Vähem teavet
+error_close=Sulge
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teade: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rida: {{line}}
+rendering_error=Lehe renderdamisel esines viga.
+
+# Predefined zoom values
+page_scale_width=Mahuta laiusele
+page_scale_fit=Mahuta leheküljele
+page_scale_auto=Automaatne suurendamine
+page_scale_actual=Tegelik suurus
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Viga
+loading_error=PDFi laadimisel esines viga.
+invalid_file_error=Vigane või rikutud PDF-fail.
+missing_file_error=PDF-fail puudub.
+unexpected_response_error=Ootamatu vastus serverilt.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=PDF-faili avamiseks sisesta parool.
+password_invalid=Vigane parool. Palun proovi uuesti.
+password_ok=Sobib
+password_cancel=Loobu
+
+printing_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud.
+printing_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud.
+web_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada.
+document_colors_not_allowed=PDF-dokumentidel pole oma värvide kasutamine lubatud: “Veebilehtedel on lubatud kasutada oma värve” on brauseris deaktiveeritud.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eu/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eu/viewer.properties
index e14f5cd3835061c3a73c4eed3b20b0209ef0d369..f047bc2745bfa5158bf1e8bb2720892a18689e29 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eu/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/eu/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Aurreko orria
-previous_label=Aurrekoa
-next.title=Hurrengo orria
-next_label=Hurrengoa
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Orria
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages={{pagesCount}}/{{pageNumber}}
-
-zoom_out.title=Urrundu zooma
-zoom_out_label=Urrundu zooma
-zoom_in.title=Gerturatu zooma
-zoom_in_label=Gerturatu zooma
-zoom.title=Zooma
-presentation_mode.title=Aldatu aurkezpen modura
-presentation_mode_label=Arkezpen modua
-open_file.title=Ireki fitxategia
-open_file_label=Ireki
-print.title=Inprimatu
-print_label=Inprimatu
-download.title=Deskargatu
-download_label=Deskargatu
-bookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian)
-bookmark_label=Uneko ikuspegia
-
-# Secondary toolbar and context menu
-tools.title=Tresnak
-tools_label=Tresnak
-first_page.title=Joan lehen orrira
-first_page.label=Joan lehen orrira
-first_page_label=Joan lehen orrira
-last_page.title=Joan azken orrira
-last_page.label=Joan azken orrira
-last_page_label=Joan azken orrira
-page_rotate_cw.title=Biratu erlojuaren norantzan
-page_rotate_cw.label=Biratu erlojuaren norantzan
-page_rotate_cw_label=Biratu erlojuaren norantzan
-page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan
-page_rotate_ccw.label=Biratu erlojuaren aurkako norantzan
-page_rotate_ccw_label=Biratu erlojuaren aurkako norantzan
-
-cursor_text_select_tool.title=Gaitu testuaren hautapen tresna
-cursor_text_select_tool_label=Testuaren hautapen tresna
-cursor_hand_tool.title=Gaitu eskuaren tresna
-cursor_hand_tool_label=Eskuaren tresna
-
-scroll_vertical.title=Erabili korritze bertikala
-scroll_vertical_label=Korritze bertikala
-scroll_horizontal.title=Erabili korritze horizontala
-scroll_horizontal_label=Korritze horizontala
-scroll_wrapped.title=Erabili korritze egokitua
-scroll_wrapped_label=Korritze egokitua
-
-spread_none.title=Ez elkartu barreiatutako orriak
-spread_none_label=Barreiatzerik ez
-spread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita
-spread_odd_label=Barreiatze bakoitia
-spread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita
-spread_even_label=Barreiatze bikoitia
-
-# Document properties dialog box
-document_properties.title=Dokumentuaren propietateak…
-document_properties_label=Dokumentuaren propietateak…
-document_properties_file_name=Fitxategi-izena:
-document_properties_file_size=Fitxategiaren tamaina:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} byte)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} byte)
-document_properties_title=Izenburua:
-document_properties_author=Egilea:
-document_properties_subject=Gaia:
-document_properties_keywords=Gako-hitzak:
-document_properties_creation_date=Sortze-data:
-document_properties_modification_date=Aldatze-data:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Sortzailea:
-document_properties_producer=PDFaren ekoizlea:
-document_properties_version=PDF bertsioa:
-document_properties_page_count=Orrialde kopurua:
-document_properties_page_size=Orriaren tamaina:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=bertikala
-document_properties_page_size_orientation_landscape=horizontala
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Gutuna
-document_properties_page_size_name_legal=Legala
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Webeko ikuspegi bizkorra:
-document_properties_linearized_yes=Bai
-document_properties_linearized_no=Ez
-document_properties_close=Itxi
-
-print_progress_message=Dokumentua inprimatzeko prestatzen…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent=%{{progress}}
-print_progress_close=Utzi
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Txandakatu alboko barra
-toggle_sidebar_notification.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak ditu)
-toggle_sidebar_label=Txandakatu alboko barra
-document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)
-document_outline_label=Dokumentuaren eskema
-attachments.title=Erakutsi eranskinak
-attachments_label=Eranskinak
-thumbs.title=Erakutsi koadro txikiak
-thumbs_label=Koadro txikiak
-findbar.title=Bilatu dokumentuan
-findbar_label=Bilatu
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas={{page}}. orria
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}}. orria
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}}. orriaren koadro txikia
-
-# Find panel button title and messages
-find_input.title=Bilatu
-find_input.placeholder=Bilatu dokumentuan…
-find_previous.title=Bilatu esaldiaren aurreko parekatzea
-find_previous_label=Aurrekoa
-find_next.title=Bilatu esaldiaren hurrengo parekatzea
-find_next_label=Hurrengoa
-find_highlight=Nabarmendu guztia
-find_match_case_label=Bat etorri maiuskulekin/minuskulekin
-find_entire_word_label=Hitz osoak
-find_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen
-find_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}}/{{current}}. bat etortzea
-find_match_count[two]={{total}}/{{current}}. bat etortzea
-find_match_count[few]={{total}}/{{current}}. bat etortzea
-find_match_count[many]={{total}}/{{current}}. bat etortzea
-find_match_count[other]={{total}}/{{current}}. bat etortzea
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} bat-etortze baino gehiago
-find_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago
-find_match_count_limit[two]={{limit}} bat-etortze baino gehiago
-find_match_count_limit[few]={{limit}} bat-etortze baino gehiago
-find_match_count_limit[many]={{limit}} bat-etortze baino gehiago
-find_match_count_limit[other]={{limit}} bat-etortze baino gehiago
-find_not_found=Esaldia ez da aurkitu
-
-# Error panel labels
-error_more_info=Informazio gehiago
-error_less_info=Informazio gutxiago
-error_close=Itxi
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (eraikuntza: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mezua: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fitxategia: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Lerroa: {{line}}
-rendering_error=Errorea gertatu da orria errendatzean.
-
-# Predefined zoom values
-page_scale_width=Orriaren zabalera
-page_scale_fit=Doitu orrira
-page_scale_auto=Zoom automatikoa
-page_scale_actual=Benetako tamaina
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent=%{{scale}}
-
-# Loading indicator messages
-loading_error_indicator=Errorea
-loading_error=Errorea gertatu da PDFa kargatzean.
-invalid_file_error=PDF fitxategi baliogabe edo hondatua.
-missing_file_error=PDF fitxategia falta da.
-unexpected_response_error=Espero gabeko zerbitzariaren erantzuna.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} ohartarazpena]
-password_label=Idatzi PDF fitxategi hau irekitzeko pasahitza.
-password_invalid=Pasahitz baliogabea. Saiatu berriro mesedez.
-password_ok=Ados
-password_cancel=Utzi
-
-printing_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan.
-printing_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko.
-web_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili.
-document_colors_not_allowed=PDF dokumentuek ez dute beraien koloreak erabiltzeko baimenik: 'Baimendu orriak beraien letra-tipoak aukeratzea' desaktibatuta dago nabigatzailean.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Aurreko orria
+previous_label=Aurrekoa
+next.title=Hurrengo orria
+next_label=Hurrengoa
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Orria
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}/{{pageNumber}}
+
+zoom_out.title=Urrundu zooma
+zoom_out_label=Urrundu zooma
+zoom_in.title=Gerturatu zooma
+zoom_in_label=Gerturatu zooma
+zoom.title=Zooma
+presentation_mode.title=Aldatu aurkezpen modura
+presentation_mode_label=Arkezpen modua
+open_file.title=Ireki fitxategia
+open_file_label=Ireki
+print.title=Inprimatu
+print_label=Inprimatu
+download.title=Deskargatu
+download_label=Deskargatu
+bookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian)
+bookmark_label=Uneko ikuspegia
+
+# Secondary toolbar and context menu
+tools.title=Tresnak
+tools_label=Tresnak
+first_page.title=Joan lehen orrira
+first_page.label=Joan lehen orrira
+first_page_label=Joan lehen orrira
+last_page.title=Joan azken orrira
+last_page.label=Joan azken orrira
+last_page_label=Joan azken orrira
+page_rotate_cw.title=Biratu erlojuaren norantzan
+page_rotate_cw.label=Biratu erlojuaren norantzan
+page_rotate_cw_label=Biratu erlojuaren norantzan
+page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan
+page_rotate_ccw.label=Biratu erlojuaren aurkako norantzan
+page_rotate_ccw_label=Biratu erlojuaren aurkako norantzan
+
+cursor_text_select_tool.title=Gaitu testuaren hautapen tresna
+cursor_text_select_tool_label=Testuaren hautapen tresna
+cursor_hand_tool.title=Gaitu eskuaren tresna
+cursor_hand_tool_label=Eskuaren tresna
+
+scroll_vertical.title=Erabili korritze bertikala
+scroll_vertical_label=Korritze bertikala
+scroll_horizontal.title=Erabili korritze horizontala
+scroll_horizontal_label=Korritze horizontala
+scroll_wrapped.title=Erabili korritze egokitua
+scroll_wrapped_label=Korritze egokitua
+
+spread_none.title=Ez elkartu barreiatutako orriak
+spread_none_label=Barreiatzerik ez
+spread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita
+spread_odd_label=Barreiatze bakoitia
+spread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita
+spread_even_label=Barreiatze bikoitia
+
+# Document properties dialog box
+document_properties.title=Dokumentuaren propietateak…
+document_properties_label=Dokumentuaren propietateak…
+document_properties_file_name=Fitxategi-izena:
+document_properties_file_size=Fitxategiaren tamaina:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Izenburua:
+document_properties_author=Egilea:
+document_properties_subject=Gaia:
+document_properties_keywords=Gako-hitzak:
+document_properties_creation_date=Sortze-data:
+document_properties_modification_date=Aldatze-data:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Sortzailea:
+document_properties_producer=PDFaren ekoizlea:
+document_properties_version=PDF bertsioa:
+document_properties_page_count=Orrialde kopurua:
+document_properties_page_size=Orriaren tamaina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=bertikala
+document_properties_page_size_orientation_landscape=horizontala
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Gutuna
+document_properties_page_size_name_legal=Legala
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Webeko ikuspegi bizkorra:
+document_properties_linearized_yes=Bai
+document_properties_linearized_no=Ez
+document_properties_close=Itxi
+
+print_progress_message=Dokumentua inprimatzeko prestatzen…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=%{{progress}}
+print_progress_close=Utzi
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Txandakatu alboko barra
+toggle_sidebar_notification.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak ditu)
+toggle_sidebar_label=Txandakatu alboko barra
+document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)
+document_outline_label=Dokumentuaren eskema
+attachments.title=Erakutsi eranskinak
+attachments_label=Eranskinak
+thumbs.title=Erakutsi koadro txikiak
+thumbs_label=Koadro txikiak
+findbar.title=Bilatu dokumentuan
+findbar_label=Bilatu
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}}. orria
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. orria
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. orriaren koadro txikia
+
+# Find panel button title and messages
+find_input.title=Bilatu
+find_input.placeholder=Bilatu dokumentuan…
+find_previous.title=Bilatu esaldiaren aurreko parekatzea
+find_previous_label=Aurrekoa
+find_next.title=Bilatu esaldiaren hurrengo parekatzea
+find_next_label=Hurrengoa
+find_highlight=Nabarmendu guztia
+find_match_case_label=Bat etorri maiuskulekin/minuskulekin
+find_entire_word_label=Hitz osoak
+find_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen
+find_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}}/{{current}}. bat etortzea
+find_match_count[two]={{total}}/{{current}}. bat etortzea
+find_match_count[few]={{total}}/{{current}}. bat etortzea
+find_match_count[many]={{total}}/{{current}}. bat etortzea
+find_match_count[other]={{total}}/{{current}}. bat etortzea
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago
+find_match_count_limit[two]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[few]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[many]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[other]={{limit}} bat-etortze baino gehiago
+find_not_found=Esaldia ez da aurkitu
+
+# Error panel labels
+error_more_info=Informazio gehiago
+error_less_info=Informazio gutxiago
+error_close=Itxi
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (eraikuntza: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mezua: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fitxategia: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lerroa: {{line}}
+rendering_error=Errorea gertatu da orria errendatzean.
+
+# Predefined zoom values
+page_scale_width=Orriaren zabalera
+page_scale_fit=Doitu orrira
+page_scale_auto=Zoom automatikoa
+page_scale_actual=Benetako tamaina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent=%{{scale}}
+
+# Loading indicator messages
+loading_error_indicator=Errorea
+loading_error=Errorea gertatu da PDFa kargatzean.
+invalid_file_error=PDF fitxategi baliogabe edo hondatua.
+missing_file_error=PDF fitxategia falta da.
+unexpected_response_error=Espero gabeko zerbitzariaren erantzuna.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ohartarazpena]
+password_label=Idatzi PDF fitxategi hau irekitzeko pasahitza.
+password_invalid=Pasahitz baliogabea. Saiatu berriro mesedez.
+password_ok=Ados
+password_cancel=Utzi
+
+printing_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan.
+printing_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko.
+web_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili.
+document_colors_not_allowed=PDF dokumentuek ez dute beraien koloreak erabiltzeko baimenik: 'Baimendu orriak beraien letra-tipoak aukeratzea' desaktibatuta dago nabigatzailean.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fa/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fa/viewer.properties
index e95738c6e10be233e52754a9126552f6c00a6667..ec48f48f238f1c676d3a927a6a0514557124e9c8 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fa/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fa/viewer.properties
@@ -1,223 +1,223 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=صفحهٔ قبلی
-previous_label=قبلی
-next.title=صفحهٔ بعدی
-next_label=بعدی
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=صفحه
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=از {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}}از {{pagesCount}})
-
-zoom_out.title=کوچکنمایی
-zoom_out_label=کوچکنمایی
-zoom_in.title=بزرگنمایی
-zoom_in_label=بزرگنمایی
-zoom.title=زوم
-presentation_mode.title=تغییر به حالت ارائه
-presentation_mode_label=حالت ارائه
-open_file.title=باز کردن پرونده
-open_file_label=باز کردن
-print.title=چاپ
-print_label=چاپ
-download.title=بارگیری
-download_label=بارگیری
-bookmark.title=نمای فعلی (رونوشت و یا نشان دادن در پنجره جدید)
-bookmark_label=نمای فعلی
-
-# Secondary toolbar and context menu
-tools.title=ابزارها
-tools_label=ابزارها
-first_page.title=برو به اولین صفحه
-first_page.label=برو یه اولین صفحه
-first_page_label=برو به اولین صفحه
-last_page.title=برو به آخرین صفحه
-last_page.label=برو به آخرین صفحه
-last_page_label=برو به آخرین صفحه
-page_rotate_cw.title=چرخش ساعتگرد
-page_rotate_cw.label=چرخش ساعتگرد
-page_rotate_cw_label=چرخش ساعتگرد
-page_rotate_ccw.title=چرخش پاد ساعتگرد
-page_rotate_ccw.label=چرخش پاد ساعتگرد
-page_rotate_ccw_label=چرخش پاد ساعتگرد
-
-cursor_text_select_tool.title=فعال کردن ابزارِ انتخابِ متن
-cursor_text_select_tool_label=ابزارِ انتخابِ متن
-cursor_hand_tool.title=فعال کردن ابزارِ دست
-cursor_hand_tool_label=ابزار دست
-
-scroll_vertical.title=استفاده از پیمایش عمودی
-scroll_vertical_label=پیمایش عمودی
-scroll_horizontal.title=استفاده از پیمایش افقی
-scroll_horizontal_label=پیمایش افقی
-
-
-# Document properties dialog box
-document_properties.title=خصوصیات سند...
-document_properties_label=خصوصیات سند...
-document_properties_file_name=نام فایل:
-document_properties_file_size=حجم پرونده:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت)
-document_properties_title=عنوان:
-document_properties_author=نویسنده:
-document_properties_subject=موضوع:
-document_properties_keywords=کلیدواژهها:
-document_properties_creation_date=تاریخ ایجاد:
-document_properties_modification_date=تاریخ ویرایش:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}، {{time}}
-document_properties_creator=ایجاد کننده:
-document_properties_producer=ایجاد کننده PDF:
-document_properties_version=نسخه PDF:
-document_properties_page_count=تعداد صفحات:
-document_properties_page_size=اندازه صفحه:
-document_properties_page_size_unit_inches=اینچ
-document_properties_page_size_unit_millimeters=میلیمتر
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=نامه
-document_properties_page_size_name_legal=حقوقی
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=بله
-document_properties_linearized_no=خیر
-document_properties_close=بستن
-
-print_progress_message=آماده سازی مدارک برای چاپ کردن…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=لغو
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=باز و بسته کردن نوار کناری
-toggle_sidebar_notification.title=تغییر وضعیت نوار کناری (سند حاوی طرح/پیوست است)
-toggle_sidebar_label=تغییرحالت نوارکناری
-document_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید)
-document_outline_label=طرح نوشتار
-attachments.title=نمایش پیوستها
-attachments_label=پیوستها
-thumbs.title=نمایش تصاویر بندانگشتی
-thumbs_label=تصاویر بندانگشتی
-findbar.title=جستجو در سند
-findbar_label=پیدا کردن
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=صفحه {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=تصویر بند انگشتی صفحه {{page}}
-
-# Find panel button title and messages
-find_input.title=پیدا کردن
-find_input.placeholder=پیدا کردن در سند…
-find_previous.title=پیدا کردن رخداد قبلی عبارت
-find_previous_label=قبلی
-find_next.title=پیدا کردن رخداد بعدی عبارت
-find_next_label=بعدی
-find_highlight=برجسته و هایلایت کردن همه موارد
-find_match_case_label=تطبیق کوچکی و بزرگی حروف
-find_entire_word_label=تمام کلمهها
-find_reached_top=به بالای صفحه رسیدیم، از پایین ادامه میدهیم
-find_reached_bottom=به آخر صفحه رسیدیم، از بالا ادامه میدهیم
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count[one]={{current}} از {{total}} مطابقت دارد
-find_match_count[two]={{current}} از {{total}} مطابقت دارد
-find_match_count[few]={{current}} از {{total}} مطابقت دارد
-find_match_count[many]={{current}} از {{total}} مطابقت دارد
-find_match_count[other]={{current}} از {{total}} مطابقت دارد
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_not_found=عبارت پیدا نشد
-
-# Error panel labels
-error_more_info=اطلاعات بیشتر
-error_less_info=اطلاعات کمتر
-error_close=بستن
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js ورژن{{version}} (ساخت: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=پیام: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=توده: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=پرونده: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=سطر: {{line}}
-rendering_error=هنگام بارگیری صفحه خطایی رخ داد.
-
-# Predefined zoom values
-page_scale_width=عرض صفحه
-page_scale_fit=اندازه کردن صفحه
-page_scale_auto=بزرگنمایی خودکار
-page_scale_actual=اندازه واقعی
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=خطا
-loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد.
-invalid_file_error=پرونده PDF نامعتبر یامعیوب میباشد.
-missing_file_error=پرونده PDF یافت نشد.
-unexpected_response_error=پاسخ پیش بینی نشده سرور
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید.
-password_invalid=گذرواژه نامعتبر. لطفا مجددا تلاش کنید.
-password_ok=تأیید
-password_cancel=لغو
-
-printing_not_supported=هشدار: قابلیت چاپ بهطور کامل در این مرورگر پشتیبانی نمیشود.
-printing_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد.
-web_fonts_disabled=فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد.
-document_colors_not_allowed=فایلهای PDF اجازه ندارند تا از رنگهای خود استفاده کنند: گزینه «به صفحات اجازه بده تا از رنگهای خود استفاده کنند» در مرورگر غیر فعال است.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=صفحهٔ قبلی
+previous_label=قبلی
+next.title=صفحهٔ بعدی
+next_label=بعدی
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=صفحه
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=از {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}از {{pagesCount}})
+
+zoom_out.title=کوچکنمایی
+zoom_out_label=کوچکنمایی
+zoom_in.title=بزرگنمایی
+zoom_in_label=بزرگنمایی
+zoom.title=زوم
+presentation_mode.title=تغییر به حالت ارائه
+presentation_mode_label=حالت ارائه
+open_file.title=باز کردن پرونده
+open_file_label=باز کردن
+print.title=چاپ
+print_label=چاپ
+download.title=بارگیری
+download_label=بارگیری
+bookmark.title=نمای فعلی (رونوشت و یا نشان دادن در پنجره جدید)
+bookmark_label=نمای فعلی
+
+# Secondary toolbar and context menu
+tools.title=ابزارها
+tools_label=ابزارها
+first_page.title=برو به اولین صفحه
+first_page.label=برو یه اولین صفحه
+first_page_label=برو به اولین صفحه
+last_page.title=برو به آخرین صفحه
+last_page.label=برو به آخرین صفحه
+last_page_label=برو به آخرین صفحه
+page_rotate_cw.title=چرخش ساعتگرد
+page_rotate_cw.label=چرخش ساعتگرد
+page_rotate_cw_label=چرخش ساعتگرد
+page_rotate_ccw.title=چرخش پاد ساعتگرد
+page_rotate_ccw.label=چرخش پاد ساعتگرد
+page_rotate_ccw_label=چرخش پاد ساعتگرد
+
+cursor_text_select_tool.title=فعال کردن ابزارِ انتخابِ متن
+cursor_text_select_tool_label=ابزارِ انتخابِ متن
+cursor_hand_tool.title=فعال کردن ابزارِ دست
+cursor_hand_tool_label=ابزار دست
+
+scroll_vertical.title=استفاده از پیمایش عمودی
+scroll_vertical_label=پیمایش عمودی
+scroll_horizontal.title=استفاده از پیمایش افقی
+scroll_horizontal_label=پیمایش افقی
+
+
+# Document properties dialog box
+document_properties.title=خصوصیات سند...
+document_properties_label=خصوصیات سند...
+document_properties_file_name=نام فایل:
+document_properties_file_size=حجم پرونده:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت)
+document_properties_title=عنوان:
+document_properties_author=نویسنده:
+document_properties_subject=موضوع:
+document_properties_keywords=کلیدواژهها:
+document_properties_creation_date=تاریخ ایجاد:
+document_properties_modification_date=تاریخ ویرایش:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=ایجاد کننده:
+document_properties_producer=ایجاد کننده PDF:
+document_properties_version=نسخه PDF:
+document_properties_page_count=تعداد صفحات:
+document_properties_page_size=اندازه صفحه:
+document_properties_page_size_unit_inches=اینچ
+document_properties_page_size_unit_millimeters=میلیمتر
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=نامه
+document_properties_page_size_name_legal=حقوقی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=بله
+document_properties_linearized_no=خیر
+document_properties_close=بستن
+
+print_progress_message=آماده سازی مدارک برای چاپ کردن…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=لغو
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=باز و بسته کردن نوار کناری
+toggle_sidebar_notification.title=تغییر وضعیت نوار کناری (سند حاوی طرح/پیوست است)
+toggle_sidebar_label=تغییرحالت نوارکناری
+document_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید)
+document_outline_label=طرح نوشتار
+attachments.title=نمایش پیوستها
+attachments_label=پیوستها
+thumbs.title=نمایش تصاویر بندانگشتی
+thumbs_label=تصاویر بندانگشتی
+findbar.title=جستجو در سند
+findbar_label=پیدا کردن
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=صفحه {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=تصویر بند انگشتی صفحه {{page}}
+
+# Find panel button title and messages
+find_input.title=پیدا کردن
+find_input.placeholder=پیدا کردن در سند…
+find_previous.title=پیدا کردن رخداد قبلی عبارت
+find_previous_label=قبلی
+find_next.title=پیدا کردن رخداد بعدی عبارت
+find_next_label=بعدی
+find_highlight=برجسته و هایلایت کردن همه موارد
+find_match_case_label=تطبیق کوچکی و بزرگی حروف
+find_entire_word_label=تمام کلمهها
+find_reached_top=به بالای صفحه رسیدیم، از پایین ادامه میدهیم
+find_reached_bottom=به آخر صفحه رسیدیم، از بالا ادامه میدهیم
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count[one]={{current}} از {{total}} مطابقت دارد
+find_match_count[two]={{current}} از {{total}} مطابقت دارد
+find_match_count[few]={{current}} از {{total}} مطابقت دارد
+find_match_count[many]={{current}} از {{total}} مطابقت دارد
+find_match_count[other]={{current}} از {{total}} مطابقت دارد
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=عبارت پیدا نشد
+
+# Error panel labels
+error_more_info=اطلاعات بیشتر
+error_less_info=اطلاعات کمتر
+error_close=بستن
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js ورژن{{version}} (ساخت: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پیام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=توده: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=پرونده: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=سطر: {{line}}
+rendering_error=هنگام بارگیری صفحه خطایی رخ داد.
+
+# Predefined zoom values
+page_scale_width=عرض صفحه
+page_scale_fit=اندازه کردن صفحه
+page_scale_auto=بزرگنمایی خودکار
+page_scale_actual=اندازه واقعی
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=خطا
+loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد.
+invalid_file_error=پرونده PDF نامعتبر یامعیوب میباشد.
+missing_file_error=پرونده PDF یافت نشد.
+unexpected_response_error=پاسخ پیش بینی نشده سرور
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید.
+password_invalid=گذرواژه نامعتبر. لطفا مجددا تلاش کنید.
+password_ok=تأیید
+password_cancel=لغو
+
+printing_not_supported=هشدار: قابلیت چاپ بهطور کامل در این مرورگر پشتیبانی نمیشود.
+printing_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد.
+web_fonts_disabled=فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد.
+document_colors_not_allowed=فایلهای PDF اجازه ندارند تا از رنگهای خود استفاده کنند: گزینه «به صفحات اجازه بده تا از رنگهای خود استفاده کنند» در مرورگر غیر فعال است.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ff/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ff/viewer.properties
index 2e94346aa23b4938ed3eb9d97988f8417b384b1b..e3ae206f5051e39e63cd3f62b54541c30451a029 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ff/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ff/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Hello Ɓennungo
-previous_label=Ɓennuɗo
-next.title=Hello faango
-next_label=Yeeso
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Hello
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=e nder {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=Lonngo Woɗɗa
-zoom_out_label=Lonngo Woɗɗa
-zoom_in.title=Lonngo Ara
-zoom_in_label=Lonngo Ara
-zoom.title=Lonngo
-presentation_mode.title=Faytu to Presentation Mode
-presentation_mode_label=Presentation Mode
-open_file.title=Uddit Fiilde
-open_file_label=Uddit
-print.title=Winndito
-print_label=Winndito
-download.title=Aawto
-download_label=Aawto
-bookmark.title=Jiytol gonangol (natto walla uddit e henorde)
-bookmark_label=Jiytol Gonangol
-
-# Secondary toolbar and context menu
-tools.title=Kuutorɗe
-tools_label=Kuutorɗe
-first_page.title=Yah to hello adanngo
-first_page.label=Yah to hello adanngo
-first_page_label=Yah to hello adanngo
-last_page.title=Yah to hello wattindiingo
-last_page.label=Yah to hello wattindiingo
-last_page_label=Yah to hello wattindiingo
-page_rotate_cw.title=Yiiltu Faya Ñaamo
-page_rotate_cw.label=Yiiltu Faya Ñaamo
-page_rotate_cw_label=Yiiltu Faya Ñaamo
-page_rotate_ccw.title=Yiiltu Faya Nano
-page_rotate_ccw.label=Yiiltu Faya Nano
-page_rotate_ccw_label=Yiiltu Faya Nano
-
-cursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi
-cursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi
-cursor_hand_tool.title=Hurmin kuutorgal junngo
-cursor_hand_tool_label=Kaɓirgel junngo
-
-scroll_vertical.title=Huutoro gorwitol daringol
-scroll_vertical_label=Gorwitol daringol
-scroll_horizontal.title=Huutoro gorwitol lelingol
-scroll_horizontal_label=Gorwitol daringol
-scroll_wrapped.title=Huutoro gorwitol coomingol
-scroll_wrapped_label=Gorwitol coomingol
-
-spread_none.title=Hoto tawtu kelle kelle
-spread_none_label=Alaa Spreads
-spread_odd.title=Tawtu kelle puɗɗortooɗe kelle teelɗe
-spread_odd_label=Kelle teelɗe
-spread_even.title=Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe
-spread_even_label=Kelle teeltuɗe
-
-# Document properties dialog box
-document_properties.title=Keeroraaɗi Winndannde…
-document_properties_label=Keeroraaɗi Winndannde…
-document_properties_file_name=Innde fiilde:
-document_properties_file_size=Ɓetol fiilde:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bite)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bite)
-document_properties_title=Tiitoonde:
-document_properties_author=Binnduɗo:
-document_properties_subject=Toɓɓere:
-document_properties_keywords=Kelmekele jiytirɗe:
-document_properties_creation_date=Ñalnde Sosaa:
-document_properties_modification_date=Ñalnde Waylaa:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Cosɗo:
-document_properties_producer=Paggiiɗo PDF:
-document_properties_version=Yamre PDF:
-document_properties_page_count=Limoore Kelle:
-document_properties_page_size=Ɓeto Hello:
-document_properties_page_size_unit_inches=nder
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=dariingo
-document_properties_page_size_orientation_landscape=wertiingo
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Ɓataake
-document_properties_page_size_name_legal=Laawol
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Ɗisngo geese yaawngo:
-document_properties_linearized_yes=Eey
-document_properties_linearized_no=Alaa
-document_properties_close=Uddu
-
-print_progress_message=Nana heboo winnditaade fiilannde…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Haaytu
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toggilo Palal Sawndo
-toggle_sidebar_notification.title=Palal sawndo (dokimaa oo ina waɗi taarngo/cinnde)
-toggle_sidebar_label=Toggilo Palal Sawndo
-document_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof)
-document_outline_label=Toɓɓe Fiilannde
-attachments.title=Hollu Ɗisanɗe
-attachments_label=Ɗisanɗe
-thumbs.title=Hollu Dooɓe
-thumbs_label=Dooɓe
-findbar.title=Yiylo e fiilannde
-findbar_label=Yiytu
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Hello {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Dooɓre Hello {{page}}
-
-# Find panel button title and messages
-find_input.title=Yiytu
-find_input.placeholder=Yiylo nder dokimaa
-find_previous.title=Yiylo cilol ɓennugol konngol ngol
-find_previous_label=Ɓennuɗo
-find_next.title=Yiylo cilol garowol konngol ngol
-find_next_label=Yeeso
-find_highlight=Jalbin fof
-find_match_case_label=Jaaɓnu darnde
-find_entire_word_label=Kelme timmuɗe tan
-find_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les
-find_reached_bottom=Heɓii hoore fiilannde, jokku faya les
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} wonande laabi {{total}}
-find_match_count[two]={{current}} wonande laabi {{total}}
-find_match_count[few]={{current}} wonande laabi {{total}}
-find_match_count[many]={{current}} wonande laabi {{total}}
-find_match_count[other]={{current}} wonande laabi {{total}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Ko ɓuri laabi {{limit}}
-find_match_count_limit[one]=Ko ɓuri laani {{limit}}
-find_match_count_limit[two]=Ko ɓuri laabi {{limit}}
-find_match_count_limit[few]=Ko ɓuri laabi {{limit}}
-find_match_count_limit[many]=Ko ɓuri laabi {{limit}}
-find_match_count_limit[other]=Ko ɓuri laabi {{limit}}
-find_not_found=Konngi njiyataa
-
-# Error panel labels
-error_more_info=Ɓeydu Humpito
-error_less_info=Ustu Humpito
-error_close=Uddu
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Ɓatakuure: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fiilde: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Gorol: {{line}}
-rendering_error=Juumre waɗii tuma nde yoŋkittoo hello.
-
-# Predefined zoom values
-page_scale_width=Njaajeendi Hello
-page_scale_fit=Keƴeendi Hello
-page_scale_auto=Loongorde Jaajol
-page_scale_actual=Ɓetol Jaati
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Juumre
-loading_error=Juumre waɗii tuma nde loowata PDF oo.
-invalid_file_error=Fiilde PDF moƴƴaani walla jiibii.
-missing_file_error=Fiilde PDF ena ŋakki.
-unexpected_response_error=Jaabtol sarworde tijjinooka.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Siiftannde]
-password_label=Naatu finnde ngam uddite ndee fiilde PDF.
-password_invalid=Finnde moƴƴaani. Tiiɗno eto kadi.
-password_ok=OK
-password_cancel=Haaytu
-
-printing_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde.
-printing_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol.
-web_fonts_disabled=Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe.
-document_colors_not_allowed=Piilanɗe PDF njamiraaka yoo kuutoro goobuuji mum'en keeriiɗi: 'Yamir kello yoo kuutoro goobuuki keeriiɗi' koko daaƴaa e wanngorde ndee.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Hello Ɓennungo
+previous_label=Ɓennuɗo
+next.title=Hello faango
+next_label=Yeeso
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Hello
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=e nder {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Lonngo Woɗɗa
+zoom_out_label=Lonngo Woɗɗa
+zoom_in.title=Lonngo Ara
+zoom_in_label=Lonngo Ara
+zoom.title=Lonngo
+presentation_mode.title=Faytu to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Uddit Fiilde
+open_file_label=Uddit
+print.title=Winndito
+print_label=Winndito
+download.title=Aawto
+download_label=Aawto
+bookmark.title=Jiytol gonangol (natto walla uddit e henorde)
+bookmark_label=Jiytol Gonangol
+
+# Secondary toolbar and context menu
+tools.title=Kuutorɗe
+tools_label=Kuutorɗe
+first_page.title=Yah to hello adanngo
+first_page.label=Yah to hello adanngo
+first_page_label=Yah to hello adanngo
+last_page.title=Yah to hello wattindiingo
+last_page.label=Yah to hello wattindiingo
+last_page_label=Yah to hello wattindiingo
+page_rotate_cw.title=Yiiltu Faya Ñaamo
+page_rotate_cw.label=Yiiltu Faya Ñaamo
+page_rotate_cw_label=Yiiltu Faya Ñaamo
+page_rotate_ccw.title=Yiiltu Faya Nano
+page_rotate_ccw.label=Yiiltu Faya Nano
+page_rotate_ccw_label=Yiiltu Faya Nano
+
+cursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi
+cursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi
+cursor_hand_tool.title=Hurmin kuutorgal junngo
+cursor_hand_tool_label=Kaɓirgel junngo
+
+scroll_vertical.title=Huutoro gorwitol daringol
+scroll_vertical_label=Gorwitol daringol
+scroll_horizontal.title=Huutoro gorwitol lelingol
+scroll_horizontal_label=Gorwitol daringol
+scroll_wrapped.title=Huutoro gorwitol coomingol
+scroll_wrapped_label=Gorwitol coomingol
+
+spread_none.title=Hoto tawtu kelle kelle
+spread_none_label=Alaa Spreads
+spread_odd.title=Tawtu kelle puɗɗortooɗe kelle teelɗe
+spread_odd_label=Kelle teelɗe
+spread_even.title=Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe
+spread_even_label=Kelle teeltuɗe
+
+# Document properties dialog box
+document_properties.title=Keeroraaɗi Winndannde…
+document_properties_label=Keeroraaɗi Winndannde…
+document_properties_file_name=Innde fiilde:
+document_properties_file_size=Ɓetol fiilde:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bite)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bite)
+document_properties_title=Tiitoonde:
+document_properties_author=Binnduɗo:
+document_properties_subject=Toɓɓere:
+document_properties_keywords=Kelmekele jiytirɗe:
+document_properties_creation_date=Ñalnde Sosaa:
+document_properties_modification_date=Ñalnde Waylaa:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cosɗo:
+document_properties_producer=Paggiiɗo PDF:
+document_properties_version=Yamre PDF:
+document_properties_page_count=Limoore Kelle:
+document_properties_page_size=Ɓeto Hello:
+document_properties_page_size_unit_inches=nder
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=dariingo
+document_properties_page_size_orientation_landscape=wertiingo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Ɓataake
+document_properties_page_size_name_legal=Laawol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ɗisngo geese yaawngo:
+document_properties_linearized_yes=Eey
+document_properties_linearized_no=Alaa
+document_properties_close=Uddu
+
+print_progress_message=Nana heboo winnditaade fiilannde…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Haaytu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggilo Palal Sawndo
+toggle_sidebar_notification.title=Palal sawndo (dokimaa oo ina waɗi taarngo/cinnde)
+toggle_sidebar_label=Toggilo Palal Sawndo
+document_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof)
+document_outline_label=Toɓɓe Fiilannde
+attachments.title=Hollu Ɗisanɗe
+attachments_label=Ɗisanɗe
+thumbs.title=Hollu Dooɓe
+thumbs_label=Dooɓe
+findbar.title=Yiylo e fiilannde
+findbar_label=Yiytu
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Hello {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Dooɓre Hello {{page}}
+
+# Find panel button title and messages
+find_input.title=Yiytu
+find_input.placeholder=Yiylo nder dokimaa
+find_previous.title=Yiylo cilol ɓennugol konngol ngol
+find_previous_label=Ɓennuɗo
+find_next.title=Yiylo cilol garowol konngol ngol
+find_next_label=Yeeso
+find_highlight=Jalbin fof
+find_match_case_label=Jaaɓnu darnde
+find_entire_word_label=Kelme timmuɗe tan
+find_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les
+find_reached_bottom=Heɓii hoore fiilannde, jokku faya les
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} wonande laabi {{total}}
+find_match_count[two]={{current}} wonande laabi {{total}}
+find_match_count[few]={{current}} wonande laabi {{total}}
+find_match_count[many]={{current}} wonande laabi {{total}}
+find_match_count[other]={{current}} wonande laabi {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[one]=Ko ɓuri laani {{limit}}
+find_match_count_limit[two]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[few]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[many]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[other]=Ko ɓuri laabi {{limit}}
+find_not_found=Konngi njiyataa
+
+# Error panel labels
+error_more_info=Ɓeydu Humpito
+error_less_info=Ustu Humpito
+error_close=Uddu
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ɓatakuure: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fiilde: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Gorol: {{line}}
+rendering_error=Juumre waɗii tuma nde yoŋkittoo hello.
+
+# Predefined zoom values
+page_scale_width=Njaajeendi Hello
+page_scale_fit=Keƴeendi Hello
+page_scale_auto=Loongorde Jaajol
+page_scale_actual=Ɓetol Jaati
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Juumre
+loading_error=Juumre waɗii tuma nde loowata PDF oo.
+invalid_file_error=Fiilde PDF moƴƴaani walla jiibii.
+missing_file_error=Fiilde PDF ena ŋakki.
+unexpected_response_error=Jaabtol sarworde tijjinooka.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Siiftannde]
+password_label=Naatu finnde ngam uddite ndee fiilde PDF.
+password_invalid=Finnde moƴƴaani. Tiiɗno eto kadi.
+password_ok=OK
+password_cancel=Haaytu
+
+printing_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde.
+printing_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol.
+web_fonts_disabled=Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe.
+document_colors_not_allowed=Piilanɗe PDF njamiraaka yoo kuutoro goobuuji mum'en keeriiɗi: 'Yamir kello yoo kuutoro goobuuki keeriiɗi' koko daaƴaa e wanngorde ndee.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fi/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fi/viewer.properties
index 76bfa13a2e0b3d9afa535f756683c1ffa26ed2a0..511afef65ab80392a71838a2067217ea9aa95e79 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fi/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fi/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Edellinen sivu
-previous_label=Edellinen
-next.title=Seuraava sivu
-next_label=Seuraava
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Sivu
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} / {{pagesCount}})
-
-zoom_out.title=Loitonna
-zoom_out_label=Loitonna
-zoom_in.title=Lähennä
-zoom_in_label=Lähennä
-zoom.title=Suurennus
-presentation_mode.title=Siirry esitystilaan
-presentation_mode_label=Esitystila
-open_file.title=Avaa tiedosto
-open_file_label=Avaa
-print.title=Tulosta
-print_label=Tulosta
-download.title=Lataa
-download_label=Lataa
-bookmark.title=Avoin ikkuna (kopioi tai avaa uuteen ikkunaan)
-bookmark_label=Avoin ikkuna
-
-# Secondary toolbar and context menu
-tools.title=Tools
-tools_label=Tools
-first_page.title=Siirry ensimmäiselle sivulle
-first_page.label=Siirry ensimmäiselle sivulle
-first_page_label=Siirry ensimmäiselle sivulle
-last_page.title=Siirry viimeiselle sivulle
-last_page.label=Siirry viimeiselle sivulle
-last_page_label=Siirry viimeiselle sivulle
-page_rotate_cw.title=Kierrä oikealle
-page_rotate_cw.label=Kierrä oikealle
-page_rotate_cw_label=Kierrä oikealle
-page_rotate_ccw.title=Kierrä vasemmalle
-page_rotate_ccw.label=Kierrä vasemmalle
-page_rotate_ccw_label=Kierrä vasemmalle
-
-cursor_text_select_tool.title=Käytä tekstinvalintatyökalua
-cursor_text_select_tool_label=Tekstinvalintatyökalu
-cursor_hand_tool.title=Käytä käsityökalua
-cursor_hand_tool_label=Käsityökalu
-
-scroll_vertical.title=Käytä pystysuuntaista vieritystä
-scroll_vertical_label=Pystysuuntainen vieritys
-scroll_horizontal.title=Käytä vaakasuuntaista vieritystä
-scroll_horizontal_label=Vaakasuuntainen vieritys
-scroll_wrapped.title=Käytä rivittyvää vieritystä
-scroll_wrapped_label=Rivittyvä vieritys
-
-spread_none.title=Älä yhdistä sivuja aukeamiksi
-spread_none_label=Ei aukeamia
-spread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta
-spread_odd_label=Parittomalta alkavat aukeamat
-spread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta
-spread_even_label=Parilliselta alkavat aukeamat
-
-# Document properties dialog box
-document_properties.title=Dokumentin ominaisuudet…
-document_properties_label=Dokumentin ominaisuudet…
-document_properties_file_name=Tiedostonimi:
-document_properties_file_size=Tiedoston koko:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kt ({{size_b}} tavua)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} Mt ({{size_b}} tavua)
-document_properties_title=Otsikko:
-document_properties_author=Tekijä:
-document_properties_subject=Aihe:
-document_properties_keywords=Avainsanat:
-document_properties_creation_date=Luomispäivämäärä:
-document_properties_modification_date=Muokkauspäivämäärä:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Luoja:
-document_properties_producer=PDF-tuottaja:
-document_properties_version=PDF-versio:
-document_properties_page_count=Sivujen määrä:
-document_properties_page_size=Sivun koko:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=pysty
-document_properties_page_size_orientation_landscape=vaaka
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Nopea web-katselu:
-document_properties_linearized_yes=Kyllä
-document_properties_linearized_no=Ei
-document_properties_close=Sulje
-
-print_progress_message=Valmistellaan dokumenttia tulostamista varten…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}} %
-print_progress_close=Peruuta
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Näytä/piilota sivupaneeli
-toggle_sidebar_notification.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys tai liitteitä)
-toggle_sidebar_label=Näytä/piilota sivupaneeli
-document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla)
-document_outline_label=Dokumentin sisällys
-attachments.title=Näytä liitteet
-attachments_label=Liitteet
-thumbs.title=Näytä pienoiskuvat
-thumbs_label=Pienoiskuvat
-findbar.title=Etsi dokumentista
-findbar_label=Etsi
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Sivu {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Sivu {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Pienoiskuva sivusta {{page}}
-
-# Find panel button title and messages
-find_input.title=Etsi
-find_input.placeholder=Etsi dokumentista…
-find_previous.title=Etsi hakusanan edellinen osuma
-find_previous_label=Edellinen
-find_next.title=Etsi hakusanan seuraava osuma
-find_next_label=Seuraava
-find_highlight=Korosta kaikki
-find_match_case_label=Huomioi kirjainkoko
-find_entire_word_label=Kokonaiset sanat
-find_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta
-find_reached_bottom=Päästiin sivun loppuun, jatketaan alusta
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} / {{total}} osuma
-find_match_count[two]={{current}} / {{total}} osumaa
-find_match_count[few]={{current}} / {{total}} osumaa
-find_match_count[many]={{current}} / {{total}} osumaa
-find_match_count[other]={{current}} / {{total}} osumaa
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa
-find_match_count_limit[one]=Enemmän kuin {{limit}} osuma
-find_match_count_limit[two]=Enemmän kuin {{limit}} osumaa
-find_match_count_limit[few]=Enemmän kuin {{limit}} osumaa
-find_match_count_limit[many]=Enemmän kuin {{limit}} osumaa
-find_match_count_limit[other]=Enemmän kuin {{limit}} osumaa
-find_not_found=Hakusanaa ei löytynyt
-
-# Error panel labels
-error_more_info=Lisätietoja
-error_less_info=Lisätietoja
-error_close=Sulje
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (kooste: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Virheilmoitus: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pino: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Tiedosto: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rivi: {{line}}
-rendering_error=Tapahtui virhe piirrettäessä sivua.
-
-# Predefined zoom values
-page_scale_width=Sivun leveys
-page_scale_fit=Koko sivu
-page_scale_auto=Automaattinen suurennus
-page_scale_actual=Todellinen koko
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Virhe
-loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa.
-invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto.
-missing_file_error=Puuttuva PDF-tiedosto.
-unexpected_response_error=Odottamaton vastaus palvelimelta.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Kirjoita PDF-tiedoston salasana.
-password_invalid=Virheellinen salasana. Yritä uudestaan.
-password_ok=OK
-password_cancel=Peruuta
-
-printing_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja.
-printing_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa.
-web_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja.
-document_colors_not_allowed=PDF-dokumenttien ei ole sallittua käyttää omia värejään: Asetusta ”Sivut saavat käyttää omia värejään oletusten sijaan” ei ole valittu selaimen asetuksissa.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Edellinen sivu
+previous_label=Edellinen
+next.title=Seuraava sivu
+next_label=Seuraava
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sivu
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Loitonna
+zoom_out_label=Loitonna
+zoom_in.title=Lähennä
+zoom_in_label=Lähennä
+zoom.title=Suurennus
+presentation_mode.title=Siirry esitystilaan
+presentation_mode_label=Esitystila
+open_file.title=Avaa tiedosto
+open_file_label=Avaa
+print.title=Tulosta
+print_label=Tulosta
+download.title=Lataa
+download_label=Lataa
+bookmark.title=Avoin ikkuna (kopioi tai avaa uuteen ikkunaan)
+bookmark_label=Avoin ikkuna
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Siirry ensimmäiselle sivulle
+first_page.label=Siirry ensimmäiselle sivulle
+first_page_label=Siirry ensimmäiselle sivulle
+last_page.title=Siirry viimeiselle sivulle
+last_page.label=Siirry viimeiselle sivulle
+last_page_label=Siirry viimeiselle sivulle
+page_rotate_cw.title=Kierrä oikealle
+page_rotate_cw.label=Kierrä oikealle
+page_rotate_cw_label=Kierrä oikealle
+page_rotate_ccw.title=Kierrä vasemmalle
+page_rotate_ccw.label=Kierrä vasemmalle
+page_rotate_ccw_label=Kierrä vasemmalle
+
+cursor_text_select_tool.title=Käytä tekstinvalintatyökalua
+cursor_text_select_tool_label=Tekstinvalintatyökalu
+cursor_hand_tool.title=Käytä käsityökalua
+cursor_hand_tool_label=Käsityökalu
+
+scroll_vertical.title=Käytä pystysuuntaista vieritystä
+scroll_vertical_label=Pystysuuntainen vieritys
+scroll_horizontal.title=Käytä vaakasuuntaista vieritystä
+scroll_horizontal_label=Vaakasuuntainen vieritys
+scroll_wrapped.title=Käytä rivittyvää vieritystä
+scroll_wrapped_label=Rivittyvä vieritys
+
+spread_none.title=Älä yhdistä sivuja aukeamiksi
+spread_none_label=Ei aukeamia
+spread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta
+spread_odd_label=Parittomalta alkavat aukeamat
+spread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta
+spread_even_label=Parilliselta alkavat aukeamat
+
+# Document properties dialog box
+document_properties.title=Dokumentin ominaisuudet…
+document_properties_label=Dokumentin ominaisuudet…
+document_properties_file_name=Tiedostonimi:
+document_properties_file_size=Tiedoston koko:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kt ({{size_b}} tavua)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mt ({{size_b}} tavua)
+document_properties_title=Otsikko:
+document_properties_author=Tekijä:
+document_properties_subject=Aihe:
+document_properties_keywords=Avainsanat:
+document_properties_creation_date=Luomispäivämäärä:
+document_properties_modification_date=Muokkauspäivämäärä:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Luoja:
+document_properties_producer=PDF-tuottaja:
+document_properties_version=PDF-versio:
+document_properties_page_count=Sivujen määrä:
+document_properties_page_size=Sivun koko:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pysty
+document_properties_page_size_orientation_landscape=vaaka
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Nopea web-katselu:
+document_properties_linearized_yes=Kyllä
+document_properties_linearized_no=Ei
+document_properties_close=Sulje
+
+print_progress_message=Valmistellaan dokumenttia tulostamista varten…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Peruuta
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Näytä/piilota sivupaneeli
+toggle_sidebar_notification.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys tai liitteitä)
+toggle_sidebar_label=Näytä/piilota sivupaneeli
+document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla)
+document_outline_label=Dokumentin sisällys
+attachments.title=Näytä liitteet
+attachments_label=Liitteet
+thumbs.title=Näytä pienoiskuvat
+thumbs_label=Pienoiskuvat
+findbar.title=Etsi dokumentista
+findbar_label=Etsi
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Sivu {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sivu {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Pienoiskuva sivusta {{page}}
+
+# Find panel button title and messages
+find_input.title=Etsi
+find_input.placeholder=Etsi dokumentista…
+find_previous.title=Etsi hakusanan edellinen osuma
+find_previous_label=Edellinen
+find_next.title=Etsi hakusanan seuraava osuma
+find_next_label=Seuraava
+find_highlight=Korosta kaikki
+find_match_case_label=Huomioi kirjainkoko
+find_entire_word_label=Kokonaiset sanat
+find_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta
+find_reached_bottom=Päästiin sivun loppuun, jatketaan alusta
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} osuma
+find_match_count[two]={{current}} / {{total}} osumaa
+find_match_count[few]={{current}} / {{total}} osumaa
+find_match_count[many]={{current}} / {{total}} osumaa
+find_match_count[other]={{current}} / {{total}} osumaa
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[one]=Enemmän kuin {{limit}} osuma
+find_match_count_limit[two]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[few]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[many]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[other]=Enemmän kuin {{limit}} osumaa
+find_not_found=Hakusanaa ei löytynyt
+
+# Error panel labels
+error_more_info=Lisätietoja
+error_less_info=Lisätietoja
+error_close=Sulje
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (kooste: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Virheilmoitus: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pino: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tiedosto: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rivi: {{line}}
+rendering_error=Tapahtui virhe piirrettäessä sivua.
+
+# Predefined zoom values
+page_scale_width=Sivun leveys
+page_scale_fit=Koko sivu
+page_scale_auto=Automaattinen suurennus
+page_scale_actual=Todellinen koko
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Virhe
+loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa.
+invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto.
+missing_file_error=Puuttuva PDF-tiedosto.
+unexpected_response_error=Odottamaton vastaus palvelimelta.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Kirjoita PDF-tiedoston salasana.
+password_invalid=Virheellinen salasana. Yritä uudestaan.
+password_ok=OK
+password_cancel=Peruuta
+
+printing_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja.
+printing_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa.
+web_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja.
+document_colors_not_allowed=PDF-dokumenttien ei ole sallittua käyttää omia värejään: Asetusta ”Sivut saavat käyttää omia värejään oletusten sijaan” ei ole valittu selaimen asetuksissa.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fr/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fr/viewer.properties
index 7df1d3d51b96a728c22e630506cfc7115d3ec6c5..73384498400f065abe2435eaf35c8e781f335c47 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fr/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fr/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Page précédente
-previous_label=Précédent
-next.title=Page suivante
-next_label=Suivant
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Page
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=sur {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} sur {{pagesCount}})
-
-zoom_out.title=Zoom arrière
-zoom_out_label=Zoom arrière
-zoom_in.title=Zoom avant
-zoom_in_label=Zoom avant
-zoom.title=Zoom
-presentation_mode.title=Basculer en mode présentation
-presentation_mode_label=Mode présentation
-open_file.title=Ouvrir le fichier
-open_file_label=Ouvrir le fichier
-print.title=Imprimer
-print_label=Imprimer
-download.title=Télécharger
-download_label=Télécharger
-bookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre)
-bookmark_label=Affichage actuel
-
-# Secondary toolbar and context menu
-tools.title=Outils
-tools_label=Outils
-first_page.title=Aller à la première page
-first_page.label=Aller à la première page
-first_page_label=Aller à la première page
-last_page.title=Aller à la dernière page
-last_page.label=Aller à la dernière page
-last_page_label=Aller à la dernière page
-page_rotate_cw.title=Rotation horaire
-page_rotate_cw.label=Rotation horaire
-page_rotate_cw_label=Rotation horaire
-page_rotate_ccw.title=Rotation antihoraire
-page_rotate_ccw.label=Rotation antihoraire
-page_rotate_ccw_label=Rotation antihoraire
-
-cursor_text_select_tool.title=Activer l’outil de sélection de texte
-cursor_text_select_tool_label=Outil de sélection de texte
-cursor_hand_tool.title=Activer l’outil main
-cursor_hand_tool_label=Outil main
-
-scroll_vertical.title=Utiliser le défilement vertical
-scroll_vertical_label=Défilement vertical
-scroll_horizontal.title=Utiliser le défilement horizontal
-scroll_horizontal_label=Défilement horizontal
-scroll_wrapped.title=Utiliser le défilement par bloc
-scroll_wrapped_label=Défilement par bloc
-
-spread_none.title=Ne pas afficher les pages deux à deux
-spread_none_label=Pas de double affichage
-spread_odd.title=Afficher les pages par deux, impaires à gauche
-spread_odd_label=Doubles pages, impaires à gauche
-spread_even.title=Afficher les pages par deux, paires à gauche
-spread_even_label=Doubles pages, paires à gauche
-
-# Document properties dialog box
-document_properties.title=Propriétés du document…
-document_properties_label=Propriétés du document…
-document_properties_file_name=Nom du fichier :
-document_properties_file_size=Taille du fichier :
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} Ko ({{size_b}} octets)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} Mo ({{size_b}} octets)
-document_properties_title=Titre :
-document_properties_author=Auteur :
-document_properties_subject=Sujet :
-document_properties_keywords=Mots-clés :
-document_properties_creation_date=Date de création :
-document_properties_modification_date=Modifié le :
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}} à {{time}}
-document_properties_creator=Créé par :
-document_properties_producer=Outil de conversion PDF :
-document_properties_version=Version PDF :
-document_properties_page_count=Nombre de pages :
-document_properties_page_size=Taille de la page :
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portrait
-document_properties_page_size_orientation_landscape=paysage
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=lettre
-document_properties_page_size_name_legal=document juridique
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Affichage rapide des pages web :
-document_properties_linearized_yes=Oui
-document_properties_linearized_no=Non
-document_properties_close=Fermer
-
-print_progress_message=Préparation du document pour l’impression…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}} %
-print_progress_close=Annuler
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Afficher/Masquer le panneau latéral
-toggle_sidebar_notification.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes)
-toggle_sidebar_label=Afficher/Masquer le panneau latéral
-document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments)
-document_outline_label=Signets du document
-attachments.title=Afficher les pièces jointes
-attachments_label=Pièces jointes
-thumbs.title=Afficher les vignettes
-thumbs_label=Vignettes
-findbar.title=Rechercher dans le document
-findbar_label=Rechercher
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Page {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Page {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Vignette de la page {{page}}
-
-# Find panel button title and messages
-find_input.title=Rechercher
-find_input.placeholder=Rechercher dans le document…
-find_previous.title=Trouver l’occurrence précédente de l’expression
-find_previous_label=Précédent
-find_next.title=Trouver la prochaine occurrence de l’expression
-find_next_label=Suivant
-find_highlight=Tout surligner
-find_match_case_label=Respecter la casse
-find_entire_word_label=Mots entiers
-find_reached_top=Haut de la page atteint, poursuite depuis la fin
-find_reached_bottom=Bas de la page atteint, poursuite au début
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=Occurrence {{current}} sur {{total}}
-find_match_count[two]=Occurrence {{current}} sur {{total}}
-find_match_count[few]=Occurrence {{current}} sur {{total}}
-find_match_count[many]=Occurrence {{current}} sur {{total}}
-find_match_count[other]=Occurrence {{current}} sur {{total}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Plus de {{limit}} correspondances
-find_match_count_limit[one]=Plus de {{limit}} correspondance
-find_match_count_limit[two]=Plus de {{limit}} correspondances
-find_match_count_limit[few]=Plus de {{limit}} correspondances
-find_match_count_limit[many]=Plus de {{limit}} correspondances
-find_match_count_limit[other]=Plus de {{limit}} correspondances
-find_not_found=Expression non trouvée
-
-# Error panel labels
-error_more_info=Plus d’informations
-error_less_info=Moins d’informations
-error_close=Fermer
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message : {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pile : {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fichier : {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Ligne : {{line}}
-rendering_error=Une erreur s’est produite lors de l’affichage de la page.
-
-# Predefined zoom values
-page_scale_width=Pleine largeur
-page_scale_fit=Page entière
-page_scale_auto=Zoom automatique
-page_scale_actual=Taille réelle
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Erreur
-loading_error=Une erreur s’est produite lors du chargement du fichier PDF.
-invalid_file_error=Fichier PDF invalide ou corrompu.
-missing_file_error=Fichier PDF manquant.
-unexpected_response_error=Réponse inattendue du serveur.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}} à {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Annotation {{type}}]
-password_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF.
-password_invalid=Mot de passe incorrect. Veuillez réessayer.
-password_ok=OK
-password_cancel=Annuler
-
-printing_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur.
-printing_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer.
-web_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF.
-document_colors_not_allowed=Les documents PDF ne peuvent pas utiliser leurs propres couleurs : « Autoriser les pages web à utiliser leurs propres couleurs » est désactivé dans le navigateur.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Page précédente
+previous_label=Précédent
+next.title=Page suivante
+next_label=Suivant
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=sur {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} sur {{pagesCount}})
+
+zoom_out.title=Zoom arrière
+zoom_out_label=Zoom arrière
+zoom_in.title=Zoom avant
+zoom_in_label=Zoom avant
+zoom.title=Zoom
+presentation_mode.title=Basculer en mode présentation
+presentation_mode_label=Mode présentation
+open_file.title=Ouvrir le fichier
+open_file_label=Ouvrir le fichier
+print.title=Imprimer
+print_label=Imprimer
+download.title=Télécharger
+download_label=Télécharger
+bookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre)
+bookmark_label=Affichage actuel
+
+# Secondary toolbar and context menu
+tools.title=Outils
+tools_label=Outils
+first_page.title=Aller à la première page
+first_page.label=Aller à la première page
+first_page_label=Aller à la première page
+last_page.title=Aller à la dernière page
+last_page.label=Aller à la dernière page
+last_page_label=Aller à la dernière page
+page_rotate_cw.title=Rotation horaire
+page_rotate_cw.label=Rotation horaire
+page_rotate_cw_label=Rotation horaire
+page_rotate_ccw.title=Rotation antihoraire
+page_rotate_ccw.label=Rotation antihoraire
+page_rotate_ccw_label=Rotation antihoraire
+
+cursor_text_select_tool.title=Activer l’outil de sélection de texte
+cursor_text_select_tool_label=Outil de sélection de texte
+cursor_hand_tool.title=Activer l’outil main
+cursor_hand_tool_label=Outil main
+
+scroll_vertical.title=Utiliser le défilement vertical
+scroll_vertical_label=Défilement vertical
+scroll_horizontal.title=Utiliser le défilement horizontal
+scroll_horizontal_label=Défilement horizontal
+scroll_wrapped.title=Utiliser le défilement par bloc
+scroll_wrapped_label=Défilement par bloc
+
+spread_none.title=Ne pas afficher les pages deux à deux
+spread_none_label=Pas de double affichage
+spread_odd.title=Afficher les pages par deux, impaires à gauche
+spread_odd_label=Doubles pages, impaires à gauche
+spread_even.title=Afficher les pages par deux, paires à gauche
+spread_even_label=Doubles pages, paires à gauche
+
+# Document properties dialog box
+document_properties.title=Propriétés du document…
+document_properties_label=Propriétés du document…
+document_properties_file_name=Nom du fichier :
+document_properties_file_size=Taille du fichier :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ko ({{size_b}} octets)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mo ({{size_b}} octets)
+document_properties_title=Titre :
+document_properties_author=Auteur :
+document_properties_subject=Sujet :
+document_properties_keywords=Mots-clés :
+document_properties_creation_date=Date de création :
+document_properties_modification_date=Modifié le :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} à {{time}}
+document_properties_creator=Créé par :
+document_properties_producer=Outil de conversion PDF :
+document_properties_version=Version PDF :
+document_properties_page_count=Nombre de pages :
+document_properties_page_size=Taille de la page :
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=paysage
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=lettre
+document_properties_page_size_name_legal=document juridique
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Affichage rapide des pages web :
+document_properties_linearized_yes=Oui
+document_properties_linearized_no=Non
+document_properties_close=Fermer
+
+print_progress_message=Préparation du document pour l’impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Annuler
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Afficher/Masquer le panneau latéral
+toggle_sidebar_notification.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes)
+toggle_sidebar_label=Afficher/Masquer le panneau latéral
+document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments)
+document_outline_label=Signets du document
+attachments.title=Afficher les pièces jointes
+attachments_label=Pièces jointes
+thumbs.title=Afficher les vignettes
+thumbs_label=Vignettes
+findbar.title=Rechercher dans le document
+findbar_label=Rechercher
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vignette de la page {{page}}
+
+# Find panel button title and messages
+find_input.title=Rechercher
+find_input.placeholder=Rechercher dans le document…
+find_previous.title=Trouver l’occurrence précédente de l’expression
+find_previous_label=Précédent
+find_next.title=Trouver la prochaine occurrence de l’expression
+find_next_label=Suivant
+find_highlight=Tout surligner
+find_match_case_label=Respecter la casse
+find_entire_word_label=Mots entiers
+find_reached_top=Haut de la page atteint, poursuite depuis la fin
+find_reached_bottom=Bas de la page atteint, poursuite au début
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Occurrence {{current}} sur {{total}}
+find_match_count[two]=Occurrence {{current}} sur {{total}}
+find_match_count[few]=Occurrence {{current}} sur {{total}}
+find_match_count[many]=Occurrence {{current}} sur {{total}}
+find_match_count[other]=Occurrence {{current}} sur {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Plus de {{limit}} correspondances
+find_match_count_limit[one]=Plus de {{limit}} correspondance
+find_match_count_limit[two]=Plus de {{limit}} correspondances
+find_match_count_limit[few]=Plus de {{limit}} correspondances
+find_match_count_limit[many]=Plus de {{limit}} correspondances
+find_match_count_limit[other]=Plus de {{limit}} correspondances
+find_not_found=Expression non trouvée
+
+# Error panel labels
+error_more_info=Plus d’informations
+error_less_info=Moins d’informations
+error_close=Fermer
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pile : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichier : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ligne : {{line}}
+rendering_error=Une erreur s’est produite lors de l’affichage de la page.
+
+# Predefined zoom values
+page_scale_width=Pleine largeur
+page_scale_fit=Page entière
+page_scale_auto=Zoom automatique
+page_scale_actual=Taille réelle
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Erreur
+loading_error=Une erreur s’est produite lors du chargement du fichier PDF.
+invalid_file_error=Fichier PDF invalide ou corrompu.
+missing_file_error=Fichier PDF manquant.
+unexpected_response_error=Réponse inattendue du serveur.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} à {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Annotation {{type}}]
+password_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF.
+password_invalid=Mot de passe incorrect. Veuillez réessayer.
+password_ok=OK
+password_cancel=Annuler
+
+printing_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur.
+printing_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer.
+web_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF.
+document_colors_not_allowed=Les documents PDF ne peuvent pas utiliser leurs propres couleurs : « Autoriser les pages web à utiliser leurs propres couleurs » est désactivé dans le navigateur.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fy-NL/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fy-NL/viewer.properties
index 4d6b18c69db72b358f294cde3b8752d50ba033ec..5fd7950e54412643c5a517b8144cdc5d843dc606 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fy-NL/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/fy-NL/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Foarige side
-previous_label=Foarige
-next.title=Folgjende side
-next_label=Folgjende
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Side
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=fa {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} fan {{pagesCount}})
-
-zoom_out.title=Utzoome
-zoom_out_label=Utzoome
-zoom_in.title=Ynzoome
-zoom_in_label=Ynzoome
-zoom.title=Zoome
-presentation_mode.title=Wikselje nei presintaasjemodus
-presentation_mode_label=Presintaasjemodus
-open_file.title=Bestân iepenje
-open_file_label=Iepenje
-print.title=Ofdrukke
-print_label=Ofdrukke
-download.title=Downloade
-download_label=Downloade
-bookmark.title=Aktuele finster (kopiearje of iepenje yn nij finster)
-bookmark_label=Aktuele finster
-
-# Secondary toolbar and context menu
-tools.title=Ark
-tools_label=Ark
-first_page.title=Gean nei earste side
-first_page.label=Nei earste side gean
-first_page_label=Gean nei earste side
-last_page.title=Gean nei lêste side
-last_page.label=Nei lêste side gean
-last_page_label=Gean nei lêste side
-page_rotate_cw.title=Rjochtsom draaie
-page_rotate_cw.label=Rjochtsom draaie
-page_rotate_cw_label=Rjochtsom draaie
-page_rotate_ccw.title=Loftsom draaie
-page_rotate_ccw.label=Loftsom draaie
-page_rotate_ccw_label=Loftsom draaie
-
-cursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje
-cursor_text_select_tool_label=Tekstseleksjehelpmiddel
-cursor_hand_tool.title=Hânhelpmiddel ynskeakelje
-cursor_hand_tool_label=Hânhelpmiddel
-
-scroll_vertical.title=Fertikaal skowe brûke
-scroll_vertical_label=Fertikaal skowe
-scroll_horizontal.title=Horizontaal skowe brûke
-scroll_horizontal_label=Horizontaal skowe
-scroll_wrapped.title=Skowe mei oersjoch brûke
-scroll_wrapped_label=Skowe mei oersjoch
-
-spread_none.title=Sidesprieding net gearfetsje
-spread_none_label=Gjin sprieding
-spread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers
-spread_odd_label=Uneven sprieding
-spread_even.title=Sidesprieding gearfetsje te starten mei even nûmers
-spread_even_label=Even sprieding
-
-# Document properties dialog box
-document_properties.title=Dokuminteigenskippen…
-document_properties_label=Dokuminteigenskippen…
-document_properties_file_name=Bestânsnamme:
-document_properties_file_size=Bestânsgrutte:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Titel:
-document_properties_author=Auteur:
-document_properties_subject=Underwerp:
-document_properties_keywords=Kaaiwurden:
-document_properties_creation_date=Oanmaakdatum:
-document_properties_modification_date=Bewurkingsdatum:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Makker:
-document_properties_producer=PDF-makker:
-document_properties_version=PDF-ferzje:
-document_properties_page_count=Siden:
-document_properties_page_size=Sideformaat:
-document_properties_page_size_unit_inches=yn
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=steand
-document_properties_page_size_orientation_landscape=lizzend
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Juridysk
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Flugge webwerjefte:
-document_properties_linearized_yes=Ja
-document_properties_linearized_no=Nee
-document_properties_close=Slute
-
-print_progress_message=Dokumint tariede oar ôfdrukken…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Annulearje
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Sidebalke yn-/útskeakelje
-toggle_sidebar_notification.title=Sidebalke yn-/útskeakelje (dokumint befettet outline/bylagen)
-toggle_sidebar_label=Sidebalke yn-/útskeakelje
-document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen)
-document_outline_label=Dokumintoersjoch
-attachments.title=Bylagen toane
-attachments_label=Bylagen
-thumbs.title=Foarbylden toane
-thumbs_label=Foarbylden
-findbar.title=Sykje yn dokumint
-findbar_label=Sykje
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Side {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Side {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Foarbyld fan side {{page}}
-
-# Find panel button title and messages
-find_input.title=Sykje
-find_input.placeholder=Sykje yn dokumint…
-find_previous.title=It foarige foarkommen fan de tekst sykje
-find_previous_label=Foarige
-find_next.title=It folgjende foarkommen fan de tekst sykje
-find_next_label=Folgjende
-find_highlight=Alles markearje
-find_match_case_label=Haadlettergefoelich
-find_entire_word_label=Hiele wurden
-find_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf
-find_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} fan {{total}} oerienkomst
-find_match_count[two]={{current}} fan {{total}} oerienkomsten
-find_match_count[few]={{current}} fan {{total}} oerienkomsten
-find_match_count[many]={{current}} fan {{total}} oerienkomsten
-find_match_count[other]={{current}} fan {{total}} oerienkomsten
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mear as {{limit}} oerienkomsten
-find_match_count_limit[one]=Mear as {{limit}} oerienkomst
-find_match_count_limit[two]=Mear as {{limit}} oerienkomsten
-find_match_count_limit[few]=Mear as {{limit}} oerienkomsten
-find_match_count_limit[many]=Mear as {{limit}} oerienkomsten
-find_match_count_limit[other]=Mear as {{limit}} oerienkomsten
-find_not_found=Tekst net fûn
-
-# Error panel labels
-error_more_info=Mear ynformaasje
-error_less_info=Minder ynformaasje
-error_close=Slute
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js f{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Berjocht: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Bestân: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rigel: {{line}}
-rendering_error=Der is in flater bard by it renderjen fan de side.
-
-# Predefined zoom values
-page_scale_width=Sidebreedte
-page_scale_fit=Hiele side
-page_scale_auto=Automatysk zoome
-page_scale_actual=Werklike grutte
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Flater
-loading_error=Der is in flater bard by it laden fan de PDF.
-invalid_file_error=Ynfalide of korruptearre PDF-bestân.
-missing_file_error=PDF-bestân ûntbrekt.
-unexpected_response_error=Unferwacht serverantwurd.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}}-annotaasje]
-password_label=Jou it wachtwurd om dit PDF-bestân te iepenjen.
-password_invalid=Ferkeard wachtwurd. Probearje opnij.
-password_ok=OK
-password_cancel=Annulearje
-
-printing_not_supported=Warning: Printen is net folslein stipe troch dizze browser.
-printing_not_ready=Warning: PDF is net folslein laden om ôf te drukken.
-web_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik.
-document_colors_not_allowed=PDF-dokuminten meie harren eigen kleuren net brûke: ‘Siden tastean om harren eigen kleuren te kiezen’ is útskeakele yn de browser.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Foarige side
+previous_label=Foarige
+next.title=Folgjende side
+next_label=Folgjende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=fa {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} fan {{pagesCount}})
+
+zoom_out.title=Utzoome
+zoom_out_label=Utzoome
+zoom_in.title=Ynzoome
+zoom_in_label=Ynzoome
+zoom.title=Zoome
+presentation_mode.title=Wikselje nei presintaasjemodus
+presentation_mode_label=Presintaasjemodus
+open_file.title=Bestân iepenje
+open_file_label=Iepenje
+print.title=Ofdrukke
+print_label=Ofdrukke
+download.title=Downloade
+download_label=Downloade
+bookmark.title=Aktuele finster (kopiearje of iepenje yn nij finster)
+bookmark_label=Aktuele finster
+
+# Secondary toolbar and context menu
+tools.title=Ark
+tools_label=Ark
+first_page.title=Gean nei earste side
+first_page.label=Nei earste side gean
+first_page_label=Gean nei earste side
+last_page.title=Gean nei lêste side
+last_page.label=Nei lêste side gean
+last_page_label=Gean nei lêste side
+page_rotate_cw.title=Rjochtsom draaie
+page_rotate_cw.label=Rjochtsom draaie
+page_rotate_cw_label=Rjochtsom draaie
+page_rotate_ccw.title=Loftsom draaie
+page_rotate_ccw.label=Loftsom draaie
+page_rotate_ccw_label=Loftsom draaie
+
+cursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje
+cursor_text_select_tool_label=Tekstseleksjehelpmiddel
+cursor_hand_tool.title=Hânhelpmiddel ynskeakelje
+cursor_hand_tool_label=Hânhelpmiddel
+
+scroll_vertical.title=Fertikaal skowe brûke
+scroll_vertical_label=Fertikaal skowe
+scroll_horizontal.title=Horizontaal skowe brûke
+scroll_horizontal_label=Horizontaal skowe
+scroll_wrapped.title=Skowe mei oersjoch brûke
+scroll_wrapped_label=Skowe mei oersjoch
+
+spread_none.title=Sidesprieding net gearfetsje
+spread_none_label=Gjin sprieding
+spread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers
+spread_odd_label=Uneven sprieding
+spread_even.title=Sidesprieding gearfetsje te starten mei even nûmers
+spread_even_label=Even sprieding
+
+# Document properties dialog box
+document_properties.title=Dokuminteigenskippen…
+document_properties_label=Dokuminteigenskippen…
+document_properties_file_name=Bestânsnamme:
+document_properties_file_size=Bestânsgrutte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Auteur:
+document_properties_subject=Underwerp:
+document_properties_keywords=Kaaiwurden:
+document_properties_creation_date=Oanmaakdatum:
+document_properties_modification_date=Bewurkingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Makker:
+document_properties_producer=PDF-makker:
+document_properties_version=PDF-ferzje:
+document_properties_page_count=Siden:
+document_properties_page_size=Sideformaat:
+document_properties_page_size_unit_inches=yn
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=steand
+document_properties_page_size_orientation_landscape=lizzend
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Juridysk
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Flugge webwerjefte:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nee
+document_properties_close=Slute
+
+print_progress_message=Dokumint tariede oar ôfdrukken…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annulearje
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sidebalke yn-/útskeakelje
+toggle_sidebar_notification.title=Sidebalke yn-/útskeakelje (dokumint befettet outline/bylagen)
+toggle_sidebar_label=Sidebalke yn-/útskeakelje
+document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen)
+document_outline_label=Dokumintoersjoch
+attachments.title=Bylagen toane
+attachments_label=Bylagen
+thumbs.title=Foarbylden toane
+thumbs_label=Foarbylden
+findbar.title=Sykje yn dokumint
+findbar_label=Sykje
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Foarbyld fan side {{page}}
+
+# Find panel button title and messages
+find_input.title=Sykje
+find_input.placeholder=Sykje yn dokumint…
+find_previous.title=It foarige foarkommen fan de tekst sykje
+find_previous_label=Foarige
+find_next.title=It folgjende foarkommen fan de tekst sykje
+find_next_label=Folgjende
+find_highlight=Alles markearje
+find_match_case_label=Haadlettergefoelich
+find_entire_word_label=Hiele wurden
+find_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf
+find_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} fan {{total}} oerienkomst
+find_match_count[two]={{current}} fan {{total}} oerienkomsten
+find_match_count[few]={{current}} fan {{total}} oerienkomsten
+find_match_count[many]={{current}} fan {{total}} oerienkomsten
+find_match_count[other]={{current}} fan {{total}} oerienkomsten
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[one]=Mear as {{limit}} oerienkomst
+find_match_count_limit[two]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[few]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[many]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[other]=Mear as {{limit}} oerienkomsten
+find_not_found=Tekst net fûn
+
+# Error panel labels
+error_more_info=Mear ynformaasje
+error_less_info=Minder ynformaasje
+error_close=Slute
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js f{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Berjocht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Bestân: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rigel: {{line}}
+rendering_error=Der is in flater bard by it renderjen fan de side.
+
+# Predefined zoom values
+page_scale_width=Sidebreedte
+page_scale_fit=Hiele side
+page_scale_auto=Automatysk zoome
+page_scale_actual=Werklike grutte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Flater
+loading_error=Der is in flater bard by it laden fan de PDF.
+invalid_file_error=Ynfalide of korruptearre PDF-bestân.
+missing_file_error=PDF-bestân ûntbrekt.
+unexpected_response_error=Unferwacht serverantwurd.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotaasje]
+password_label=Jou it wachtwurd om dit PDF-bestân te iepenjen.
+password_invalid=Ferkeard wachtwurd. Probearje opnij.
+password_ok=OK
+password_cancel=Annulearje
+
+printing_not_supported=Warning: Printen is net folslein stipe troch dizze browser.
+printing_not_ready=Warning: PDF is net folslein laden om ôf te drukken.
+web_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik.
+document_colors_not_allowed=PDF-dokuminten meie harren eigen kleuren net brûke: ‘Siden tastean om harren eigen kleuren te kiezen’ is útskeakele yn de browser.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ga-IE/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ga-IE/viewer.properties
index 62f1a551b0bf10f9476f7612098c3b274091b36a..3b4c2217c82f11d6dba498788527a6393a9ca929 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ga-IE/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ga-IE/viewer.properties
@@ -1,184 +1,184 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=An Leathanach Roimhe Seo
-previous_label=Roimhe Seo
-next.title=An Chéad Leathanach Eile
-next_label=Ar Aghaidh
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Leathanach
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=as {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} as {{pagesCount}})
-
-zoom_out.title=Súmáil Amach
-zoom_out_label=Súmáil Amach
-zoom_in.title=Súmáil Isteach
-zoom_in_label=Súmáil Isteach
-zoom.title=Súmáil
-presentation_mode.title=Úsáid an Mód Láithreoireachta
-presentation_mode_label=Mód Láithreoireachta
-open_file.title=Oscail Comhad
-open_file_label=Oscail
-print.title=Priontáil
-print_label=Priontáil
-download.title=Íoslódáil
-download_label=Íoslódáil
-bookmark.title=An t-amharc reatha (cóipeáil nó oscail i bhfuinneog nua)
-bookmark_label=An tAmharc Reatha
-
-# Secondary toolbar and context menu
-tools.title=Uirlisí
-tools_label=Uirlisí
-first_page.title=Go dtí an chéad leathanach
-first_page.label=Go dtí an chéad leathanach
-first_page_label=Go dtí an chéad leathanach
-last_page.title=Go dtí an leathanach deiridh
-last_page.label=Go dtí an leathanach deiridh
-last_page_label=Go dtí an leathanach deiridh
-page_rotate_cw.title=Rothlaigh ar deiseal
-page_rotate_cw.label=Rothlaigh ar deiseal
-page_rotate_cw_label=Rothlaigh ar deiseal
-page_rotate_ccw.title=Rothlaigh ar tuathal
-page_rotate_ccw.label=Rothlaigh ar tuathal
-page_rotate_ccw_label=Rothlaigh ar tuathal
-
-cursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs
-cursor_text_select_tool_label=Uirlis Roghnaithe Téacs
-cursor_hand_tool.title=Cumasaigh an Uirlis Láimhe
-cursor_hand_tool_label=Uirlis Láimhe
-
-# Document properties dialog box
-document_properties.title=Airíonna na Cáipéise…
-document_properties_label=Airíonna na Cáipéise…
-document_properties_file_name=Ainm an chomhaid:
-document_properties_file_size=Méid an chomhaid:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kB ({{size_b}} beart)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} beart)
-document_properties_title=Teideal:
-document_properties_author=Údar:
-document_properties_subject=Ábhar:
-document_properties_keywords=Eochairfhocail:
-document_properties_creation_date=Dáta Cruthaithe:
-document_properties_modification_date=Dáta Athraithe:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Cruthaitheoir:
-document_properties_producer=Cruthaitheoir an PDF:
-document_properties_version=Leagan PDF:
-document_properties_page_count=Líon Leathanach:
-document_properties_close=Dún
-
-print_progress_message=Cáipéis á hullmhú le priontáil…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cealaigh
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Scoránaigh an Barra Taoibh
-toggle_sidebar_notification.title=Scoránaigh an Barra Taoibh (achoimre/iatáin sa cháipéis)
-toggle_sidebar_label=Scoránaigh an Barra Taoibh
-document_outline.title=Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú)
-document_outline_label=Creatlach na Cáipéise
-attachments.title=Taispeáin Iatáin
-attachments_label=Iatáin
-thumbs.title=Taispeáin Mionsamhlacha
-thumbs_label=Mionsamhlacha
-findbar.title=Aimsigh sa Cháipéis
-findbar_label=Aimsigh
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Leathanach {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Mionsamhail Leathanaigh {{page}}
-
-# Find panel button title and messages
-find_input.title=Aimsigh
-find_input.placeholder=Aimsigh sa cháipéis…
-find_previous.title=Aimsigh an sampla roimhe seo den nath seo
-find_previous_label=Roimhe seo
-find_next.title=Aimsigh an chéad sampla eile den nath sin
-find_next_label=Ar aghaidh
-find_highlight=Aibhsigh uile
-find_match_case_label=Cásíogair
-find_reached_top=Ag barr na cáipéise, ag leanúint ón mbun
-find_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr
-find_not_found=Frása gan aimsiú
-
-# Error panel labels
-error_more_info=Tuilleadh Eolais
-error_less_info=Níos Lú Eolais
-error_close=Dún
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Teachtaireacht: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Cruach: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Comhad: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Líne: {{line}}
-rendering_error=Tharla earráid agus an leathanach á leagan amach.
-
-# Predefined zoom values
-page_scale_width=Leithead Leathanaigh
-page_scale_fit=Laghdaigh go dtí an Leathanach
-page_scale_auto=Súmáil Uathoibríoch
-page_scale_actual=Fíormhéid
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Earráid
-loading_error=Tharla earráid agus an cháipéis PDF á lódáil.
-invalid_file_error=Comhad neamhbhailí nó truaillithe PDF.
-missing_file_error=Comhad PDF ar iarraidh.
-unexpected_response_error=Freagra ón bhfreastalaí nach rabhthas ag súil leis.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anótáil {{type}}]
-password_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt.
-password_invalid=Focal faire mícheart. Déan iarracht eile.
-password_ok=OK
-password_cancel=Cealaigh
-
-printing_not_supported=Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán.
-printing_not_ready=Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte.
-web_fonts_disabled=Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid.
-document_colors_not_allowed=Níl cead ag cáipéisí PDF a ndathanna féin a roghnú: tá “Tabhair cead do leathanaigh a ndathanna féin a roghnú” díchumasaithe sa mbrabhsálaí.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=An Leathanach Roimhe Seo
+previous_label=Roimhe Seo
+next.title=An Chéad Leathanach Eile
+next_label=Ar Aghaidh
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Leathanach
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=as {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} as {{pagesCount}})
+
+zoom_out.title=Súmáil Amach
+zoom_out_label=Súmáil Amach
+zoom_in.title=Súmáil Isteach
+zoom_in_label=Súmáil Isteach
+zoom.title=Súmáil
+presentation_mode.title=Úsáid an Mód Láithreoireachta
+presentation_mode_label=Mód Láithreoireachta
+open_file.title=Oscail Comhad
+open_file_label=Oscail
+print.title=Priontáil
+print_label=Priontáil
+download.title=Íoslódáil
+download_label=Íoslódáil
+bookmark.title=An t-amharc reatha (cóipeáil nó oscail i bhfuinneog nua)
+bookmark_label=An tAmharc Reatha
+
+# Secondary toolbar and context menu
+tools.title=Uirlisí
+tools_label=Uirlisí
+first_page.title=Go dtí an chéad leathanach
+first_page.label=Go dtí an chéad leathanach
+first_page_label=Go dtí an chéad leathanach
+last_page.title=Go dtí an leathanach deiridh
+last_page.label=Go dtí an leathanach deiridh
+last_page_label=Go dtí an leathanach deiridh
+page_rotate_cw.title=Rothlaigh ar deiseal
+page_rotate_cw.label=Rothlaigh ar deiseal
+page_rotate_cw_label=Rothlaigh ar deiseal
+page_rotate_ccw.title=Rothlaigh ar tuathal
+page_rotate_ccw.label=Rothlaigh ar tuathal
+page_rotate_ccw_label=Rothlaigh ar tuathal
+
+cursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs
+cursor_text_select_tool_label=Uirlis Roghnaithe Téacs
+cursor_hand_tool.title=Cumasaigh an Uirlis Láimhe
+cursor_hand_tool_label=Uirlis Láimhe
+
+# Document properties dialog box
+document_properties.title=Airíonna na Cáipéise…
+document_properties_label=Airíonna na Cáipéise…
+document_properties_file_name=Ainm an chomhaid:
+document_properties_file_size=Méid an chomhaid:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} beart)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} beart)
+document_properties_title=Teideal:
+document_properties_author=Údar:
+document_properties_subject=Ábhar:
+document_properties_keywords=Eochairfhocail:
+document_properties_creation_date=Dáta Cruthaithe:
+document_properties_modification_date=Dáta Athraithe:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cruthaitheoir:
+document_properties_producer=Cruthaitheoir an PDF:
+document_properties_version=Leagan PDF:
+document_properties_page_count=Líon Leathanach:
+document_properties_close=Dún
+
+print_progress_message=Cáipéis á hullmhú le priontáil…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cealaigh
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Scoránaigh an Barra Taoibh
+toggle_sidebar_notification.title=Scoránaigh an Barra Taoibh (achoimre/iatáin sa cháipéis)
+toggle_sidebar_label=Scoránaigh an Barra Taoibh
+document_outline.title=Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú)
+document_outline_label=Creatlach na Cáipéise
+attachments.title=Taispeáin Iatáin
+attachments_label=Iatáin
+thumbs.title=Taispeáin Mionsamhlacha
+thumbs_label=Mionsamhlacha
+findbar.title=Aimsigh sa Cháipéis
+findbar_label=Aimsigh
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Leathanach {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Mionsamhail Leathanaigh {{page}}
+
+# Find panel button title and messages
+find_input.title=Aimsigh
+find_input.placeholder=Aimsigh sa cháipéis…
+find_previous.title=Aimsigh an sampla roimhe seo den nath seo
+find_previous_label=Roimhe seo
+find_next.title=Aimsigh an chéad sampla eile den nath sin
+find_next_label=Ar aghaidh
+find_highlight=Aibhsigh uile
+find_match_case_label=Cásíogair
+find_reached_top=Ag barr na cáipéise, ag leanúint ón mbun
+find_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr
+find_not_found=Frása gan aimsiú
+
+# Error panel labels
+error_more_info=Tuilleadh Eolais
+error_less_info=Níos Lú Eolais
+error_close=Dún
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teachtaireacht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Cruach: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Comhad: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Líne: {{line}}
+rendering_error=Tharla earráid agus an leathanach á leagan amach.
+
+# Predefined zoom values
+page_scale_width=Leithead Leathanaigh
+page_scale_fit=Laghdaigh go dtí an Leathanach
+page_scale_auto=Súmáil Uathoibríoch
+page_scale_actual=Fíormhéid
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Earráid
+loading_error=Tharla earráid agus an cháipéis PDF á lódáil.
+invalid_file_error=Comhad neamhbhailí nó truaillithe PDF.
+missing_file_error=Comhad PDF ar iarraidh.
+unexpected_response_error=Freagra ón bhfreastalaí nach rabhthas ag súil leis.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anótáil {{type}}]
+password_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt.
+password_invalid=Focal faire mícheart. Déan iarracht eile.
+password_ok=OK
+password_cancel=Cealaigh
+
+printing_not_supported=Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán.
+printing_not_ready=Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte.
+web_fonts_disabled=Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid.
+document_colors_not_allowed=Níl cead ag cáipéisí PDF a ndathanna féin a roghnú: tá “Tabhair cead do leathanaigh a ndathanna féin a roghnú” díchumasaithe sa mbrabhsálaí.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gd/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gd/viewer.properties
index 2712568e8454b92dfb2211979cb9986c9f8bedef..0085743eb2cb3d292a6e190e78bb1c3608c387b9 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gd/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gd/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=An duilleag roimhe
-previous_label=Air ais
-next.title=An ath-dhuilleag
-next_label=Air adhart
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Duilleag
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=à {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} à {{pagesCount}})
-
-zoom_out.title=Sùm a-mach
-zoom_out_label=Sùm a-mach
-zoom_in.title=Sùm a-steach
-zoom_in_label=Sùm a-steach
-zoom.title=Sùm
-presentation_mode.title=Gearr leum dhan mhodh taisbeanaidh
-presentation_mode_label=Am modh taisbeanaidh
-open_file.title=Fosgail faidhle
-open_file_label=Fosgail
-print.title=Clò-bhuail
-print_label=Clò-bhuail
-download.title=Luchdaich a-nuas
-download_label=Luchdaich a-nuas
-bookmark.title=An sealladh làithreach (dèan lethbhreac no fosgail e ann an uinneag ùr)
-bookmark_label=An sealladh làithreach
-
-# Secondary toolbar and context menu
-tools.title=Innealan
-tools_label=Innealan
-first_page.title=Rach gun chiad duilleag
-first_page.label=Rach gun chiad duilleag
-first_page_label=Rach gun chiad duilleag
-last_page.title=Rach gun duilleag mu dheireadh
-last_page.label=Rach gun duilleag mu dheireadh
-last_page_label=Rach gun duilleag mu dheireadh
-page_rotate_cw.title=Cuairtich gu deiseil
-page_rotate_cw.label=Cuairtich gu deiseil
-page_rotate_cw_label=Cuairtich gu deiseil
-page_rotate_ccw.title=Cuairtich gu tuathail
-page_rotate_ccw.label=Cuairtich gu tuathail
-page_rotate_ccw_label=Cuairtich gu tuathail
-
-cursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa
-cursor_text_select_tool_label=Inneal taghadh an teacsa
-cursor_hand_tool.title=Cuir inneal na làimhe an comas
-cursor_hand_tool_label=Inneal na làimhe
-
-scroll_vertical.title=Cleachd sgroladh inghearach
-scroll_vertical_label=Sgroladh inghearach
-scroll_horizontal.title=Cleachd sgroladh còmhnard
-scroll_horizontal_label=Sgroladh còmhnard
-scroll_wrapped.title=Cleachd sgroladh paisgte
-scroll_wrapped_label=Sgroladh paisgte
-
-spread_none.title=Na cuir còmhla sgoileadh dhuilleagan
-spread_none_label=Gun sgaoileadh dhuilleagan
-spread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr
-spread_odd_label=Sgaoileadh dhuilleagan corra
-spread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom
-spread_even_label=Sgaoileadh dhuilleagan cothrom
-
-# Document properties dialog box
-document_properties.title=Roghainnean na sgrìobhainne…
-document_properties_label=Roghainnean na sgrìobhainne…
-document_properties_file_name=Ainm an fhaidhle:
-document_properties_file_size=Meud an fhaidhle:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Tiotal:
-document_properties_author=Ùghdar:
-document_properties_subject=Cuspair:
-document_properties_keywords=Faclan-luirg:
-document_properties_creation_date=Latha a chruthachaidh:
-document_properties_modification_date=Latha atharrachaidh:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Cruthadair:
-document_properties_producer=Saothraiche a' PDF:
-document_properties_version=Tionndadh a' PDF:
-document_properties_page_count=Àireamh de dhuilleagan:
-document_properties_page_size=Meud na duilleige:
-document_properties_page_size_unit_inches=ann an
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portraid
-document_properties_page_size_orientation_landscape=dreach-tìre
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Litir
-document_properties_page_size_name_legal=Laghail
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Grad shealladh-lìn:
-document_properties_linearized_yes=Tha
-document_properties_linearized_no=Chan eil
-document_properties_close=Dùin
-
-print_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Sguir dheth
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toglaich am bàr-taoibh
-toggle_sidebar_notification.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain aig an sgrìobhainn)
-toggle_sidebar_label=Toglaich am bàr-taoibh
-document_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh)
-document_outline_label=Oir-loidhne na sgrìobhainne
-attachments.title=Seall na ceanglachain
-attachments_label=Ceanglachain
-thumbs.title=Seall na dealbhagan
-thumbs_label=Dealbhagan
-findbar.title=Lorg san sgrìobhainn
-findbar_label=Lorg
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Duilleag a {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Dealbhag duilleag a {{page}}
-
-# Find panel button title and messages
-find_input.title=Lorg
-find_input.placeholder=Lorg san sgrìobhainn...
-find_previous.title=Lorg làthair roimhe na h-abairt seo
-find_previous_label=Air ais
-find_next.title=Lorg ath-làthair na h-abairt seo
-find_next_label=Air adhart
-find_highlight=Soillsich a h-uile
-find_match_case_label=Aire do litrichean mòra is beaga
-find_entire_word_label=Faclan-slàna
-find_reached_top=Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige
-find_reached_bottom=Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} à {{total}} mhaids
-find_match_count[two]={{current}} à {{total}} mhaids
-find_match_count[few]={{current}} à {{total}} maidsichean
-find_match_count[many]={{current}} à {{total}} maids
-find_match_count[other]={{current}} à {{total}} maids
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Barrachd air {{limit}} maids
-find_match_count_limit[one]=Barrachd air {{limit}} mhaids
-find_match_count_limit[two]=Barrachd air {{limit}} mhaids
-find_match_count_limit[few]=Barrachd air {{limit}} maidsichean
-find_match_count_limit[many]=Barrachd air {{limit}} maids
-find_match_count_limit[other]=Barrachd air {{limit}} maids
-find_not_found=Cha deach an abairt a lorg
-
-# Error panel labels
-error_more_info=Barrachd fiosrachaidh
-error_less_info=Nas lugha de dh'fhiosrachadh
-error_close=Dùin
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Teachdaireachd: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stac: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Faidhle: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Loidhne: {{line}}
-rendering_error=Thachair mearachd rè reandaradh na duilleige.
-
-# Predefined zoom values
-page_scale_width=Leud na duilleige
-page_scale_fit=Freagair ri meud na duilleige
-page_scale_auto=Sùm fèin-obrachail
-page_scale_actual=Am fìor-mheud
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Mearachd
-loading_error=Thachair mearachd rè luchdadh a' PDF.
-invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte.
-missing_file_error=Faidhle PDF a tha a dhìth.
-unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Nòtachadh {{type}}]
-password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh.
-password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist?
-password_ok=Ceart ma-tha
-password_cancel=Sguir dheth
-
-printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh.
-printing_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh.
-web_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh.
-document_colors_not_allowed=Chan fhaod sgrìobhainnean PDF na dathan aca fhèin a chleachdadh: Tha “Leig le duilleagan na dathan aca fhèin a chleachdadh” à comas sa bhrabhsair.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=An duilleag roimhe
+previous_label=Air ais
+next.title=An ath-dhuilleag
+next_label=Air adhart
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Duilleag
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=à {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} à {{pagesCount}})
+
+zoom_out.title=Sùm a-mach
+zoom_out_label=Sùm a-mach
+zoom_in.title=Sùm a-steach
+zoom_in_label=Sùm a-steach
+zoom.title=Sùm
+presentation_mode.title=Gearr leum dhan mhodh taisbeanaidh
+presentation_mode_label=Am modh taisbeanaidh
+open_file.title=Fosgail faidhle
+open_file_label=Fosgail
+print.title=Clò-bhuail
+print_label=Clò-bhuail
+download.title=Luchdaich a-nuas
+download_label=Luchdaich a-nuas
+bookmark.title=An sealladh làithreach (dèan lethbhreac no fosgail e ann an uinneag ùr)
+bookmark_label=An sealladh làithreach
+
+# Secondary toolbar and context menu
+tools.title=Innealan
+tools_label=Innealan
+first_page.title=Rach gun chiad duilleag
+first_page.label=Rach gun chiad duilleag
+first_page_label=Rach gun chiad duilleag
+last_page.title=Rach gun duilleag mu dheireadh
+last_page.label=Rach gun duilleag mu dheireadh
+last_page_label=Rach gun duilleag mu dheireadh
+page_rotate_cw.title=Cuairtich gu deiseil
+page_rotate_cw.label=Cuairtich gu deiseil
+page_rotate_cw_label=Cuairtich gu deiseil
+page_rotate_ccw.title=Cuairtich gu tuathail
+page_rotate_ccw.label=Cuairtich gu tuathail
+page_rotate_ccw_label=Cuairtich gu tuathail
+
+cursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa
+cursor_text_select_tool_label=Inneal taghadh an teacsa
+cursor_hand_tool.title=Cuir inneal na làimhe an comas
+cursor_hand_tool_label=Inneal na làimhe
+
+scroll_vertical.title=Cleachd sgroladh inghearach
+scroll_vertical_label=Sgroladh inghearach
+scroll_horizontal.title=Cleachd sgroladh còmhnard
+scroll_horizontal_label=Sgroladh còmhnard
+scroll_wrapped.title=Cleachd sgroladh paisgte
+scroll_wrapped_label=Sgroladh paisgte
+
+spread_none.title=Na cuir còmhla sgoileadh dhuilleagan
+spread_none_label=Gun sgaoileadh dhuilleagan
+spread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr
+spread_odd_label=Sgaoileadh dhuilleagan corra
+spread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom
+spread_even_label=Sgaoileadh dhuilleagan cothrom
+
+# Document properties dialog box
+document_properties.title=Roghainnean na sgrìobhainne…
+document_properties_label=Roghainnean na sgrìobhainne…
+document_properties_file_name=Ainm an fhaidhle:
+document_properties_file_size=Meud an fhaidhle:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Tiotal:
+document_properties_author=Ùghdar:
+document_properties_subject=Cuspair:
+document_properties_keywords=Faclan-luirg:
+document_properties_creation_date=Latha a chruthachaidh:
+document_properties_modification_date=Latha atharrachaidh:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cruthadair:
+document_properties_producer=Saothraiche a' PDF:
+document_properties_version=Tionndadh a' PDF:
+document_properties_page_count=Àireamh de dhuilleagan:
+document_properties_page_size=Meud na duilleige:
+document_properties_page_size_unit_inches=ann an
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portraid
+document_properties_page_size_orientation_landscape=dreach-tìre
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Litir
+document_properties_page_size_name_legal=Laghail
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Grad shealladh-lìn:
+document_properties_linearized_yes=Tha
+document_properties_linearized_no=Chan eil
+document_properties_close=Dùin
+
+print_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Sguir dheth
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toglaich am bàr-taoibh
+toggle_sidebar_notification.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain aig an sgrìobhainn)
+toggle_sidebar_label=Toglaich am bàr-taoibh
+document_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh)
+document_outline_label=Oir-loidhne na sgrìobhainne
+attachments.title=Seall na ceanglachain
+attachments_label=Ceanglachain
+thumbs.title=Seall na dealbhagan
+thumbs_label=Dealbhagan
+findbar.title=Lorg san sgrìobhainn
+findbar_label=Lorg
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Duilleag a {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Dealbhag duilleag a {{page}}
+
+# Find panel button title and messages
+find_input.title=Lorg
+find_input.placeholder=Lorg san sgrìobhainn...
+find_previous.title=Lorg làthair roimhe na h-abairt seo
+find_previous_label=Air ais
+find_next.title=Lorg ath-làthair na h-abairt seo
+find_next_label=Air adhart
+find_highlight=Soillsich a h-uile
+find_match_case_label=Aire do litrichean mòra is beaga
+find_entire_word_label=Faclan-slàna
+find_reached_top=Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige
+find_reached_bottom=Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} à {{total}} mhaids
+find_match_count[two]={{current}} à {{total}} mhaids
+find_match_count[few]={{current}} à {{total}} maidsichean
+find_match_count[many]={{current}} à {{total}} maids
+find_match_count[other]={{current}} à {{total}} maids
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Barrachd air {{limit}} maids
+find_match_count_limit[one]=Barrachd air {{limit}} mhaids
+find_match_count_limit[two]=Barrachd air {{limit}} mhaids
+find_match_count_limit[few]=Barrachd air {{limit}} maidsichean
+find_match_count_limit[many]=Barrachd air {{limit}} maids
+find_match_count_limit[other]=Barrachd air {{limit}} maids
+find_not_found=Cha deach an abairt a lorg
+
+# Error panel labels
+error_more_info=Barrachd fiosrachaidh
+error_less_info=Nas lugha de dh'fhiosrachadh
+error_close=Dùin
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teachdaireachd: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stac: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Faidhle: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Loidhne: {{line}}
+rendering_error=Thachair mearachd rè reandaradh na duilleige.
+
+# Predefined zoom values
+page_scale_width=Leud na duilleige
+page_scale_fit=Freagair ri meud na duilleige
+page_scale_auto=Sùm fèin-obrachail
+page_scale_actual=Am fìor-mheud
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Mearachd
+loading_error=Thachair mearachd rè luchdadh a' PDF.
+invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte.
+missing_file_error=Faidhle PDF a tha a dhìth.
+unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Nòtachadh {{type}}]
+password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh.
+password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist?
+password_ok=Ceart ma-tha
+password_cancel=Sguir dheth
+
+printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh.
+printing_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh.
+web_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh.
+document_colors_not_allowed=Chan fhaod sgrìobhainnean PDF na dathan aca fhèin a chleachdadh: Tha “Leig le duilleagan na dathan aca fhèin a chleachdadh” à comas sa bhrabhsair.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gl/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gl/viewer.properties
index 187dbf1553ed06573eec982e86bd64e11e8396fd..6cb11e8e4b6b8221bc264ab2a891c11b0f7d7202 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gl/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gl/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Páxina anterior
-previous_label=Anterior
-next.title=Seguinte páxina
-next_label=Seguinte
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Páxina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Reducir
-zoom_out_label=Reducir
-zoom_in.title=Ampliar
-zoom_in_label=Ampliar
-zoom.title=Zoom
-presentation_mode.title=Cambiar ao modo presentación
-presentation_mode_label=Modo presentación
-open_file.title=Abrir ficheiro
-open_file_label=Abrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copiar ou abrir nunha nova xanela)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Ferramentas
-tools_label=Ferramentas
-first_page.title=Ir á primeira páxina
-first_page.label=Ir á primeira páxina
-first_page_label=Ir á primeira páxina
-last_page.title=Ir á última páxina
-last_page.label=Ir á última páxina
-last_page_label=Ir á última páxina
-page_rotate_cw.title=Rotar no sentido das agullas do reloxo
-page_rotate_cw.label=Rotar no sentido das agullas do reloxo
-page_rotate_cw_label=Rotar no sentido das agullas do reloxo
-page_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo
-page_rotate_ccw.label=Rotar no sentido contrario ás agullas do reloxo
-page_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo
-
-cursor_text_select_tool.title=Activar a ferramenta de selección de texto
-cursor_text_select_tool_label=Ferramenta de selección de texto
-cursor_hand_tool.title=Activar a ferramenta man
-cursor_hand_tool_label=Ferramenta man
-
-scroll_vertical.title=Usar o desprazamento vertical
-scroll_vertical_label=Desprazamento vertical
-scroll_horizontal.title=Usar o desprazamento horizontal
-scroll_horizontal_label=Desprazamento horizontal
-scroll_wrapped.title=Usar desprazamento en bloque
-scroll_wrapped_label=Desprazamento en bloque
-
-spread_none.title=Non agrupar páxinas
-spread_none_label=Ningún agrupamento
-spread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares
-spread_odd_label=Agrupamento impar
-spread_even.title=Crea grupo de páxinas que comezan con números de páxina pares
-spread_even_label=Agrupamento par
-
-# Document properties dialog box
-document_properties.title=Propiedades do documento…
-document_properties_label=Propiedades do documento…
-document_properties_file_name=Nome do ficheiro:
-document_properties_file_size=Tamaño do ficheiro:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Título:
-document_properties_author=Autor:
-document_properties_subject=Asunto:
-document_properties_keywords=Palabras clave:
-document_properties_creation_date=Data de creación:
-document_properties_modification_date=Data de modificación:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creado por:
-document_properties_producer=Xenerador do PDF:
-document_properties_version=Versión de PDF:
-document_properties_page_count=Número de páxinas:
-document_properties_page_size=Tamaño da páxina:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=Vertical
-document_properties_page_size_orientation_landscape=Horizontal
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Visualización rápida das páxinas web:
-document_properties_linearized_yes=Si
-document_properties_linearized_no=Non
-document_properties_close=Pechar
-
-print_progress_message=Preparando documento para imprimir…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Amosar/agochar a barra lateral
-toggle_sidebar_notification.title=Amosar/agochar a barra lateral (o documento contén un esquema ou anexos)
-toggle_sidebar_label=Amosar/agochar a barra lateral
-document_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os elementos)
-document_outline_label=Esquema do documento
-attachments.title=Amosar anexos
-attachments_label=Anexos
-thumbs.title=Amosar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Atopar no documento
-findbar_label=Atopar
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Páxina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura da páxina {{page}}
-
-# Find panel button title and messages
-find_input.title=Atopar
-find_input.placeholder=Atopar no documento…
-find_previous.title=Atopar a anterior aparición da frase
-find_previous_label=Anterior
-find_next.title=Atopar a seguinte aparición da frase
-find_next_label=Seguinte
-find_highlight=Realzar todo
-find_match_case_label=Diferenciar maiúsculas de minúsculas
-find_entire_word_label=Palabras completas
-find_reached_top=Chegouse ao inicio do documento, continuar desde o final
-find_reached_bottom=Chegouse ao final do documento, continuar desde o inicio
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} coincidencia
-find_match_count[two]={{current}} de {{total}} coincidencias
-find_match_count[few]={{current}} de {{total}} coincidencias
-find_match_count[many]={{current}} de {{total}} coincidencias
-find_match_count[other]={{current}} de {{total}} coincidencias
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Máis de {{limit}} coincidencias
-find_match_count_limit[one]=Máis de {{limit}} coincidencia
-find_match_count_limit[two]=Máis de {{limit}} coincidencias
-find_match_count_limit[few]=Máis de {{limit}} coincidencias
-find_match_count_limit[many]=Máis de {{limit}} coincidencias
-find_match_count_limit[other]=Máis de {{limit}} coincidencias
-find_not_found=Non se atopou a frase
-
-# Error panel labels
-error_more_info=Máis información
-error_less_info=Menos información
-error_close=Pechar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (Identificador da compilación: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensaxe: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Ficheiro: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Liña: {{line}}
-rendering_error=Produciuse un erro ao representar a páxina.
-
-# Predefined zoom values
-page_scale_width=Largura da páxina
-page_scale_fit=Axuste de páxina
-page_scale_auto=Zoom automático
-page_scale_actual=Tamaño actual
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Erro
-loading_error=Produciuse un erro ao cargar o PDF.
-invalid_file_error=Ficheiro PDF danado ou non válido.
-missing_file_error=Falta o ficheiro PDF.
-unexpected_response_error=Resposta inesperada do servidor.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotación {{type}}]
-password_label=Escriba o contrasinal para abrir este ficheiro PDF.
-password_invalid=Contrasinal incorrecto. Tente de novo.
-password_ok=Aceptar
-password_cancel=Cancelar
-
-printing_not_supported=Aviso: A impresión non é compatíbel de todo con este navegador.
-printing_not_ready=Aviso: O PDF non se cargou completamente para imprimirse.
-web_fonts_disabled=Desactiváronse as fontes web: foi imposíbel usar as fontes incrustadas no PDF.
-document_colors_not_allowed=Os documentos PDF non poden usar as súas propias cores: «Permitir que as páxinas escollan as súas propias cores» está desactivado no navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Páxina anterior
+previous_label=Anterior
+next.title=Seguinte páxina
+next_label=Seguinte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Páxina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Cambiar ao modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir ficheiro
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar ou abrir nunha nova xanela)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir á primeira páxina
+first_page.label=Ir á primeira páxina
+first_page_label=Ir á primeira páxina
+last_page.title=Ir á última páxina
+last_page.label=Ir á última páxina
+last_page_label=Ir á última páxina
+page_rotate_cw.title=Rotar no sentido das agullas do reloxo
+page_rotate_cw.label=Rotar no sentido das agullas do reloxo
+page_rotate_cw_label=Rotar no sentido das agullas do reloxo
+page_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo
+page_rotate_ccw.label=Rotar no sentido contrario ás agullas do reloxo
+page_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo
+
+cursor_text_select_tool.title=Activar a ferramenta de selección de texto
+cursor_text_select_tool_label=Ferramenta de selección de texto
+cursor_hand_tool.title=Activar a ferramenta man
+cursor_hand_tool_label=Ferramenta man
+
+scroll_vertical.title=Usar o desprazamento vertical
+scroll_vertical_label=Desprazamento vertical
+scroll_horizontal.title=Usar o desprazamento horizontal
+scroll_horizontal_label=Desprazamento horizontal
+scroll_wrapped.title=Usar desprazamento en bloque
+scroll_wrapped_label=Desprazamento en bloque
+
+spread_none.title=Non agrupar páxinas
+spread_none_label=Ningún agrupamento
+spread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares
+spread_odd_label=Agrupamento impar
+spread_even.title=Crea grupo de páxinas que comezan con números de páxina pares
+spread_even_label=Agrupamento par
+
+# Document properties dialog box
+document_properties.title=Propiedades do documento…
+document_properties_label=Propiedades do documento…
+document_properties_file_name=Nome do ficheiro:
+document_properties_file_size=Tamaño do ficheiro:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Data de creación:
+document_properties_modification_date=Data de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creado por:
+document_properties_producer=Xenerador do PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Número de páxinas:
+document_properties_page_size=Tamaño da páxina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Vertical
+document_properties_page_size_orientation_landscape=Horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Visualización rápida das páxinas web:
+document_properties_linearized_yes=Si
+document_properties_linearized_no=Non
+document_properties_close=Pechar
+
+print_progress_message=Preparando documento para imprimir…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Amosar/agochar a barra lateral
+toggle_sidebar_notification.title=Amosar/agochar a barra lateral (o documento contén un esquema ou anexos)
+toggle_sidebar_label=Amosar/agochar a barra lateral
+document_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os elementos)
+document_outline_label=Esquema do documento
+attachments.title=Amosar anexos
+attachments_label=Anexos
+thumbs.title=Amosar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Atopar no documento
+findbar_label=Atopar
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Páxina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da páxina {{page}}
+
+# Find panel button title and messages
+find_input.title=Atopar
+find_input.placeholder=Atopar no documento…
+find_previous.title=Atopar a anterior aparición da frase
+find_previous_label=Anterior
+find_next.title=Atopar a seguinte aparición da frase
+find_next_label=Seguinte
+find_highlight=Realzar todo
+find_match_case_label=Diferenciar maiúsculas de minúsculas
+find_entire_word_label=Palabras completas
+find_reached_top=Chegouse ao inicio do documento, continuar desde o final
+find_reached_bottom=Chegouse ao final do documento, continuar desde o inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Máis de {{limit}} coincidencias
+find_match_count_limit[one]=Máis de {{limit}} coincidencia
+find_match_count_limit[two]=Máis de {{limit}} coincidencias
+find_match_count_limit[few]=Máis de {{limit}} coincidencias
+find_match_count_limit[many]=Máis de {{limit}} coincidencias
+find_match_count_limit[other]=Máis de {{limit}} coincidencias
+find_not_found=Non se atopou a frase
+
+# Error panel labels
+error_more_info=Máis información
+error_less_info=Menos información
+error_close=Pechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (Identificador da compilación: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaxe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheiro: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Liña: {{line}}
+rendering_error=Produciuse un erro ao representar a páxina.
+
+# Predefined zoom values
+page_scale_width=Largura da páxina
+page_scale_fit=Axuste de páxina
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erro
+loading_error=Produciuse un erro ao cargar o PDF.
+invalid_file_error=Ficheiro PDF danado ou non válido.
+missing_file_error=Falta o ficheiro PDF.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Escriba o contrasinal para abrir este ficheiro PDF.
+password_invalid=Contrasinal incorrecto. Tente de novo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: A impresión non é compatíbel de todo con este navegador.
+printing_not_ready=Aviso: O PDF non se cargou completamente para imprimirse.
+web_fonts_disabled=Desactiváronse as fontes web: foi imposíbel usar as fontes incrustadas no PDF.
+document_colors_not_allowed=Os documentos PDF non poden usar as súas propias cores: «Permitir que as páxinas escollan as súas propias cores» está desactivado no navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gn/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gn/viewer.properties
index e5652d71fd3b146896c331fc51577186c2a764a0..8dd4d818acf4fe74de4ec889a5f072c19dc8880c 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gn/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gn/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Kuatiarogue mboyvegua
-previous_label=Mboyvegua
-next.title=Kuatiarogue upeigua
-next_label=Upeigua
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Kuatiarogue
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} gui
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=Momichĩ
-zoom_out_label=Momichĩ
-zoom_in.title=Mbotuicha
-zoom_in_label=Mbotuicha
-zoom.title=Tuichakue
-presentation_mode.title=Jehechauka reko moambue
-presentation_mode_label=Jehechauka reko
-open_file.title=Marandurendápe jeike
-open_file_label=Jeike
-print.title=Monguatia
-print_label=Monguatia
-download.title=Mboguejy
-download_label=Mboguejy
-bookmark.title=Ag̃agua jehecha (mbohasarã térã eike peteĩ ovetã pyahúpe)
-bookmark_label=Ag̃agua jehecha
-
-# Secondary toolbar and context menu
-tools.title=Tembipuru
-tools_label=Tembipuru
-first_page.title=Kuatiarogue ñepyrũme jeho
-first_page.label=Kuatiarogue ñepyrũme jeho
-first_page_label=Kuatiarogue ñepyrũme jeho
-last_page.title=Kuatiarogue pahápe jeho
-last_page.label=Kuatiarogue pahápe jeho
-last_page_label=Kuatiarogue pahápe jeho
-page_rotate_cw.title=Aravóicha mbojere
-page_rotate_cw.label=Aravóicha mbojere
-page_rotate_cw_label=Aravóicha mbojere
-page_rotate_ccw.title=Aravo rapykue gotyo mbojere
-page_rotate_ccw.label=Aravo rapykue gotyo mbojere
-page_rotate_ccw_label=Aravo rapykue gotyo mbojere
-
-cursor_text_select_tool.title=Emyandy moñe'ẽrã jeporavo rembipuru
-cursor_text_select_tool_label=Moñe'ẽrã jeporavo rembipuru
-cursor_hand_tool.title=Tembipuru po pegua myandy
-cursor_hand_tool_label=Tembipuru po pegua
-
-scroll_vertical.title=Eipuru jeku’e ykeguáva
-scroll_vertical_label=Jeku’e ykeguáva
-scroll_horizontal.title=Eipuru jeku’e yvate gotyo
-scroll_horizontal_label=Jeku’e yvate gotyo
-scroll_wrapped.title=Eipuru jeku’e mbohyrupyre
-scroll_wrapped_label=Jeku’e mbohyrupyre
-
-spread_none.title=Ani ejuaju spreads kuatiarogue ndive
-spread_none_label=Spreads ỹre
-spread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui
-spread_odd_label=Spreads impar
-spread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui
-spread_even_label=Ipukuve uvei
-
-# Document properties dialog box
-document_properties.title=Kuatia mba'etee…
-document_properties_label=Kuatia mba'etee…
-document_properties_file_name=Marandurenda réra:
-document_properties_file_size=Marandurenda tuichakue:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Teratee:
-document_properties_author=Apohára:
-document_properties_subject=Mba'egua:
-document_properties_keywords=Jehero:
-document_properties_creation_date=Teñoihague arange:
-document_properties_modification_date=Iñambue hague arange:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Apo'ypyha:
-document_properties_producer=PDF mbosako'iha:
-document_properties_version=PDF mbojuehegua:
-document_properties_page_count=Kuatiarogue papapy:
-document_properties_page_size=Kuatiarogue tuichakue:
-document_properties_page_size_unit_inches=Amo
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=Oĩháicha
-document_properties_page_size_orientation_landscape=apaisado
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Kuatiañe'ẽ
-document_properties_page_size_name_legal=Tee
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Ñanduti jahecha pya’e:
-document_properties_linearized_yes=Añete
-document_properties_linearized_no=Ahániri
-document_properties_close=Mboty
-
-print_progress_message=Embosako'i kuatia emonguatia hag̃ua…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Heja
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Tenda yke moambue
-toggle_sidebar_notification.title=Embojopyru tenda ykegua (kuatia oguereko kora/marandurenda moirũha)
-toggle_sidebar_label=Tenda yke moambue
-document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba'epuru)
-document_outline_label=Kuatia apopyre
-attachments.title=Moirũha jehechauka
-attachments_label=Moirũha
-thumbs.title=Mba'emirĩ jehechauka
-thumbs_label=Mba'emirĩ
-findbar.title=Kuatiápe jeheka
-findbar_label=Juhu
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Kuatiarogue {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Kuatiarogue {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Kuatiarogue mba'emirĩ {{page}}
-
-# Find panel button title and messages
-find_input.title=Juhu
-find_input.placeholder=Kuatiápe jejuhu…
-find_previous.title=Ejuhu ñe'ẽrysýi osẽ'ypy hague
-find_previous_label=Mboyvegua
-find_next.title=Eho ñe'ẽ juhupyre upeiguávape
-find_next_label=Upeigua
-find_highlight=Embojekuaavepa
-find_match_case_label=Ejesareko taiguasu/taimichĩre
-find_entire_word_label=Ñe’ẽ oĩmbáva
-find_reached_top=Ojehupyty kuatia ñepyrũ, oku'ejeýta kuatia paha guive
-find_reached_bottom=Ojehupyty kuatia paha, oku'ejeýta kuatia ñepyrũ guive
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} {{total}} ojojoguáva
-find_match_count[two]={{current}} {{total}} ojojoguáva
-find_match_count[few]={{current}} {{total}} ojojoguáva
-find_match_count[many]={{current}} {{total}} ojojoguáva
-find_match_count[other]={{current}} {{total}} ojojoguáva
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Hetave {{limit}} ojojoguáva
-find_match_count_limit[one]=Hetave {{limit}} ojojogua
-find_match_count_limit[two]=Hetave {{limit}} ojojoguáva
-find_match_count_limit[few]=Hetave {{limit}} ojojoguáva
-find_match_count_limit[many]=Hetave {{limit}} ojojoguáva
-find_match_count_limit[other]=Hetave {{limit}} ojojoguáva
-find_not_found=Ñe'ẽrysýi ojejuhu'ỹva
-
-# Error panel labels
-error_more_info=Maranduve
-error_less_info=Sa'ive marandu
-error_close=Mboty
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Ñe'ẽmondo: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Mbojo'apy: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Marandurenda: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Tairenda: {{line}}
-rendering_error=Oiko jejavy ehechaukasévo kuatiarogue.
-
-# Predefined zoom values
-page_scale_width=Kuatiarogue pekue
-page_scale_fit=Kuatiarogue ñemoĩporã
-page_scale_auto=Tuichakue ijeheguíva
-page_scale_actual=Tuichakue ag̃agua
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Oĩvaíva
-loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo.
-invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva.
-missing_file_error=Ndaipóri PDF marandurenda
-unexpected_response_error=Mohendahavusu mbohovái ñeha'arõ'ỹva.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Jehaipy {{type}}]
-password_label=Emoinge ñe'ẽñemi eipe'a hag̃ua ko marandurenda PDF.
-password_invalid=Ñe'ẽñemi ndoikóiva. Eha'ã jey.
-password_ok=MONEĨ
-password_cancel=Heja
-
-printing_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive.
-printing_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha.
-web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo'ãi eipuru PDF jehai'íva taity.
-document_colors_not_allowed=Kuatiakuéra PDF ndaikatúi oipuru isa'ykuéra tee: “Emoneĩ kuatiaroguépe toiporavo isa'ykuéra tee” oñemongehína kundahárape.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Kuatiarogue mboyvegua
+previous_label=Mboyvegua
+next.title=Kuatiarogue upeigua
+next_label=Upeigua
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Kuatiarogue
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} gui
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Momichĩ
+zoom_out_label=Momichĩ
+zoom_in.title=Mbotuicha
+zoom_in_label=Mbotuicha
+zoom.title=Tuichakue
+presentation_mode.title=Jehechauka reko moambue
+presentation_mode_label=Jehechauka reko
+open_file.title=Marandurendápe jeike
+open_file_label=Jeike
+print.title=Monguatia
+print_label=Monguatia
+download.title=Mboguejy
+download_label=Mboguejy
+bookmark.title=Ag̃agua jehecha (mbohasarã térã eike peteĩ ovetã pyahúpe)
+bookmark_label=Ag̃agua jehecha
+
+# Secondary toolbar and context menu
+tools.title=Tembipuru
+tools_label=Tembipuru
+first_page.title=Kuatiarogue ñepyrũme jeho
+first_page.label=Kuatiarogue ñepyrũme jeho
+first_page_label=Kuatiarogue ñepyrũme jeho
+last_page.title=Kuatiarogue pahápe jeho
+last_page.label=Kuatiarogue pahápe jeho
+last_page_label=Kuatiarogue pahápe jeho
+page_rotate_cw.title=Aravóicha mbojere
+page_rotate_cw.label=Aravóicha mbojere
+page_rotate_cw_label=Aravóicha mbojere
+page_rotate_ccw.title=Aravo rapykue gotyo mbojere
+page_rotate_ccw.label=Aravo rapykue gotyo mbojere
+page_rotate_ccw_label=Aravo rapykue gotyo mbojere
+
+cursor_text_select_tool.title=Emyandy moñe'ẽrã jeporavo rembipuru
+cursor_text_select_tool_label=Moñe'ẽrã jeporavo rembipuru
+cursor_hand_tool.title=Tembipuru po pegua myandy
+cursor_hand_tool_label=Tembipuru po pegua
+
+scroll_vertical.title=Eipuru jeku’e ykeguáva
+scroll_vertical_label=Jeku’e ykeguáva
+scroll_horizontal.title=Eipuru jeku’e yvate gotyo
+scroll_horizontal_label=Jeku’e yvate gotyo
+scroll_wrapped.title=Eipuru jeku’e mbohyrupyre
+scroll_wrapped_label=Jeku’e mbohyrupyre
+
+spread_none.title=Ani ejuaju spreads kuatiarogue ndive
+spread_none_label=Spreads ỹre
+spread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui
+spread_odd_label=Spreads impar
+spread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui
+spread_even_label=Ipukuve uvei
+
+# Document properties dialog box
+document_properties.title=Kuatia mba'etee…
+document_properties_label=Kuatia mba'etee…
+document_properties_file_name=Marandurenda réra:
+document_properties_file_size=Marandurenda tuichakue:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Teratee:
+document_properties_author=Apohára:
+document_properties_subject=Mba'egua:
+document_properties_keywords=Jehero:
+document_properties_creation_date=Teñoihague arange:
+document_properties_modification_date=Iñambue hague arange:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Apo'ypyha:
+document_properties_producer=PDF mbosako'iha:
+document_properties_version=PDF mbojuehegua:
+document_properties_page_count=Kuatiarogue papapy:
+document_properties_page_size=Kuatiarogue tuichakue:
+document_properties_page_size_unit_inches=Amo
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Oĩháicha
+document_properties_page_size_orientation_landscape=apaisado
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Kuatiañe'ẽ
+document_properties_page_size_name_legal=Tee
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ñanduti jahecha pya’e:
+document_properties_linearized_yes=Añete
+document_properties_linearized_no=Ahániri
+document_properties_close=Mboty
+
+print_progress_message=Embosako'i kuatia emonguatia hag̃ua…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Heja
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Tenda yke moambue
+toggle_sidebar_notification.title=Embojopyru tenda ykegua (kuatia oguereko kora/marandurenda moirũha)
+toggle_sidebar_label=Tenda yke moambue
+document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba'epuru)
+document_outline_label=Kuatia apopyre
+attachments.title=Moirũha jehechauka
+attachments_label=Moirũha
+thumbs.title=Mba'emirĩ jehechauka
+thumbs_label=Mba'emirĩ
+findbar.title=Kuatiápe jeheka
+findbar_label=Juhu
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Kuatiarogue {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Kuatiarogue {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Kuatiarogue mba'emirĩ {{page}}
+
+# Find panel button title and messages
+find_input.title=Juhu
+find_input.placeholder=Kuatiápe jejuhu…
+find_previous.title=Ejuhu ñe'ẽrysýi osẽ'ypy hague
+find_previous_label=Mboyvegua
+find_next.title=Eho ñe'ẽ juhupyre upeiguávape
+find_next_label=Upeigua
+find_highlight=Embojekuaavepa
+find_match_case_label=Ejesareko taiguasu/taimichĩre
+find_entire_word_label=Ñe’ẽ oĩmbáva
+find_reached_top=Ojehupyty kuatia ñepyrũ, oku'ejeýta kuatia paha guive
+find_reached_bottom=Ojehupyty kuatia paha, oku'ejeýta kuatia ñepyrũ guive
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} {{total}} ojojoguáva
+find_match_count[two]={{current}} {{total}} ojojoguáva
+find_match_count[few]={{current}} {{total}} ojojoguáva
+find_match_count[many]={{current}} {{total}} ojojoguáva
+find_match_count[other]={{current}} {{total}} ojojoguáva
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[one]=Hetave {{limit}} ojojogua
+find_match_count_limit[two]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[few]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[many]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[other]=Hetave {{limit}} ojojoguáva
+find_not_found=Ñe'ẽrysýi ojejuhu'ỹva
+
+# Error panel labels
+error_more_info=Maranduve
+error_less_info=Sa'ive marandu
+error_close=Mboty
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ñe'ẽmondo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Mbojo'apy: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Marandurenda: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Tairenda: {{line}}
+rendering_error=Oiko jejavy ehechaukasévo kuatiarogue.
+
+# Predefined zoom values
+page_scale_width=Kuatiarogue pekue
+page_scale_fit=Kuatiarogue ñemoĩporã
+page_scale_auto=Tuichakue ijeheguíva
+page_scale_actual=Tuichakue ag̃agua
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Oĩvaíva
+loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo.
+invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva.
+missing_file_error=Ndaipóri PDF marandurenda
+unexpected_response_error=Mohendahavusu mbohovái ñeha'arõ'ỹva.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Jehaipy {{type}}]
+password_label=Emoinge ñe'ẽñemi eipe'a hag̃ua ko marandurenda PDF.
+password_invalid=Ñe'ẽñemi ndoikóiva. Eha'ã jey.
+password_ok=MONEĨ
+password_cancel=Heja
+
+printing_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive.
+printing_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha.
+web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo'ãi eipuru PDF jehai'íva taity.
+document_colors_not_allowed=Kuatiakuéra PDF ndaikatúi oipuru isa'ykuéra tee: “Emoneĩ kuatiaroguépe toiporavo isa'ykuéra tee” oñemongehína kundahárape.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gu-IN/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gu-IN/viewer.properties
index cce4bec11f7bea8275b03916e7ae1591de9cc758..bff1fc86c47bca5877c987c5f2a434f6c2e48b80 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gu-IN/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/gu-IN/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=પહેલાનુ પાનું
-previous_label=પહેલાનુ
-next.title=આગળનુ પાનું
-next_label=આગળનું
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=પાનું
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=નો {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} નો {{pagesCount}})
-
-zoom_out.title=મોટુ કરો
-zoom_out_label=મોટુ કરો
-zoom_in.title=નાનું કરો
-zoom_in_label=નાનું કરો
-zoom.title=નાનું મોટુ કરો
-presentation_mode.title=રજૂઆત સ્થિતિમાં જાવ
-presentation_mode_label=રજૂઆત સ્થિતિ
-open_file.title=ફાઇલ ખોલો
-open_file_label=ખોલો
-print.title=છાપો
-print_label=છારો
-download.title=ડાઉનલોડ
-download_label=ડાઉનલોડ
-bookmark.title=વર્તમાન દૃશ્ય (નવી વિન્ડોમાં નકલ કરો અથવા ખોલો)
-bookmark_label=વર્તમાન દૃશ્ય
-
-# Secondary toolbar and context menu
-tools.title=સાધનો
-tools_label=સાધનો
-first_page.title=પહેલાં પાનામાં જાવ
-first_page.label=પહેલાં પાનામાં જાવ
-first_page_label=પ્રથમ પાનાં પર જાવ
-last_page.title=છેલ્લા પાનાં પર જાવ
-last_page.label=છેલ્લા પાનામાં જાવ
-last_page_label=છેલ્લા પાનાં પર જાવ
-page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો
-page_rotate_cw.label=ઘડિયાળનાં કાંટાની જેમ ફેરવો
-page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો
-page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો
-page_rotate_ccw.label=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો
-page_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો
-
-cursor_text_select_tool.title=ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો
-cursor_text_select_tool_label=ટેક્સ્ટ પસંદગી ટૂલ
-cursor_hand_tool.title=હાથનાં સાધનને સક્રિય કરો
-cursor_hand_tool_label=હેન્ડ ટૂલ
-
-scroll_vertical.title=ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો
-scroll_vertical_label=ઊભી સ્ક્રોલિંગ
-scroll_horizontal.title=આડી સ્ક્રોલિંગનો ઉપયોગ કરો
-scroll_horizontal_label=આડી સ્ક્રોલિંગ
-scroll_wrapped.title=આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો
-scroll_wrapped_label=આવરિત સ્ક્રોલિંગ
-
-spread_none.title=પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં
-spread_none_label=કોઈ સ્પ્રેડ નથી
-spread_odd.title=એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ
-spread_odd_label=એકી સ્પ્રેડ્સ
-spread_even.title=નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ
-spread_even_label=સરખું ફેલાવવું
-
-# Document properties dialog box
-document_properties.title=દસ્તાવેજ ગુણધર્મો…
-document_properties_label=દસ્તાવેજ ગુણધર્મો…
-document_properties_file_name=ફાઇલ નામ:
-document_properties_file_size=ફાઇલ માપ:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ)
-document_properties_title=શીર્ષક:
-document_properties_author=લેખક:
-document_properties_subject=વિષય:
-document_properties_keywords=કિવર્ડ:
-document_properties_creation_date=નિર્માણ તારીખ:
-document_properties_modification_date=ફેરફાર તારીખ:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=નિર્માતા:
-document_properties_producer=PDF નિર્માતા:
-document_properties_version=PDF આવૃત્તિ:
-document_properties_page_count=પાનાં ગણતરી:
-document_properties_page_size=પૃષ્ઠનું કદ:
-document_properties_page_size_unit_inches=ઇંચ
-document_properties_page_size_unit_millimeters=મીમી
-document_properties_page_size_orientation_portrait=ઉભું
-document_properties_page_size_orientation_landscape=આડુ
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=પત્ર
-document_properties_page_size_name_legal=કાયદાકીય
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=ઝડપી વૅબ દૃશ્ય:
-document_properties_linearized_yes=હા
-document_properties_linearized_no=ના
-document_properties_close=બંધ કરો
-
-print_progress_message=છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=રદ કરો
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=ટૉગલ બાજુપટ્ટી
-toggle_sidebar_notification.title=સાઇડબારને ટૉગલ કરો(દસ્તાવેજની રૂપરેખા/જોડાણો શામેલ છે)
-toggle_sidebar_label=ટૉગલ બાજુપટ્ટી
-document_outline.title=દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો)
-document_outline_label=દસ્તાવેજ રૂપરેખા
-attachments.title=જોડાણોને બતાવો
-attachments_label=જોડાણો
-thumbs.title=થંબનેલ્સ બતાવો
-thumbs_label=થંબનેલ્સ
-findbar.title=દસ્તાવેજમાં શોધો
-findbar_label=શોધો
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=પાનું {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=પાનાં {{page}} નું થંબનેલ્સ
-
-# Find panel button title and messages
-find_input.title=શોધો
-find_input.placeholder=દસ્તાવેજમાં શોધો…
-find_previous.title=શબ્દસમૂહની પાછલી ઘટનાને શોધો
-find_previous_label=પહેલાંનુ
-find_next.title=શબ્દસમૂહની આગળની ઘટનાને શોધો
-find_next_label=આગળનું
-find_highlight=બધુ પ્રકાશિત કરો
-find_match_case_label=કેસ બંધબેસાડો
-find_entire_word_label=સંપૂર્ણ શબ્દો
-find_reached_top=દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ
-find_reached_bottom=દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} માંથી {{current}} સરખું મળ્યું
-find_match_count[two]={{total}} માંથી {{current}} સરખા મળ્યાં
-find_match_count[few]={{total}} માંથી {{current}} સરખા મળ્યાં
-find_match_count[many]={{total}} માંથી {{current}} સરખા મળ્યાં
-find_match_count[other]={{total}} માંથી {{current}} સરખા મળ્યાં
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} કરતાં વધુ સરખા મળ્યાં
-find_match_count_limit[one]={{limit}} કરતાં વધુ સરખું મળ્યું
-find_match_count_limit[two]={{limit}} કરતાં વધુ સરખા મળ્યાં
-find_match_count_limit[few]={{limit}} કરતાં વધુ સરખા મળ્યાં
-find_match_count_limit[many]={{limit}} કરતાં વધુ સરખા મળ્યાં
-find_match_count_limit[other]={{limit}} કરતાં વધુ સરખા મળ્યાં
-find_not_found=શબ્દસમૂહ મળ્યુ નથી
-
-# Error panel labels
-error_more_info=વધારે જાણકારી
-error_less_info=ઓછી જાણકારી
-error_close=બંધ કરો
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=સંદેશો: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=સ્ટેક: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ફાઇલ: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=વાક્ય: {{line}}
-rendering_error=ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય.
-
-# Predefined zoom values
-page_scale_width=પાનાની પહોળાઇ
-page_scale_fit=પાનું બંધબેસતુ
-page_scale_auto=આપમેળે નાનુંમોટુ કરો
-page_scale_actual=ચોક્કસ માપ
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=ભૂલ
-loading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય.
-invalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ.
-missing_file_error=ગુમ થયેલ PDF ફાઇલ.
-unexpected_response_error=અનપેક્ષિત સર્વર પ્રતિસાદ.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો.
-password_invalid=અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો.
-password_ok=બરાબર
-password_cancel=રદ કરો
-
-printing_not_supported=ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી.
-printing_not_ready=Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે.
-web_fonts_disabled=વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ.
-document_colors_not_allowed=PDF દસ્તાવેજો તેનાં પોતાના રંગોને વાપરવા પરવાનગી આપતા નથી: 'તેનાં પોતાનાં રંગોને પસંદ કરવા માટે પાનાંને પરવાનગી આપો' બ્રાઉઝરમાં નિષ્ક્રિય થયેલ છે.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=પહેલાનુ પાનું
+previous_label=પહેલાનુ
+next.title=આગળનુ પાનું
+next_label=આગળનું
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=પાનું
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=નો {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} નો {{pagesCount}})
+
+zoom_out.title=મોટુ કરો
+zoom_out_label=મોટુ કરો
+zoom_in.title=નાનું કરો
+zoom_in_label=નાનું કરો
+zoom.title=નાનું મોટુ કરો
+presentation_mode.title=રજૂઆત સ્થિતિમાં જાવ
+presentation_mode_label=રજૂઆત સ્થિતિ
+open_file.title=ફાઇલ ખોલો
+open_file_label=ખોલો
+print.title=છાપો
+print_label=છારો
+download.title=ડાઉનલોડ
+download_label=ડાઉનલોડ
+bookmark.title=વર્તમાન દૃશ્ય (નવી વિન્ડોમાં નકલ કરો અથવા ખોલો)
+bookmark_label=વર્તમાન દૃશ્ય
+
+# Secondary toolbar and context menu
+tools.title=સાધનો
+tools_label=સાધનો
+first_page.title=પહેલાં પાનામાં જાવ
+first_page.label=પહેલાં પાનામાં જાવ
+first_page_label=પ્રથમ પાનાં પર જાવ
+last_page.title=છેલ્લા પાનાં પર જાવ
+last_page.label=છેલ્લા પાનામાં જાવ
+last_page_label=છેલ્લા પાનાં પર જાવ
+page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો
+page_rotate_cw.label=ઘડિયાળનાં કાંટાની જેમ ફેરવો
+page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો
+page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો
+page_rotate_ccw.label=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો
+page_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો
+
+cursor_text_select_tool.title=ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો
+cursor_text_select_tool_label=ટેક્સ્ટ પસંદગી ટૂલ
+cursor_hand_tool.title=હાથનાં સાધનને સક્રિય કરો
+cursor_hand_tool_label=હેન્ડ ટૂલ
+
+scroll_vertical.title=ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો
+scroll_vertical_label=ઊભી સ્ક્રોલિંગ
+scroll_horizontal.title=આડી સ્ક્રોલિંગનો ઉપયોગ કરો
+scroll_horizontal_label=આડી સ્ક્રોલિંગ
+scroll_wrapped.title=આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો
+scroll_wrapped_label=આવરિત સ્ક્રોલિંગ
+
+spread_none.title=પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં
+spread_none_label=કોઈ સ્પ્રેડ નથી
+spread_odd.title=એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ
+spread_odd_label=એકી સ્પ્રેડ્સ
+spread_even.title=નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ
+spread_even_label=સરખું ફેલાવવું
+
+# Document properties dialog box
+document_properties.title=દસ્તાવેજ ગુણધર્મો…
+document_properties_label=દસ્તાવેજ ગુણધર્મો…
+document_properties_file_name=ફાઇલ નામ:
+document_properties_file_size=ફાઇલ માપ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ)
+document_properties_title=શીર્ષક:
+document_properties_author=લેખક:
+document_properties_subject=વિષય:
+document_properties_keywords=કિવર્ડ:
+document_properties_creation_date=નિર્માણ તારીખ:
+document_properties_modification_date=ફેરફાર તારીખ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=નિર્માતા:
+document_properties_producer=PDF નિર્માતા:
+document_properties_version=PDF આવૃત્તિ:
+document_properties_page_count=પાનાં ગણતરી:
+document_properties_page_size=પૃષ્ઠનું કદ:
+document_properties_page_size_unit_inches=ઇંચ
+document_properties_page_size_unit_millimeters=મીમી
+document_properties_page_size_orientation_portrait=ઉભું
+document_properties_page_size_orientation_landscape=આડુ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=પત્ર
+document_properties_page_size_name_legal=કાયદાકીય
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ઝડપી વૅબ દૃશ્ય:
+document_properties_linearized_yes=હા
+document_properties_linearized_no=ના
+document_properties_close=બંધ કરો
+
+print_progress_message=છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=રદ કરો
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ટૉગલ બાજુપટ્ટી
+toggle_sidebar_notification.title=સાઇડબારને ટૉગલ કરો(દસ્તાવેજની રૂપરેખા/જોડાણો શામેલ છે)
+toggle_sidebar_label=ટૉગલ બાજુપટ્ટી
+document_outline.title=દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો)
+document_outline_label=દસ્તાવેજ રૂપરેખા
+attachments.title=જોડાણોને બતાવો
+attachments_label=જોડાણો
+thumbs.title=થંબનેલ્સ બતાવો
+thumbs_label=થંબનેલ્સ
+findbar.title=દસ્તાવેજમાં શોધો
+findbar_label=શોધો
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=પાનું {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=પાનાં {{page}} નું થંબનેલ્સ
+
+# Find panel button title and messages
+find_input.title=શોધો
+find_input.placeholder=દસ્તાવેજમાં શોધો…
+find_previous.title=શબ્દસમૂહની પાછલી ઘટનાને શોધો
+find_previous_label=પહેલાંનુ
+find_next.title=શબ્દસમૂહની આગળની ઘટનાને શોધો
+find_next_label=આગળનું
+find_highlight=બધુ પ્રકાશિત કરો
+find_match_case_label=કેસ બંધબેસાડો
+find_entire_word_label=સંપૂર્ણ શબ્દો
+find_reached_top=દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ
+find_reached_bottom=દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} માંથી {{current}} સરખું મળ્યું
+find_match_count[two]={{total}} માંથી {{current}} સરખા મળ્યાં
+find_match_count[few]={{total}} માંથી {{current}} સરખા મળ્યાં
+find_match_count[many]={{total}} માંથી {{current}} સરખા મળ્યાં
+find_match_count[other]={{total}} માંથી {{current}} સરખા મળ્યાં
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[one]={{limit}} કરતાં વધુ સરખું મળ્યું
+find_match_count_limit[two]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[few]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[many]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_match_count_limit[other]={{limit}} કરતાં વધુ સરખા મળ્યાં
+find_not_found=શબ્દસમૂહ મળ્યુ નથી
+
+# Error panel labels
+error_more_info=વધારે જાણકારી
+error_less_info=ઓછી જાણકારી
+error_close=બંધ કરો
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=સંદેશો: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=સ્ટેક: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ફાઇલ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=વાક્ય: {{line}}
+rendering_error=ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય.
+
+# Predefined zoom values
+page_scale_width=પાનાની પહોળાઇ
+page_scale_fit=પાનું બંધબેસતુ
+page_scale_auto=આપમેળે નાનુંમોટુ કરો
+page_scale_actual=ચોક્કસ માપ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ભૂલ
+loading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય.
+invalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ.
+missing_file_error=ગુમ થયેલ PDF ફાઇલ.
+unexpected_response_error=અનપેક્ષિત સર્વર પ્રતિસાદ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો.
+password_invalid=અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો.
+password_ok=બરાબર
+password_cancel=રદ કરો
+
+printing_not_supported=ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી.
+printing_not_ready=Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે.
+web_fonts_disabled=વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ.
+document_colors_not_allowed=PDF દસ્તાવેજો તેનાં પોતાના રંગોને વાપરવા પરવાનગી આપતા નથી: 'તેનાં પોતાનાં રંગોને પસંદ કરવા માટે પાનાંને પરવાનગી આપો' બ્રાઉઝરમાં નિષ્ક્રિય થયેલ છે.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/he/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/he/viewer.properties
index e3d197efb32b555b83d6737dabeacb8ddfa0b5a3..1b09a2347a809ff406a55f0b80855a46edb0d95e 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/he/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/he/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=דף קודם
-previous_label=קודם
-next.title=דף הבא
-next_label=הבא
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=דף
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=מתוך {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} מתוך {{pagesCount}})
-
-zoom_out.title=התרחקות
-zoom_out_label=התרחקות
-zoom_in.title=התקרבות
-zoom_in_label=התקרבות
-zoom.title=מרחק מתצוגה
-presentation_mode.title=מעבר למצב מצגת
-presentation_mode_label=מצב מצגת
-open_file.title=פתיחת קובץ
-open_file_label=פתיחה
-print.title=הדפסה
-print_label=הדפסה
-download.title=הורדה
-download_label=הורדה
-bookmark.title=תצוגה נוכחית (העתקה או פתיחה בחלון חדש)
-bookmark_label=תצוגה נוכחית
-
-# Secondary toolbar and context menu
-tools.title=כלים
-tools_label=כלים
-first_page.title=מעבר לעמוד הראשון
-first_page.label=מעבר לעמוד הראשון
-first_page_label=מעבר לעמוד הראשון
-last_page.title=מעבר לעמוד האחרון
-last_page.label=מעבר לעמוד האחרון
-last_page_label=מעבר לעמוד האחרון
-page_rotate_cw.title=הטיה עם כיוון השעון
-page_rotate_cw.label=הטיה עם כיוון השעון
-page_rotate_cw_label=הטיה עם כיוון השעון
-page_rotate_ccw.title=הטיה כנגד כיוון השעון
-page_rotate_ccw.label=הטיה כנגד כיוון השעון
-page_rotate_ccw_label=הטיה כנגד כיוון השעון
-
-cursor_text_select_tool.title=הפעלת כלי בחירת טקסט
-cursor_text_select_tool_label=כלי בחירת טקסט
-cursor_hand_tool.title=הפעלת כלי היד
-cursor_hand_tool_label=כלי יד
-
-scroll_vertical.title=שימוש בגלילה אנכית
-scroll_vertical_label=גלילה אנכית
-scroll_horizontal.title=שימוש בגלילה אופקית
-scroll_horizontal_label=גלילה אופקית
-scroll_wrapped.title=שימוש בגלילה רציפה
-scroll_wrapped_label=גלילה רציפה
-
-spread_none.title=לא לצרף מפתחי עמודים
-spread_none_label=ללא מפתחים
-spread_odd.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים
-spread_odd_label=מפתחים אי־זוגיים
-spread_even.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים
-spread_even_label=מפתחים זוגיים
-
-# Document properties dialog box
-document_properties.title=מאפייני מסמך…
-document_properties_label=מאפייני מסמך…
-document_properties_file_name=שם קובץ:
-document_properties_file_size=גודל הקובץ:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} ק״ב ({{size_b}} בתים)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} מ״ב ({{size_b}} בתים)
-document_properties_title=כותרת:
-document_properties_author=מחבר:
-document_properties_subject=נושא:
-document_properties_keywords=מילות מפתח:
-document_properties_creation_date=תאריך יצירה:
-document_properties_modification_date=תאריך שינוי:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=יוצר:
-document_properties_producer=יצרן PDF:
-document_properties_version=גרסת PDF:
-document_properties_page_count=מספר דפים:
-document_properties_page_size=גודל העמוד:
-document_properties_page_size_unit_inches=אינ׳
-document_properties_page_size_unit_millimeters=מ״מ
-document_properties_page_size_orientation_portrait=לאורך
-document_properties_page_size_orientation_landscape=לרוחב
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=מכתב
-document_properties_page_size_name_legal=דף משפטי
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=תצוגת דף מהירה:
-document_properties_linearized_yes=כן
-document_properties_linearized_no=לא
-document_properties_close=סגירה
-
-print_progress_message=מסמך בהכנה להדפסה…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=ביטול
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=הצגה/הסתרה של סרגל הצד
-toggle_sidebar_notification.title=החלפת תצוגת סרגל צד (מסמך שמכיל מתאר/צרופות)
-toggle_sidebar_label=הצגה/הסתרה של סרגל הצד
-document_outline.title=הצגת מתאר מסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים)
-document_outline_label=מתאר מסמך
-attachments.title=הצגת צרופות
-attachments_label=צרופות
-thumbs.title=הצגת תצוגה מקדימה
-thumbs_label=תצוגה מקדימה
-findbar.title=חיפוש במסמך
-findbar_label=חיפוש
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=עמוד {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=עמוד {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=תצוגה מקדימה של עמוד {{page}}
-
-# Find panel button title and messages
-find_input.title=חיפוש
-find_input.placeholder=חיפוש במסמך…
-find_previous.title=מציאת המופע הקודם של הביטוי
-find_previous_label=קודם
-find_next.title=מציאת המופע הבא של הביטוי
-find_next_label=הבא
-find_highlight=הדגשת הכול
-find_match_case_label=התאמת אותיות
-find_entire_word_label=מילים שלמות
-find_reached_top=הגיע לראש הדף, ממשיך מלמטה
-find_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=תוצאה {{current}} מתוך {{total}}
-find_match_count[two]={{current}} מתוך {{total}} תוצאות
-find_match_count[few]={{current}} מתוך {{total}} תוצאות
-find_match_count[many]={{current}} מתוך {{total}} תוצאות
-find_match_count[other]={{current}} מתוך {{total}} תוצאות
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=יותר מ־{{limit}} תוצאות
-find_match_count_limit[one]=יותר מתוצאה אחת
-find_match_count_limit[two]=יותר מ־{{limit}} תוצאות
-find_match_count_limit[few]=יותר מ־{{limit}} תוצאות
-find_match_count_limit[many]=יותר מ־{{limit}} תוצאות
-find_match_count_limit[other]=יותר מ־{{limit}} תוצאות
-find_not_found=הביטוי לא נמצא
-
-# Error panel labels
-error_more_info=מידע נוסף
-error_less_info=פחות מידע
-error_close=סגירה
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js גרסה {{version}} (בנייה: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=הודעה: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=תוכן מחסנית: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=קובץ: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=שורה: {{line}}
-rendering_error=אירעה שגיאה בעת עיבוד הדף.
-
-# Predefined zoom values
-page_scale_width=רוחב העמוד
-page_scale_fit=התאמה לעמוד
-page_scale_auto=מרחק מתצוגה אוטומטי
-page_scale_actual=גודל אמיתי
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=שגיאה
-loading_error=אירעה שגיאה בעת טעינת ה־PDF.
-invalid_file_error=קובץ PDF פגום או לא תקין.
-missing_file_error=קובץ PDF חסר.
-unexpected_response_error=תגובת שרת לא צפויה.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[הערת {{type}}]
-password_label=נא להכניס את הססמה לפתיחת קובץ PDF זה.
-password_invalid=ססמה שגויה. נא לנסות שנית.
-password_ok=אישור
-password_cancel=ביטול
-
-printing_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה.
-printing_not_ready=אזהרה: ה־PDF לא ניתן לחלוטין עד מצב שמאפשר הדפסה.
-web_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים.
-document_colors_not_allowed=מסמכי PDF אינם מורשים להשתמש בצבעים משלהם: האפשרות „אפשר לעמודים לבחור צבעים משלהם” אינה פעילה בדפדפן.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=דף קודם
+previous_label=קודם
+next.title=דף הבא
+next_label=הבא
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=דף
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=מתוך {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} מתוך {{pagesCount}})
+
+zoom_out.title=התרחקות
+zoom_out_label=התרחקות
+zoom_in.title=התקרבות
+zoom_in_label=התקרבות
+zoom.title=מרחק מתצוגה
+presentation_mode.title=מעבר למצב מצגת
+presentation_mode_label=מצב מצגת
+open_file.title=פתיחת קובץ
+open_file_label=פתיחה
+print.title=הדפסה
+print_label=הדפסה
+download.title=הורדה
+download_label=הורדה
+bookmark.title=תצוגה נוכחית (העתקה או פתיחה בחלון חדש)
+bookmark_label=תצוגה נוכחית
+
+# Secondary toolbar and context menu
+tools.title=כלים
+tools_label=כלים
+first_page.title=מעבר לעמוד הראשון
+first_page.label=מעבר לעמוד הראשון
+first_page_label=מעבר לעמוד הראשון
+last_page.title=מעבר לעמוד האחרון
+last_page.label=מעבר לעמוד האחרון
+last_page_label=מעבר לעמוד האחרון
+page_rotate_cw.title=הטיה עם כיוון השעון
+page_rotate_cw.label=הטיה עם כיוון השעון
+page_rotate_cw_label=הטיה עם כיוון השעון
+page_rotate_ccw.title=הטיה כנגד כיוון השעון
+page_rotate_ccw.label=הטיה כנגד כיוון השעון
+page_rotate_ccw_label=הטיה כנגד כיוון השעון
+
+cursor_text_select_tool.title=הפעלת כלי בחירת טקסט
+cursor_text_select_tool_label=כלי בחירת טקסט
+cursor_hand_tool.title=הפעלת כלי היד
+cursor_hand_tool_label=כלי יד
+
+scroll_vertical.title=שימוש בגלילה אנכית
+scroll_vertical_label=גלילה אנכית
+scroll_horizontal.title=שימוש בגלילה אופקית
+scroll_horizontal_label=גלילה אופקית
+scroll_wrapped.title=שימוש בגלילה רציפה
+scroll_wrapped_label=גלילה רציפה
+
+spread_none.title=לא לצרף מפתחי עמודים
+spread_none_label=ללא מפתחים
+spread_odd.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים
+spread_odd_label=מפתחים אי־זוגיים
+spread_even.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים
+spread_even_label=מפתחים זוגיים
+
+# Document properties dialog box
+document_properties.title=מאפייני מסמך…
+document_properties_label=מאפייני מסמך…
+document_properties_file_name=שם קובץ:
+document_properties_file_size=גודל הקובץ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ק״ב ({{size_b}} בתים)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} מ״ב ({{size_b}} בתים)
+document_properties_title=כותרת:
+document_properties_author=מחבר:
+document_properties_subject=נושא:
+document_properties_keywords=מילות מפתח:
+document_properties_creation_date=תאריך יצירה:
+document_properties_modification_date=תאריך שינוי:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=יוצר:
+document_properties_producer=יצרן PDF:
+document_properties_version=גרסת PDF:
+document_properties_page_count=מספר דפים:
+document_properties_page_size=גודל העמוד:
+document_properties_page_size_unit_inches=אינ׳
+document_properties_page_size_unit_millimeters=מ״מ
+document_properties_page_size_orientation_portrait=לאורך
+document_properties_page_size_orientation_landscape=לרוחב
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=מכתב
+document_properties_page_size_name_legal=דף משפטי
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=תצוגת דף מהירה:
+document_properties_linearized_yes=כן
+document_properties_linearized_no=לא
+document_properties_close=סגירה
+
+print_progress_message=מסמך בהכנה להדפסה…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ביטול
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=הצגה/הסתרה של סרגל הצד
+toggle_sidebar_notification.title=החלפת תצוגת סרגל צד (מסמך שמכיל מתאר/צרופות)
+toggle_sidebar_label=הצגה/הסתרה של סרגל הצד
+document_outline.title=הצגת מתאר מסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים)
+document_outline_label=מתאר מסמך
+attachments.title=הצגת צרופות
+attachments_label=צרופות
+thumbs.title=הצגת תצוגה מקדימה
+thumbs_label=תצוגה מקדימה
+findbar.title=חיפוש במסמך
+findbar_label=חיפוש
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=עמוד {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=עמוד {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=תצוגה מקדימה של עמוד {{page}}
+
+# Find panel button title and messages
+find_input.title=חיפוש
+find_input.placeholder=חיפוש במסמך…
+find_previous.title=מציאת המופע הקודם של הביטוי
+find_previous_label=קודם
+find_next.title=מציאת המופע הבא של הביטוי
+find_next_label=הבא
+find_highlight=הדגשת הכול
+find_match_case_label=התאמת אותיות
+find_entire_word_label=מילים שלמות
+find_reached_top=הגיע לראש הדף, ממשיך מלמטה
+find_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=תוצאה {{current}} מתוך {{total}}
+find_match_count[two]={{current}} מתוך {{total}} תוצאות
+find_match_count[few]={{current}} מתוך {{total}} תוצאות
+find_match_count[many]={{current}} מתוך {{total}} תוצאות
+find_match_count[other]={{current}} מתוך {{total}} תוצאות
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[one]=יותר מתוצאה אחת
+find_match_count_limit[two]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[few]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[many]=יותר מ־{{limit}} תוצאות
+find_match_count_limit[other]=יותר מ־{{limit}} תוצאות
+find_not_found=הביטוי לא נמצא
+
+# Error panel labels
+error_more_info=מידע נוסף
+error_less_info=פחות מידע
+error_close=סגירה
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js גרסה {{version}} (בנייה: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=הודעה: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=תוכן מחסנית: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=קובץ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=שורה: {{line}}
+rendering_error=אירעה שגיאה בעת עיבוד הדף.
+
+# Predefined zoom values
+page_scale_width=רוחב העמוד
+page_scale_fit=התאמה לעמוד
+page_scale_auto=מרחק מתצוגה אוטומטי
+page_scale_actual=גודל אמיתי
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=שגיאה
+loading_error=אירעה שגיאה בעת טעינת ה־PDF.
+invalid_file_error=קובץ PDF פגום או לא תקין.
+missing_file_error=קובץ PDF חסר.
+unexpected_response_error=תגובת שרת לא צפויה.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[הערת {{type}}]
+password_label=נא להכניס את הססמה לפתיחת קובץ PDF זה.
+password_invalid=ססמה שגויה. נא לנסות שנית.
+password_ok=אישור
+password_cancel=ביטול
+
+printing_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה.
+printing_not_ready=אזהרה: ה־PDF לא ניתן לחלוטין עד מצב שמאפשר הדפסה.
+web_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים.
+document_colors_not_allowed=מסמכי PDF אינם מורשים להשתמש בצבעים משלהם: האפשרות „אפשר לעמודים לבחור צבעים משלהם” אינה פעילה בדפדפן.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hi-IN/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hi-IN/viewer.properties
index 3005180f546db07153672098bff035c7d6b60cbe..a63c6855fe652185d4f019476cd195ea13007d3b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hi-IN/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hi-IN/viewer.properties
@@ -1,244 +1,244 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=पिछला पृष्ठ
-previous_label=पिछला
-next.title=अगला पृष्ठ
-next_label=आगे
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=पृष्ठ:
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} का
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=\u0020छोटा करें
-zoom_out_label=\u0020छोटा करें
-zoom_in.title=बड़ा करें
-zoom_in_label=बड़ा करें
-zoom.title=बड़ा-छोटा करें
-presentation_mode.title=प्रस्तुति अवस्था में जाएँ
-presentation_mode_label=\u0020प्रस्तुति अवस्था
-open_file.title=फ़ाइल खोलें
-open_file_label=\u0020खोलें
-print.title=छापें
-print_label=\u0020छापें
-download.title=डाउनलोड
-download_label=डाउनलोड
-bookmark.title=मौजूदा दृश्य (नए विंडो में नक़ल लें या खोलें)
-bookmark_label=\u0020मौजूदा दृश्य
-
-# Secondary toolbar and context menu
-tools.title=औज़ार
-tools_label=औज़ार
-first_page.title=प्रथम पृष्ठ पर जाएँ
-first_page.label=\u0020प्रथम पृष्ठ पर जाएँ
-first_page_label=प्रथम पृष्ठ पर जाएँ
-last_page.title=अंतिम पृष्ठ पर जाएँ
-last_page.label=\u0020अंतिम पृष्ठ पर जाएँ
-last_page_label=\u0020अंतिम पृष्ठ पर जाएँ
-page_rotate_cw.title=घड़ी की दिशा में घुमाएँ
-page_rotate_cw.label=घड़ी की दिशा में घुमाएँ
-page_rotate_cw_label=घड़ी की दिशा में घुमाएँ
-page_rotate_ccw.title=घड़ी की दिशा से उल्टा घुमाएँ
-page_rotate_ccw.label=घड़ी की दिशा से उल्टा घुमाएँ
-page_rotate_ccw_label=\u0020घड़ी की दिशा से उल्टा घुमाएँ
-
-cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम करें
-cursor_text_select_tool_label=पाठ चयन उपकरण
-cursor_hand_tool.title=हस्त उपकरण सक्षम करें
-cursor_hand_tool_label=हस्त उपकरण
-
-scroll_vertical.title=लंबवत स्क्रॉलिंग का उपयोग करें
-scroll_vertical_label=लंबवत स्क्रॉलिंग
-scroll_horizontal.title=क्षितिजिय स्क्रॉलिंग का उपयोग करें
-scroll_horizontal_label=क्षितिजिय स्क्रॉलिंग
-scroll_wrapped.title=व्राप्पेड स्क्रॉलिंग का उपयोग करें
-
-spread_none_label=कोई स्प्रेड उपलब्ध नहीं
-spread_odd.title=विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों
-spread_odd_label=विषम फैलाव
-
-# Document properties dialog box
-document_properties.title=दस्तावेज़ विशेषता...
-document_properties_label=दस्तावेज़ विशेषता...
-document_properties_file_name=फ़ाइल नाम:
-document_properties_file_size=फाइल आकारः
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=शीर्षक:
-document_properties_author=लेखकः
-document_properties_subject=विषय:
-document_properties_keywords=कुंजी-शब्द:
-document_properties_creation_date=निर्माण दिनांक:
-document_properties_modification_date=संशोधन दिनांक:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=निर्माता:
-document_properties_producer=PDF उत्पादक:
-document_properties_version=PDF संस्करण:
-document_properties_page_count=पृष्ठ गिनती:
-document_properties_page_size=पृष्ठ आकार:
-document_properties_page_size_unit_inches=इंच
-document_properties_page_size_unit_millimeters=मिमी
-document_properties_page_size_orientation_portrait=पोर्ट्रेट
-document_properties_page_size_orientation_landscape=लैंडस्केप
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=पत्र
-document_properties_page_size_name_legal=क़ानूनी
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=तीव्र वेब व्यू:
-document_properties_linearized_yes=हाँ
-document_properties_linearized_no=नहीं
-document_properties_close=बंद करें
-
-print_progress_message=छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है...
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=रद्द करें
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=\u0020स्लाइडर टॉगल करें
-toggle_sidebar_notification.title=साइडबार टॉगल करें (दस्तावेज़ में रूपरेखा शामिल है/attachments)
-toggle_sidebar_label=स्लाइडर टॉगल करें
-document_outline.title=दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें)
-document_outline_label=दस्तावेज़ आउटलाइन
-attachments.title=संलग्नक दिखायें
-attachments_label=संलग्नक
-thumbs.title=लघुछवियाँ दिखाएँ
-thumbs_label=लघु छवि
-findbar.title=\u0020दस्तावेज़ में ढूँढ़ें
-findbar_label=ढूँढें
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=पृष्ठ {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=पृष्ठ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=पृष्ठ {{page}} की लघु-छवि
-
-# Find panel button title and messages
-find_input.title=ढूँढें
-find_input.placeholder=दस्तावेज़ में खोजें...
-find_previous.title=वाक्यांश की पिछली उपस्थिति ढूँढ़ें
-find_previous_label=पिछला
-find_next.title=वाक्यांश की अगली उपस्थिति ढूँढ़ें
-find_next_label=अगला
-find_highlight=\u0020सभी आलोकित करें
-find_match_case_label=मिलान स्थिति
-find_entire_word_label=संपूर्ण शब्द
-find_reached_top=पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें
-find_reached_bottom=पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} में {{current}} मेल
-find_match_count[two]={{total}} में {{current}} मेल
-find_match_count[few]={{total}} में {{current}} मेल
-find_match_count[many]={{total}} में {{current}} मेल
-find_match_count[other]={{total}} में {{current}} मेल
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} से अधिक मेल
-find_match_count_limit[one]={{limit}} से अधिक मेल
-find_match_count_limit[two]={{limit}} से अधिक मेल
-find_match_count_limit[few]={{limit}} से अधिक मेल
-find_match_count_limit[many]={{limit}} से अधिक मेल
-find_match_count_limit[other]={{limit}} से अधिक मेल
-find_not_found=वाक्यांश नहीं मिला
-
-# Error panel labels
-error_more_info=अधिक सूचना
-error_less_info=कम सूचना
-error_close=बंद करें
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=\u0020संदेश: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=स्टैक: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=फ़ाइल: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=पंक्ति: {{line}}
-rendering_error=पृष्ठ रेंडरिंग के दौरान त्रुटि आई.
-
-# Predefined zoom values
-page_scale_width=\u0020पृष्ठ चौड़ाई
-page_scale_fit=पृष्ठ फिट
-page_scale_auto=स्वचालित जूम
-page_scale_actual=वास्तविक आकार
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=त्रुटि
-loading_error=PDF लोड करते समय एक त्रुटि हुई.
-invalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल.
-missing_file_error=\u0020अनुपस्थित PDF फ़ाइल.
-unexpected_response_error=अप्रत्याशित सर्वर प्रतिक्रिया.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=\u0020[{{type}} Annotation]
-password_label=इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें.
-password_invalid=अवैध कूटशब्द, कृपया फिर कोशिश करें.
-password_ok=OK
-password_cancel=रद्द करें
-
-printing_not_supported=चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है.
-printing_not_ready=चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है.
-web_fonts_disabled=वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ.
-document_colors_not_allowed=PDF दस्तावेज़ उनके अपने रंग को उपयोग करने के लिए अनुमति प्राप्त नहीं है: "पृष्ठों को उनके अपने रंग को चुनने के लिए स्वीकृति दें" कि वह उस ब्राउज़र में निष्क्रिय है.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=पिछला पृष्ठ
+previous_label=पिछला
+next.title=अगला पृष्ठ
+next_label=आगे
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृष्ठ:
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} का
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=\u0020छोटा करें
+zoom_out_label=\u0020छोटा करें
+zoom_in.title=बड़ा करें
+zoom_in_label=बड़ा करें
+zoom.title=बड़ा-छोटा करें
+presentation_mode.title=प्रस्तुति अवस्था में जाएँ
+presentation_mode_label=\u0020प्रस्तुति अवस्था
+open_file.title=फ़ाइल खोलें
+open_file_label=\u0020खोलें
+print.title=छापें
+print_label=\u0020छापें
+download.title=डाउनलोड
+download_label=डाउनलोड
+bookmark.title=मौजूदा दृश्य (नए विंडो में नक़ल लें या खोलें)
+bookmark_label=\u0020मौजूदा दृश्य
+
+# Secondary toolbar and context menu
+tools.title=औज़ार
+tools_label=औज़ार
+first_page.title=प्रथम पृष्ठ पर जाएँ
+first_page.label=\u0020प्रथम पृष्ठ पर जाएँ
+first_page_label=प्रथम पृष्ठ पर जाएँ
+last_page.title=अंतिम पृष्ठ पर जाएँ
+last_page.label=\u0020अंतिम पृष्ठ पर जाएँ
+last_page_label=\u0020अंतिम पृष्ठ पर जाएँ
+page_rotate_cw.title=घड़ी की दिशा में घुमाएँ
+page_rotate_cw.label=घड़ी की दिशा में घुमाएँ
+page_rotate_cw_label=घड़ी की दिशा में घुमाएँ
+page_rotate_ccw.title=घड़ी की दिशा से उल्टा घुमाएँ
+page_rotate_ccw.label=घड़ी की दिशा से उल्टा घुमाएँ
+page_rotate_ccw_label=\u0020घड़ी की दिशा से उल्टा घुमाएँ
+
+cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम करें
+cursor_text_select_tool_label=पाठ चयन उपकरण
+cursor_hand_tool.title=हस्त उपकरण सक्षम करें
+cursor_hand_tool_label=हस्त उपकरण
+
+scroll_vertical.title=लंबवत स्क्रॉलिंग का उपयोग करें
+scroll_vertical_label=लंबवत स्क्रॉलिंग
+scroll_horizontal.title=क्षितिजिय स्क्रॉलिंग का उपयोग करें
+scroll_horizontal_label=क्षितिजिय स्क्रॉलिंग
+scroll_wrapped.title=व्राप्पेड स्क्रॉलिंग का उपयोग करें
+
+spread_none_label=कोई स्प्रेड उपलब्ध नहीं
+spread_odd.title=विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों
+spread_odd_label=विषम फैलाव
+
+# Document properties dialog box
+document_properties.title=दस्तावेज़ विशेषता...
+document_properties_label=दस्तावेज़ विशेषता...
+document_properties_file_name=फ़ाइल नाम:
+document_properties_file_size=फाइल आकारः
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=शीर्षक:
+document_properties_author=लेखकः
+document_properties_subject=विषय:
+document_properties_keywords=कुंजी-शब्द:
+document_properties_creation_date=निर्माण दिनांक:
+document_properties_modification_date=संशोधन दिनांक:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=निर्माता:
+document_properties_producer=PDF उत्पादक:
+document_properties_version=PDF संस्करण:
+document_properties_page_count=पृष्ठ गिनती:
+document_properties_page_size=पृष्ठ आकार:
+document_properties_page_size_unit_inches=इंच
+document_properties_page_size_unit_millimeters=मिमी
+document_properties_page_size_orientation_portrait=पोर्ट्रेट
+document_properties_page_size_orientation_landscape=लैंडस्केप
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=पत्र
+document_properties_page_size_name_legal=क़ानूनी
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=तीव्र वेब व्यू:
+document_properties_linearized_yes=हाँ
+document_properties_linearized_no=नहीं
+document_properties_close=बंद करें
+
+print_progress_message=छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रद्द करें
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=\u0020स्लाइडर टॉगल करें
+toggle_sidebar_notification.title=साइडबार टॉगल करें (दस्तावेज़ में रूपरेखा शामिल है/attachments)
+toggle_sidebar_label=स्लाइडर टॉगल करें
+document_outline.title=दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें)
+document_outline_label=दस्तावेज़ आउटलाइन
+attachments.title=संलग्नक दिखायें
+attachments_label=संलग्नक
+thumbs.title=लघुछवियाँ दिखाएँ
+thumbs_label=लघु छवि
+findbar.title=\u0020दस्तावेज़ में ढूँढ़ें
+findbar_label=ढूँढें
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=पृष्ठ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृष्ठ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=पृष्ठ {{page}} की लघु-छवि
+
+# Find panel button title and messages
+find_input.title=ढूँढें
+find_input.placeholder=दस्तावेज़ में खोजें...
+find_previous.title=वाक्यांश की पिछली उपस्थिति ढूँढ़ें
+find_previous_label=पिछला
+find_next.title=वाक्यांश की अगली उपस्थिति ढूँढ़ें
+find_next_label=अगला
+find_highlight=\u0020सभी आलोकित करें
+find_match_case_label=मिलान स्थिति
+find_entire_word_label=संपूर्ण शब्द
+find_reached_top=पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें
+find_reached_bottom=पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} में {{current}} मेल
+find_match_count[two]={{total}} में {{current}} मेल
+find_match_count[few]={{total}} में {{current}} मेल
+find_match_count[many]={{total}} में {{current}} मेल
+find_match_count[other]={{total}} में {{current}} मेल
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} से अधिक मेल
+find_match_count_limit[one]={{limit}} से अधिक मेल
+find_match_count_limit[two]={{limit}} से अधिक मेल
+find_match_count_limit[few]={{limit}} से अधिक मेल
+find_match_count_limit[many]={{limit}} से अधिक मेल
+find_match_count_limit[other]={{limit}} से अधिक मेल
+find_not_found=वाक्यांश नहीं मिला
+
+# Error panel labels
+error_more_info=अधिक सूचना
+error_less_info=कम सूचना
+error_close=बंद करें
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=\u0020संदेश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्टैक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फ़ाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=पंक्ति: {{line}}
+rendering_error=पृष्ठ रेंडरिंग के दौरान त्रुटि आई.
+
+# Predefined zoom values
+page_scale_width=\u0020पृष्ठ चौड़ाई
+page_scale_fit=पृष्ठ फिट
+page_scale_auto=स्वचालित जूम
+page_scale_actual=वास्तविक आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=त्रुटि
+loading_error=PDF लोड करते समय एक त्रुटि हुई.
+invalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल.
+missing_file_error=\u0020अनुपस्थित PDF फ़ाइल.
+unexpected_response_error=अप्रत्याशित सर्वर प्रतिक्रिया.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=\u0020[{{type}} Annotation]
+password_label=इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें.
+password_invalid=अवैध कूटशब्द, कृपया फिर कोशिश करें.
+password_ok=OK
+password_cancel=रद्द करें
+
+printing_not_supported=चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है.
+printing_not_ready=चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है.
+web_fonts_disabled=वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ.
+document_colors_not_allowed=PDF दस्तावेज़ उनके अपने रंग को उपयोग करने के लिए अनुमति प्राप्त नहीं है: "पृष्ठों को उनके अपने रंग को चुनने के लिए स्वीकृति दें" कि वह उस ब्राउज़र में निष्क्रिय है.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hr/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hr/viewer.properties
index 67cc8983ddea867c6a18fa5329655cf53538b3cc..822e9a5249df48e592919dd7e42eda83bd91954d 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hr/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hr/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Prethodna stranica
-previous_label=Prethodna
-next.title=Sljedeća stranica
-next_label=Sljedeća
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Stranica
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=od {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} od {{pagesCount}})
-
-zoom_out.title=Umanji
-zoom_out_label=Umanji
-zoom_in.title=Uvećaj
-zoom_in_label=Uvećaj
-zoom.title=Zumiranje
-presentation_mode.title=Prebaci u prezentacijski način rada
-presentation_mode_label=Prezentacijski način rada
-open_file.title=Otvori datoteku
-open_file_label=Otvori
-print.title=Ispiši
-print_label=Ispiši
-download.title=Preuzmi
-download_label=Preuzmi
-bookmark.title=Trenutačni prikaz (kopiraj ili otvori u novom prozoru)
-bookmark_label=Trenutačni prikaz
-
-# Secondary toolbar and context menu
-tools.title=Alati
-tools_label=Alati
-first_page.title=Idi na prvu stranicu
-first_page.label=Idi na prvu stranicu
-first_page_label=Idi na prvu stranicu
-last_page.title=Idi na posljednju stranicu
-last_page.label=Idi na posljednju stranicu
-last_page_label=Idi na posljednju stranicu
-page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
-page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu
-page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
-page_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu
-page_rotate_ccw.label=Rotiraj obrnutno od smjera kazaljke na satu
-page_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu
-
-cursor_text_select_tool.title=Omogući alat za označavanje teksta
-cursor_text_select_tool_label=Alat za označavanje teksta
-cursor_hand_tool.title=Omogući ručni alat
-cursor_hand_tool_label=Ručni alat
-
-scroll_vertical.title=Koristi okomito pomicanje
-scroll_vertical_label=Okomito pomicanje
-scroll_horizontal.title=Koristi vodoravno pomicanje
-scroll_horizontal_label=Vodoravno pomicanje
-scroll_wrapped.title=Koristi kontinuirani raspored stranica
-scroll_wrapped_label=Kontinuirani raspored stranica
-
-spread_none.title=Ne izrađuj duplerice
-spread_none_label=Pojedinačne stranice
-spread_odd.title=Izradi duplerice koje počinju s neparnim stranicama
-spread_odd_label=Neparne duplerice
-spread_even.title=Izradi duplerice koje počinju s parnim stranicama
-spread_even_label=Parne duplerice
-
-# Document properties dialog box
-document_properties.title=Svojstva dokumenta...
-document_properties_label=Svojstva dokumenta...
-document_properties_file_name=Naziv datoteke:
-document_properties_file_size=Veličina datoteke:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bajtova)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajtova)
-document_properties_title=Naslov:
-document_properties_author=Autor:
-document_properties_subject=Predmet:
-document_properties_keywords=Ključne riječi:
-document_properties_creation_date=Datum stvaranja:
-document_properties_modification_date=Datum promjene:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Stvaratelj:
-document_properties_producer=PDF stvaratelj:
-document_properties_version=PDF verzija:
-document_properties_page_count=Broj stranica:
-document_properties_page_size=Dimenzije stranice:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=uspravno
-document_properties_page_size_orientation_landscape=položeno
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Brzi web pregled:
-document_properties_linearized_yes=Da
-document_properties_linearized_no=Ne
-document_properties_close=Zatvori
-
-print_progress_message=Pripremanje dokumenta za ispis…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Odustani
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Prikaži/sakrij bočnu traku
-toggle_sidebar_notification.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži konturu/privitke)
-toggle_sidebar_label=Prikaži/sakrij bočnu traku
-document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki)
-document_outline_label=Struktura dokumenta
-attachments.title=Prikaži privitke
-attachments_label=Privitci
-thumbs.title=Prikaži minijature
-thumbs_label=Minijature
-findbar.title=Traži u dokumentu
-findbar_label=Traži
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Stranica br. {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Stranica {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Minijatura stranice {{page}}
-
-# Find panel button title and messages
-find_input.title=Traži
-find_input.placeholder=Traži u dokumentu…
-find_previous.title=Pronađi prethodno pojavljivanje ovog izraza
-find_previous_label=Prethodno
-find_next.title=Pronađi sljedeće pojavljivanje ovog izraza
-find_next_label=Sljedeće
-find_highlight=Istankni sve
-find_match_case_label=Razlikovanje velikih i malih slova
-find_entire_word_label=Cijele riječi
-find_reached_top=Dosegnut početak dokumenta, nastavak s kraja
-find_reached_bottom=Dosegnut kraj dokumenta, nastavak s početka
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} od {{total}} se podudara
-find_match_count[two]={{current}} od {{total}} se podudara
-find_match_count[few]={{current}} od {{total}} se podudara
-find_match_count[many]={{current}} od {{total}} se podudara
-find_match_count[other]={{current}} od {{total}} se podudara
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Više od {{limit}} podudaranja
-find_match_count_limit[one]=Više od {{limit}} podudaranja
-find_match_count_limit[two]=Više od {{limit}} podudaranja
-find_match_count_limit[few]=Više od {{limit}} podudaranja
-find_match_count_limit[many]=Više od {{limit}} podudaranja
-find_match_count_limit[other]=Više od {{limit}} podudaranja
-find_not_found=Izraz nije pronađen
-
-# Error panel labels
-error_more_info=Više informacija
-error_less_info=Manje informacija
-error_close=Zatvori
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Poruka: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stog: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Datoteka: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Redak: {{line}}
-rendering_error=Došlo je do greške prilikom iscrtavanja stranice.
-
-# Predefined zoom values
-page_scale_width=Prilagodi širini prozora
-page_scale_fit=Prilagodi veličini prozora
-page_scale_auto=Automatsko zumiranje
-page_scale_actual=Stvarna veličina
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Greška
-loading_error=Došlo je do greške pri učitavanju PDF-a.
-invalid_file_error=Neispravna ili oštećena PDF datoteka.
-missing_file_error=Nedostaje PDF datoteka.
-unexpected_response_error=Neočekivani odgovor poslužitelja.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Bilješka]
-password_label=Za otvoranje ove PDF datoteku upiši lozinku.
-password_invalid=Neispravna lozinka. Pokušaj ponovo.
-password_ok=U redu
-password_cancel=Odustani
-
-printing_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje.
-printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za ispis.
-web_fonts_disabled=Web fontovi su onemogućeni: nije moguće koristiti umetnute PDF fontove.
-document_colors_not_allowed=PDF dokumentima nije dozvoljeno koristiti vlastite boje: opcija „Dozvoli stranicama koristiti vlastite boje” je deaktivirana u pregledniku.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prethodna stranica
+previous_label=Prethodna
+next.title=Sljedeća stranica
+next_label=Sljedeća
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stranica
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Umanji
+zoom_out_label=Umanji
+zoom_in.title=Uvećaj
+zoom_in_label=Uvećaj
+zoom.title=Zumiranje
+presentation_mode.title=Prebaci u prezentacijski način rada
+presentation_mode_label=Prezentacijski način rada
+open_file.title=Otvori datoteku
+open_file_label=Otvori
+print.title=Ispiši
+print_label=Ispiši
+download.title=Preuzmi
+download_label=Preuzmi
+bookmark.title=Trenutačni prikaz (kopiraj ili otvori u novom prozoru)
+bookmark_label=Trenutačni prikaz
+
+# Secondary toolbar and context menu
+tools.title=Alati
+tools_label=Alati
+first_page.title=Idi na prvu stranicu
+first_page.label=Idi na prvu stranicu
+first_page_label=Idi na prvu stranicu
+last_page.title=Idi na posljednju stranicu
+last_page.label=Idi na posljednju stranicu
+last_page_label=Idi na posljednju stranicu
+page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
+page_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu
+page_rotate_ccw.label=Rotiraj obrnutno od smjera kazaljke na satu
+page_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu
+
+cursor_text_select_tool.title=Omogući alat za označavanje teksta
+cursor_text_select_tool_label=Alat za označavanje teksta
+cursor_hand_tool.title=Omogući ručni alat
+cursor_hand_tool_label=Ručni alat
+
+scroll_vertical.title=Koristi okomito pomicanje
+scroll_vertical_label=Okomito pomicanje
+scroll_horizontal.title=Koristi vodoravno pomicanje
+scroll_horizontal_label=Vodoravno pomicanje
+scroll_wrapped.title=Koristi kontinuirani raspored stranica
+scroll_wrapped_label=Kontinuirani raspored stranica
+
+spread_none.title=Ne izrađuj duplerice
+spread_none_label=Pojedinačne stranice
+spread_odd.title=Izradi duplerice koje počinju s neparnim stranicama
+spread_odd_label=Neparne duplerice
+spread_even.title=Izradi duplerice koje počinju s parnim stranicama
+spread_even_label=Parne duplerice
+
+# Document properties dialog box
+document_properties.title=Svojstva dokumenta...
+document_properties_label=Svojstva dokumenta...
+document_properties_file_name=Naziv datoteke:
+document_properties_file_size=Veličina datoteke:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtova)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtova)
+document_properties_title=Naslov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=Ključne riječi:
+document_properties_creation_date=Datum stvaranja:
+document_properties_modification_date=Datum promjene:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Stvaratelj:
+document_properties_producer=PDF stvaratelj:
+document_properties_version=PDF verzija:
+document_properties_page_count=Broj stranica:
+document_properties_page_size=Dimenzije stranice:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=uspravno
+document_properties_page_size_orientation_landscape=položeno
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Brzi web pregled:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Ne
+document_properties_close=Zatvori
+
+print_progress_message=Pripremanje dokumenta za ispis…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Odustani
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Prikaži/sakrij bočnu traku
+toggle_sidebar_notification.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži konturu/privitke)
+toggle_sidebar_label=Prikaži/sakrij bočnu traku
+document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki)
+document_outline_label=Struktura dokumenta
+attachments.title=Prikaži privitke
+attachments_label=Privitci
+thumbs.title=Prikaži minijature
+thumbs_label=Minijature
+findbar.title=Traži u dokumentu
+findbar_label=Traži
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Stranica br. {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Stranica {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Minijatura stranice {{page}}
+
+# Find panel button title and messages
+find_input.title=Traži
+find_input.placeholder=Traži u dokumentu…
+find_previous.title=Pronađi prethodno pojavljivanje ovog izraza
+find_previous_label=Prethodno
+find_next.title=Pronađi sljedeće pojavljivanje ovog izraza
+find_next_label=Sljedeće
+find_highlight=Istankni sve
+find_match_case_label=Razlikovanje velikih i malih slova
+find_entire_word_label=Cijele riječi
+find_reached_top=Dosegnut početak dokumenta, nastavak s kraja
+find_reached_bottom=Dosegnut kraj dokumenta, nastavak s početka
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} od {{total}} se podudara
+find_match_count[two]={{current}} od {{total}} se podudara
+find_match_count[few]={{current}} od {{total}} se podudara
+find_match_count[many]={{current}} od {{total}} se podudara
+find_match_count[other]={{current}} od {{total}} se podudara
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Više od {{limit}} podudaranja
+find_match_count_limit[one]=Više od {{limit}} podudaranja
+find_match_count_limit[two]=Više od {{limit}} podudaranja
+find_match_count_limit[few]=Više od {{limit}} podudaranja
+find_match_count_limit[many]=Više od {{limit}} podudaranja
+find_match_count_limit[other]=Više od {{limit}} podudaranja
+find_not_found=Izraz nije pronađen
+
+# Error panel labels
+error_more_info=Više informacija
+error_less_info=Manje informacija
+error_close=Zatvori
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Poruka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stog: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteka: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Redak: {{line}}
+rendering_error=Došlo je do greške prilikom iscrtavanja stranice.
+
+# Predefined zoom values
+page_scale_width=Prilagodi širini prozora
+page_scale_fit=Prilagodi veličini prozora
+page_scale_auto=Automatsko zumiranje
+page_scale_actual=Stvarna veličina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Greška
+loading_error=Došlo je do greške pri učitavanju PDF-a.
+invalid_file_error=Neispravna ili oštećena PDF datoteka.
+missing_file_error=Nedostaje PDF datoteka.
+unexpected_response_error=Neočekivani odgovor poslužitelja.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Bilješka]
+password_label=Za otvoranje ove PDF datoteku upiši lozinku.
+password_invalid=Neispravna lozinka. Pokušaj ponovo.
+password_ok=U redu
+password_cancel=Odustani
+
+printing_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje.
+printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za ispis.
+web_fonts_disabled=Web fontovi su onemogućeni: nije moguće koristiti umetnute PDF fontove.
+document_colors_not_allowed=PDF dokumentima nije dozvoljeno koristiti vlastite boje: opcija „Dozvoli stranicama koristiti vlastite boje” je deaktivirana u pregledniku.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hsb/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hsb/viewer.properties
index a8f31f1a55faf94979f64d30cc755faa8a6f7e82..2ef5a28ed3b7f2850a7a580f6a23ef6a536be8ee 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hsb/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hsb/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Předchadna strona
-previous_label=Wróćo
-next.title=Přichodna strona
-next_label=Dale
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Strona
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=z {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} z {{pagesCount}})
-
-zoom_out.title=Pomjeńšić
-zoom_out_label=Pomjeńšić
-zoom_in.title=Powjetšić
-zoom_in_label=Powjetšić
-zoom.title=Skalowanje
-presentation_mode.title=Do prezentaciskeho modusa přeńć
-presentation_mode_label=Prezentaciski modus
-open_file.title=Dataju wočinić
-open_file_label=Wočinić
-print.title=Ćišćeć
-print_label=Ćišćeć
-download.title=Sćahnyć
-download_label=Sćahnyć
-bookmark.title=Aktualny napohlad (kopěrować abo w nowym woknje wočinić)
-bookmark_label=Aktualny napohlad
-
-# Secondary toolbar and context menu
-tools.title=Nastroje
-tools_label=Nastroje
-first_page.title=K prěnjej stronje
-first_page.label=K prěnjej stronje
-first_page_label=K prěnjej stronje
-last_page.title=K poslednjej stronje
-last_page.label=K poslednjej stronje
-last_page_label=K poslednjej stronje
-page_rotate_cw.title=K směrej časnika wjerćeć
-page_rotate_cw.label=K směrej časnika wjerćeć
-page_rotate_cw_label=K směrej časnika wjerćeć
-page_rotate_ccw.title=Přećiwo směrej časnika wjerćeć
-page_rotate_ccw.label=Přećiwo směrej časnika wjerćeć
-page_rotate_ccw_label=Přećiwo směrej časnika wjerćeć
-
-cursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić
-cursor_text_select_tool_label=Nastroj za wuběranje teksta
-cursor_hand_tool.title=Ručny nastroj zmóžnić
-cursor_hand_tool_label=Ručny nastroj
-
-scroll_vertical.title=Wertikalne suwanje wužiwać
-scroll_vertical_label=Wertikalnje suwanje
-scroll_horizontal.title=Horicontalne suwanje wužiwać
-scroll_horizontal_label=Horicontalne suwanje
-scroll_wrapped.title=Postupne suwanje wužiwać
-scroll_wrapped_label=Postupne suwanje
-
-spread_none.title=Strony njezwjazać
-spread_none_label=Žana dwójna strona
-spread_odd.title=Strony započinajo z njerunymi stronami zwjazać
-spread_odd_label=Njerune strony
-spread_even.title=Strony započinajo z runymi stronami zwjazać
-spread_even_label=Rune strony
-
-# Document properties dialog box
-document_properties.title=Dokumentowe kajkosće…
-document_properties_label=Dokumentowe kajkosće…
-document_properties_file_name=Mjeno dataje:
-document_properties_file_size=Wulkosć dataje:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
-document_properties_title=Titul:
-document_properties_author=Awtor:
-document_properties_subject=Předmjet:
-document_properties_keywords=Klučowe słowa:
-document_properties_creation_date=Datum wutworjenja:
-document_properties_modification_date=Datum změny:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Awtor:
-document_properties_producer=PDF-zhotowjer:
-document_properties_version=PDF-wersija:
-document_properties_page_count=Ličba stronow:
-document_properties_page_size=Wulkosć strony:
-document_properties_page_size_unit_inches=cól
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=wysoki format
-document_properties_page_size_orientation_landscape=prěčny format
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Haj
-document_properties_linearized_no=Ně
-document_properties_close=Začinić
-
-print_progress_message=Dokument so za ćišćenje přihotuje…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Přetorhnyć
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Bóčnicu pokazać/schować
-toggle_sidebar_notification.title=Bóčnicu přepinać (dokument wobsahuje wobrys/přiwěški)
-toggle_sidebar_label=Bóčnicu pokazać/schować
-document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali)
-document_outline_label=Dokumentowa struktura
-attachments.title=Přiwěški pokazać
-attachments_label=Přiwěški
-thumbs.title=Miniatury pokazać
-thumbs_label=Miniatury
-findbar.title=W dokumenće pytać
-findbar_label=Pytać
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Strona {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Strona {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura strony {{page}}
-
-# Find panel button title and messages
-find_input.title=Pytać
-find_input.placeholder=W dokumenće pytać…
-find_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać
-find_previous_label=Wróćo
-find_next.title=Přichodne wustupowanje pytanskeho wuraza pytać
-find_next_label=Dale
-find_highlight=Wšě wuzběhnyć
-find_match_case_label=Wulkopisanje wobkedźbować
-find_entire_word_label=Cyłe słowa
-find_reached_top=Spočatk dokumenta docpěty, pokročuje so z kóncom
-find_reached_bottom=Kónc dokument docpěty, pokročuje so ze spočatkom
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} z {{total}} wotpowědnika
-find_match_count[two]={{current}} z {{total}} wotpowědnikow
-find_match_count[few]={{current}} z {{total}} wotpowědnikow
-find_match_count[many]={{current}} z {{total}} wotpowědnikow
-find_match_count[other]={{current}} z {{total}} wotpowědnikow
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Wjace hač {{limit}} wotpowědnikow
-find_match_count_limit[one]=Wjace hač {{limit}} wotpowědnik
-find_match_count_limit[two]=Wjace hač {{limit}} wotpowědnikaj
-find_match_count_limit[few]=Wjace hač {{limit}} wotpowědniki
-find_match_count_limit[many]=Wjace hač {{limit}} wotpowědnikow
-find_match_count_limit[other]=Wjace hač {{limit}} wotpowědnikow
-find_not_found=Pytanski wuraz njeje so namakał
-
-# Error panel labels
-error_more_info=Wjace informacijow
-error_less_info=Mjenje informacijow
-error_close=Začinić
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Zdźělenka: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Lisćina zawołanjow: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Dataja: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linka: {{line}}
-rendering_error=Při zwobraznjenju strony je zmylk wustupił.
-
-# Predefined zoom values
-page_scale_width=Šěrokosć strony
-page_scale_fit=Wulkosć strony
-page_scale_auto=Awtomatiske skalowanje
-page_scale_actual=Aktualna wulkosć
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Zmylk
-loading_error=Při začitowanju PDF je zmylk wustupił.
-invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja.
-missing_file_error=Falowaca PDF-dataja.
-unexpected_response_error=Njewočakowana serwerowa wotmołwa.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Typ přispomnjenki: {{type}}]
-password_label=Zapodajće hesło, zo byšće PDF-dataju wočinił.
-password_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz.
-password_ok=W porjadku
-password_cancel=Přetorhnyć
-
-printing_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje.
-printing_not_ready=Warnowanje: PDF njeje so za ćišćenje dospołnje začitał.
-web_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać.
-document_colors_not_allowed=PDF-dokumenty njesmědźa swoje barby wužiwać: 'Stronam dowolić, swoje barby wužiwać' je we wobhladowaku znjemóžnjene.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Předchadna strona
+previous_label=Wróćo
+next.title=Přichodna strona
+next_label=Dale
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strona
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pomjeńšić
+zoom_out_label=Pomjeńšić
+zoom_in.title=Powjetšić
+zoom_in_label=Powjetšić
+zoom.title=Skalowanje
+presentation_mode.title=Do prezentaciskeho modusa přeńć
+presentation_mode_label=Prezentaciski modus
+open_file.title=Dataju wočinić
+open_file_label=Wočinić
+print.title=Ćišćeć
+print_label=Ćišćeć
+download.title=Sćahnyć
+download_label=Sćahnyć
+bookmark.title=Aktualny napohlad (kopěrować abo w nowym woknje wočinić)
+bookmark_label=Aktualny napohlad
+
+# Secondary toolbar and context menu
+tools.title=Nastroje
+tools_label=Nastroje
+first_page.title=K prěnjej stronje
+first_page.label=K prěnjej stronje
+first_page_label=K prěnjej stronje
+last_page.title=K poslednjej stronje
+last_page.label=K poslednjej stronje
+last_page_label=K poslednjej stronje
+page_rotate_cw.title=K směrej časnika wjerćeć
+page_rotate_cw.label=K směrej časnika wjerćeć
+page_rotate_cw_label=K směrej časnika wjerćeć
+page_rotate_ccw.title=Přećiwo směrej časnika wjerćeć
+page_rotate_ccw.label=Přećiwo směrej časnika wjerćeć
+page_rotate_ccw_label=Přećiwo směrej časnika wjerćeć
+
+cursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić
+cursor_text_select_tool_label=Nastroj za wuběranje teksta
+cursor_hand_tool.title=Ručny nastroj zmóžnić
+cursor_hand_tool_label=Ručny nastroj
+
+scroll_vertical.title=Wertikalne suwanje wužiwać
+scroll_vertical_label=Wertikalnje suwanje
+scroll_horizontal.title=Horicontalne suwanje wužiwać
+scroll_horizontal_label=Horicontalne suwanje
+scroll_wrapped.title=Postupne suwanje wužiwać
+scroll_wrapped_label=Postupne suwanje
+
+spread_none.title=Strony njezwjazać
+spread_none_label=Žana dwójna strona
+spread_odd.title=Strony započinajo z njerunymi stronami zwjazać
+spread_odd_label=Njerune strony
+spread_even.title=Strony započinajo z runymi stronami zwjazać
+spread_even_label=Rune strony
+
+# Document properties dialog box
+document_properties.title=Dokumentowe kajkosće…
+document_properties_label=Dokumentowe kajkosće…
+document_properties_file_name=Mjeno dataje:
+document_properties_file_size=Wulkosć dataje:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
+document_properties_title=Titul:
+document_properties_author=Awtor:
+document_properties_subject=Předmjet:
+document_properties_keywords=Klučowe słowa:
+document_properties_creation_date=Datum wutworjenja:
+document_properties_modification_date=Datum změny:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Awtor:
+document_properties_producer=PDF-zhotowjer:
+document_properties_version=PDF-wersija:
+document_properties_page_count=Ličba stronow:
+document_properties_page_size=Wulkosć strony:
+document_properties_page_size_unit_inches=cól
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=wysoki format
+document_properties_page_size_orientation_landscape=prěčny format
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Haj
+document_properties_linearized_no=Ně
+document_properties_close=Začinić
+
+print_progress_message=Dokument so za ćišćenje přihotuje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Přetorhnyć
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Bóčnicu pokazać/schować
+toggle_sidebar_notification.title=Bóčnicu přepinać (dokument wobsahuje wobrys/přiwěški)
+toggle_sidebar_label=Bóčnicu pokazać/schować
+document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali)
+document_outline_label=Dokumentowa struktura
+attachments.title=Přiwěški pokazać
+attachments_label=Přiwěški
+thumbs.title=Miniatury pokazać
+thumbs_label=Miniatury
+findbar.title=W dokumenće pytać
+findbar_label=Pytać
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Strona {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strona {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura strony {{page}}
+
+# Find panel button title and messages
+find_input.title=Pytać
+find_input.placeholder=W dokumenće pytać…
+find_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać
+find_previous_label=Wróćo
+find_next.title=Přichodne wustupowanje pytanskeho wuraza pytać
+find_next_label=Dale
+find_highlight=Wšě wuzběhnyć
+find_match_case_label=Wulkopisanje wobkedźbować
+find_entire_word_label=Cyłe słowa
+find_reached_top=Spočatk dokumenta docpěty, pokročuje so z kóncom
+find_reached_bottom=Kónc dokument docpěty, pokročuje so ze spočatkom
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} z {{total}} wotpowědnika
+find_match_count[two]={{current}} z {{total}} wotpowědnikow
+find_match_count[few]={{current}} z {{total}} wotpowědnikow
+find_match_count[many]={{current}} z {{total}} wotpowědnikow
+find_match_count[other]={{current}} z {{total}} wotpowědnikow
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Wjace hač {{limit}} wotpowědnikow
+find_match_count_limit[one]=Wjace hač {{limit}} wotpowědnik
+find_match_count_limit[two]=Wjace hač {{limit}} wotpowědnikaj
+find_match_count_limit[few]=Wjace hač {{limit}} wotpowědniki
+find_match_count_limit[many]=Wjace hač {{limit}} wotpowědnikow
+find_match_count_limit[other]=Wjace hač {{limit}} wotpowědnikow
+find_not_found=Pytanski wuraz njeje so namakał
+
+# Error panel labels
+error_more_info=Wjace informacijow
+error_less_info=Mjenje informacijow
+error_close=Začinić
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Zdźělenka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Lisćina zawołanjow: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dataja: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linka: {{line}}
+rendering_error=Při zwobraznjenju strony je zmylk wustupił.
+
+# Predefined zoom values
+page_scale_width=Šěrokosć strony
+page_scale_fit=Wulkosć strony
+page_scale_auto=Awtomatiske skalowanje
+page_scale_actual=Aktualna wulkosć
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Zmylk
+loading_error=Při začitowanju PDF je zmylk wustupił.
+invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja.
+missing_file_error=Falowaca PDF-dataja.
+unexpected_response_error=Njewočakowana serwerowa wotmołwa.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Typ přispomnjenki: {{type}}]
+password_label=Zapodajće hesło, zo byšće PDF-dataju wočinił.
+password_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz.
+password_ok=W porjadku
+password_cancel=Přetorhnyć
+
+printing_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje.
+printing_not_ready=Warnowanje: PDF njeje so za ćišćenje dospołnje začitał.
+web_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać.
+document_colors_not_allowed=PDF-dokumenty njesmědźa swoje barby wužiwać: 'Stronam dowolić, swoje barby wužiwać' je we wobhladowaku znjemóžnjene.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hu/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hu/viewer.properties
index cba69f0fcaf93d51992482371ca4b5db5457ce85..c820f7fba1927a2d25164827e33ac0d79b5bf5d3 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hu/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hu/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Előző oldal
-previous_label=Előző
-next.title=Következő oldal
-next_label=Tovább
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Oldal
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=összesen: {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} / {{pagesCount}})
-
-zoom_out.title=Kicsinyítés
-zoom_out_label=Kicsinyítés
-zoom_in.title=Nagyítás
-zoom_in_label=Nagyítás
-zoom.title=Nagyítás
-presentation_mode.title=Váltás bemutató módba
-presentation_mode_label=Bemutató mód
-open_file.title=Fájl megnyitása
-open_file_label=Megnyitás
-print.title=Nyomtatás
-print_label=Nyomtatás
-download.title=Letöltés
-download_label=Letöltés
-bookmark.title=Jelenlegi nézet (másolás vagy megnyitás új ablakban)
-bookmark_label=Aktuális nézet
-
-# Secondary toolbar and context menu
-tools.title=Eszközök
-tools_label=Eszközök
-first_page.title=Ugrás az első oldalra
-first_page.label=Ugrás az első oldalra
-first_page_label=Ugrás az első oldalra
-last_page.title=Ugrás az utolsó oldalra
-last_page.label=Ugrás az utolsó oldalra
-last_page_label=Ugrás az utolsó oldalra
-page_rotate_cw.title=Forgatás az óramutató járásával egyezően
-page_rotate_cw.label=Forgatás az óramutató járásával egyezően
-page_rotate_cw_label=Forgatás az óramutató járásával egyezően
-page_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen
-page_rotate_ccw.label=Forgatás az óramutató járásával ellentétesen
-page_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen
-
-cursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása
-cursor_text_select_tool_label=Szövegkijelölő eszköz
-cursor_hand_tool.title=Kéz eszköz bekapcsolása
-cursor_hand_tool_label=Kéz eszköz
-
-scroll_vertical.title=Függőleges görgetés használata
-scroll_vertical_label=Függőleges görgetés
-scroll_horizontal.title=Vízszintes görgetés használata
-scroll_horizontal_label=Vízszintes görgetés
-scroll_wrapped.title=Rácsos elrendezés használata
-scroll_wrapped_label=Rácsos elrendezés
-
-spread_none.title=Ne tapassza össze az oldalakat
-spread_none_label=Nincs összetapasztás
-spread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve
-spread_odd_label=Összetapasztás: páratlan
-spread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve
-spread_even_label=Összetapasztás: páros
-
-# Document properties dialog box
-document_properties.title=Dokumentum tulajdonságai…
-document_properties_label=Dokumentum tulajdonságai…
-document_properties_file_name=Fájlnév:
-document_properties_file_size=Fájlméret:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bájt)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bájt)
-document_properties_title=Cím:
-document_properties_author=Szerző:
-document_properties_subject=Tárgy:
-document_properties_keywords=Kulcsszavak:
-document_properties_creation_date=Létrehozás dátuma:
-document_properties_modification_date=Módosítás dátuma:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Létrehozta:
-document_properties_producer=PDF előállító:
-document_properties_version=PDF verzió:
-document_properties_page_count=Oldalszám:
-document_properties_page_size=Lapméret:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=álló
-document_properties_page_size_orientation_landscape=fekvő
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Jogi információk
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Gyors webes nézet:
-document_properties_linearized_yes=Igen
-document_properties_linearized_no=Nem
-document_properties_close=Bezárás
-
-print_progress_message=Dokumentum előkészítése nyomtatáshoz…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Mégse
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Oldalsáv be/ki
-toggle_sidebar_notification.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket tartalmaz)
-toggle_sidebar_label=Oldalsáv be/ki
-document_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához)
-document_outline_label=Dokumentumvázlat
-attachments.title=Mellékletek megjelenítése
-attachments_label=Van melléklet
-thumbs.title=Bélyegképek megjelenítése
-thumbs_label=Bélyegképek
-findbar.title=Keresés a dokumentumban
-findbar_label=Keresés
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas={{page}}. oldal
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}}. oldal
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}}. oldal bélyegképe
-
-# Find panel button title and messages
-find_input.title=Keresés
-find_input.placeholder=Keresés a dokumentumban…
-find_previous.title=A kifejezés előző előfordulásának keresése
-find_previous_label=Előző
-find_next.title=A kifejezés következő előfordulásának keresése
-find_next_label=Tovább
-find_highlight=Összes kiemelése
-find_match_case_label=Kis- és nagybetűk megkülönböztetése
-find_entire_word_label=Teljes szavak
-find_reached_top=A dokumentum eleje elérve, folytatás a végétől
-find_reached_bottom=A dokumentum vége elérve, folytatás az elejétől
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} / {{total}} találat
-find_match_count[two]={{current}} / {{total}} találat
-find_match_count[few]={{current}} / {{total}} találat
-find_match_count[many]={{current}} / {{total}} találat
-find_match_count[other]={{current}} / {{total}} találat
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Több mint {{limit}} találat
-find_match_count_limit[one]=Több mint {{limit}} találat
-find_match_count_limit[two]=Több mint {{limit}} találat
-find_match_count_limit[few]=Több mint {{limit}} találat
-find_match_count_limit[many]=Több mint {{limit}} találat
-find_match_count_limit[other]=Több mint {{limit}} találat
-find_not_found=A kifejezés nem található
-
-# Error panel labels
-error_more_info=További tudnivalók
-error_less_info=Kevesebb információ
-error_close=Bezárás
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Üzenet: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Verem: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fájl: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Sor: {{line}}
-rendering_error=Hiba történt az oldal feldolgozása közben.
-
-# Predefined zoom values
-page_scale_width=Oldalszélesség
-page_scale_fit=Teljes oldal
-page_scale_auto=Automatikus nagyítás
-page_scale_actual=Valódi méret
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Hiba
-loading_error=Hiba történt a PDF betöltésekor.
-invalid_file_error=Érvénytelen vagy sérült PDF fájl.
-missing_file_error=Hiányzó PDF fájl.
-unexpected_response_error=Váratlan kiszolgálóválasz.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} megjegyzés]
-password_label=Adja meg a jelszót a PDF fájl megnyitásához.
-password_invalid=Helytelen jelszó. Próbálja újra.
-password_ok=OK
-password_cancel=Mégse
-
-printing_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást.
-printing_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz.
-web_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek.
-document_colors_not_allowed=A PDF dokumentumok nem használhatják saját színeiket: „Az oldalak a saját maguk által kiválasztott színeket használhatják” beállítás ki van kapcsolva a böngészőben.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Előző oldal
+previous_label=Előző
+next.title=Következő oldal
+next_label=Tovább
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Oldal
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=összesen: {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Kicsinyítés
+zoom_out_label=Kicsinyítés
+zoom_in.title=Nagyítás
+zoom_in_label=Nagyítás
+zoom.title=Nagyítás
+presentation_mode.title=Váltás bemutató módba
+presentation_mode_label=Bemutató mód
+open_file.title=Fájl megnyitása
+open_file_label=Megnyitás
+print.title=Nyomtatás
+print_label=Nyomtatás
+download.title=Letöltés
+download_label=Letöltés
+bookmark.title=Jelenlegi nézet (másolás vagy megnyitás új ablakban)
+bookmark_label=Aktuális nézet
+
+# Secondary toolbar and context menu
+tools.title=Eszközök
+tools_label=Eszközök
+first_page.title=Ugrás az első oldalra
+first_page.label=Ugrás az első oldalra
+first_page_label=Ugrás az első oldalra
+last_page.title=Ugrás az utolsó oldalra
+last_page.label=Ugrás az utolsó oldalra
+last_page_label=Ugrás az utolsó oldalra
+page_rotate_cw.title=Forgatás az óramutató járásával egyezően
+page_rotate_cw.label=Forgatás az óramutató járásával egyezően
+page_rotate_cw_label=Forgatás az óramutató járásával egyezően
+page_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen
+page_rotate_ccw.label=Forgatás az óramutató járásával ellentétesen
+page_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen
+
+cursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása
+cursor_text_select_tool_label=Szövegkijelölő eszköz
+cursor_hand_tool.title=Kéz eszköz bekapcsolása
+cursor_hand_tool_label=Kéz eszköz
+
+scroll_vertical.title=Függőleges görgetés használata
+scroll_vertical_label=Függőleges görgetés
+scroll_horizontal.title=Vízszintes görgetés használata
+scroll_horizontal_label=Vízszintes görgetés
+scroll_wrapped.title=Rácsos elrendezés használata
+scroll_wrapped_label=Rácsos elrendezés
+
+spread_none.title=Ne tapassza össze az oldalakat
+spread_none_label=Nincs összetapasztás
+spread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve
+spread_odd_label=Összetapasztás: páratlan
+spread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve
+spread_even_label=Összetapasztás: páros
+
+# Document properties dialog box
+document_properties.title=Dokumentum tulajdonságai…
+document_properties_label=Dokumentum tulajdonságai…
+document_properties_file_name=Fájlnév:
+document_properties_file_size=Fájlméret:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bájt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bájt)
+document_properties_title=Cím:
+document_properties_author=Szerző:
+document_properties_subject=Tárgy:
+document_properties_keywords=Kulcsszavak:
+document_properties_creation_date=Létrehozás dátuma:
+document_properties_modification_date=Módosítás dátuma:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Létrehozta:
+document_properties_producer=PDF előállító:
+document_properties_version=PDF verzió:
+document_properties_page_count=Oldalszám:
+document_properties_page_size=Lapméret:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=álló
+document_properties_page_size_orientation_landscape=fekvő
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Jogi információk
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gyors webes nézet:
+document_properties_linearized_yes=Igen
+document_properties_linearized_no=Nem
+document_properties_close=Bezárás
+
+print_progress_message=Dokumentum előkészítése nyomtatáshoz…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Mégse
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Oldalsáv be/ki
+toggle_sidebar_notification.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket tartalmaz)
+toggle_sidebar_label=Oldalsáv be/ki
+document_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához)
+document_outline_label=Dokumentumvázlat
+attachments.title=Mellékletek megjelenítése
+attachments_label=Van melléklet
+thumbs.title=Bélyegképek megjelenítése
+thumbs_label=Bélyegképek
+findbar.title=Keresés a dokumentumban
+findbar_label=Keresés
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}}. oldal
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. oldal
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. oldal bélyegképe
+
+# Find panel button title and messages
+find_input.title=Keresés
+find_input.placeholder=Keresés a dokumentumban…
+find_previous.title=A kifejezés előző előfordulásának keresése
+find_previous_label=Előző
+find_next.title=A kifejezés következő előfordulásának keresése
+find_next_label=Tovább
+find_highlight=Összes kiemelése
+find_match_case_label=Kis- és nagybetűk megkülönböztetése
+find_entire_word_label=Teljes szavak
+find_reached_top=A dokumentum eleje elérve, folytatás a végétől
+find_reached_bottom=A dokumentum vége elérve, folytatás az elejétől
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} találat
+find_match_count[two]={{current}} / {{total}} találat
+find_match_count[few]={{current}} / {{total}} találat
+find_match_count[many]={{current}} / {{total}} találat
+find_match_count[other]={{current}} / {{total}} találat
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Több mint {{limit}} találat
+find_match_count_limit[one]=Több mint {{limit}} találat
+find_match_count_limit[two]=Több mint {{limit}} találat
+find_match_count_limit[few]=Több mint {{limit}} találat
+find_match_count_limit[many]=Több mint {{limit}} találat
+find_match_count_limit[other]=Több mint {{limit}} találat
+find_not_found=A kifejezés nem található
+
+# Error panel labels
+error_more_info=További tudnivalók
+error_less_info=Kevesebb információ
+error_close=Bezárás
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Üzenet: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Verem: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fájl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Sor: {{line}}
+rendering_error=Hiba történt az oldal feldolgozása közben.
+
+# Predefined zoom values
+page_scale_width=Oldalszélesség
+page_scale_fit=Teljes oldal
+page_scale_auto=Automatikus nagyítás
+page_scale_actual=Valódi méret
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Hiba
+loading_error=Hiba történt a PDF betöltésekor.
+invalid_file_error=Érvénytelen vagy sérült PDF fájl.
+missing_file_error=Hiányzó PDF fájl.
+unexpected_response_error=Váratlan kiszolgálóválasz.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} megjegyzés]
+password_label=Adja meg a jelszót a PDF fájl megnyitásához.
+password_invalid=Helytelen jelszó. Próbálja újra.
+password_ok=OK
+password_cancel=Mégse
+
+printing_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást.
+printing_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz.
+web_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek.
+document_colors_not_allowed=A PDF dokumentumok nem használhatják saját színeiket: „Az oldalak a saját maguk által kiválasztott színeket használhatják” beállítás ki van kapcsolva a böngészőben.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hy-AM/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hy-AM/viewer.properties
index f38581b21974747b441485fdaa0a7b6b641af9b9..2fa489d5e6a1bf971257527a680cbc75407e6ea5 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hy-AM/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hy-AM/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Նախորդ էջը
-previous_label=Նախորդը
-next.title=Հաջորդ էջը
-next_label=Հաջորդը
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Էջ.
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}}-ից\u0020
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից
-
-zoom_out.title=Փոքրացնել
-zoom_out_label=Փոքրացնել
-zoom_in.title=Խոշորացնել
-zoom_in_label=Խոշորացնել
-zoom.title=Մասշտաբը\u0020
-presentation_mode.title=Անցնել Ներկայացման եղանակին
-presentation_mode_label=Ներկայացման եղանակ
-open_file.title=Բացել նիշք
-open_file_label=Բացել
-print.title=Տպել
-print_label=Տպել
-download.title=Բեռնել
-download_label=Բեռնել
-bookmark.title=Ընթացիկ տեսքով (պատճենել կամ բացել նոր պատուհանում)
-bookmark_label=Ընթացիկ տեսքը
-
-# Secondary toolbar and context menu
-tools.title=Գործիքներ
-tools_label=Գործիքներ
-first_page.title=Անցնել առաջին էջին
-first_page.label=Անցնել առաջին էջին
-first_page_label=Անցնել առաջին էջին
-last_page.title=Անցնել վերջին էջին
-last_page.label=Անցնել վերջին էջին
-last_page_label=Անցնել վերջին էջին
-page_rotate_cw.title=Պտտել ըստ ժամացույցի սլաքի
-page_rotate_cw.label=Պտտել ըստ ժամացույցի սլաքի
-page_rotate_cw_label=Պտտել ըստ ժամացույցի սլաքի
-page_rotate_ccw.title=Պտտել հակառակ ժամացույցի սլաքի
-page_rotate_ccw.label=Պտտել հակառակ ժամացույցի սլաքի
-page_rotate_ccw_label=Պտտել հակառակ ժամացույցի սլաքի
-
-cursor_text_select_tool.title=Միացնել գրույթ ընտրելու գործիքը
-cursor_text_select_tool_label=Գրույթը ընտրելու գործիք
-cursor_hand_tool.title=Միացնել Ձեռքի գործիքը
-cursor_hand_tool_label=Ձեռքի գործիք
-
-scroll_vertical.title=Օգտագործել ուղղահայաց ոլորում
-scroll_vertical_label=Ուղղահայաց ոլորում
-scroll_horizontal.title=Օգտագործել հորիզոնական ոլորում
-scroll_horizontal_label=Հորիզոնական ոլորում
-scroll_wrapped.title=Օգտագործել փաթաթված ոլորում
-scroll_wrapped_label=Փաթաթված ոլորում
-
-spread_none.title=Մի միացեք էջի վերածածկերին
-spread_none_label=Չկա վերածածկեր
-spread_odd.title=Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով
-spread_odd_label=Կենտ վերածածկեր
-spread_even.title=Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով
-spread_even_label=Զույգ վերածածկեր
-
-# Document properties dialog box
-document_properties.title=Փաստաթղթի հատկությունները…
-document_properties_label=Փաստաթղթի հատկությունները…
-document_properties_file_name=Նիշքի անունը.
-document_properties_file_size=Նիշք չափը.
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)
-document_properties_title=Վերնագիր.
-document_properties_author=Հեղինակ․
-document_properties_subject=Վերնագիր.
-document_properties_keywords=Հիմնաբառ.
-document_properties_creation_date=Ստեղծելու ամսաթիվը.
-document_properties_modification_date=Փոփոխելու ամսաթիվը.
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Ստեղծող.
-document_properties_producer=PDF-ի հեղինակը.
-document_properties_version=PDF-ի տարբերակը.
-document_properties_page_count=Էջերի քանակը.
-document_properties_page_size=Էջի չափը.
-document_properties_page_size_unit_inches=ում
-document_properties_page_size_unit_millimeters=մմ
-document_properties_page_size_orientation_portrait=ուղղաձիգ
-document_properties_page_size_orientation_landscape=հորիզոնական
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Նամակ
-document_properties_page_size_name_legal=Օրինական
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Արագ վեբ դիտում․
-document_properties_linearized_yes=Այո
-document_properties_linearized_no=Ոչ
-document_properties_close=Փակել
-
-print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն...
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Չեղարկել
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Բացել/Փակել Կողային վահանակը
-toggle_sidebar_notification.title=Փոխանջատել Կողային գոտին (փաստաթուղթը պարունակում է ուրվագիծ/կցորդ)
-toggle_sidebar_label=Բացել/Փակել Կողային վահանակը
-document_outline.title=Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար)
-document_outline_label=Փաստաթղթի բովանդակությունը
-attachments.title=Ցուցադրել կցորդները
-attachments_label=Կցորդներ
-thumbs.title=Ցուցադրել Մանրապատկերը
-thumbs_label=Մանրապատկերը
-findbar.title=Գտնել փաստաթղթում
-findbar_label=Որոնում
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Էջ {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Էջը {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Էջի մանրապատկերը {{page}}
-
-# Find panel button title and messages
-find_input.title=Որոնում
-find_input.placeholder=Գտնել փաստաթղթում...
-find_previous.title=Գտնել անրահայտության նախորդ հանդիպումը
-find_previous_label=Նախորդը
-find_next.title=Գտիր արտահայտության հաջորդ հանդիպումը
-find_next_label=Հաջորդը
-find_highlight=Գունանշել բոլորը
-find_match_case_label=Մեծ(փոքր)ատառ հաշվի առնել
-find_entire_word_label=Ամբողջ բառերը
-find_reached_top=Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից
-find_reached_bottom=Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ հոգնակի(ընդհանուր) ]}
-find_match_count[one]={{current}} {{total}}-ի համընկնումից
-find_match_count[two]={{current}} {{total}}-ի համընկնումներից
-find_match_count[few]={{current}} {{total}}-ի համընկնումներից
-find_match_count[many]={{current}} {{total}}-ի համընկնումներից
-find_match_count[other]={{current}} {{total}}-ի համընկնումներից
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ հոգնակի (սահմանը) ]}
-find_match_count_limit[zero]=Ավելին քան {{limit}} համընկնումները
-find_match_count_limit[one]=Ավելին քան {{limit}} համընկնումը
-find_match_count_limit[two]=Ավելին քան {{limit}} համընկնումներներ
-find_match_count_limit[few]=Ավելին քան {{limit}} համընկնումներներ
-find_match_count_limit[many]=Ավելին քան {{limit}} համընկնումներներ
-find_match_count_limit[other]=Ավելին քան {{limit}} համընկնումներներ
-find_not_found=Արտահայտությունը չգտնվեց
-
-# Error panel labels
-error_more_info=Ավելի շատ տեղեկություն
-error_less_info=Քիչ տեղեկություն
-error_close=Փակել
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (կառուցումը. {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Գրությունը. {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Շեղջ. {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Ֆայլ. {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Տողը. {{line}}
-rendering_error=Սխալ՝ էջը ստեղծելիս:
-
-# Predefined zoom values
-page_scale_width=Էջի լայնքը
-page_scale_fit=Ձգել էջը
-page_scale_auto=Ինքնաշխատ
-page_scale_actual=Իրական չափը
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Սխալ
-loading_error=Սխալ՝ PDF ֆայլը բացելիս։
-invalid_file_error=Սխալ կամ վնասված PDF ֆայլ:
-missing_file_error=PDF ֆայլը բացակայում է:
-unexpected_response_error=Սպասարկիչի անսպասելի պատասխան:
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Ծանոթություն]
-password_label=Մուտքագրեք PDF-ի գաղտնաբառը:
-password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձեք:
-password_ok=Լավ
-password_cancel=Չեղարկել
-
-printing_not_supported=Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։
-printing_not_ready=Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար:
-web_fonts_disabled=Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները:
-document_colors_not_allowed=PDF փաստաթղթերին թույլատրված չէ օգտագործել իրենց սեփական գույները: “Թույլատրել էջերին ընտրել իրենց սեփական գույները“ ընտրանքը անջատված է դիտարկիչում:
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Նախորդ էջը
+previous_label=Նախորդը
+next.title=Հաջորդ էջը
+next_label=Հաջորդը
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Էջ.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-ից\u0020
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից
+
+zoom_out.title=Փոքրացնել
+zoom_out_label=Փոքրացնել
+zoom_in.title=Խոշորացնել
+zoom_in_label=Խոշորացնել
+zoom.title=Մասշտաբը\u0020
+presentation_mode.title=Անցնել Ներկայացման եղանակին
+presentation_mode_label=Ներկայացման եղանակ
+open_file.title=Բացել նիշք
+open_file_label=Բացել
+print.title=Տպել
+print_label=Տպել
+download.title=Բեռնել
+download_label=Բեռնել
+bookmark.title=Ընթացիկ տեսքով (պատճենել կամ բացել նոր պատուհանում)
+bookmark_label=Ընթացիկ տեսքը
+
+# Secondary toolbar and context menu
+tools.title=Գործիքներ
+tools_label=Գործիքներ
+first_page.title=Անցնել առաջին էջին
+first_page.label=Անցնել առաջին էջին
+first_page_label=Անցնել առաջին էջին
+last_page.title=Անցնել վերջին էջին
+last_page.label=Անցնել վերջին էջին
+last_page_label=Անցնել վերջին էջին
+page_rotate_cw.title=Պտտել ըստ ժամացույցի սլաքի
+page_rotate_cw.label=Պտտել ըստ ժամացույցի սլաքի
+page_rotate_cw_label=Պտտել ըստ ժամացույցի սլաքի
+page_rotate_ccw.title=Պտտել հակառակ ժամացույցի սլաքի
+page_rotate_ccw.label=Պտտել հակառակ ժամացույցի սլաքի
+page_rotate_ccw_label=Պտտել հակառակ ժամացույցի սլաքի
+
+cursor_text_select_tool.title=Միացնել գրույթ ընտրելու գործիքը
+cursor_text_select_tool_label=Գրույթը ընտրելու գործիք
+cursor_hand_tool.title=Միացնել Ձեռքի գործիքը
+cursor_hand_tool_label=Ձեռքի գործիք
+
+scroll_vertical.title=Օգտագործել ուղղահայաց ոլորում
+scroll_vertical_label=Ուղղահայաց ոլորում
+scroll_horizontal.title=Օգտագործել հորիզոնական ոլորում
+scroll_horizontal_label=Հորիզոնական ոլորում
+scroll_wrapped.title=Օգտագործել փաթաթված ոլորում
+scroll_wrapped_label=Փաթաթված ոլորում
+
+spread_none.title=Մի միացեք էջի վերածածկերին
+spread_none_label=Չկա վերածածկեր
+spread_odd.title=Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով
+spread_odd_label=Կենտ վերածածկեր
+spread_even.title=Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով
+spread_even_label=Զույգ վերածածկեր
+
+# Document properties dialog box
+document_properties.title=Փաստաթղթի հատկությունները…
+document_properties_label=Փաստաթղթի հատկությունները…
+document_properties_file_name=Նիշքի անունը.
+document_properties_file_size=Նիշք չափը.
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)
+document_properties_title=Վերնագիր.
+document_properties_author=Հեղինակ․
+document_properties_subject=Վերնագիր.
+document_properties_keywords=Հիմնաբառ.
+document_properties_creation_date=Ստեղծելու ամսաթիվը.
+document_properties_modification_date=Փոփոխելու ամսաթիվը.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ստեղծող.
+document_properties_producer=PDF-ի հեղինակը.
+document_properties_version=PDF-ի տարբերակը.
+document_properties_page_count=Էջերի քանակը.
+document_properties_page_size=Էջի չափը.
+document_properties_page_size_unit_inches=ում
+document_properties_page_size_unit_millimeters=մմ
+document_properties_page_size_orientation_portrait=ուղղաձիգ
+document_properties_page_size_orientation_landscape=հորիզոնական
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Նամակ
+document_properties_page_size_name_legal=Օրինական
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Արագ վեբ դիտում․
+document_properties_linearized_yes=Այո
+document_properties_linearized_no=Ոչ
+document_properties_close=Փակել
+
+print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Չեղարկել
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Բացել/Փակել Կողային վահանակը
+toggle_sidebar_notification.title=Փոխանջատել Կողային գոտին (փաստաթուղթը պարունակում է ուրվագիծ/կցորդ)
+toggle_sidebar_label=Բացել/Փակել Կողային վահանակը
+document_outline.title=Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար)
+document_outline_label=Փաստաթղթի բովանդակությունը
+attachments.title=Ցուցադրել կցորդները
+attachments_label=Կցորդներ
+thumbs.title=Ցուցադրել Մանրապատկերը
+thumbs_label=Մանրապատկերը
+findbar.title=Գտնել փաստաթղթում
+findbar_label=Որոնում
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Էջ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Էջը {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Էջի մանրապատկերը {{page}}
+
+# Find panel button title and messages
+find_input.title=Որոնում
+find_input.placeholder=Գտնել փաստաթղթում...
+find_previous.title=Գտնել անրահայտության նախորդ հանդիպումը
+find_previous_label=Նախորդը
+find_next.title=Գտիր արտահայտության հաջորդ հանդիպումը
+find_next_label=Հաջորդը
+find_highlight=Գունանշել բոլորը
+find_match_case_label=Մեծ(փոքր)ատառ հաշվի առնել
+find_entire_word_label=Ամբողջ բառերը
+find_reached_top=Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից
+find_reached_bottom=Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ հոգնակի(ընդհանուր) ]}
+find_match_count[one]={{current}} {{total}}-ի համընկնումից
+find_match_count[two]={{current}} {{total}}-ի համընկնումներից
+find_match_count[few]={{current}} {{total}}-ի համընկնումներից
+find_match_count[many]={{current}} {{total}}-ի համընկնումներից
+find_match_count[other]={{current}} {{total}}-ի համընկնումներից
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ հոգնակի (սահմանը) ]}
+find_match_count_limit[zero]=Ավելին քան {{limit}} համընկնումները
+find_match_count_limit[one]=Ավելին քան {{limit}} համընկնումը
+find_match_count_limit[two]=Ավելին քան {{limit}} համընկնումներներ
+find_match_count_limit[few]=Ավելին քան {{limit}} համընկնումներներ
+find_match_count_limit[many]=Ավելին քան {{limit}} համընկնումներներ
+find_match_count_limit[other]=Ավելին քան {{limit}} համընկնումներներ
+find_not_found=Արտահայտությունը չգտնվեց
+
+# Error panel labels
+error_more_info=Ավելի շատ տեղեկություն
+error_less_info=Քիչ տեղեկություն
+error_close=Փակել
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (կառուցումը. {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Գրությունը. {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Շեղջ. {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ֆայլ. {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Տողը. {{line}}
+rendering_error=Սխալ՝ էջը ստեղծելիս:
+
+# Predefined zoom values
+page_scale_width=Էջի լայնքը
+page_scale_fit=Ձգել էջը
+page_scale_auto=Ինքնաշխատ
+page_scale_actual=Իրական չափը
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Սխալ
+loading_error=Սխալ՝ PDF ֆայլը բացելիս։
+invalid_file_error=Սխալ կամ վնասված PDF ֆայլ:
+missing_file_error=PDF ֆայլը բացակայում է:
+unexpected_response_error=Սպասարկիչի անսպասելի պատասխան:
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ծանոթություն]
+password_label=Մուտքագրեք PDF-ի գաղտնաբառը:
+password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձեք:
+password_ok=Լավ
+password_cancel=Չեղարկել
+
+printing_not_supported=Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։
+printing_not_ready=Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար:
+web_fonts_disabled=Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները:
+document_colors_not_allowed=PDF փաստաթղթերին թույլատրված չէ օգտագործել իրենց սեփական գույները: “Թույլատրել էջերին ընտրել իրենց սեփական գույները“ ընտրանքը անջատված է դիտարկիչում:
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hye/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hye/viewer.properties
index b5c712772a4f6576738b80c34103d5817106c77c..1c550ee157323dadd5dffc50d9285d2602eeb840 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hye/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/hye/viewer.properties
@@ -1,247 +1,247 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Նախորդ էջ
-previous_label=Նախորդը
-next.title=Յաջորդ էջ
-next_label=Յաջորդը
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=էջ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}}-ից\u0020
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից
-
-zoom_out.title=Փոքրացնել
-zoom_out_label=Փոքրացնել
-zoom_in.title=Խոշորացնել
-zoom_in_label=Խոշորացնել
-zoom.title=Խոշորացում
-presentation_mode.title=Անցնել ներկայացման եղանակին
-presentation_mode_label=Ներկայացման եղանակ
-open_file.title=Բացել նիշքը
-open_file_label=Բացել
-print.title=Տպել
-print_label=Տպել
-download.title=Բեռնել
-download_label=Բեռնել
-bookmark.title=Ընթացիկ տեսքով (պատճէնել կամ բացել նոր պատուհանում)
-bookmark_label=Ընթացիկ տեսք
-
-# Secondary toolbar and context menu
-tools.title=Գործիքներ
-tools_label=Գործիքներ
-first_page.title=Գնալ դէպի առաջին էջ
-first_page.label=Գնալ դէպի առաջին էջ
-first_page_label=Գնալ դէպի առաջին էջ
-last_page.title=Գնալ դէպի վերջին էջ
-last_page.label=Գնալ դէպի վերջին էջ
-last_page_label=Գնալ դէպի վերջին էջ
-page_rotate_cw.title=Պտտել ժամացոյցի սլաքի ուղղութեամբ
-page_rotate_cw.label=Պտտել ժամացոյցի սլաքի ուղղութեամբ
-page_rotate_cw_label=Պտտել ժամացոյցի սլաքի ուղղութեամբ
-page_rotate_ccw.title=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
-page_rotate_ccw.label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
-page_rotate_ccw_label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
-
-cursor_text_select_tool.title=Միացնել գրոյթ ընտրելու գործիքը
-cursor_text_select_tool_label=Գրուածք ընտրելու գործիք
-cursor_hand_tool.title=Միացնել ձեռքի գործիքը
-cursor_hand_tool_label=Ձեռքի գործիք
-
-scroll_vertical.title=Աւգտագործել ուղղահայեաց ոլորում
-scroll_vertical_label=Ուղղահայեաց ոլորում
-scroll_horizontal.title=Աւգտագործել հորիզոնական ոլորում
-scroll_horizontal_label=Հորիզոնական ոլորում
-scroll_wrapped.title=Աւգտագործել փաթաթուած ոլորում
-scroll_wrapped_label=Փաթաթուած ոլորում
-
-spread_none.title=Մի միացէք էջի կոնտեքստում
-spread_none_label=Չկայ կոնտեքստ
-spread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով
-spread_odd_label=Տարաւրինակ կոնտեքստ
-spread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով
-
-# Document properties dialog box
-document_properties.title=Փաստաթղթի հատկութիւնները…
-document_properties_label=Փաստաթղթի յատկութիւնները…
-document_properties_file_name=Նիշքի անունը․
-document_properties_file_size=Նիշք չափը.
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)
-document_properties_title=Վերնագիր
-document_properties_author=Հեղինակ․
-document_properties_subject=առարկայ
-document_properties_keywords=Հիմնաբառեր
-document_properties_creation_date=Ստեղծման ամսաթիւ
-document_properties_modification_date=Փոփոխութեան ամսաթիւ.
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Ստեղծող
-document_properties_producer=PDF-ի Արտադրողը.
-document_properties_version=PDF-ի տարբերակը.
-document_properties_page_count=Էջերի քանակը.
-document_properties_page_size=Էջի չափը.
-document_properties_page_size_unit_inches=ում
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=ուղղաձիգ
-document_properties_page_size_orientation_landscape=հորիզոնական
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Նամակ
-document_properties_page_size_name_legal=Աւրինական
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Արագ վեբ դիտում․
-document_properties_linearized_yes=Այո
-document_properties_linearized_no=Ոչ
-document_properties_close=Փակել
-
-print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Չեղարկել
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Փոխարկել կողային վահանակը
-toggle_sidebar_notification.title=Փոխարկել կողային վահանակը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդ)
-toggle_sidebar_label=Փոխարկել կողային վահանակը
-document_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար)
-document_outline_label=Փաստաթղթի ուրուագիծ
-attachments.title=Ցուցադրել կցորդները
-attachments_label=Կցորդներ
-thumbs.title=Ցուցադրել մանրապատկերը
-thumbs_label=Մանրապատկեր
-findbar.title=Գտնել փաստաթղթում
-findbar_label=Որոնում
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Էջ {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Էջը {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Էջի մանրապատկերը {{page}}
-
-# Find panel button title and messages
-find_input.title=Որոնում
-find_input.placeholder=Գտնել փաստաթղթում…
-find_previous.title=Գտնել արտայայտութեան նախորդ արտայայտութիւնը
-find_previous_label=Նախորդը
-find_next.title=Գտիր արտայայտութեան յաջորդ արտայայտութիւնը
-find_next_label=Հաջորդը
-find_highlight=Գունանշել բոլորը
-find_match_case_label=Հաշուի առնել հանգամանքը
-find_entire_word_label=Ամբողջ բառերը
-find_reached_top=Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից
-find_reached_bottom=Հասել էք փաստաթղթի վերջին, շարունակել վերեւից
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ հոգնակի(ընդհանուր) ]}
-find_match_count[one]={{current}} {{total}}-ի համընկնումից
-find_match_count[two]={{current}} {{total}}-ի համընկնումներից
-find_match_count[few]={{current}} {{total}}-ի համընկնումներից
-find_match_count[many]={{current}} {{total}}-ի համընկնումներից
-find_match_count[other]={{current}} {{total}}-ի համընկնումներից
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ հոգնակի (սահմանը) ]}
-find_match_count_limit[zero]=Աւելին քան {{limit}} համընկնումները
-find_match_count_limit[one]=Աւելին քան {{limit}} համընկնումը
-find_match_count_limit[two]=Աւելին քան {{limit}} համընկնումները
-find_match_count_limit[few]=Աւելին քան {{limit}} համընկնումները
-find_match_count_limit[many]=Աւելին քան {{limit}} համընկնումները
-find_match_count_limit[other]=Աւելին քան {{limit}} համընկնումները
-find_not_found=Արտայայտութիւնը չգտնուեց
-
-# Error panel labels
-error_more_info=Աւելի շատ տեղեկութիւն
-error_less_info=Քիչ տեղեկութիւն
-error_close=Փակել
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (կառուցումը. {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Գրութիւնը. {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Շեղջ. {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=նիշք․ {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Տողը. {{line}}
-rendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ
-
-# Predefined zoom values
-page_scale_width=Էջի լայնքը
-page_scale_fit=Հարմարեցնել էջը
-page_scale_auto=Ինքնաշխատ խոշորացում
-page_scale_actual=Իրական չափը
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Սխալ
-loading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։
-invalid_file_error=Սխալ կամ վնասուած PDF նիշք։
-missing_file_error=PDF նիշքը բացակաիւմ է։
-unexpected_response_error=Սպասարկիչի անսպասելի պատասխան։
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Ծանոթութիւն]
-password_label=Մուտքագրէք գաղտնաբառը այս PDF նիշքը բացելու համար
-password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձէք:
-password_ok=Լաւ
-password_cancel=Չեղարկել
-
-printing_not_supported=Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։
-printing_not_ready=Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։
-web_fonts_disabled=Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։
-document_colors_not_allowed=PDF փաստաթղթերին թոյլատրուած չէ աւգտագործել իրենց սեփական գոյները։ “Թոյլատրել էջերին ընտրել իրենց սեփական գոյները“ ընտրանքը անջատուած է զննարկիչում։
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Նախորդ էջ
+previous_label=Նախորդը
+next.title=Յաջորդ էջ
+next_label=Յաջորդը
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=էջ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-ից\u0020
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից
+
+zoom_out.title=Փոքրացնել
+zoom_out_label=Փոքրացնել
+zoom_in.title=Խոշորացնել
+zoom_in_label=Խոշորացնել
+zoom.title=Խոշորացում
+presentation_mode.title=Անցնել ներկայացման եղանակին
+presentation_mode_label=Ներկայացման եղանակ
+open_file.title=Բացել նիշքը
+open_file_label=Բացել
+print.title=Տպել
+print_label=Տպել
+download.title=Բեռնել
+download_label=Բեռնել
+bookmark.title=Ընթացիկ տեսքով (պատճէնել կամ բացել նոր պատուհանում)
+bookmark_label=Ընթացիկ տեսք
+
+# Secondary toolbar and context menu
+tools.title=Գործիքներ
+tools_label=Գործիքներ
+first_page.title=Գնալ դէպի առաջին էջ
+first_page.label=Գնալ դէպի առաջին էջ
+first_page_label=Գնալ դէպի առաջին էջ
+last_page.title=Գնալ դէպի վերջին էջ
+last_page.label=Գնալ դէպի վերջին էջ
+last_page_label=Գնալ դէպի վերջին էջ
+page_rotate_cw.title=Պտտել ժամացոյցի սլաքի ուղղութեամբ
+page_rotate_cw.label=Պտտել ժամացոյցի սլաքի ուղղութեամբ
+page_rotate_cw_label=Պտտել ժամացոյցի սլաքի ուղղութեամբ
+page_rotate_ccw.title=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
+page_rotate_ccw.label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
+page_rotate_ccw_label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ
+
+cursor_text_select_tool.title=Միացնել գրոյթ ընտրելու գործիքը
+cursor_text_select_tool_label=Գրուածք ընտրելու գործիք
+cursor_hand_tool.title=Միացնել ձեռքի գործիքը
+cursor_hand_tool_label=Ձեռքի գործիք
+
+scroll_vertical.title=Աւգտագործել ուղղահայեաց ոլորում
+scroll_vertical_label=Ուղղահայեաց ոլորում
+scroll_horizontal.title=Աւգտագործել հորիզոնական ոլորում
+scroll_horizontal_label=Հորիզոնական ոլորում
+scroll_wrapped.title=Աւգտագործել փաթաթուած ոլորում
+scroll_wrapped_label=Փաթաթուած ոլորում
+
+spread_none.title=Մի միացէք էջի կոնտեքստում
+spread_none_label=Չկայ կոնտեքստ
+spread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով
+spread_odd_label=Տարաւրինակ կոնտեքստ
+spread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով
+
+# Document properties dialog box
+document_properties.title=Փաստաթղթի հատկութիւնները…
+document_properties_label=Փաստաթղթի յատկութիւնները…
+document_properties_file_name=Նիշքի անունը․
+document_properties_file_size=Նիշք չափը.
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)
+document_properties_title=Վերնագիր
+document_properties_author=Հեղինակ․
+document_properties_subject=առարկայ
+document_properties_keywords=Հիմնաբառեր
+document_properties_creation_date=Ստեղծման ամսաթիւ
+document_properties_modification_date=Փոփոխութեան ամսաթիւ.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ստեղծող
+document_properties_producer=PDF-ի Արտադրողը.
+document_properties_version=PDF-ի տարբերակը.
+document_properties_page_count=Էջերի քանակը.
+document_properties_page_size=Էջի չափը.
+document_properties_page_size_unit_inches=ում
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ուղղաձիգ
+document_properties_page_size_orientation_landscape=հորիզոնական
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Նամակ
+document_properties_page_size_name_legal=Աւրինական
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Արագ վեբ դիտում․
+document_properties_linearized_yes=Այո
+document_properties_linearized_no=Ոչ
+document_properties_close=Փակել
+
+print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Չեղարկել
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Փոխարկել կողային վահանակը
+toggle_sidebar_notification.title=Փոխարկել կողային վահանակը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդ)
+toggle_sidebar_label=Փոխարկել կողային վահանակը
+document_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար)
+document_outline_label=Փաստաթղթի ուրուագիծ
+attachments.title=Ցուցադրել կցորդները
+attachments_label=Կցորդներ
+thumbs.title=Ցուցադրել մանրապատկերը
+thumbs_label=Մանրապատկեր
+findbar.title=Գտնել փաստաթղթում
+findbar_label=Որոնում
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Էջ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Էջը {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Էջի մանրապատկերը {{page}}
+
+# Find panel button title and messages
+find_input.title=Որոնում
+find_input.placeholder=Գտնել փաստաթղթում…
+find_previous.title=Գտնել արտայայտութեան նախորդ արտայայտութիւնը
+find_previous_label=Նախորդը
+find_next.title=Գտիր արտայայտութեան յաջորդ արտայայտութիւնը
+find_next_label=Հաջորդը
+find_highlight=Գունանշել բոլորը
+find_match_case_label=Հաշուի առնել հանգամանքը
+find_entire_word_label=Ամբողջ բառերը
+find_reached_top=Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից
+find_reached_bottom=Հասել էք փաստաթղթի վերջին, շարունակել վերեւից
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ հոգնակի(ընդհանուր) ]}
+find_match_count[one]={{current}} {{total}}-ի համընկնումից
+find_match_count[two]={{current}} {{total}}-ի համընկնումներից
+find_match_count[few]={{current}} {{total}}-ի համընկնումներից
+find_match_count[many]={{current}} {{total}}-ի համընկնումներից
+find_match_count[other]={{current}} {{total}}-ի համընկնումներից
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ հոգնակի (սահմանը) ]}
+find_match_count_limit[zero]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[one]=Աւելին քան {{limit}} համընկնումը
+find_match_count_limit[two]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[few]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[many]=Աւելին քան {{limit}} համընկնումները
+find_match_count_limit[other]=Աւելին քան {{limit}} համընկնումները
+find_not_found=Արտայայտութիւնը չգտնուեց
+
+# Error panel labels
+error_more_info=Աւելի շատ տեղեկութիւն
+error_less_info=Քիչ տեղեկութիւն
+error_close=Փակել
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (կառուցումը. {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Գրութիւնը. {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Շեղջ. {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=նիշք․ {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Տողը. {{line}}
+rendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ
+
+# Predefined zoom values
+page_scale_width=Էջի լայնքը
+page_scale_fit=Հարմարեցնել էջը
+page_scale_auto=Ինքնաշխատ խոշորացում
+page_scale_actual=Իրական չափը
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Սխալ
+loading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։
+invalid_file_error=Սխալ կամ վնասուած PDF նիշք։
+missing_file_error=PDF նիշքը բացակաիւմ է։
+unexpected_response_error=Սպասարկիչի անսպասելի պատասխան։
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ծանոթութիւն]
+password_label=Մուտքագրէք գաղտնաբառը այս PDF նիշքը բացելու համար
+password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձէք:
+password_ok=Լաւ
+password_cancel=Չեղարկել
+
+printing_not_supported=Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։
+printing_not_ready=Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։
+web_fonts_disabled=Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։
+document_colors_not_allowed=PDF փաստաթղթերին թոյլատրուած չէ աւգտագործել իրենց սեփական գոյները։ “Թոյլատրել էջերին ընտրել իրենց սեփական գոյները“ ընտրանքը անջատուած է զննարկիչում։
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ia/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ia/viewer.properties
index f69b26e406680a63ff6b51c8c46dfef2440a3ee4..320bd2fd7441240f5accbc9bd8231299b22bba48 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ia/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ia/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pagina previe
-previous_label=Previe
-next.title=Pagina sequente
-next_label=Sequente
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pagina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Distantiar
-zoom_out_label=Distantiar
-zoom_in.title=Approximar
-zoom_in_label=Approximar
-zoom.title=Zoom
-presentation_mode.title=Excambiar a modo presentation
-presentation_mode_label=Modo presentation
-open_file.title=Aperir le file
-open_file_label=Aperir
-print.title=Imprimer
-print_label=Imprimer
-download.title=Discargar
-download_label=Discargar
-bookmark.title=Vista actual (copiar o aperir in un nove fenestra)
-bookmark_label=Vista actual
-
-# Secondary toolbar and context menu
-tools.title=Instrumentos
-tools_label=Instrumentos
-first_page.title=Ir al prime pagina
-first_page.label=Ir al prime pagina
-first_page_label=Ir al prime pagina
-last_page.title=Ir al prime pagina
-last_page.label=Ir al prime pagina
-last_page_label=Ir al prime pagina
-page_rotate_cw.title=Rotar in senso horari
-page_rotate_cw.label=Rotar in senso horari
-page_rotate_cw_label=Rotar in senso horari
-page_rotate_ccw.title=Rotar in senso antihorari
-page_rotate_ccw.label=Rotar in senso antihorari
-page_rotate_ccw_label=Rotar in senso antihorari
-
-cursor_text_select_tool.title=Activar le instrumento de selection de texto
-cursor_text_select_tool_label=Instrumento de selection de texto
-cursor_hand_tool.title=Activar le instrumento mano
-cursor_hand_tool_label=Instrumento mano
-
-scroll_vertical.title=Usar rolamento vertical
-scroll_vertical_label=Rolamento vertical
-scroll_horizontal.title=Usar rolamento horizontal
-scroll_horizontal_label=Rolamento horizontal
-scroll_wrapped.title=Usar rolamento incapsulate
-scroll_wrapped_label=Rolamento incapsulate
-
-spread_none.title=Non junger paginas dual
-spread_none_label=Sin paginas dual
-spread_odd.title=Junger paginas dual a partir de paginas con numeros impar
-spread_odd_label=Paginas dual impar
-spread_even.title=Junger paginas dual a partir de paginas con numeros par
-spread_even_label=Paginas dual par
-
-# Document properties dialog box
-document_properties.title=Proprietates del documento…
-document_properties_label=Proprietates del documento…
-document_properties_file_name=Nomine del file:
-document_properties_file_size=Dimension de file:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Titulo:
-document_properties_author=Autor:
-document_properties_subject=Subjecto:
-document_properties_keywords=Parolas clave:
-document_properties_creation_date=Data de creation:
-document_properties_modification_date=Data de modification:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator:
-document_properties_producer=Productor PDF:
-document_properties_version=Version PDF:
-document_properties_page_count=Numero de paginas:
-document_properties_page_size=Dimension del pagina:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertical
-document_properties_page_size_orientation_landscape=horizontal
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Littera
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista web rapide:
-document_properties_linearized_yes=Si
-document_properties_linearized_no=No
-document_properties_close=Clauder
-
-print_progress_message=Preparation del documento pro le impression…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancellar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Monstrar/celar le barra lateral
-toggle_sidebar_notification.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos)
-toggle_sidebar_label=Monstrar/celar le barra lateral
-document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos)
-document_outline_label=Schema del documento
-attachments.title=Monstrar le annexos
-attachments_label=Annexos
-thumbs.title=Monstrar le vignettes
-thumbs_label=Vignettes
-findbar.title=Cercar in le documento
-findbar_label=Cercar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pagina {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pagina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Vignette del pagina {{page}}
-
-# Find panel button title and messages
-find_input.title=Cercar
-find_input.placeholder=Cercar in le documento…
-find_previous.title=Trovar le previe occurrentia del phrase
-find_previous_label=Previe
-find_next.title=Trovar le successive occurrentia del phrase
-find_next_label=Sequente
-find_highlight=Evidentiar toto
-find_match_case_label=Distinguer majusculas/minusculas
-find_entire_word_label=Parolas integre
-find_reached_top=Initio del documento attingite, continuation ab fin
-find_reached_bottom=Fin del documento attingite, continuation ab initio
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} concordantia
-find_match_count[two]={{current}} de {{total}} concordantias
-find_match_count[few]={{current}} de {{total}} concordantias
-find_match_count[many]={{current}} de {{total}} concordantias
-find_match_count[other]={{current}} de {{total}} concordantias
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Plus de {{limit}} concordantias
-find_match_count_limit[one]=Plus de {{limit}} concordantia
-find_match_count_limit[two]=Plus de {{limit}} concordantias
-find_match_count_limit[few]=Plus de {{limit}} concordantias
-find_match_count_limit[many]=Plus de {{limit}} correspondentias
-find_match_count_limit[other]=Plus de {{limit}} concordantias
-find_not_found=Phrase non trovate
-
-# Error panel labels
-error_more_info=Plus de informationes
-error_less_info=Minus de informationes
-error_close=Clauder
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linea: {{line}}
-rendering_error=Un error occurreva durante que on processava le pagina.
-
-# Predefined zoom values
-page_scale_width=Largessa pagina plen
-page_scale_fit=Pagina integre
-page_scale_auto=Zoom automatic
-page_scale_actual=Dimension actual
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Un error occurreva durante que on cargava le file PDF.
-invalid_file_error=File PDF corrumpite o non valide.
-missing_file_error=File PDF mancante.
-unexpected_response_error=Responsa del servitor inexpectate.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Insere le contrasigno pro aperir iste file PDF.
-password_invalid=Contrasigno invalide. Per favor retenta.
-password_ok=OK
-password_cancel=Cancellar
-
-printing_not_supported=Attention : le impression non es totalmente supportate per ce navigator.
-printing_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer.
-web_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate.
-document_colors_not_allowed=Le documentos PDF non pote utilisar lor proprie colores: “Autorisar le paginas web a utilisar lor proprie colores” es disactivate in le navigator.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina previe
+previous_label=Previe
+next.title=Pagina sequente
+next_label=Sequente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Distantiar
+zoom_out_label=Distantiar
+zoom_in.title=Approximar
+zoom_in_label=Approximar
+zoom.title=Zoom
+presentation_mode.title=Excambiar a modo presentation
+presentation_mode_label=Modo presentation
+open_file.title=Aperir le file
+open_file_label=Aperir
+print.title=Imprimer
+print_label=Imprimer
+download.title=Discargar
+download_label=Discargar
+bookmark.title=Vista actual (copiar o aperir in un nove fenestra)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Instrumentos
+tools_label=Instrumentos
+first_page.title=Ir al prime pagina
+first_page.label=Ir al prime pagina
+first_page_label=Ir al prime pagina
+last_page.title=Ir al prime pagina
+last_page.label=Ir al prime pagina
+last_page_label=Ir al prime pagina
+page_rotate_cw.title=Rotar in senso horari
+page_rotate_cw.label=Rotar in senso horari
+page_rotate_cw_label=Rotar in senso horari
+page_rotate_ccw.title=Rotar in senso antihorari
+page_rotate_ccw.label=Rotar in senso antihorari
+page_rotate_ccw_label=Rotar in senso antihorari
+
+cursor_text_select_tool.title=Activar le instrumento de selection de texto
+cursor_text_select_tool_label=Instrumento de selection de texto
+cursor_hand_tool.title=Activar le instrumento mano
+cursor_hand_tool_label=Instrumento mano
+
+scroll_vertical.title=Usar rolamento vertical
+scroll_vertical_label=Rolamento vertical
+scroll_horizontal.title=Usar rolamento horizontal
+scroll_horizontal_label=Rolamento horizontal
+scroll_wrapped.title=Usar rolamento incapsulate
+scroll_wrapped_label=Rolamento incapsulate
+
+spread_none.title=Non junger paginas dual
+spread_none_label=Sin paginas dual
+spread_odd.title=Junger paginas dual a partir de paginas con numeros impar
+spread_odd_label=Paginas dual impar
+spread_even.title=Junger paginas dual a partir de paginas con numeros par
+spread_even_label=Paginas dual par
+
+# Document properties dialog box
+document_properties.title=Proprietates del documento…
+document_properties_label=Proprietates del documento…
+document_properties_file_name=Nomine del file:
+document_properties_file_size=Dimension de file:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titulo:
+document_properties_author=Autor:
+document_properties_subject=Subjecto:
+document_properties_keywords=Parolas clave:
+document_properties_creation_date=Data de creation:
+document_properties_modification_date=Data de modification:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=Productor PDF:
+document_properties_version=Version PDF:
+document_properties_page_count=Numero de paginas:
+document_properties_page_size=Dimension del pagina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Littera
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapide:
+document_properties_linearized_yes=Si
+document_properties_linearized_no=No
+document_properties_close=Clauder
+
+print_progress_message=Preparation del documento pro le impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancellar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Monstrar/celar le barra lateral
+toggle_sidebar_notification.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos)
+toggle_sidebar_label=Monstrar/celar le barra lateral
+document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos)
+document_outline_label=Schema del documento
+attachments.title=Monstrar le annexos
+attachments_label=Annexos
+thumbs.title=Monstrar le vignettes
+thumbs_label=Vignettes
+findbar.title=Cercar in le documento
+findbar_label=Cercar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vignette del pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Cercar
+find_input.placeholder=Cercar in le documento…
+find_previous.title=Trovar le previe occurrentia del phrase
+find_previous_label=Previe
+find_next.title=Trovar le successive occurrentia del phrase
+find_next_label=Sequente
+find_highlight=Evidentiar toto
+find_match_case_label=Distinguer majusculas/minusculas
+find_entire_word_label=Parolas integre
+find_reached_top=Initio del documento attingite, continuation ab fin
+find_reached_bottom=Fin del documento attingite, continuation ab initio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} concordantia
+find_match_count[two]={{current}} de {{total}} concordantias
+find_match_count[few]={{current}} de {{total}} concordantias
+find_match_count[many]={{current}} de {{total}} concordantias
+find_match_count[other]={{current}} de {{total}} concordantias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Plus de {{limit}} concordantias
+find_match_count_limit[one]=Plus de {{limit}} concordantia
+find_match_count_limit[two]=Plus de {{limit}} concordantias
+find_match_count_limit[few]=Plus de {{limit}} concordantias
+find_match_count_limit[many]=Plus de {{limit}} correspondentias
+find_match_count_limit[other]=Plus de {{limit}} concordantias
+find_not_found=Phrase non trovate
+
+# Error panel labels
+error_more_info=Plus de informationes
+error_less_info=Minus de informationes
+error_close=Clauder
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linea: {{line}}
+rendering_error=Un error occurreva durante que on processava le pagina.
+
+# Predefined zoom values
+page_scale_width=Largessa pagina plen
+page_scale_fit=Pagina integre
+page_scale_auto=Zoom automatic
+page_scale_actual=Dimension actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Un error occurreva durante que on cargava le file PDF.
+invalid_file_error=File PDF corrumpite o non valide.
+missing_file_error=File PDF mancante.
+unexpected_response_error=Responsa del servitor inexpectate.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Insere le contrasigno pro aperir iste file PDF.
+password_invalid=Contrasigno invalide. Per favor retenta.
+password_ok=OK
+password_cancel=Cancellar
+
+printing_not_supported=Attention : le impression non es totalmente supportate per ce navigator.
+printing_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer.
+web_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate.
+document_colors_not_allowed=Le documentos PDF non pote utilisar lor proprie colores: “Autorisar le paginas web a utilisar lor proprie colores” es disactivate in le navigator.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/id/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/id/viewer.properties
index 0a904e16d649c7842945784ff32fba1524d2e23a..154a1e969e57c9defd08271172cf23eaa3697c2b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/id/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/id/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Laman Sebelumnya
-previous_label=Sebelumnya
-next.title=Laman Selanjutnya
-next_label=Selanjutnya
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Halaman
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=dari {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} dari {{pagesCount}})
-
-zoom_out.title=Perkecil
-zoom_out_label=Perkecil
-zoom_in.title=Perbesar
-zoom_in_label=Perbesar
-zoom.title=Perbesaran
-presentation_mode.title=Ganti ke Mode Presentasi
-presentation_mode_label=Mode Presentasi
-open_file.title=Buka Berkas
-open_file_label=Buka
-print.title=Cetak
-print_label=Cetak
-download.title=Unduh
-download_label=Unduh
-bookmark.title=Tampilan Sekarang (salin atau buka di jendela baru)
-bookmark_label=Tampilan Sekarang
-
-# Secondary toolbar and context menu
-tools.title=Alat
-tools_label=Alat
-first_page.title=Buka Halaman Pertama
-first_page.label=Ke Halaman Pertama
-first_page_label=Buka Halaman Pertama
-last_page.title=Buka Halaman Terakhir
-last_page.label=Ke Halaman Terakhir
-last_page_label=Buka Halaman Terakhir
-page_rotate_cw.title=Putar Searah Jarum Jam
-page_rotate_cw.label=Putar Searah Jarum Jam
-page_rotate_cw_label=Putar Searah Jarum Jam
-page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam
-page_rotate_ccw.label=Putar Berlawanan Arah Jarum Jam
-page_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam
-
-cursor_text_select_tool.title=Aktifkan Alat Seleksi Teks
-cursor_text_select_tool_label=Alat Seleksi Teks
-cursor_hand_tool.title=Aktifkan Alat Tangan
-cursor_hand_tool_label=Alat Tangan
-
-scroll_vertical.title=Gunakan Penggeseran Vertikal
-scroll_vertical_label=Penggeseran Vertikal
-scroll_horizontal.title=Gunakan Penggeseran Horizontal
-scroll_horizontal_label=Penggeseran Horizontal
-scroll_wrapped.title=Gunakan Penggeseran Terapit
-scroll_wrapped_label=Penggeseran Terapit
-
-spread_none.title=Jangan gabungkan lembar halaman
-spread_none_label=Tidak Ada Lembaran
-spread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil
-spread_odd_label=Lembaran Ganjil
-spread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap
-spread_even_label=Lembaran Genap
-
-# Document properties dialog box
-document_properties.title=Properti Dokumen…
-document_properties_label=Properti Dokumen…
-document_properties_file_name=Nama berkas:
-document_properties_file_size=Ukuran berkas:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} byte)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} byte)
-document_properties_title=Judul:
-document_properties_author=Penyusun:
-document_properties_subject=Subjek:
-document_properties_keywords=Kata Kunci:
-document_properties_creation_date=Tanggal Dibuat:
-document_properties_modification_date=Tanggal Dimodifikasi:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Pembuat:
-document_properties_producer=Pemroduksi PDF:
-document_properties_version=Versi PDF:
-document_properties_page_count=Jumlah Halaman:
-document_properties_page_size=Ukuran Laman:
-document_properties_page_size_unit_inches=inci
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=tegak
-document_properties_page_size_orientation_landscape=mendatar
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Tampilan Web Kilat:
-document_properties_linearized_yes=Ya
-document_properties_linearized_no=Tidak
-document_properties_close=Tutup
-
-print_progress_message=Menyiapkan dokumen untuk pencetakan…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Batalkan
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping
-toggle_sidebar_notification.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran)
-toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping
-document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item)
-document_outline_label=Kerangka Dokumen
-attachments.title=Tampilkan Lampiran
-attachments_label=Lampiran
-thumbs.title=Tampilkan Miniatur
-thumbs_label=Miniatur
-findbar.title=Temukan di Dokumen
-findbar_label=Temukan
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Laman {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Laman {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatur Laman {{page}}
-
-# Find panel button title and messages
-find_input.title=Temukan
-find_input.placeholder=Temukan di dokumen…
-find_previous.title=Temukan kata sebelumnya
-find_previous_label=Sebelumnya
-find_next.title=Temukan lebih lanjut
-find_next_label=Selanjutnya
-find_highlight=Sorot semuanya
-find_match_case_label=Cocokkan BESAR/kecil
-find_entire_word_label=Seluruh teks
-find_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah
-find_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} dari {{total}} hasil
-find_match_count[two]={{current}} dari {{total}} hasil
-find_match_count[few]={{current}} dari {{total}} hasil
-find_match_count[many]={{current}} dari {{total}} hasil
-find_match_count[other]={{current}} dari {{total}} hasil
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Ditemukan lebih dari {{limit}}
-find_match_count_limit[one]=Ditemukan lebih dari {{limit}}
-find_match_count_limit[two]=Ditemukan lebih dari {{limit}}
-find_match_count_limit[few]=Ditemukan lebih dari {{limit}}
-find_match_count_limit[many]=Ditemukan lebih dari {{limit}}
-find_match_count_limit[other]=Ditemukan lebih dari {{limit}}
-find_not_found=Frasa tidak ditemukan
-
-# Error panel labels
-error_more_info=Lebih Banyak Informasi
-error_less_info=Lebih Sedikit Informasi
-error_close=Tutup
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Pesan: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Berkas: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Baris: {{line}}
-rendering_error=Galat terjadi saat merender laman.
-
-# Predefined zoom values
-page_scale_width=Lebar Laman
-page_scale_fit=Muat Laman
-page_scale_auto=Perbesaran Otomatis
-page_scale_actual=Ukuran Asli
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Galat
-loading_error=Galat terjadi saat memuat PDF.
-invalid_file_error=Berkas PDF tidak valid atau rusak.
-missing_file_error=Berkas PDF tidak ada.
-unexpected_response_error=Balasan server yang tidak diharapkan.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotasi {{type}}]
-password_label=Masukkan sandi untuk membuka berkas PDF ini.
-password_invalid=Sandi tidak valid. Silakan coba lagi.
-password_ok=Oke
-password_cancel=Batal
-
-printing_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini.
-printing_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak.
-web_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat.
-document_colors_not_allowed=Dokumen PDF tidak diizinkan untuk menggunakan warnanya sendiri karena setelan 'Izinkan laman memilih warna sendiri' dinonaktifkan pada pengaturan.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Laman Sebelumnya
+previous_label=Sebelumnya
+next.title=Laman Selanjutnya
+next_label=Selanjutnya
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Halaman
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=dari {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} dari {{pagesCount}})
+
+zoom_out.title=Perkecil
+zoom_out_label=Perkecil
+zoom_in.title=Perbesar
+zoom_in_label=Perbesar
+zoom.title=Perbesaran
+presentation_mode.title=Ganti ke Mode Presentasi
+presentation_mode_label=Mode Presentasi
+open_file.title=Buka Berkas
+open_file_label=Buka
+print.title=Cetak
+print_label=Cetak
+download.title=Unduh
+download_label=Unduh
+bookmark.title=Tampilan Sekarang (salin atau buka di jendela baru)
+bookmark_label=Tampilan Sekarang
+
+# Secondary toolbar and context menu
+tools.title=Alat
+tools_label=Alat
+first_page.title=Buka Halaman Pertama
+first_page.label=Ke Halaman Pertama
+first_page_label=Buka Halaman Pertama
+last_page.title=Buka Halaman Terakhir
+last_page.label=Ke Halaman Terakhir
+last_page_label=Buka Halaman Terakhir
+page_rotate_cw.title=Putar Searah Jarum Jam
+page_rotate_cw.label=Putar Searah Jarum Jam
+page_rotate_cw_label=Putar Searah Jarum Jam
+page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam
+page_rotate_ccw.label=Putar Berlawanan Arah Jarum Jam
+page_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam
+
+cursor_text_select_tool.title=Aktifkan Alat Seleksi Teks
+cursor_text_select_tool_label=Alat Seleksi Teks
+cursor_hand_tool.title=Aktifkan Alat Tangan
+cursor_hand_tool_label=Alat Tangan
+
+scroll_vertical.title=Gunakan Penggeseran Vertikal
+scroll_vertical_label=Penggeseran Vertikal
+scroll_horizontal.title=Gunakan Penggeseran Horizontal
+scroll_horizontal_label=Penggeseran Horizontal
+scroll_wrapped.title=Gunakan Penggeseran Terapit
+scroll_wrapped_label=Penggeseran Terapit
+
+spread_none.title=Jangan gabungkan lembar halaman
+spread_none_label=Tidak Ada Lembaran
+spread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil
+spread_odd_label=Lembaran Ganjil
+spread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap
+spread_even_label=Lembaran Genap
+
+# Document properties dialog box
+document_properties.title=Properti Dokumen…
+document_properties_label=Properti Dokumen…
+document_properties_file_name=Nama berkas:
+document_properties_file_size=Ukuran berkas:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Judul:
+document_properties_author=Penyusun:
+document_properties_subject=Subjek:
+document_properties_keywords=Kata Kunci:
+document_properties_creation_date=Tanggal Dibuat:
+document_properties_modification_date=Tanggal Dimodifikasi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Pembuat:
+document_properties_producer=Pemroduksi PDF:
+document_properties_version=Versi PDF:
+document_properties_page_count=Jumlah Halaman:
+document_properties_page_size=Ukuran Laman:
+document_properties_page_size_unit_inches=inci
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=tegak
+document_properties_page_size_orientation_landscape=mendatar
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Tampilan Web Kilat:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Tidak
+document_properties_close=Tutup
+
+print_progress_message=Menyiapkan dokumen untuk pencetakan…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Batalkan
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping
+toggle_sidebar_notification.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran)
+toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping
+document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item)
+document_outline_label=Kerangka Dokumen
+attachments.title=Tampilkan Lampiran
+attachments_label=Lampiran
+thumbs.title=Tampilkan Miniatur
+thumbs_label=Miniatur
+findbar.title=Temukan di Dokumen
+findbar_label=Temukan
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Laman {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Laman {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatur Laman {{page}}
+
+# Find panel button title and messages
+find_input.title=Temukan
+find_input.placeholder=Temukan di dokumen…
+find_previous.title=Temukan kata sebelumnya
+find_previous_label=Sebelumnya
+find_next.title=Temukan lebih lanjut
+find_next_label=Selanjutnya
+find_highlight=Sorot semuanya
+find_match_case_label=Cocokkan BESAR/kecil
+find_entire_word_label=Seluruh teks
+find_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah
+find_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} dari {{total}} hasil
+find_match_count[two]={{current}} dari {{total}} hasil
+find_match_count[few]={{current}} dari {{total}} hasil
+find_match_count[many]={{current}} dari {{total}} hasil
+find_match_count[other]={{current}} dari {{total}} hasil
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[one]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[two]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[few]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[many]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[other]=Ditemukan lebih dari {{limit}}
+find_not_found=Frasa tidak ditemukan
+
+# Error panel labels
+error_more_info=Lebih Banyak Informasi
+error_less_info=Lebih Sedikit Informasi
+error_close=Tutup
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Pesan: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Berkas: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Baris: {{line}}
+rendering_error=Galat terjadi saat merender laman.
+
+# Predefined zoom values
+page_scale_width=Lebar Laman
+page_scale_fit=Muat Laman
+page_scale_auto=Perbesaran Otomatis
+page_scale_actual=Ukuran Asli
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Galat
+loading_error=Galat terjadi saat memuat PDF.
+invalid_file_error=Berkas PDF tidak valid atau rusak.
+missing_file_error=Berkas PDF tidak ada.
+unexpected_response_error=Balasan server yang tidak diharapkan.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotasi {{type}}]
+password_label=Masukkan sandi untuk membuka berkas PDF ini.
+password_invalid=Sandi tidak valid. Silakan coba lagi.
+password_ok=Oke
+password_cancel=Batal
+
+printing_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini.
+printing_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak.
+web_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat.
+document_colors_not_allowed=Dokumen PDF tidak diizinkan untuk menggunakan warnanya sendiri karena setelan 'Izinkan laman memilih warna sendiri' dinonaktifkan pada pengaturan.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/is/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/is/viewer.properties
index d24c2adf554686c23be4043b647780dbef0ed858..dca4dcdd05c4addcdf72f651a6b764a688c6a5b2 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/is/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/is/viewer.properties
@@ -1,239 +1,239 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Fyrri síða
-previous_label=Fyrri
-next.title=Næsta síða
-next_label=Næsti
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Síða
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=af {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} af {{pagesCount}})
-
-zoom_out.title=Minnka
-zoom_out_label=Minnka
-zoom_in.title=Stækka
-zoom_in_label=Stækka
-zoom.title=Aðdráttur
-presentation_mode.title=Skipta yfir á kynningarham
-presentation_mode_label=Kynningarhamur
-open_file.title=Opna skrá
-open_file_label=Opna
-print.title=Prenta
-print_label=Prenta
-download.title=Hala niður
-download_label=Hala niður
-bookmark.title=Núverandi sýn (afritaðu eða opnaðu í nýjum glugga)
-bookmark_label=Núverandi sýn
-
-# Secondary toolbar and context menu
-tools.title=Verkfæri
-tools_label=Verkfæri
-first_page.title=Fara á fyrstu síðu
-first_page.label=Fara á fyrstu síðu
-first_page_label=Fara á fyrstu síðu
-last_page.title=Fara á síðustu síðu
-last_page.label=Fara á síðustu síðu
-last_page_label=Fara á síðustu síðu
-page_rotate_cw.title=Snúa réttsælis
-page_rotate_cw.label=Snúa réttsælis
-page_rotate_cw_label=Snúa réttsælis
-page_rotate_ccw.title=Snúa rangsælis
-page_rotate_ccw.label=Snúa rangsælis
-page_rotate_ccw_label=Snúa rangsælis
-
-cursor_text_select_tool.title=Virkja textavalsáhald
-cursor_text_select_tool_label=Textavalsáhald
-cursor_hand_tool.title=Virkja handarverkfæri
-cursor_hand_tool_label=Handarverkfæri
-
-scroll_vertical.title=Nota lóðrétt skrun
-scroll_vertical_label=Lóðrétt skrun
-scroll_horizontal.title=Nota lárétt skrun
-scroll_horizontal_label=Lárétt skrun
-
-spread_none.title=Ekki taka þátt í dreifingu síðna
-spread_none_label=Engin dreifing
-spread_odd.title=Taka þátt í dreifingu síðna með oddatölum
-spread_odd_label=Oddatöludreifing
-spread_even.title=Taktu þátt í dreifingu síðna með jöfnuntölum
-spread_even_label=Jafnatöludreifing
-
-# Document properties dialog box
-document_properties.title=Eiginleikar skjals…
-document_properties_label=Eiginleikar skjals…
-document_properties_file_name=Skráarnafn:
-document_properties_file_size=Skrárstærð:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Titill:
-document_properties_author=Hönnuður:
-document_properties_subject=Efni:
-document_properties_keywords=Stikkorð:
-document_properties_creation_date=Búið til:
-document_properties_modification_date=Dags breytingar:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Höfundur:
-document_properties_producer=PDF framleiðandi:
-document_properties_version=PDF útgáfa:
-document_properties_page_count=Blaðsíðufjöldi:
-document_properties_page_size=Stærð síðu:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=skammsnið
-document_properties_page_size_orientation_landscape=langsnið
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=Já
-document_properties_linearized_no=Nei
-document_properties_close=Loka
-
-print_progress_message=Undirbý skjal fyrir prentun…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Hætta við
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Víxla hliðslá
-toggle_sidebar_notification.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi)
-toggle_sidebar_label=Víxla hliðslá
-document_outline.title=Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum)
-document_outline_label=Efnisskipan skjals
-attachments.title=Sýna viðhengi
-attachments_label=Viðhengi
-thumbs.title=Sýna smámyndir
-thumbs_label=Smámyndir
-findbar.title=Leita í skjali
-findbar_label=Leita
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Síða {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Smámynd af síðu {{page}}
-
-# Find panel button title and messages
-find_input.title=Leita
-find_input.placeholder=Leita í skjali…
-find_previous.title=Leita að fyrra tilfelli þessara orða
-find_previous_label=Fyrri
-find_next.title=Leita að næsta tilfelli þessara orða
-find_next_label=Næsti
-find_highlight=Lita allt
-find_match_case_label=Passa við stafstöðu
-find_entire_word_label=Heil orð
-find_reached_top=Náði efst í skjal, held áfram neðst
-find_reached_bottom=Náði enda skjals, held áfram efst
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} af {{total}} niðurstöðu
-find_match_count[two]={{current}} af {{total}} niðurstöðum
-find_match_count[few]={{current}} af {{total}} niðurstöðum
-find_match_count[many]={{current}} af {{total}} niðurstöðum
-find_match_count[other]={{current}} af {{total}} niðurstöðum
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður
-find_match_count_limit[one]=Fleiri en {{limit}} niðurstaða
-find_match_count_limit[two]=Fleiri en {{limit}} niðurstöður
-find_match_count_limit[few]=Fleiri en {{limit}} niðurstöður
-find_match_count_limit[many]=Fleiri en {{limit}} niðurstöður
-find_match_count_limit[other]=Fleiri en {{limit}} niðurstöður
-find_not_found=Fann ekki orðið
-
-# Error panel labels
-error_more_info=Meiri upplýsingar
-error_less_info=Minni upplýsingar
-error_close=Loka
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Skilaboð: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stafli: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Skrá: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Lína: {{line}}
-rendering_error=Upp kom villa við að birta síðuna.
-
-# Predefined zoom values
-page_scale_width=Síðubreidd
-page_scale_fit=Passa á síðu
-page_scale_auto=Sjálfvirkur aðdráttur
-page_scale_actual=Raunstærð
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Villa
-loading_error=Villa kom upp við að hlaða inn PDF.
-invalid_file_error=Ógild eða skemmd PDF skrá.
-missing_file_error=Vantar PDF skrá.
-unexpected_response_error=Óvænt svar frá netþjóni.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Skýring]
-password_label=Sláðu inn lykilorð til að opna þessa PDF skrá.
-password_invalid=Ógilt lykilorð. Reyndu aftur.
-password_ok=Í lagi
-password_cancel=Hætta við
-
-printing_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra.
-printing_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun.
-web_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir.
-document_colors_not_allowed=PDF skjöl hafa ekki leyfi til að nota sína eigin liti: “Leyfa síðum að velja eigin liti” er óvirkt í vafranum.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Fyrri síða
+previous_label=Fyrri
+next.title=Næsta síða
+next_label=Næsti
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Síða
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=af {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} af {{pagesCount}})
+
+zoom_out.title=Minnka
+zoom_out_label=Minnka
+zoom_in.title=Stækka
+zoom_in_label=Stækka
+zoom.title=Aðdráttur
+presentation_mode.title=Skipta yfir á kynningarham
+presentation_mode_label=Kynningarhamur
+open_file.title=Opna skrá
+open_file_label=Opna
+print.title=Prenta
+print_label=Prenta
+download.title=Hala niður
+download_label=Hala niður
+bookmark.title=Núverandi sýn (afritaðu eða opnaðu í nýjum glugga)
+bookmark_label=Núverandi sýn
+
+# Secondary toolbar and context menu
+tools.title=Verkfæri
+tools_label=Verkfæri
+first_page.title=Fara á fyrstu síðu
+first_page.label=Fara á fyrstu síðu
+first_page_label=Fara á fyrstu síðu
+last_page.title=Fara á síðustu síðu
+last_page.label=Fara á síðustu síðu
+last_page_label=Fara á síðustu síðu
+page_rotate_cw.title=Snúa réttsælis
+page_rotate_cw.label=Snúa réttsælis
+page_rotate_cw_label=Snúa réttsælis
+page_rotate_ccw.title=Snúa rangsælis
+page_rotate_ccw.label=Snúa rangsælis
+page_rotate_ccw_label=Snúa rangsælis
+
+cursor_text_select_tool.title=Virkja textavalsáhald
+cursor_text_select_tool_label=Textavalsáhald
+cursor_hand_tool.title=Virkja handarverkfæri
+cursor_hand_tool_label=Handarverkfæri
+
+scroll_vertical.title=Nota lóðrétt skrun
+scroll_vertical_label=Lóðrétt skrun
+scroll_horizontal.title=Nota lárétt skrun
+scroll_horizontal_label=Lárétt skrun
+
+spread_none.title=Ekki taka þátt í dreifingu síðna
+spread_none_label=Engin dreifing
+spread_odd.title=Taka þátt í dreifingu síðna með oddatölum
+spread_odd_label=Oddatöludreifing
+spread_even.title=Taktu þátt í dreifingu síðna með jöfnuntölum
+spread_even_label=Jafnatöludreifing
+
+# Document properties dialog box
+document_properties.title=Eiginleikar skjals…
+document_properties_label=Eiginleikar skjals…
+document_properties_file_name=Skráarnafn:
+document_properties_file_size=Skrárstærð:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titill:
+document_properties_author=Hönnuður:
+document_properties_subject=Efni:
+document_properties_keywords=Stikkorð:
+document_properties_creation_date=Búið til:
+document_properties_modification_date=Dags breytingar:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Höfundur:
+document_properties_producer=PDF framleiðandi:
+document_properties_version=PDF útgáfa:
+document_properties_page_count=Blaðsíðufjöldi:
+document_properties_page_size=Stærð síðu:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=skammsnið
+document_properties_page_size_orientation_landscape=langsnið
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Já
+document_properties_linearized_no=Nei
+document_properties_close=Loka
+
+print_progress_message=Undirbý skjal fyrir prentun…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Hætta við
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Víxla hliðslá
+toggle_sidebar_notification.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi)
+toggle_sidebar_label=Víxla hliðslá
+document_outline.title=Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum)
+document_outline_label=Efnisskipan skjals
+attachments.title=Sýna viðhengi
+attachments_label=Viðhengi
+thumbs.title=Sýna smámyndir
+thumbs_label=Smámyndir
+findbar.title=Leita í skjali
+findbar_label=Leita
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Síða {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Smámynd af síðu {{page}}
+
+# Find panel button title and messages
+find_input.title=Leita
+find_input.placeholder=Leita í skjali…
+find_previous.title=Leita að fyrra tilfelli þessara orða
+find_previous_label=Fyrri
+find_next.title=Leita að næsta tilfelli þessara orða
+find_next_label=Næsti
+find_highlight=Lita allt
+find_match_case_label=Passa við stafstöðu
+find_entire_word_label=Heil orð
+find_reached_top=Náði efst í skjal, held áfram neðst
+find_reached_bottom=Náði enda skjals, held áfram efst
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} af {{total}} niðurstöðu
+find_match_count[two]={{current}} af {{total}} niðurstöðum
+find_match_count[few]={{current}} af {{total}} niðurstöðum
+find_match_count[many]={{current}} af {{total}} niðurstöðum
+find_match_count[other]={{current}} af {{total}} niðurstöðum
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[one]=Fleiri en {{limit}} niðurstaða
+find_match_count_limit[two]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[few]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[many]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[other]=Fleiri en {{limit}} niðurstöður
+find_not_found=Fann ekki orðið
+
+# Error panel labels
+error_more_info=Meiri upplýsingar
+error_less_info=Minni upplýsingar
+error_close=Loka
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Skilaboð: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stafli: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Skrá: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lína: {{line}}
+rendering_error=Upp kom villa við að birta síðuna.
+
+# Predefined zoom values
+page_scale_width=Síðubreidd
+page_scale_fit=Passa á síðu
+page_scale_auto=Sjálfvirkur aðdráttur
+page_scale_actual=Raunstærð
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Villa
+loading_error=Villa kom upp við að hlaða inn PDF.
+invalid_file_error=Ógild eða skemmd PDF skrá.
+missing_file_error=Vantar PDF skrá.
+unexpected_response_error=Óvænt svar frá netþjóni.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Skýring]
+password_label=Sláðu inn lykilorð til að opna þessa PDF skrá.
+password_invalid=Ógilt lykilorð. Reyndu aftur.
+password_ok=Í lagi
+password_cancel=Hætta við
+
+printing_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra.
+printing_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun.
+web_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir.
+document_colors_not_allowed=PDF skjöl hafa ekki leyfi til að nota sína eigin liti: “Leyfa síðum að velja eigin liti” er óvirkt í vafranum.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/it/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/it/viewer.properties
index 1f0a20ac8ba91d17f7db6ead9e987ac41e7e7205..ffddea531710aeb4cfc217e7ac89bfe606e9e712 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/it/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/it/viewer.properties
@@ -1,159 +1,159 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-previous.title = Pagina precedente
-previous_label = Precedente
-next.title = Pagina successiva
-next_label = Successiva
-page.title = Pagina
-of_pages = di {{pagesCount}}
-page_of_pages = ({{pageNumber}} di {{pagesCount}})
-zoom_out.title = Riduci zoom
-zoom_out_label = Riduci zoom
-zoom_in.title = Aumenta zoom
-zoom_in_label = Aumenta zoom
-zoom.title = Zoom
-presentation_mode.title = Passa alla modalità presentazione
-presentation_mode_label = Modalità presentazione
-open_file.title = Apri file
-open_file_label = Apri
-print.title = Stampa
-print_label = Stampa
-download.title = Scarica questo documento
-download_label = Download
-bookmark.title = Visualizzazione corrente (copia o apri in una nuova finestra)
-bookmark_label = Visualizzazione corrente
-tools.title = Strumenti
-tools_label = Strumenti
-first_page.title = Vai alla prima pagina
-first_page.label = Vai alla prima pagina
-first_page_label = Vai alla prima pagina
-last_page.title = Vai all’ultima pagina
-last_page.label = Vai all’ultima pagina
-last_page_label = Vai all’ultima pagina
-page_rotate_cw.title = Ruota in senso orario
-page_rotate_cw.label = Ruota in senso orario
-page_rotate_cw_label = Ruota in senso orario
-page_rotate_ccw.title = Ruota in senso antiorario
-page_rotate_ccw.label = Ruota in senso antiorario
-page_rotate_ccw_label = Ruota in senso antiorario
-cursor_text_select_tool.title = Attiva strumento di selezione testo
-cursor_text_select_tool_label = Strumento di selezione testo
-cursor_hand_tool.title = Attiva strumento mano
-cursor_hand_tool_label = Strumento mano
-scroll_vertical.title = Scorri le pagine in verticale
-scroll_vertical_label = Scorrimento verticale
-scroll_horizontal.title = Scorri le pagine in orizzontale
-scroll_horizontal_label = Scorrimento orizzontale
-scroll_wrapped.title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente
-scroll_wrapped_label = Scorrimento con a capo automatico
-spread_none.title = Non raggruppare pagine
-spread_none_label = Nessun raggruppamento
-spread_odd.title = Crea gruppi di pagine che iniziano con numeri di pagina dispari
-spread_odd_label = Raggruppamento dispari
-spread_even.title = Crea gruppi di pagine che iniziano con numeri di pagina pari
-spread_even_label = Raggruppamento pari
-document_properties.title = Proprietà del documento…
-document_properties_label = Proprietà del documento…
-document_properties_file_name = Nome file:
-document_properties_file_size = Dimensione file:
-document_properties_kb = {{size_kb}} kB ({{size_b}} byte)
-document_properties_mb = {{size_mb}} MB ({{size_b}} byte)
-document_properties_title = Titolo:
-document_properties_author = Autore:
-document_properties_subject = Oggetto:
-document_properties_keywords = Parole chiave:
-document_properties_creation_date = Data creazione:
-document_properties_modification_date = Data modifica:
-document_properties_date_string = {{date}}, {{time}}
-document_properties_creator = Autore originale:
-document_properties_producer = Produttore PDF:
-document_properties_version = Versione PDF:
-document_properties_page_count = Conteggio pagine:
-document_properties_page_size = Dimensioni pagina:
-document_properties_page_size_unit_inches = in
-document_properties_page_size_unit_millimeters = mm
-document_properties_page_size_orientation_portrait = verticale
-document_properties_page_size_orientation_landscape = orizzontale
-document_properties_page_size_name_a3 = A3
-document_properties_page_size_name_a4 = A4
-document_properties_page_size_name_letter = Lettera
-document_properties_page_size_name_legal = Legale
-document_properties_page_size_dimension_string = {{width}} × {{height}} {{unit}} ({{orientation}})
-document_properties_page_size_dimension_name_string = {{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-document_properties_linearized = Visualizzazione web veloce:
-document_properties_linearized_yes = Sì
-document_properties_linearized_no = No
-document_properties_close = Chiudi
-print_progress_message = Preparazione documento per la stampa…
-print_progress_percent = {{progress}}%
-print_progress_close = Annulla
-toggle_sidebar.title = Attiva/disattiva barra laterale
-toggle_sidebar_notification.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati)
-toggle_sidebar_label = Attiva/disattiva barra laterale
-document_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi)
-document_outline_label = Struttura documento
-attachments.title = Visualizza allegati
-attachments_label = Allegati
-thumbs.title = Mostra le miniature
-thumbs_label = Miniature
-findbar.title = Trova nel documento
-findbar_label = Trova
-page_canvas = Pagina {{page}}
-thumb_page_title = Pagina {{page}}
-thumb_page_canvas = Miniatura della pagina {{page}}
-find_input.title = Trova
-find_input.placeholder = Trova nel documento…
-find_previous.title = Trova l’occorrenza precedente del testo da cercare
-find_previous_label = Precedente
-find_next.title = Trova l’occorrenza successiva del testo da cercare
-find_next_label = Successivo
-find_highlight = Evidenzia
-find_match_case_label = Maiuscole/minuscole
-find_entire_word_label = Parole intere
-find_reached_top = Raggiunto l’inizio della pagina, continua dalla fine
-find_reached_bottom = Raggiunta la fine della pagina, continua dall’inizio
-find_match_count = {[ plural(total) ]}
-find_match_count[one] = {{current}} di {{total}} corrispondenza
-find_match_count[two] = {{current}} di {{total}} corrispondenze
-find_match_count[few] = {{current}} di {{total}} corrispondenze
-find_match_count[many] = {{current}} di {{total}} corrispondenze
-find_match_count[other] = {{current}} di {{total}} corrispondenze
-find_match_count_limit = {[ plural(limit) ]}
-find_match_count_limit[zero] = Più di {{limit}} corrispondenze
-find_match_count_limit[one] = Più di {{limit}} corrispondenza
-find_match_count_limit[two] = Più di {{limit}} corrispondenze
-find_match_count_limit[few] = Più di {{limit}} corrispondenze
-find_match_count_limit[many] = Più di {{limit}} corrispondenze
-find_match_count_limit[other] = Più di {{limit}} corrispondenze
-find_not_found = Testo non trovato
-error_more_info = Ulteriori informazioni
-error_less_info = Nascondi dettagli
-error_close = Chiudi
-error_version_info = PDF.js v{{version}} (build: {{build}})
-error_message = Messaggio: {{message}}
-error_stack = Stack: {{stack}}
-error_file = File: {{file}}
-error_line = Riga: {{line}}
-rendering_error = Si è verificato un errore durante il rendering della pagina.
-page_scale_width = Larghezza pagina
-page_scale_fit = Adatta a una pagina
-page_scale_auto = Zoom automatico
-page_scale_actual = Dimensioni effettive
-page_scale_percent = {{scale}}%
-loading_error_indicator = Errore
-loading_error = Si è verificato un errore durante il caricamento del PDF.
-invalid_file_error = File PDF non valido o danneggiato.
-missing_file_error = File PDF non disponibile.
-unexpected_response_error = Risposta imprevista del server
-annotation_date_string = {{date}}, {{time}}
-text_annotation_type.alt = [Annotazione: {{type}}]
-password_label = Inserire la password per aprire questo file PDF.
-password_invalid = Password non corretta. Riprovare.
-password_ok = OK
-password_cancel = Annulla
-printing_not_supported = Attenzione: la stampa non è completamente supportata da questo browser.
-printing_not_ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa.
-web_fonts_disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF.
-document_colors_not_allowed = Non è possibile visualizzare i colori originali definiti nel file PDF: l’opzione del browser “Consenti alle pagine di scegliere i propri colori invece di quelli impostati” è disattivata.
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+previous.title = Pagina precedente
+previous_label = Precedente
+next.title = Pagina successiva
+next_label = Successiva
+page.title = Pagina
+of_pages = di {{pagesCount}}
+page_of_pages = ({{pageNumber}} di {{pagesCount}})
+zoom_out.title = Riduci zoom
+zoom_out_label = Riduci zoom
+zoom_in.title = Aumenta zoom
+zoom_in_label = Aumenta zoom
+zoom.title = Zoom
+presentation_mode.title = Passa alla modalità presentazione
+presentation_mode_label = Modalità presentazione
+open_file.title = Apri file
+open_file_label = Apri
+print.title = Stampa
+print_label = Stampa
+download.title = Scarica questo documento
+download_label = Download
+bookmark.title = Visualizzazione corrente (copia o apri in una nuova finestra)
+bookmark_label = Visualizzazione corrente
+tools.title = Strumenti
+tools_label = Strumenti
+first_page.title = Vai alla prima pagina
+first_page.label = Vai alla prima pagina
+first_page_label = Vai alla prima pagina
+last_page.title = Vai all’ultima pagina
+last_page.label = Vai all’ultima pagina
+last_page_label = Vai all’ultima pagina
+page_rotate_cw.title = Ruota in senso orario
+page_rotate_cw.label = Ruota in senso orario
+page_rotate_cw_label = Ruota in senso orario
+page_rotate_ccw.title = Ruota in senso antiorario
+page_rotate_ccw.label = Ruota in senso antiorario
+page_rotate_ccw_label = Ruota in senso antiorario
+cursor_text_select_tool.title = Attiva strumento di selezione testo
+cursor_text_select_tool_label = Strumento di selezione testo
+cursor_hand_tool.title = Attiva strumento mano
+cursor_hand_tool_label = Strumento mano
+scroll_vertical.title = Scorri le pagine in verticale
+scroll_vertical_label = Scorrimento verticale
+scroll_horizontal.title = Scorri le pagine in orizzontale
+scroll_horizontal_label = Scorrimento orizzontale
+scroll_wrapped.title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente
+scroll_wrapped_label = Scorrimento con a capo automatico
+spread_none.title = Non raggruppare pagine
+spread_none_label = Nessun raggruppamento
+spread_odd.title = Crea gruppi di pagine che iniziano con numeri di pagina dispari
+spread_odd_label = Raggruppamento dispari
+spread_even.title = Crea gruppi di pagine che iniziano con numeri di pagina pari
+spread_even_label = Raggruppamento pari
+document_properties.title = Proprietà del documento…
+document_properties_label = Proprietà del documento…
+document_properties_file_name = Nome file:
+document_properties_file_size = Dimensione file:
+document_properties_kb = {{size_kb}} kB ({{size_b}} byte)
+document_properties_mb = {{size_mb}} MB ({{size_b}} byte)
+document_properties_title = Titolo:
+document_properties_author = Autore:
+document_properties_subject = Oggetto:
+document_properties_keywords = Parole chiave:
+document_properties_creation_date = Data creazione:
+document_properties_modification_date = Data modifica:
+document_properties_date_string = {{date}}, {{time}}
+document_properties_creator = Autore originale:
+document_properties_producer = Produttore PDF:
+document_properties_version = Versione PDF:
+document_properties_page_count = Conteggio pagine:
+document_properties_page_size = Dimensioni pagina:
+document_properties_page_size_unit_inches = in
+document_properties_page_size_unit_millimeters = mm
+document_properties_page_size_orientation_portrait = verticale
+document_properties_page_size_orientation_landscape = orizzontale
+document_properties_page_size_name_a3 = A3
+document_properties_page_size_name_a4 = A4
+document_properties_page_size_name_letter = Lettera
+document_properties_page_size_name_legal = Legale
+document_properties_page_size_dimension_string = {{width}} × {{height}} {{unit}} ({{orientation}})
+document_properties_page_size_dimension_name_string = {{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_linearized = Visualizzazione web veloce:
+document_properties_linearized_yes = Sì
+document_properties_linearized_no = No
+document_properties_close = Chiudi
+print_progress_message = Preparazione documento per la stampa…
+print_progress_percent = {{progress}}%
+print_progress_close = Annulla
+toggle_sidebar.title = Attiva/disattiva barra laterale
+toggle_sidebar_notification.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati)
+toggle_sidebar_label = Attiva/disattiva barra laterale
+document_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi)
+document_outline_label = Struttura documento
+attachments.title = Visualizza allegati
+attachments_label = Allegati
+thumbs.title = Mostra le miniature
+thumbs_label = Miniature
+findbar.title = Trova nel documento
+findbar_label = Trova
+page_canvas = Pagina {{page}}
+thumb_page_title = Pagina {{page}}
+thumb_page_canvas = Miniatura della pagina {{page}}
+find_input.title = Trova
+find_input.placeholder = Trova nel documento…
+find_previous.title = Trova l’occorrenza precedente del testo da cercare
+find_previous_label = Precedente
+find_next.title = Trova l’occorrenza successiva del testo da cercare
+find_next_label = Successivo
+find_highlight = Evidenzia
+find_match_case_label = Maiuscole/minuscole
+find_entire_word_label = Parole intere
+find_reached_top = Raggiunto l’inizio della pagina, continua dalla fine
+find_reached_bottom = Raggiunta la fine della pagina, continua dall’inizio
+find_match_count = {[ plural(total) ]}
+find_match_count[one] = {{current}} di {{total}} corrispondenza
+find_match_count[two] = {{current}} di {{total}} corrispondenze
+find_match_count[few] = {{current}} di {{total}} corrispondenze
+find_match_count[many] = {{current}} di {{total}} corrispondenze
+find_match_count[other] = {{current}} di {{total}} corrispondenze
+find_match_count_limit = {[ plural(limit) ]}
+find_match_count_limit[zero] = Più di {{limit}} corrispondenze
+find_match_count_limit[one] = Più di {{limit}} corrispondenza
+find_match_count_limit[two] = Più di {{limit}} corrispondenze
+find_match_count_limit[few] = Più di {{limit}} corrispondenze
+find_match_count_limit[many] = Più di {{limit}} corrispondenze
+find_match_count_limit[other] = Più di {{limit}} corrispondenze
+find_not_found = Testo non trovato
+error_more_info = Ulteriori informazioni
+error_less_info = Nascondi dettagli
+error_close = Chiudi
+error_version_info = PDF.js v{{version}} (build: {{build}})
+error_message = Messaggio: {{message}}
+error_stack = Stack: {{stack}}
+error_file = File: {{file}}
+error_line = Riga: {{line}}
+rendering_error = Si è verificato un errore durante il rendering della pagina.
+page_scale_width = Larghezza pagina
+page_scale_fit = Adatta a una pagina
+page_scale_auto = Zoom automatico
+page_scale_actual = Dimensioni effettive
+page_scale_percent = {{scale}}%
+loading_error_indicator = Errore
+loading_error = Si è verificato un errore durante il caricamento del PDF.
+invalid_file_error = File PDF non valido o danneggiato.
+missing_file_error = File PDF non disponibile.
+unexpected_response_error = Risposta imprevista del server
+annotation_date_string = {{date}}, {{time}}
+text_annotation_type.alt = [Annotazione: {{type}}]
+password_label = Inserire la password per aprire questo file PDF.
+password_invalid = Password non corretta. Riprovare.
+password_ok = OK
+password_cancel = Annulla
+printing_not_supported = Attenzione: la stampa non è completamente supportata da questo browser.
+printing_not_ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa.
+web_fonts_disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF.
+document_colors_not_allowed = Non è possibile visualizzare i colori originali definiti nel file PDF: l’opzione del browser “Consenti alle pagine di scegliere i propri colori invece di quelli impostati” è disattivata.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ja/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ja/viewer.properties
index 95732a07fd154451d059bbe9ec855f9f6c113edb..eba103e45112cf5ffa3b2c979baa2720e9951f0e 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ja/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ja/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=前のページへ戻ります
-previous_label=前へ
-next.title=次のページへ進みます
-next_label=次へ
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=ページ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} / {{pagesCount}})
-
-zoom_out.title=表示を縮小します
-zoom_out_label=縮小
-zoom_in.title=表示を拡大します
-zoom_in_label=拡大
-zoom.title=拡大/縮小
-presentation_mode.title=プレゼンテーションモードに切り替えます
-presentation_mode_label=プレゼンテーションモード
-open_file.title=ファイルを開きます
-open_file_label=開く
-print.title=印刷します
-print_label=印刷
-download.title=ダウンロードします
-download_label=ダウンロード
-bookmark.title=現在のビューの URL です (コピーまたは新しいウィンドウに開く)
-bookmark_label=現在のビュー
-
-# Secondary toolbar and context menu
-tools.title=ツール
-tools_label=ツール
-first_page.title=最初のページへ移動します
-first_page.label=最初のページへ移動
-first_page_label=最初のページへ移動
-last_page.title=最後のページへ移動します
-last_page.label=最後のページへ移動
-last_page_label=最後のページへ移動
-page_rotate_cw.title=ページを右へ回転します
-page_rotate_cw.label=右回転
-page_rotate_cw_label=右回転
-page_rotate_ccw.title=ページを左へ回転します
-page_rotate_ccw.label=左回転
-page_rotate_ccw_label=左回転
-
-cursor_text_select_tool.title=テキスト選択ツールを有効にする
-cursor_text_select_tool_label=テキスト選択ツール
-cursor_hand_tool.title=手のひらツールを有効にする
-cursor_hand_tool_label=手のひらツール
-
-scroll_vertical.title=縦スクロールにする
-scroll_vertical_label=縦スクロール
-scroll_horizontal.title=横スクロールにする
-scroll_horizontal_label=横スクロール
-scroll_wrapped.title=折り返しスクロールにする
-scroll_wrapped_label=折り返しスクロール
-
-spread_none.title=見開きにしない
-spread_none_label=見開きにしない
-spread_odd.title=奇数ページ開始で見開きにする
-spread_odd_label=奇数ページ見開き
-spread_even.title=偶数ページ開始で見開きにする
-spread_even_label=偶数ページ見開き
-
-# Document properties dialog box
-document_properties.title=文書のプロパティ...
-document_properties_label=文書のプロパティ...
-document_properties_file_name=ファイル名:
-document_properties_file_size=ファイルサイズ:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=タイトル:
-document_properties_author=作成者:
-document_properties_subject=件名:
-document_properties_keywords=キーワード:
-document_properties_creation_date=作成日:
-document_properties_modification_date=更新日:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=アプリケーション:
-document_properties_producer=PDF 作成:
-document_properties_version=PDF のバージョン:
-document_properties_page_count=ページ数:
-document_properties_page_size=ページサイズ:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=縦
-document_properties_page_size_orientation_landscape=横
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=レター
-document_properties_page_size_name_legal=リーガル
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=ウェブ表示用に最適化:
-document_properties_linearized_yes=はい
-document_properties_linearized_no=いいえ
-document_properties_close=閉じる
-
-print_progress_message=文書の印刷を準備しています...
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=キャンセル
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=サイドバー表示を切り替えます
-toggle_sidebar_notification.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付)
-toggle_sidebar_label=サイドバーの切り替え
-document_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します)
-document_outline_label=文書の目次
-attachments.title=添付ファイルを表示します
-attachments_label=添付ファイル
-thumbs.title=縮小版を表示します
-thumbs_label=縮小版
-findbar.title=文書内を検索します
-findbar_label=検索
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas={{page}} ページ
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}} ページ
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} ページの縮小版
-
-# Find panel button title and messages
-find_input.title=検索
-find_input.placeholder=文書内を検索...
-find_previous.title=現在より前の位置で指定文字列が現れる部分を検索します
-find_previous_label=前へ
-find_next.title=現在より後の位置で指定文字列が現れる部分を検索します
-find_next_label=次へ
-find_highlight=すべて強調表示
-find_match_case_label=大文字/小文字を区別
-find_entire_word_label=単語一致
-find_reached_top=文書先頭に到達したので末尾から続けて検索します
-find_reached_bottom=文書末尾に到達したので先頭から続けて検索します
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} 件中 {{current}} 件目
-find_match_count[two]={{total}} 件中 {{current}} 件目
-find_match_count[few]={{total}} 件中 {{current}} 件目
-find_match_count[many]={{total}} 件中 {{current}} 件目
-find_match_count[other]={{total}} 件中 {{current}} 件目
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} 件以上一致
-find_match_count_limit[one]={{limit}} 件以上一致
-find_match_count_limit[two]={{limit}} 件以上一致
-find_match_count_limit[few]={{limit}} 件以上一致
-find_match_count_limit[many]={{limit}} 件以上一致
-find_match_count_limit[other]={{limit}} 件以上一致
-find_not_found=見つかりませんでした
-
-# Error panel labels
-error_more_info=詳細情報
-error_less_info=詳細情報を隠す
-error_close=閉じる
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (ビルド: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=メッセージ: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=スタック: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ファイル: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=行: {{line}}
-rendering_error=ページのレンダリング中にエラーが発生しました。
-
-# Predefined zoom values
-page_scale_width=幅に合わせる
-page_scale_fit=ページのサイズに合わせる
-page_scale_auto=自動ズーム
-page_scale_actual=実際のサイズ
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=エラー
-loading_error=PDF の読み込み中にエラーが発生しました。
-invalid_file_error=無効または破損した PDF ファイル。
-missing_file_error=PDF ファイルが見つかりません。
-unexpected_response_error=サーバーから予期せぬ応答がありました。
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} 注釈]
-password_label=この PDF ファイルを開くためのパスワードを入力してください。
-password_invalid=無効なパスワードです。もう一度やり直してください。
-password_ok=OK
-password_cancel=キャンセル
-
-printing_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。
-printing_not_ready=警告: PDF を印刷するための読み込みが終了していません。
-web_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。
-document_colors_not_allowed=PDF 文書は、ウェブページが指定した配色を使用することができません: 'ウェブページが指定した配色' はブラウザーで無効になっています。
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=前のページへ戻ります
+previous_label=前へ
+next.title=次のページへ進みます
+next_label=次へ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ページ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=表示を縮小します
+zoom_out_label=縮小
+zoom_in.title=表示を拡大します
+zoom_in_label=拡大
+zoom.title=拡大/縮小
+presentation_mode.title=プレゼンテーションモードに切り替えます
+presentation_mode_label=プレゼンテーションモード
+open_file.title=ファイルを開きます
+open_file_label=開く
+print.title=印刷します
+print_label=印刷
+download.title=ダウンロードします
+download_label=ダウンロード
+bookmark.title=現在のビューの URL です (コピーまたは新しいウィンドウに開く)
+bookmark_label=現在のビュー
+
+# Secondary toolbar and context menu
+tools.title=ツール
+tools_label=ツール
+first_page.title=最初のページへ移動します
+first_page.label=最初のページへ移動
+first_page_label=最初のページへ移動
+last_page.title=最後のページへ移動します
+last_page.label=最後のページへ移動
+last_page_label=最後のページへ移動
+page_rotate_cw.title=ページを右へ回転します
+page_rotate_cw.label=右回転
+page_rotate_cw_label=右回転
+page_rotate_ccw.title=ページを左へ回転します
+page_rotate_ccw.label=左回転
+page_rotate_ccw_label=左回転
+
+cursor_text_select_tool.title=テキスト選択ツールを有効にする
+cursor_text_select_tool_label=テキスト選択ツール
+cursor_hand_tool.title=手のひらツールを有効にする
+cursor_hand_tool_label=手のひらツール
+
+scroll_vertical.title=縦スクロールにする
+scroll_vertical_label=縦スクロール
+scroll_horizontal.title=横スクロールにする
+scroll_horizontal_label=横スクロール
+scroll_wrapped.title=折り返しスクロールにする
+scroll_wrapped_label=折り返しスクロール
+
+spread_none.title=見開きにしない
+spread_none_label=見開きにしない
+spread_odd.title=奇数ページ開始で見開きにする
+spread_odd_label=奇数ページ見開き
+spread_even.title=偶数ページ開始で見開きにする
+spread_even_label=偶数ページ見開き
+
+# Document properties dialog box
+document_properties.title=文書のプロパティ...
+document_properties_label=文書のプロパティ...
+document_properties_file_name=ファイル名:
+document_properties_file_size=ファイルサイズ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=タイトル:
+document_properties_author=作成者:
+document_properties_subject=件名:
+document_properties_keywords=キーワード:
+document_properties_creation_date=作成日:
+document_properties_modification_date=更新日:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=アプリケーション:
+document_properties_producer=PDF 作成:
+document_properties_version=PDF のバージョン:
+document_properties_page_count=ページ数:
+document_properties_page_size=ページサイズ:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=縦
+document_properties_page_size_orientation_landscape=横
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=レター
+document_properties_page_size_name_legal=リーガル
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ウェブ表示用に最適化:
+document_properties_linearized_yes=はい
+document_properties_linearized_no=いいえ
+document_properties_close=閉じる
+
+print_progress_message=文書の印刷を準備しています...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=キャンセル
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=サイドバー表示を切り替えます
+toggle_sidebar_notification.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付)
+toggle_sidebar_label=サイドバーの切り替え
+document_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します)
+document_outline_label=文書の目次
+attachments.title=添付ファイルを表示します
+attachments_label=添付ファイル
+thumbs.title=縮小版を表示します
+thumbs_label=縮小版
+findbar.title=文書内を検索します
+findbar_label=検索
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}} ページ
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} ページ
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} ページの縮小版
+
+# Find panel button title and messages
+find_input.title=検索
+find_input.placeholder=文書内を検索...
+find_previous.title=現在より前の位置で指定文字列が現れる部分を検索します
+find_previous_label=前へ
+find_next.title=現在より後の位置で指定文字列が現れる部分を検索します
+find_next_label=次へ
+find_highlight=すべて強調表示
+find_match_case_label=大文字/小文字を区別
+find_entire_word_label=単語一致
+find_reached_top=文書先頭に到達したので末尾から続けて検索します
+find_reached_bottom=文書末尾に到達したので先頭から続けて検索します
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} 件中 {{current}} 件目
+find_match_count[two]={{total}} 件中 {{current}} 件目
+find_match_count[few]={{total}} 件中 {{current}} 件目
+find_match_count[many]={{total}} 件中 {{current}} 件目
+find_match_count[other]={{total}} 件中 {{current}} 件目
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} 件以上一致
+find_match_count_limit[one]={{limit}} 件以上一致
+find_match_count_limit[two]={{limit}} 件以上一致
+find_match_count_limit[few]={{limit}} 件以上一致
+find_match_count_limit[many]={{limit}} 件以上一致
+find_match_count_limit[other]={{limit}} 件以上一致
+find_not_found=見つかりませんでした
+
+# Error panel labels
+error_more_info=詳細情報
+error_less_info=詳細情報を隠す
+error_close=閉じる
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ビルド: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=メッセージ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=スタック: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ファイル: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行: {{line}}
+rendering_error=ページのレンダリング中にエラーが発生しました。
+
+# Predefined zoom values
+page_scale_width=幅に合わせる
+page_scale_fit=ページのサイズに合わせる
+page_scale_auto=自動ズーム
+page_scale_actual=実際のサイズ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=エラー
+loading_error=PDF の読み込み中にエラーが発生しました。
+invalid_file_error=無効または破損した PDF ファイル。
+missing_file_error=PDF ファイルが見つかりません。
+unexpected_response_error=サーバーから予期せぬ応答がありました。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 注釈]
+password_label=この PDF ファイルを開くためのパスワードを入力してください。
+password_invalid=無効なパスワードです。もう一度やり直してください。
+password_ok=OK
+password_cancel=キャンセル
+
+printing_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。
+printing_not_ready=警告: PDF を印刷するための読み込みが終了していません。
+web_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。
+document_colors_not_allowed=PDF 文書は、ウェブページが指定した配色を使用することができません: 'ウェブページが指定した配色' はブラウザーで無効になっています。
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ka/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ka/viewer.properties
index d7a8f7a1f1e83ea1ce0fc6021600fd834992156a..e1094a1c76d78dd4e2429738bce267428dc30ca4 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ka/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ka/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=წინა გვერდი
-previous_label=წინა
-next.title=შემდეგი გვერდი
-next_label=შემდეგი
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=გვერდი
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}}-დან
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} {{pagesCount}}-დან)
-
-zoom_out.title=ზომის შემცირება
-zoom_out_label=დაშორება
-zoom_in.title=ზომის გაზრდა
-zoom_in_label=მოახლოება
-zoom.title=ზომა
-presentation_mode.title=ჩვენების რეჟიმზე გადართვა
-presentation_mode_label=ჩვენების რეჟიმი
-open_file.title=ფაილის გახსნა
-open_file_label=გახსნა
-print.title=ამობეჭდვა
-print_label=ამობეჭდვა
-download.title=ჩამოტვირთვა
-download_label=ჩამოტვირთვა
-bookmark.title=მიმდინარე ხედი (ასლის აღება ან გახსნა ახალ ფანჯარაში)
-bookmark_label=მიმდინარე ხედი
-
-# Secondary toolbar and context menu
-tools.title=ხელსაწყოები
-tools_label=ხელსაწყოები
-first_page.title=პირველ გვერდზე გადასვლა
-first_page.label=პირველ გვერდზე გადასვლა
-first_page_label=პირველ გვერდზე გადასვლა
-last_page.title=ბოლო გვერდზე გადასვლა
-last_page.label=ბოლო გვერდზე გადასვლა
-last_page_label=ბოლო გვერდზე გადასვლა
-page_rotate_cw.title=საათის ისრის მიმართულებით შებრუნება
-page_rotate_cw.label=მარჯვნივ გადაბრუნება
-page_rotate_cw_label=მარჯვნივ გადაბრუნება
-page_rotate_ccw.title=საათის ისრის საპირისპიროდ შებრუნება
-page_rotate_ccw.label=მარცხნივ გადაბრუნება
-page_rotate_ccw_label=მარცხნივ გადაბრუნება
-
-cursor_text_select_tool.title=მოსანიშნი მაჩვენებლის გამოყენება
-cursor_text_select_tool_label=მოსანიშნი მაჩვენებელი
-cursor_hand_tool.title=გადასაადგილებელი მაჩვენებლის გამოყენება
-cursor_hand_tool_label=გადასაადგილებელი
-
-scroll_vertical.title=გვერდების შვეულად ჩვენება
-scroll_vertical_label=შვეული გადაადგილება
-scroll_horizontal.title=გვერდების თარაზულად ჩვენება
-scroll_horizontal_label=განივი გადაადგილება
-scroll_wrapped.title=გვერდების ცხრილურად ჩვენება
-scroll_wrapped_label=ცხრილური გადაადგილება
-
-spread_none.title=ორ გვერდზე გაშლის გარეშე
-spread_none_label=ცალგვერდიანი ჩვენება
-spread_odd.title=ორ გვერდზე გაშლა, კენტი გვერდიდან დაწყებული
-spread_odd_label=ორ გვერდზე კენტიდან
-spread_even.title=ორ გვერდზე გაშლა, ლუწი გვერდიდან დაწყებული
-spread_even_label=ორ გვერდზე ლუწიდან
-
-# Document properties dialog box
-document_properties.title=დოკუმენტის შესახებ…
-document_properties_label=დოკუმენტის შესახებ…
-document_properties_file_name=ფაილის სახელი:
-document_properties_file_size=ფაილის მოცულობა:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი)
-document_properties_title=სათაური:
-document_properties_author=შემდგენი:
-document_properties_subject=თემა:
-document_properties_keywords=საკვანძო სიტყვები:
-document_properties_creation_date=შექმნის თარიღი:
-document_properties_modification_date=ჩასწორების თარიღი:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=შემქმნელი:
-document_properties_producer=PDF-შემქმნელი:
-document_properties_version=PDF-ვერსია:
-document_properties_page_count=გვერდების რაოდენობა:
-document_properties_page_size=გვერდის ზომა:
-document_properties_page_size_unit_inches=დუიმი
-document_properties_page_size_unit_millimeters=მმ
-document_properties_page_size_orientation_portrait=შვეულად
-document_properties_page_size_orientation_landscape=თარაზულად
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=სწრაფი შეთვალიერება:
-document_properties_linearized_yes=დიახ
-document_properties_linearized_no=არა
-document_properties_close=დახურვა
-
-print_progress_message=დოკუმენტი მზადდება ამოსაბეჭდად…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=გაუქმება
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა
-toggle_sidebar_notification.title=გვერდითა ზოლის ჩართვა/გამორთვა (დოკუმენტი შეიცავს სარჩევს/დანართს)
-toggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა
-document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორჯერ დაწკაპებით ყველა ელემენტის ჩამოშლა/აკეცვა)
-document_outline_label=დოკუმენტის სარჩევი
-attachments.title=დანართების ჩვენება
-attachments_label=დანართები
-thumbs.title=შეთვალიერება
-thumbs_label=ესკიზები
-findbar.title=პოვნა დოკუმენტში
-findbar_label=ძიება
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=გვერდი {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=გვერდი {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=გვერდის შეთვალიერება {{page}}
-
-# Find panel button title and messages
-find_input.title=ძიება
-find_input.placeholder=პოვნა დოკუმენტში…
-find_previous.title=ფრაზის წინა კონტექსტის პოვნა
-find_previous_label=წინა
-find_next.title=ფრაზის შემდეგი კონტექსტის პოვნა
-find_next_label=შემდეგი
-find_highlight=ყველას მონიშვნა
-find_match_case_label=ემთხვევა მთავრული
-find_entire_word_label=მთლიანი სიტყვები
-find_reached_top=მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან
-find_reached_bottom=მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} / {{total}} თანხვედრიდან
-find_match_count[two]={{current}} / {{total}} თანხვედრიდან
-find_match_count[few]={{current}} / {{total}} თანხვედრიდან
-find_match_count[many]={{current}} / {{total}} თანხვედრიდან
-find_match_count[other]={{current}} / {{total}} თანხვედრიდან
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}}-ზე მეტი თანხვედრა
-find_match_count_limit[one]={{limit}}-ზე მეტი თანხვედრა
-find_match_count_limit[two]={{limit}}-ზე მეტი თანხვედრა
-find_match_count_limit[few]={{limit}}-ზე მეტი თანხვედრა
-find_match_count_limit[many]={{limit}}-ზე მეტი თანხვედრა
-find_match_count_limit[other]={{limit}}-ზე მეტი თანხვედრა
-find_not_found=ფრაზა ვერ მოიძებნა
-
-# Error panel labels
-error_more_info=ვრცლად
-error_less_info=შემოკლებულად
-error_close=დახურვა
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=შეტყობინება: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=სტეკი: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ფაილი: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=ხაზი: {{line}}
-rendering_error=შეცდომა, გვერდის ჩვენებისას.
-
-# Predefined zoom values
-page_scale_width=გვერდის სიგანეზე
-page_scale_fit=მთლიანი გვერდი
-page_scale_auto=ავტომატური
-page_scale_actual=საწყისი ზომა
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=შეცდომა
-loading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას.
-invalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი.
-missing_file_error=ნაკლული PDF-ფაილი.
-unexpected_response_error=სერვერის მოულოდნელი პასუხი.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} შენიშვნა]
-password_label=შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად.
-password_invalid=არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა.
-password_ok=კარგი
-password_cancel=გაუქმება
-
-printing_not_supported=გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი.
-printing_not_ready=გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად.
-web_fonts_disabled=ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება.
-document_colors_not_allowed=PDF-დოკუმენტებს არ აქვს საკუთარი ფერების გამოყენების ნებართვა: ბრაუზერში გამორთულია „გვერდებისთვის საკუთარი ფერების გამოყენების უფლება“.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=წინა გვერდი
+previous_label=წინა
+next.title=შემდეგი გვერდი
+next_label=შემდეგი
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=გვერდი
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-დან
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} {{pagesCount}}-დან)
+
+zoom_out.title=ზომის შემცირება
+zoom_out_label=დაშორება
+zoom_in.title=ზომის გაზრდა
+zoom_in_label=მოახლოება
+zoom.title=ზომა
+presentation_mode.title=ჩვენების რეჟიმზე გადართვა
+presentation_mode_label=ჩვენების რეჟიმი
+open_file.title=ფაილის გახსნა
+open_file_label=გახსნა
+print.title=ამობეჭდვა
+print_label=ამობეჭდვა
+download.title=ჩამოტვირთვა
+download_label=ჩამოტვირთვა
+bookmark.title=მიმდინარე ხედი (ასლის აღება ან გახსნა ახალ ფანჯარაში)
+bookmark_label=მიმდინარე ხედი
+
+# Secondary toolbar and context menu
+tools.title=ხელსაწყოები
+tools_label=ხელსაწყოები
+first_page.title=პირველ გვერდზე გადასვლა
+first_page.label=პირველ გვერდზე გადასვლა
+first_page_label=პირველ გვერდზე გადასვლა
+last_page.title=ბოლო გვერდზე გადასვლა
+last_page.label=ბოლო გვერდზე გადასვლა
+last_page_label=ბოლო გვერდზე გადასვლა
+page_rotate_cw.title=საათის ისრის მიმართულებით შებრუნება
+page_rotate_cw.label=მარჯვნივ გადაბრუნება
+page_rotate_cw_label=მარჯვნივ გადაბრუნება
+page_rotate_ccw.title=საათის ისრის საპირისპიროდ შებრუნება
+page_rotate_ccw.label=მარცხნივ გადაბრუნება
+page_rotate_ccw_label=მარცხნივ გადაბრუნება
+
+cursor_text_select_tool.title=მოსანიშნი მაჩვენებლის გამოყენება
+cursor_text_select_tool_label=მოსანიშნი მაჩვენებელი
+cursor_hand_tool.title=გადასაადგილებელი მაჩვენებლის გამოყენება
+cursor_hand_tool_label=გადასაადგილებელი
+
+scroll_vertical.title=გვერდების შვეულად ჩვენება
+scroll_vertical_label=შვეული გადაადგილება
+scroll_horizontal.title=გვერდების თარაზულად ჩვენება
+scroll_horizontal_label=განივი გადაადგილება
+scroll_wrapped.title=გვერდების ცხრილურად ჩვენება
+scroll_wrapped_label=ცხრილური გადაადგილება
+
+spread_none.title=ორ გვერდზე გაშლის გარეშე
+spread_none_label=ცალგვერდიანი ჩვენება
+spread_odd.title=ორ გვერდზე გაშლა, კენტი გვერდიდან დაწყებული
+spread_odd_label=ორ გვერდზე კენტიდან
+spread_even.title=ორ გვერდზე გაშლა, ლუწი გვერდიდან დაწყებული
+spread_even_label=ორ გვერდზე ლუწიდან
+
+# Document properties dialog box
+document_properties.title=დოკუმენტის შესახებ…
+document_properties_label=დოკუმენტის შესახებ…
+document_properties_file_name=ფაილის სახელი:
+document_properties_file_size=ფაილის მოცულობა:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი)
+document_properties_title=სათაური:
+document_properties_author=შემდგენი:
+document_properties_subject=თემა:
+document_properties_keywords=საკვანძო სიტყვები:
+document_properties_creation_date=შექმნის თარიღი:
+document_properties_modification_date=ჩასწორების თარიღი:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=შემქმნელი:
+document_properties_producer=PDF-შემქმნელი:
+document_properties_version=PDF-ვერსია:
+document_properties_page_count=გვერდების რაოდენობა:
+document_properties_page_size=გვერდის ზომა:
+document_properties_page_size_unit_inches=დუიმი
+document_properties_page_size_unit_millimeters=მმ
+document_properties_page_size_orientation_portrait=შვეულად
+document_properties_page_size_orientation_landscape=თარაზულად
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=სწრაფი შეთვალიერება:
+document_properties_linearized_yes=დიახ
+document_properties_linearized_no=არა
+document_properties_close=დახურვა
+
+print_progress_message=დოკუმენტი მზადდება ამოსაბეჭდად…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=გაუქმება
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა
+toggle_sidebar_notification.title=გვერდითა ზოლის ჩართვა/გამორთვა (დოკუმენტი შეიცავს სარჩევს/დანართს)
+toggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა
+document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორჯერ დაწკაპებით ყველა ელემენტის ჩამოშლა/აკეცვა)
+document_outline_label=დოკუმენტის სარჩევი
+attachments.title=დანართების ჩვენება
+attachments_label=დანართები
+thumbs.title=შეთვალიერება
+thumbs_label=ესკიზები
+findbar.title=პოვნა დოკუმენტში
+findbar_label=ძიება
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=გვერდი {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=გვერდი {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=გვერდის შეთვალიერება {{page}}
+
+# Find panel button title and messages
+find_input.title=ძიება
+find_input.placeholder=პოვნა დოკუმენტში…
+find_previous.title=ფრაზის წინა კონტექსტის პოვნა
+find_previous_label=წინა
+find_next.title=ფრაზის შემდეგი კონტექსტის პოვნა
+find_next_label=შემდეგი
+find_highlight=ყველას მონიშვნა
+find_match_case_label=ემთხვევა მთავრული
+find_entire_word_label=მთლიანი სიტყვები
+find_reached_top=მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან
+find_reached_bottom=მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} თანხვედრიდან
+find_match_count[two]={{current}} / {{total}} თანხვედრიდან
+find_match_count[few]={{current}} / {{total}} თანხვედრიდან
+find_match_count[many]={{current}} / {{total}} თანხვედრიდან
+find_match_count[other]={{current}} / {{total}} თანხვედრიდან
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[one]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[two]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[few]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[many]={{limit}}-ზე მეტი თანხვედრა
+find_match_count_limit[other]={{limit}}-ზე მეტი თანხვედრა
+find_not_found=ფრაზა ვერ მოიძებნა
+
+# Error panel labels
+error_more_info=ვრცლად
+error_less_info=შემოკლებულად
+error_close=დახურვა
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=შეტყობინება: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=სტეკი: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ფაილი: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ხაზი: {{line}}
+rendering_error=შეცდომა, გვერდის ჩვენებისას.
+
+# Predefined zoom values
+page_scale_width=გვერდის სიგანეზე
+page_scale_fit=მთლიანი გვერდი
+page_scale_auto=ავტომატური
+page_scale_actual=საწყისი ზომა
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=შეცდომა
+loading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას.
+invalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი.
+missing_file_error=ნაკლული PDF-ფაილი.
+unexpected_response_error=სერვერის მოულოდნელი პასუხი.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} შენიშვნა]
+password_label=შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად.
+password_invalid=არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა.
+password_ok=კარგი
+password_cancel=გაუქმება
+
+printing_not_supported=გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი.
+printing_not_ready=გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად.
+web_fonts_disabled=ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება.
+document_colors_not_allowed=PDF-დოკუმენტებს არ აქვს საკუთარი ფერების გამოყენების ნებართვა: ბრაუზერში გამორთულია „გვერდებისთვის საკუთარი ფერების გამოყენების უფლება“.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kab/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kab/viewer.properties
index e3d0dc4b1a30d3ce3c730fe1246e2190860ee79c..606be756a8903d5bc9db626115160a0f8d8c0b52 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kab/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kab/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Asebter azewwar
-previous_label=Azewwar
-next.title=Asebter d-iteddun
-next_label=Ddu ɣer zdat
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Asebter
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=ɣef {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} n {{pagesCount}})
-
-zoom_out.title=Semẓi
-zoom_out_label=Semẓi
-zoom_in.title=Semɣeṛ
-zoom_in_label=Semɣeṛ
-zoom.title=Semɣeṛ/Semẓi
-presentation_mode.title=Uɣal ɣer Uskar Tihawt
-presentation_mode_label=Askar Tihawt
-open_file.title=Ldi Afaylu
-open_file_label=Ldi
-print.title=Siggez
-print_label=Siggez
-download.title=Sider
-download_label=Azdam
-bookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut)
-bookmark_label=Askan amiran
-
-# Secondary toolbar and context menu
-tools.title=Ifecka
-tools_label=Ifecka
-first_page.title=Ddu ɣer usebter amezwaru
-first_page.label=Ddu ɣer usebter amezwaru
-first_page_label=Ddu ɣer usebter amezwaru
-last_page.title=Ddu ɣer usebter aneggaru
-last_page.label=Ddu ɣer usebter aneggaru
-last_page_label=Ddu ɣer usebter aneggaru
-page_rotate_cw.title=Tuzzya tusrigt
-page_rotate_cw.label=Tuzzya tusrigt
-page_rotate_cw_label=Tuzzya tusrigt
-page_rotate_ccw.title=Tuzzya amgal-usrig
-page_rotate_ccw.label=Tuzzya amgal-usrig
-page_rotate_ccw_label=Tuzzya amgal-usrig
-
-cursor_text_select_tool.title=Rmed afecku n tefrant n uḍris
-cursor_text_select_tool_label=Afecku n tefrant n uḍris
-cursor_hand_tool.title=Rmed afecku afus
-cursor_hand_tool_label=Afecku afus
-
-scroll_vertical.title=Seqdec adrurem ubdid
-scroll_vertical_label=Adrurem ubdid
-scroll_horizontal.title=Seqdec adrurem aglawan
-scroll_horizontal_label=Adrurem aglawan
-scroll_wrapped.title=Seqdec adrurem yuẓen
-scroll_wrapped_label=Adrurem yuẓen
-
-spread_none.title=Ur sedday ara isiɣzaf n usebter
-spread_none_label=Ulac isiɣzaf
-spread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen
-spread_odd_label=Isiɣzaf irayuganen
-spread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen
-spread_even_label=Isiɣzaf iyuganen
-
-# Document properties dialog box
-document_properties.title=Taɣaṛa n isemli…
-document_properties_label=Taɣaṛa n isemli…
-document_properties_file_name=Isem n ufaylu:
-document_properties_file_size=Teɣzi n ufaylu:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MAṬ ({{size_b}} iṭamḍanen)
-document_properties_title=Azwel:
-document_properties_author=Ameskar:
-document_properties_subject=Amgay:
-document_properties_keywords=Awalen n tsaruţ
-document_properties_creation_date=Azemz n tmerna:
-document_properties_modification_date=Azemz n usnifel:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Yerna-t:
-document_properties_producer=Afecku n uselket PDF:
-document_properties_version=Lqem PDF:
-document_properties_page_count=Amḍan n isebtar:
-document_properties_page_size=Tuγzi n usebter:
-document_properties_page_size_unit_inches=deg
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=s teɣzi
-document_properties_page_size_orientation_landscape=s tehri
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Asekkil
-document_properties_page_size_name_legal=Usḍif
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Taskant Web taruradt:
-document_properties_linearized_yes=Ih
-document_properties_linearized_no=Ala
-document_properties_close=Mdel
-
-print_progress_message=Aheggi i usiggez n isemli…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Sefsex
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Sken/Fer agalis adisan
-toggle_sidebar_notification.title=Ffer/Sken agalis adisan (isemli yegber aɣawas/imeddayen)
-toggle_sidebar_label=Sken/Fer agalis adisan
-document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa)
-document_outline_label=Isɣalen n isebtar
-attachments.title=Sken ticeqqufin yeddan
-attachments_label=Ticeqqufin yeddan
-thumbs.title=Sken tanfult.
-thumbs_label=Tinfulin
-findbar.title=Nadi deg isemli
-findbar_label=Nadi
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Asebter {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Asebter {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Tanfult n usebter {{page}}
-
-# Find panel button title and messages
-find_input.title=Nadi
-find_input.placeholder=Nadi deg isemli…
-find_previous.title=Aff-d tamseḍriwt n twinest n deffir
-find_previous_label=Azewwar
-find_next.title=Aff-d timseḍriwt n twinest d-iteddun
-find_next_label=Ddu ɣer zdat
-find_highlight=Err izirig imaṛṛa
-find_match_case_label=Qadeṛ amasal n isekkilen
-find_entire_word_label=Awalen iččuranen
-find_reached_top=Yabbeḍ s afella n usebter, tuɣalin s wadda
-find_reached_bottom=Tebḍeḍ s adda n usebter, tuɣalin s afella
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} seg {{total}} n tmeɣṛuḍin
-find_match_count[two]={{current}} seg {{total}} n tmeɣṛuḍin
-find_match_count[few]={{current}} seg {{total}} n tmeɣṛuḍin
-find_match_count[many]={{current}} seg {{total}} n tmeɣṛuḍin
-find_match_count[other]={{current}} seg {{total}} n tmeɣṛuḍin
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuḍin
-find_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuḍin
-find_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuḍin
-find_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuḍin
-find_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuḍin
-find_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuḍin
-find_not_found=Ulac tawinest
-
-# Error panel labels
-error_more_info=Ugar n telɣut
-error_less_info=Drus n isalen
-error_close=Mdel
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Izen: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Tanebdant: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Afaylu: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Izirig: {{line}}
-rendering_error=Teḍra-d tuccḍa deg uskan n usebter.
-
-# Predefined zoom values
-page_scale_width=Tehri n usebter
-page_scale_fit=Asebter imaṛṛa
-page_scale_auto=Asemɣeṛ/Asemẓi awurman
-page_scale_actual=Teɣzi tilawt
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Teḍra-d tuccḍa deg alluy n PDF:
-invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ.
-missing_file_error=Ulac afaylu PDF.
-unexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Tabzimt {{type}}]
-password_label=Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF
-password_invalid=Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen.
-password_ok=IH
-password_cancel=Sefsex
-
-printing_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a.
-printing_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez.
-web_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF.
-document_colors_not_allowed=Isemliyen PDF ur zmiren ara ad sqedcen initen-nsen: 'Sireg isebtar akken ad fernen initen-nsen' ur yermid ara deg iminig.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Asebter azewwar
+previous_label=Azewwar
+next.title=Asebter d-iteddun
+next_label=Ddu ɣer zdat
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Asebter
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ɣef {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} n {{pagesCount}})
+
+zoom_out.title=Semẓi
+zoom_out_label=Semẓi
+zoom_in.title=Semɣeṛ
+zoom_in_label=Semɣeṛ
+zoom.title=Semɣeṛ/Semẓi
+presentation_mode.title=Uɣal ɣer Uskar Tihawt
+presentation_mode_label=Askar Tihawt
+open_file.title=Ldi Afaylu
+open_file_label=Ldi
+print.title=Siggez
+print_label=Siggez
+download.title=Sider
+download_label=Azdam
+bookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut)
+bookmark_label=Askan amiran
+
+# Secondary toolbar and context menu
+tools.title=Ifecka
+tools_label=Ifecka
+first_page.title=Ddu ɣer usebter amezwaru
+first_page.label=Ddu ɣer usebter amezwaru
+first_page_label=Ddu ɣer usebter amezwaru
+last_page.title=Ddu ɣer usebter aneggaru
+last_page.label=Ddu ɣer usebter aneggaru
+last_page_label=Ddu ɣer usebter aneggaru
+page_rotate_cw.title=Tuzzya tusrigt
+page_rotate_cw.label=Tuzzya tusrigt
+page_rotate_cw_label=Tuzzya tusrigt
+page_rotate_ccw.title=Tuzzya amgal-usrig
+page_rotate_ccw.label=Tuzzya amgal-usrig
+page_rotate_ccw_label=Tuzzya amgal-usrig
+
+cursor_text_select_tool.title=Rmed afecku n tefrant n uḍris
+cursor_text_select_tool_label=Afecku n tefrant n uḍris
+cursor_hand_tool.title=Rmed afecku afus
+cursor_hand_tool_label=Afecku afus
+
+scroll_vertical.title=Seqdec adrurem ubdid
+scroll_vertical_label=Adrurem ubdid
+scroll_horizontal.title=Seqdec adrurem aglawan
+scroll_horizontal_label=Adrurem aglawan
+scroll_wrapped.title=Seqdec adrurem yuẓen
+scroll_wrapped_label=Adrurem yuẓen
+
+spread_none.title=Ur sedday ara isiɣzaf n usebter
+spread_none_label=Ulac isiɣzaf
+spread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen
+spread_odd_label=Isiɣzaf irayuganen
+spread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen
+spread_even_label=Isiɣzaf iyuganen
+
+# Document properties dialog box
+document_properties.title=Taɣaṛa n isemli…
+document_properties_label=Taɣaṛa n isemli…
+document_properties_file_name=Isem n ufaylu:
+document_properties_file_size=Teɣzi n ufaylu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MAṬ ({{size_b}} iṭamḍanen)
+document_properties_title=Azwel:
+document_properties_author=Ameskar:
+document_properties_subject=Amgay:
+document_properties_keywords=Awalen n tsaruţ
+document_properties_creation_date=Azemz n tmerna:
+document_properties_modification_date=Azemz n usnifel:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yerna-t:
+document_properties_producer=Afecku n uselket PDF:
+document_properties_version=Lqem PDF:
+document_properties_page_count=Amḍan n isebtar:
+document_properties_page_size=Tuγzi n usebter:
+document_properties_page_size_unit_inches=deg
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=s teɣzi
+document_properties_page_size_orientation_landscape=s tehri
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Asekkil
+document_properties_page_size_name_legal=Usḍif
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Taskant Web taruradt:
+document_properties_linearized_yes=Ih
+document_properties_linearized_no=Ala
+document_properties_close=Mdel
+
+print_progress_message=Aheggi i usiggez n isemli…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Sefsex
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sken/Fer agalis adisan
+toggle_sidebar_notification.title=Ffer/Sken agalis adisan (isemli yegber aɣawas/imeddayen)
+toggle_sidebar_label=Sken/Fer agalis adisan
+document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa)
+document_outline_label=Isɣalen n isebtar
+attachments.title=Sken ticeqqufin yeddan
+attachments_label=Ticeqqufin yeddan
+thumbs.title=Sken tanfult.
+thumbs_label=Tinfulin
+findbar.title=Nadi deg isemli
+findbar_label=Nadi
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Asebter {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Asebter {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Tanfult n usebter {{page}}
+
+# Find panel button title and messages
+find_input.title=Nadi
+find_input.placeholder=Nadi deg isemli…
+find_previous.title=Aff-d tamseḍriwt n twinest n deffir
+find_previous_label=Azewwar
+find_next.title=Aff-d timseḍriwt n twinest d-iteddun
+find_next_label=Ddu ɣer zdat
+find_highlight=Err izirig imaṛṛa
+find_match_case_label=Qadeṛ amasal n isekkilen
+find_entire_word_label=Awalen iččuranen
+find_reached_top=Yabbeḍ s afella n usebter, tuɣalin s wadda
+find_reached_bottom=Tebḍeḍ s adda n usebter, tuɣalin s afella
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[two]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[few]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[many]={{current}} seg {{total}} n tmeɣṛuḍin
+find_match_count[other]={{current}} seg {{total}} n tmeɣṛuḍin
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuḍin
+find_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuḍin
+find_not_found=Ulac tawinest
+
+# Error panel labels
+error_more_info=Ugar n telɣut
+error_less_info=Drus n isalen
+error_close=Mdel
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Izen: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Tanebdant: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Afaylu: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Izirig: {{line}}
+rendering_error=Teḍra-d tuccḍa deg uskan n usebter.
+
+# Predefined zoom values
+page_scale_width=Tehri n usebter
+page_scale_fit=Asebter imaṛṛa
+page_scale_auto=Asemɣeṛ/Asemẓi awurman
+page_scale_actual=Teɣzi tilawt
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Teḍra-d tuccḍa deg alluy n PDF:
+invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ.
+missing_file_error=Ulac afaylu PDF.
+unexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Tabzimt {{type}}]
+password_label=Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF
+password_invalid=Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen.
+password_ok=IH
+password_cancel=Sefsex
+
+printing_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a.
+printing_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez.
+web_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF.
+document_colors_not_allowed=Isemliyen PDF ur zmiren ara ad sqedcen initen-nsen: 'Sireg isebtar akken ad fernen initen-nsen' ur yermid ara deg iminig.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kk/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kk/viewer.properties
index 389b854b57b7b41bf22293bd2ab6a2e674bfbaea..fa8d8a3ebdef3ccdceae3d9354a95ec246def69a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kk/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kk/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Алдыңғы парақ
-previous_label=Алдыңғысы
-next.title=Келесі парақ
-next_label=Келесі
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Парақ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} ішінен
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен)
-
-zoom_out.title=Кішірейту
-zoom_out_label=Кішірейту
-zoom_in.title=Үлкейту
-zoom_in_label=Үлкейту
-zoom.title=Масштаб
-presentation_mode.title=Презентация режиміне ауысу
-presentation_mode_label=Презентация режимі
-open_file.title=Файлды ашу
-open_file_label=Ашу
-print.title=Баспаға шығару
-print_label=Баспаға шығару
-download.title=Жүктеп алу
-download_label=Жүктеп алу
-bookmark.title=Ағымдағы көрініс (көшіру не жаңа терезеде ашу)
-bookmark_label=Ағымдағы көрініс
-
-# Secondary toolbar and context menu
-tools.title=Құралдар
-tools_label=Құралдар
-first_page.title=Алғашқы параққа өту
-first_page.label=Алғашқы параққа өту
-first_page_label=Алғашқы параққа өту
-last_page.title=Соңғы параққа өту
-last_page.label=Соңғы параққа өту
-last_page_label=Соңғы параққа өту
-page_rotate_cw.title=Сағат тілі бағытымен айналдыру
-page_rotate_cw.label=Сағат тілі бағытымен бұру
-page_rotate_cw_label=Сағат тілі бағытымен бұру
-page_rotate_ccw.title=Сағат тілі бағытына қарсы бұру
-page_rotate_ccw.label=Сағат тілі бағытына қарсы бұру
-page_rotate_ccw_label=Сағат тілі бағытына қарсы бұру
-
-cursor_text_select_tool.title=Мәтінді таңдау құралын іске қосу
-cursor_text_select_tool_label=Мәтінді таңдау құралы
-cursor_hand_tool.title=Қол құралын іске қосу
-cursor_hand_tool_label=Қол құралы
-
-scroll_vertical.title=Вертикалды айналдыруды қолдану
-scroll_vertical_label=Вертикалды айналдыру
-scroll_horizontal.title=Горизонталды айналдыруды қолдану
-scroll_horizontal_label=Горизонталды айналдыру
-scroll_wrapped.title=Масштабталатын айналдыруды қолдану
-scroll_wrapped_label=Масштабталатын айналдыру
-
-spread_none.title=Жазық беттер режимін қолданбау
-spread_none_label=Жазық беттер режимсіз
-spread_odd.title=Жазық беттер тақ нөмірлі беттерден басталады
-spread_odd_label=Тақ нөмірлі беттер сол жақтан
-spread_even.title=Жазық беттер жұп нөмірлі беттерден басталады
-spread_even_label=Жұп нөмірлі беттер сол жақтан
-
-# Document properties dialog box
-document_properties.title=Құжат қасиеттері…
-document_properties_label=Құжат қасиеттері…
-document_properties_file_name=Файл аты:
-document_properties_file_size=Файл өлшемі:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
-document_properties_title=Тақырыбы:
-document_properties_author=Авторы:
-document_properties_subject=Тақырыбы:
-document_properties_keywords=Кілт сөздер:
-document_properties_creation_date=Жасалған күні:
-document_properties_modification_date=Түзету күні:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Жасаған:
-document_properties_producer=PDF өндірген:
-document_properties_version=PDF нұсқасы:
-document_properties_page_count=Беттер саны:
-document_properties_page_size=Бет өлшемі:
-document_properties_page_size_unit_inches=дюйм
-document_properties_page_size_unit_millimeters=мм
-document_properties_page_size_orientation_portrait=тік
-document_properties_page_size_orientation_landscape=жатық
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Жылдам Web көрінісі:
-document_properties_linearized_yes=Иә
-document_properties_linearized_no=Жоқ
-document_properties_close=Жабу
-
-print_progress_message=Құжатты баспаға шығару үшін дайындау…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Бас тарту
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Бүйір панелін көрсету/жасыру
-toggle_sidebar_notification.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар бар)
-toggle_sidebar_label=Бүйір панелін көрсету/жасыру
-document_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек)
-document_outline_label=Құжат құрамасы
-attachments.title=Салынымдарды көрсету
-attachments_label=Салынымдар
-thumbs.title=Кіші көріністерді көрсету
-thumbs_label=Кіші көріністер
-findbar.title=Құжаттан табу
-findbar_label=Табу
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Бет {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}} парағы
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} парағы үшін кіші көрінісі
-
-# Find panel button title and messages
-find_input.title=Табу
-find_input.placeholder=Құжаттан табу…
-find_previous.title=Осы сөздердің мәтіннен алдыңғы кездесуін табу
-find_previous_label=Алдыңғысы
-find_next.title=Осы сөздердің мәтіннен келесі кездесуін табу
-find_next_label=Келесі
-find_highlight=Барлығын түспен ерекшелеу
-find_match_case_label=Регистрді ескеру
-find_entire_word_label=Сөздер толығымен
-find_reached_top=Құжаттың басына жеттік, соңынан бастап жалғастырамыз
-find_reached_bottom=Құжаттың соңына жеттік, басынан бастап жалғастырамыз
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} / {{total}} сәйкестік
-find_match_count[two]={{current}} / {{total}} сәйкестік
-find_match_count[few]={{current}} / {{total}} сәйкестік
-find_match_count[many]={{current}} / {{total}} сәйкестік
-find_match_count[other]={{current}} / {{total}} сәйкестік
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} сәйкестіктен көп
-find_match_count_limit[one]={{limit}} сәйкестіктен көп
-find_match_count_limit[two]={{limit}} сәйкестіктен көп
-find_match_count_limit[few]={{limit}} сәйкестіктен көп
-find_match_count_limit[many]={{limit}} сәйкестіктен көп
-find_match_count_limit[other]={{limit}} сәйкестіктен көп
-find_not_found=Сөз(дер) табылмады
-
-# Error panel labels
-error_more_info=Көбірек ақпарат
-error_less_info=Азырақ ақпарат
-error_close=Жабу
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (жинақ: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Хабарлама: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Стек: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Файл: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Жол: {{line}}
-rendering_error=Парақты өңдеу кезінде қате кетті.
-
-# Predefined zoom values
-page_scale_width=Парақ ені
-page_scale_fit=Парақты сыйдыру
-page_scale_auto=Автомасштабтау
-page_scale_actual=Нақты өлшемі
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Қате
-loading_error=PDF жүктеу кезінде қате кетті.
-invalid_file_error=Зақымдалған немесе қате PDF файл.
-missing_file_error=PDF файлы жоқ.
-unexpected_response_error=Сервердің күтпеген жауабы.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} аңдатпасы]
-password_label=Бұл PDF файлын ашу үшін парольді енгізіңіз.
-password_invalid=Пароль дұрыс емес. Қайталап көріңіз.
-password_ok=ОК
-password_cancel=Бас тарту
-
-printing_not_supported=Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды.
-printing_not_ready=Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады.
-web_fonts_disabled=Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес.
-document_colors_not_allowed=PDF құжаттарына өздік түстерді қолдану рұқсат етілмеген: бұл браузерде 'Веб-сайттарға өздерінің түстерін қолдануға рұқсат беру' мүмкіндігі сөндірулі тұр.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Алдыңғы парақ
+previous_label=Алдыңғысы
+next.title=Келесі парақ
+next_label=Келесі
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Парақ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ішінен
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен)
+
+zoom_out.title=Кішірейту
+zoom_out_label=Кішірейту
+zoom_in.title=Үлкейту
+zoom_in_label=Үлкейту
+zoom.title=Масштаб
+presentation_mode.title=Презентация режиміне ауысу
+presentation_mode_label=Презентация режимі
+open_file.title=Файлды ашу
+open_file_label=Ашу
+print.title=Баспаға шығару
+print_label=Баспаға шығару
+download.title=Жүктеп алу
+download_label=Жүктеп алу
+bookmark.title=Ағымдағы көрініс (көшіру не жаңа терезеде ашу)
+bookmark_label=Ағымдағы көрініс
+
+# Secondary toolbar and context menu
+tools.title=Құралдар
+tools_label=Құралдар
+first_page.title=Алғашқы параққа өту
+first_page.label=Алғашқы параққа өту
+first_page_label=Алғашқы параққа өту
+last_page.title=Соңғы параққа өту
+last_page.label=Соңғы параққа өту
+last_page_label=Соңғы параққа өту
+page_rotate_cw.title=Сағат тілі бағытымен айналдыру
+page_rotate_cw.label=Сағат тілі бағытымен бұру
+page_rotate_cw_label=Сағат тілі бағытымен бұру
+page_rotate_ccw.title=Сағат тілі бағытына қарсы бұру
+page_rotate_ccw.label=Сағат тілі бағытына қарсы бұру
+page_rotate_ccw_label=Сағат тілі бағытына қарсы бұру
+
+cursor_text_select_tool.title=Мәтінді таңдау құралын іске қосу
+cursor_text_select_tool_label=Мәтінді таңдау құралы
+cursor_hand_tool.title=Қол құралын іске қосу
+cursor_hand_tool_label=Қол құралы
+
+scroll_vertical.title=Вертикалды айналдыруды қолдану
+scroll_vertical_label=Вертикалды айналдыру
+scroll_horizontal.title=Горизонталды айналдыруды қолдану
+scroll_horizontal_label=Горизонталды айналдыру
+scroll_wrapped.title=Масштабталатын айналдыруды қолдану
+scroll_wrapped_label=Масштабталатын айналдыру
+
+spread_none.title=Жазық беттер режимін қолданбау
+spread_none_label=Жазық беттер режимсіз
+spread_odd.title=Жазық беттер тақ нөмірлі беттерден басталады
+spread_odd_label=Тақ нөмірлі беттер сол жақтан
+spread_even.title=Жазық беттер жұп нөмірлі беттерден басталады
+spread_even_label=Жұп нөмірлі беттер сол жақтан
+
+# Document properties dialog box
+document_properties.title=Құжат қасиеттері…
+document_properties_label=Құжат қасиеттері…
+document_properties_file_name=Файл аты:
+document_properties_file_size=Файл өлшемі:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Тақырыбы:
+document_properties_author=Авторы:
+document_properties_subject=Тақырыбы:
+document_properties_keywords=Кілт сөздер:
+document_properties_creation_date=Жасалған күні:
+document_properties_modification_date=Түзету күні:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Жасаған:
+document_properties_producer=PDF өндірген:
+document_properties_version=PDF нұсқасы:
+document_properties_page_count=Беттер саны:
+document_properties_page_size=Бет өлшемі:
+document_properties_page_size_unit_inches=дюйм
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=тік
+document_properties_page_size_orientation_landscape=жатық
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Жылдам Web көрінісі:
+document_properties_linearized_yes=Иә
+document_properties_linearized_no=Жоқ
+document_properties_close=Жабу
+
+print_progress_message=Құжатты баспаға шығару үшін дайындау…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Бас тарту
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Бүйір панелін көрсету/жасыру
+toggle_sidebar_notification.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар бар)
+toggle_sidebar_label=Бүйір панелін көрсету/жасыру
+document_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек)
+document_outline_label=Құжат құрамасы
+attachments.title=Салынымдарды көрсету
+attachments_label=Салынымдар
+thumbs.title=Кіші көріністерді көрсету
+thumbs_label=Кіші көріністер
+findbar.title=Құжаттан табу
+findbar_label=Табу
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Бет {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} парағы
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} парағы үшін кіші көрінісі
+
+# Find panel button title and messages
+find_input.title=Табу
+find_input.placeholder=Құжаттан табу…
+find_previous.title=Осы сөздердің мәтіннен алдыңғы кездесуін табу
+find_previous_label=Алдыңғысы
+find_next.title=Осы сөздердің мәтіннен келесі кездесуін табу
+find_next_label=Келесі
+find_highlight=Барлығын түспен ерекшелеу
+find_match_case_label=Регистрді ескеру
+find_entire_word_label=Сөздер толығымен
+find_reached_top=Құжаттың басына жеттік, соңынан бастап жалғастырамыз
+find_reached_bottom=Құжаттың соңына жеттік, басынан бастап жалғастырамыз
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} сәйкестік
+find_match_count[two]={{current}} / {{total}} сәйкестік
+find_match_count[few]={{current}} / {{total}} сәйкестік
+find_match_count[many]={{current}} / {{total}} сәйкестік
+find_match_count[other]={{current}} / {{total}} сәйкестік
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} сәйкестіктен көп
+find_match_count_limit[one]={{limit}} сәйкестіктен көп
+find_match_count_limit[two]={{limit}} сәйкестіктен көп
+find_match_count_limit[few]={{limit}} сәйкестіктен көп
+find_match_count_limit[many]={{limit}} сәйкестіктен көп
+find_match_count_limit[other]={{limit}} сәйкестіктен көп
+find_not_found=Сөз(дер) табылмады
+
+# Error panel labels
+error_more_info=Көбірек ақпарат
+error_less_info=Азырақ ақпарат
+error_close=Жабу
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (жинақ: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Хабарлама: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Жол: {{line}}
+rendering_error=Парақты өңдеу кезінде қате кетті.
+
+# Predefined zoom values
+page_scale_width=Парақ ені
+page_scale_fit=Парақты сыйдыру
+page_scale_auto=Автомасштабтау
+page_scale_actual=Нақты өлшемі
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Қате
+loading_error=PDF жүктеу кезінде қате кетті.
+invalid_file_error=Зақымдалған немесе қате PDF файл.
+missing_file_error=PDF файлы жоқ.
+unexpected_response_error=Сервердің күтпеген жауабы.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} аңдатпасы]
+password_label=Бұл PDF файлын ашу үшін парольді енгізіңіз.
+password_invalid=Пароль дұрыс емес. Қайталап көріңіз.
+password_ok=ОК
+password_cancel=Бас тарту
+
+printing_not_supported=Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды.
+printing_not_ready=Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады.
+web_fonts_disabled=Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес.
+document_colors_not_allowed=PDF құжаттарына өздік түстерді қолдану рұқсат етілмеген: бұл браузерде 'Веб-сайттарға өздерінің түстерін қолдануға рұқсат беру' мүмкіндігі сөндірулі тұр.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/km/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/km/viewer.properties
index e5403cc1614227fdb0941ba801614684bb11051a..4a78a4400f2f60ce01dd3e40bea1e2d874b50eb4 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/km/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/km/viewer.properties
@@ -1,184 +1,184 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=ទំព័រមុន
-previous_label=មុន
-next.title=ទំព័របន្ទាប់
-next_label=បន្ទាប់
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=ទំព័រ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=នៃ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} នៃ {{pagesCount}})
-
-zoom_out.title=បង្រួម
-zoom_out_label=បង្រួម
-zoom_in.title=ពង្រីក
-zoom_in_label=ពង្រីក
-zoom.title=ពង្រីក
-presentation_mode.title=ប្ដូរទៅរបៀបបទបង្ហាញ
-presentation_mode_label=របៀបបទបង្ហាញ
-open_file.title=បើកឯកសារ
-open_file_label=បើក
-print.title=បោះពុម្ព
-print_label=បោះពុម្ព
-download.title=ទាញយក
-download_label=ទាញយក
-bookmark.title=ទិដ្ឋភាពបច្ចុប្បន្ន (ចម្លង ឬបើកនៅក្នុងបង្អួចថ្មី)
-bookmark_label=ទិដ្ឋភាពបច្ចុប្បន្ន
-
-# Secondary toolbar and context menu
-tools.title=ឧបករណ៍
-tools_label=ឧបករណ៍
-first_page.title=ទៅកាន់ទំព័រដំបូង
-first_page.label=ទៅកាន់ទំព័រដំបូង
-first_page_label=ទៅកាន់ទំព័រដំបូង
-last_page.title=ទៅកាន់ទំព័រចុងក្រោយ
-last_page.label=ទៅកាន់ទំព័រចុងក្រោយ
-last_page_label=ទៅកាន់ទំព័រចុងក្រោយ
-page_rotate_cw.title=បង្វិលស្របទ្រនិចនាឡិកា
-page_rotate_cw.label=បង្វិលស្របទ្រនិចនាឡិកា
-page_rotate_cw_label=បង្វិលស្របទ្រនិចនាឡិកា
-page_rotate_ccw.title=បង្វិលច្រាសទ្រនិចនាឡិកា
-page_rotate_ccw.label=បង្វិលច្រាសទ្រនិចនាឡិកា
-page_rotate_ccw_label=បង្វិលច្រាសទ្រនិចនាឡិកា
-
-cursor_text_select_tool.title=បើកឧបករណ៍ជ្រើសអត្ថបទ
-cursor_text_select_tool_label=ឧបករណ៍ជ្រើសអត្ថបទ
-cursor_hand_tool.title=បើកឧបករណ៍ដៃ
-cursor_hand_tool_label=ឧបករណ៍ដៃ
-
-# Document properties dialog box
-document_properties.title=លក្ខណសម្បត្តិឯកសារ…
-document_properties_label=លក្ខណសម្បត្តិឯកសារ…
-document_properties_file_name=ឈ្មោះឯកសារ៖
-document_properties_file_size=ទំហំឯកសារ៖
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} បៃ)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} បៃ)
-document_properties_title=ចំណងជើង៖
-document_properties_author=អ្នកនិពន្ធ៖
-document_properties_subject=ប្រធានបទ៖
-document_properties_keywords=ពាក្យគន្លឹះ៖
-document_properties_creation_date=កាលបរិច្ឆេទបង្កើត៖
-document_properties_modification_date=កាលបរិច្ឆេទកែប្រែ៖
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=អ្នកបង្កើត៖
-document_properties_producer=កម្មវិធីបង្កើត PDF ៖
-document_properties_version=កំណែ PDF ៖
-document_properties_page_count=ចំនួនទំព័រ៖
-document_properties_close=បិទ
-
-print_progress_message=កំពុងរៀបចំឯកសារសម្រាប់បោះពុម្ព…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=បោះបង់
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=បិទ/បើកគ្រាប់រំកិល
-toggle_sidebar_notification.title=បិទ/បើករបារចំហៀង (ឯកសារមានមាតិកានៅក្រៅ/attachments)
-toggle_sidebar_label=បិទ/បើកគ្រាប់រំកិល
-document_outline.title=បង្ហាញគ្រោងឯកសារ (ចុចទ្វេដងដើម្បីពង្រីក/បង្រួមធាតុទាំងអស់)
-document_outline_label=គ្រោងឯកសារ
-attachments.title=បង្ហាញឯកសារភ្ជាប់
-attachments_label=ឯកសារភ្ជាប់
-thumbs.title=បង្ហាញរូបភាពតូចៗ
-thumbs_label=រួបភាពតូចៗ
-findbar.title=រកនៅក្នុងឯកសារ
-findbar_label=រក
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=ទំព័រ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=រូបភាពតូចរបស់ទំព័រ {{page}}
-
-# Find panel button title and messages
-find_input.title=រក
-find_input.placeholder=រកនៅក្នុងឯកសារ...
-find_previous.title=រកពាក្យ ឬឃ្លាដែលបានជួបមុន
-find_previous_label=មុន
-find_next.title=រកពាក្យ ឬឃ្លាដែលបានជួបបន្ទាប់
-find_next_label=បន្ទាប់
-find_highlight=បន្លិចទាំងអស់
-find_match_case_label=ករណីដំណូច
-find_reached_top=បានបន្តពីខាងក្រោម ទៅដល់ខាងលើនៃឯកសារ
-find_reached_bottom=បានបន្តពីខាងលើ ទៅដល់ចុងនៃឯកសារ
-find_not_found=រកមិនឃើញពាក្យ ឬឃ្លា
-
-# Error panel labels
-error_more_info=ព័ត៌មានបន្ថែម
-error_less_info=ព័ត៌មានតិចតួច
-error_close=បិទ
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=សារ ៖ {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=ជង់ ៖ {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ឯកសារ ៖ {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=ជួរ ៖ {{line}}
-rendering_error=មានកំហុសបានកើតឡើងពេលបង្ហាញទំព័រ ។
-
-# Predefined zoom values
-page_scale_width=ទទឹងទំព័រ
-page_scale_fit=សមទំព័រ
-page_scale_auto=ពង្រីកស្វ័យប្រវត្តិ
-page_scale_actual=ទំហំជាក់ស្ដែង
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=កំហុស
-loading_error=មានកំហុសបានកើតឡើងពេលកំពុងផ្ទុក PDF ។
-invalid_file_error=ឯកសារ PDF ខូច ឬមិនត្រឹមត្រូវ ។
-missing_file_error=បាត់ឯកសារ PDF
-unexpected_response_error=ការឆ្លើយតមម៉ាស៊ីនមេដែលមិនបានរំពឹង។
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} ចំណារពន្យល់]
-password_label=បញ្ចូលពាក្យសម្ងាត់ដើម្បីបើកឯកសារ PDF នេះ។
-password_invalid=ពាក្យសម្ងាត់មិនត្រឹមត្រូវ។ សូមព្យាយាមម្ដងទៀត។
-password_ok=យល់ព្រម
-password_cancel=បោះបង់
-
-printing_not_supported=ការព្រមាន ៖ ការបោះពុម្ពមិនត្រូវបានគាំទ្រពេញលេញដោយកម្មវិធីរុករកនេះទេ ។
-printing_not_ready=ព្រមាន៖ PDF មិនត្រូវបានផ្ទុកទាំងស្រុងដើម្បីបោះពុម្ពទេ។
-web_fonts_disabled=បានបិទពុម្ពអក្សរបណ្ដាញ ៖ មិនអាចប្រើពុម្ពអក្សរ PDF ដែលបានបង្កប់បានទេ ។
-document_colors_not_allowed=ឯកសារ PDF មិនត្រូវបានអនុញ្ញាតឲ្យប្រើពណ៌ផ្ទាល់របស់វាទេ៖ 'អនុញ្ញាតឲ្យទំព័រជ្រើសពណ៌ផ្ទាល់ខ្លួន' ត្រូវបានធ្វើឲ្យអសកម្មក្នុងកម្មវិធីរុករក។
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ទំព័រមុន
+previous_label=មុន
+next.title=ទំព័របន្ទាប់
+next_label=បន្ទាប់
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ទំព័រ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=នៃ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} នៃ {{pagesCount}})
+
+zoom_out.title=បង្រួម
+zoom_out_label=បង្រួម
+zoom_in.title=ពង្រីក
+zoom_in_label=ពង្រីក
+zoom.title=ពង្រីក
+presentation_mode.title=ប្ដូរទៅរបៀបបទបង្ហាញ
+presentation_mode_label=របៀបបទបង្ហាញ
+open_file.title=បើកឯកសារ
+open_file_label=បើក
+print.title=បោះពុម្ព
+print_label=បោះពុម្ព
+download.title=ទាញយក
+download_label=ទាញយក
+bookmark.title=ទិដ្ឋភាពបច្ចុប្បន្ន (ចម្លង ឬបើកនៅក្នុងបង្អួចថ្មី)
+bookmark_label=ទិដ្ឋភាពបច្ចុប្បន្ន
+
+# Secondary toolbar and context menu
+tools.title=ឧបករណ៍
+tools_label=ឧបករណ៍
+first_page.title=ទៅកាន់ទំព័រដំបូង
+first_page.label=ទៅកាន់ទំព័រដំបូង
+first_page_label=ទៅកាន់ទំព័រដំបូង
+last_page.title=ទៅកាន់ទំព័រចុងក្រោយ
+last_page.label=ទៅកាន់ទំព័រចុងក្រោយ
+last_page_label=ទៅកាន់ទំព័រចុងក្រោយ
+page_rotate_cw.title=បង្វិលស្របទ្រនិចនាឡិកា
+page_rotate_cw.label=បង្វិលស្របទ្រនិចនាឡិកា
+page_rotate_cw_label=បង្វិលស្របទ្រនិចនាឡិកា
+page_rotate_ccw.title=បង្វិលច្រាសទ្រនិចនាឡិកា
+page_rotate_ccw.label=បង្វិលច្រាសទ្រនិចនាឡិកា
+page_rotate_ccw_label=បង្វិលច្រាសទ្រនិចនាឡិកា
+
+cursor_text_select_tool.title=បើកឧបករណ៍ជ្រើសអត្ថបទ
+cursor_text_select_tool_label=ឧបករណ៍ជ្រើសអត្ថបទ
+cursor_hand_tool.title=បើកឧបករណ៍ដៃ
+cursor_hand_tool_label=ឧបករណ៍ដៃ
+
+# Document properties dialog box
+document_properties.title=លក្ខណសម្បត្តិឯកសារ…
+document_properties_label=លក្ខណសម្បត្តិឯកសារ…
+document_properties_file_name=ឈ្មោះឯកសារ៖
+document_properties_file_size=ទំហំឯកសារ៖
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} បៃ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} បៃ)
+document_properties_title=ចំណងជើង៖
+document_properties_author=អ្នកនិពន្ធ៖
+document_properties_subject=ប្រធានបទ៖
+document_properties_keywords=ពាក្យគន្លឹះ៖
+document_properties_creation_date=កាលបរិច្ឆេទបង្កើត៖
+document_properties_modification_date=កាលបរិច្ឆេទកែប្រែ៖
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=អ្នកបង្កើត៖
+document_properties_producer=កម្មវិធីបង្កើត PDF ៖
+document_properties_version=កំណែ PDF ៖
+document_properties_page_count=ចំនួនទំព័រ៖
+document_properties_close=បិទ
+
+print_progress_message=កំពុងរៀបចំឯកសារសម្រាប់បោះពុម្ព…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=បោះបង់
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=បិទ/បើកគ្រាប់រំកិល
+toggle_sidebar_notification.title=បិទ/បើករបារចំហៀង (ឯកសារមានមាតិកានៅក្រៅ/attachments)
+toggle_sidebar_label=បិទ/បើកគ្រាប់រំកិល
+document_outline.title=បង្ហាញគ្រោងឯកសារ (ចុចទ្វេដងដើម្បីពង្រីក/បង្រួមធាតុទាំងអស់)
+document_outline_label=គ្រោងឯកសារ
+attachments.title=បង្ហាញឯកសារភ្ជាប់
+attachments_label=ឯកសារភ្ជាប់
+thumbs.title=បង្ហាញរូបភាពតូចៗ
+thumbs_label=រួបភាពតូចៗ
+findbar.title=រកនៅក្នុងឯកសារ
+findbar_label=រក
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ទំព័រ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=រូបភាពតូចរបស់ទំព័រ {{page}}
+
+# Find panel button title and messages
+find_input.title=រក
+find_input.placeholder=រកនៅក្នុងឯកសារ...
+find_previous.title=រកពាក្យ ឬឃ្លាដែលបានជួបមុន
+find_previous_label=មុន
+find_next.title=រកពាក្យ ឬឃ្លាដែលបានជួបបន្ទាប់
+find_next_label=បន្ទាប់
+find_highlight=បន្លិចទាំងអស់
+find_match_case_label=ករណីដំណូច
+find_reached_top=បានបន្តពីខាងក្រោម ទៅដល់ខាងលើនៃឯកសារ
+find_reached_bottom=បានបន្តពីខាងលើ ទៅដល់ចុងនៃឯកសារ
+find_not_found=រកមិនឃើញពាក្យ ឬឃ្លា
+
+# Error panel labels
+error_more_info=ព័ត៌មានបន្ថែម
+error_less_info=ព័ត៌មានតិចតួច
+error_close=បិទ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=សារ ៖ {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ជង់ ៖ {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ឯកសារ ៖ {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ជួរ ៖ {{line}}
+rendering_error=មានកំហុសបានកើតឡើងពេលបង្ហាញទំព័រ ។
+
+# Predefined zoom values
+page_scale_width=ទទឹងទំព័រ
+page_scale_fit=សមទំព័រ
+page_scale_auto=ពង្រីកស្វ័យប្រវត្តិ
+page_scale_actual=ទំហំជាក់ស្ដែង
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=កំហុស
+loading_error=មានកំហុសបានកើតឡើងពេលកំពុងផ្ទុក PDF ។
+invalid_file_error=ឯកសារ PDF ខូច ឬមិនត្រឹមត្រូវ ។
+missing_file_error=បាត់ឯកសារ PDF
+unexpected_response_error=ការឆ្លើយតមម៉ាស៊ីនមេដែលមិនបានរំពឹង។
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ចំណារពន្យល់]
+password_label=បញ្ចូលពាក្យសម្ងាត់ដើម្បីបើកឯកសារ PDF នេះ។
+password_invalid=ពាក្យសម្ងាត់មិនត្រឹមត្រូវ។ សូមព្យាយាមម្ដងទៀត។
+password_ok=យល់ព្រម
+password_cancel=បោះបង់
+
+printing_not_supported=ការព្រមាន ៖ ការបោះពុម្ពមិនត្រូវបានគាំទ្រពេញលេញដោយកម្មវិធីរុករកនេះទេ ។
+printing_not_ready=ព្រមាន៖ PDF មិនត្រូវបានផ្ទុកទាំងស្រុងដើម្បីបោះពុម្ពទេ។
+web_fonts_disabled=បានបិទពុម្ពអក្សរបណ្ដាញ ៖ មិនអាចប្រើពុម្ពអក្សរ PDF ដែលបានបង្កប់បានទេ ។
+document_colors_not_allowed=ឯកសារ PDF មិនត្រូវបានអនុញ្ញាតឲ្យប្រើពណ៌ផ្ទាល់របស់វាទេ៖ 'អនុញ្ញាតឲ្យទំព័រជ្រើសពណ៌ផ្ទាល់ខ្លួន' ត្រូវបានធ្វើឲ្យអសកម្មក្នុងកម្មវិធីរុករក។
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kn/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kn/viewer.properties
index cf3d0041cfe6270fe2c05c1ab78b46152cb779e2..edffd6503ecbe79306f6b857ef8679f2100a5ad4 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kn/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/kn/viewer.properties
@@ -1,193 +1,193 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=ಹಿಂದಿನ ಪುಟ
-previous_label=ಹಿಂದಿನ
-next.title=ಮುಂದಿನ ಪುಟ
-next_label=ಮುಂದಿನ
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=ಪುಟ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} ರಲ್ಲಿ
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pagesCount}} ರಲ್ಲಿ {{pageNumber}})
-
-zoom_out.title=ಕಿರಿದಾಗಿಸು
-zoom_out_label=ಕಿರಿದಾಗಿಸಿ
-zoom_in.title=ಹಿರಿದಾಗಿಸು
-zoom_in_label=ಹಿರಿದಾಗಿಸಿ
-zoom.title=ಗಾತ್ರಬದಲಿಸು
-presentation_mode.title=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು
-presentation_mode_label=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ
-open_file.title=ಕಡತವನ್ನು ತೆರೆ
-open_file_label=ತೆರೆಯಿರಿ
-print.title=ಮುದ್ರಿಸು
-print_label=ಮುದ್ರಿಸಿ
-download.title=ಇಳಿಸು
-download_label=ಇಳಿಸಿಕೊಳ್ಳಿ
-bookmark.title=ಪ್ರಸಕ್ತ ನೋಟ (ಪ್ರತಿ ಮಾಡು ಅಥವ ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ)
-bookmark_label=ಪ್ರಸಕ್ತ ನೋಟ
-
-# Secondary toolbar and context menu
-tools.title=ಉಪಕರಣಗಳು
-tools_label=ಉಪಕರಣಗಳು
-first_page.title=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
-first_page.label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
-first_page_label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
-last_page.title=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
-last_page.label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
-last_page_label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
-page_rotate_cw.title=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
-page_rotate_cw.label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
-page_rotate_cw_label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
-page_rotate_ccw.title=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
-page_rotate_ccw.label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
-page_rotate_ccw_label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
-
-cursor_text_select_tool.title=ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ
-cursor_text_select_tool_label=ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ
-cursor_hand_tool.title=ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ
-cursor_hand_tool_label=ಕೈ ಉಪಕರಣ
-
-
-
-# Document properties dialog box
-document_properties.title=ಡಾಕ್ಯುಮೆಂಟ್ ಗುಣಗಳು...
-document_properties_label=ಡಾಕ್ಯುಮೆಂಟ್ ಗುಣಗಳು...
-document_properties_file_name=ಕಡತದ ಹೆಸರು:
-document_properties_file_size=ಕಡತದ ಗಾತ್ರ:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟ್ಗಳು)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟ್ಗಳು)
-document_properties_title=ಶೀರ್ಷಿಕೆ:
-document_properties_author=ಕರ್ತೃ:
-document_properties_subject=ವಿಷಯ:
-document_properties_keywords=ಮುಖ್ಯಪದಗಳು:
-document_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ:
-document_properties_modification_date=ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=ರಚಿಸಿದವರು:
-document_properties_producer=PDF ಉತ್ಪಾದಕ:
-document_properties_version=PDF ಆವೃತ್ತಿ:
-document_properties_page_count=ಪುಟದ ಎಣಿಕೆ:
-document_properties_page_size_unit_inches=ಇದರಲ್ಲಿ
-document_properties_page_size_orientation_portrait=ಭಾವಚಿತ್ರ
-document_properties_page_size_orientation_landscape=ಪ್ರಕೃತಿ ಚಿತ್ರ
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_close=ಮುಚ್ಚು
-
-print_progress_message=ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=ರದ್ದು ಮಾಡು
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು
-toggle_sidebar_label=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು
-document_outline_label=ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ
-attachments.title=ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು
-attachments_label=ಲಗತ್ತುಗಳು
-thumbs.title=ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು
-thumbs_label=ಚಿಕ್ಕಚಿತ್ರಗಳು
-findbar.title=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು
-findbar_label=ಹುಡುಕು
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=ಪುಟ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು {{page}}
-
-# Find panel button title and messages
-find_input.title=ಹುಡುಕು
-find_input.placeholder=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು…
-find_previous.title=ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು
-find_previous_label=ಹಿಂದಿನ
-find_next.title=ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು
-find_next_label=ಮುಂದಿನ
-find_highlight=ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು
-find_match_case_label=ಕೇಸನ್ನು ಹೊಂದಿಸು
-find_reached_top=ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು
-find_reached_bottom=ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು
-find_not_found=ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ
-
-# Error panel labels
-error_more_info=ಹೆಚ್ಚಿನ ಮಾಹಿತಿ
-error_less_info=ಕಡಿಮೆ ಮಾಹಿತಿ
-error_close=ಮುಚ್ಚು
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=ಸಂದೇಶ: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=ರಾಶಿ: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ಕಡತ: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=ಸಾಲು: {{line}}
-rendering_error=ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.
-
-# Predefined zoom values
-page_scale_width=ಪುಟದ ಅಗಲ
-page_scale_fit=ಪುಟದ ಸರಿಹೊಂದಿಕೆ
-page_scale_auto=ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ
-page_scale_actual=ನಿಜವಾದ ಗಾತ್ರ
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=ದೋಷ
-loading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.
-invalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ.
-missing_file_error=PDF ಕಡತ ಇಲ್ಲ.
-unexpected_response_error=ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} ಟಿಪ್ಪಣಿ]
-password_label=PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ.
-password_invalid=ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.
-password_ok=OK
-password_cancel=ರದ್ದು ಮಾಡು
-
-printing_not_supported=ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ.
-printing_not_ready=ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ.
-web_fonts_disabled=ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.
-document_colors_not_allowed=PDF ದಸ್ತಾವೇಜುಗಳು ತಮ್ಮದೆ ಆದ ಬಣ್ಣಗಳನ್ನು ಬಳಸಲು ಅನುಮತಿ ಇರುವುದಿಲ್ಲ: 'ಪುಟಗಳು ತಮ್ಮದೆ ಆದ ಬಣ್ಣವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಅನುಮತಿಸು' ಅನ್ನು ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುತ್ತದೆ.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ಹಿಂದಿನ ಪುಟ
+previous_label=ಹಿಂದಿನ
+next.title=ಮುಂದಿನ ಪುಟ
+next_label=ಮುಂದಿನ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ಪುಟ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ರಲ್ಲಿ
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} ರಲ್ಲಿ {{pageNumber}})
+
+zoom_out.title=ಕಿರಿದಾಗಿಸು
+zoom_out_label=ಕಿರಿದಾಗಿಸಿ
+zoom_in.title=ಹಿರಿದಾಗಿಸು
+zoom_in_label=ಹಿರಿದಾಗಿಸಿ
+zoom.title=ಗಾತ್ರಬದಲಿಸು
+presentation_mode.title=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು
+presentation_mode_label=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ
+open_file.title=ಕಡತವನ್ನು ತೆರೆ
+open_file_label=ತೆರೆಯಿರಿ
+print.title=ಮುದ್ರಿಸು
+print_label=ಮುದ್ರಿಸಿ
+download.title=ಇಳಿಸು
+download_label=ಇಳಿಸಿಕೊಳ್ಳಿ
+bookmark.title=ಪ್ರಸಕ್ತ ನೋಟ (ಪ್ರತಿ ಮಾಡು ಅಥವ ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ)
+bookmark_label=ಪ್ರಸಕ್ತ ನೋಟ
+
+# Secondary toolbar and context menu
+tools.title=ಉಪಕರಣಗಳು
+tools_label=ಉಪಕರಣಗಳು
+first_page.title=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
+first_page.label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
+first_page_label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು
+last_page.title=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
+last_page.label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
+last_page_label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು
+page_rotate_cw.title=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_cw.label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_cw_label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_ccw.title=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_ccw.label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+page_rotate_ccw_label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು
+
+cursor_text_select_tool.title=ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ
+cursor_text_select_tool_label=ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ
+cursor_hand_tool.title=ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ
+cursor_hand_tool_label=ಕೈ ಉಪಕರಣ
+
+
+
+# Document properties dialog box
+document_properties.title=ಡಾಕ್ಯುಮೆಂಟ್ ಗುಣಗಳು...
+document_properties_label=ಡಾಕ್ಯುಮೆಂಟ್ ಗುಣಗಳು...
+document_properties_file_name=ಕಡತದ ಹೆಸರು:
+document_properties_file_size=ಕಡತದ ಗಾತ್ರ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟ್ಗಳು)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟ್ಗಳು)
+document_properties_title=ಶೀರ್ಷಿಕೆ:
+document_properties_author=ಕರ್ತೃ:
+document_properties_subject=ವಿಷಯ:
+document_properties_keywords=ಮುಖ್ಯಪದಗಳು:
+document_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ:
+document_properties_modification_date=ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ರಚಿಸಿದವರು:
+document_properties_producer=PDF ಉತ್ಪಾದಕ:
+document_properties_version=PDF ಆವೃತ್ತಿ:
+document_properties_page_count=ಪುಟದ ಎಣಿಕೆ:
+document_properties_page_size_unit_inches=ಇದರಲ್ಲಿ
+document_properties_page_size_orientation_portrait=ಭಾವಚಿತ್ರ
+document_properties_page_size_orientation_landscape=ಪ್ರಕೃತಿ ಚಿತ್ರ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_close=ಮುಚ್ಚು
+
+print_progress_message=ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ರದ್ದು ಮಾಡು
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು
+toggle_sidebar_label=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು
+document_outline_label=ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ
+attachments.title=ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು
+attachments_label=ಲಗತ್ತುಗಳು
+thumbs.title=ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು
+thumbs_label=ಚಿಕ್ಕಚಿತ್ರಗಳು
+findbar.title=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು
+findbar_label=ಹುಡುಕು
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ಪುಟ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು {{page}}
+
+# Find panel button title and messages
+find_input.title=ಹುಡುಕು
+find_input.placeholder=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು…
+find_previous.title=ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು
+find_previous_label=ಹಿಂದಿನ
+find_next.title=ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು
+find_next_label=ಮುಂದಿನ
+find_highlight=ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು
+find_match_case_label=ಕೇಸನ್ನು ಹೊಂದಿಸು
+find_reached_top=ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು
+find_reached_bottom=ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು
+find_not_found=ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ
+
+# Error panel labels
+error_more_info=ಹೆಚ್ಚಿನ ಮಾಹಿತಿ
+error_less_info=ಕಡಿಮೆ ಮಾಹಿತಿ
+error_close=ಮುಚ್ಚು
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ಸಂದೇಶ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ರಾಶಿ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ಕಡತ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ಸಾಲು: {{line}}
+rendering_error=ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.
+
+# Predefined zoom values
+page_scale_width=ಪುಟದ ಅಗಲ
+page_scale_fit=ಪುಟದ ಸರಿಹೊಂದಿಕೆ
+page_scale_auto=ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ
+page_scale_actual=ನಿಜವಾದ ಗಾತ್ರ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ದೋಷ
+loading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.
+invalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ.
+missing_file_error=PDF ಕಡತ ಇಲ್ಲ.
+unexpected_response_error=ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ಟಿಪ್ಪಣಿ]
+password_label=PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ.
+password_invalid=ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.
+password_ok=OK
+password_cancel=ರದ್ದು ಮಾಡು
+
+printing_not_supported=ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ.
+printing_not_ready=ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ.
+web_fonts_disabled=ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.
+document_colors_not_allowed=PDF ದಸ್ತಾವೇಜುಗಳು ತಮ್ಮದೆ ಆದ ಬಣ್ಣಗಳನ್ನು ಬಳಸಲು ಅನುಮತಿ ಇರುವುದಿಲ್ಲ: 'ಪುಟಗಳು ತಮ್ಮದೆ ಆದ ಬಣ್ಣವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಅನುಮತಿಸು' ಅನ್ನು ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುತ್ತದೆ.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ko/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ko/viewer.properties
index ef688a95684dd192cfe49a6039617a090e8f371d..21ff847039d7e3d60bbf155371d49a523f39aefc 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ko/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ko/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=이전 페이지
-previous_label=이전
-next.title=다음 페이지
-next_label=다음
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=페이지
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} / {{pagesCount}})
-
-zoom_out.title=축소
-zoom_out_label=축소
-zoom_in.title=확대
-zoom_in_label=확대
-zoom.title=확대/축소
-presentation_mode.title=프레젠테이션 모드로 전환
-presentation_mode_label=프레젠테이션 모드
-open_file.title=파일 열기
-open_file_label=열기
-print.title=인쇄
-print_label=인쇄
-download.title=다운로드
-download_label=다운로드
-bookmark.title=현재 뷰 (복사하거나 새 창에 열기)
-bookmark_label=현재 뷰
-
-# Secondary toolbar and context menu
-tools.title=도구
-tools_label=도구
-first_page.title=첫 페이지로 이동
-first_page.label=첫 페이지로 이동
-first_page_label=첫 페이지로 이동
-last_page.title=마지막 페이지로 이동
-last_page.label=마지막 페이지로 이동
-last_page_label=마지막 페이지로 이동
-page_rotate_cw.title=시계방향으로 회전
-page_rotate_cw.label=시계방향으로 회전
-page_rotate_cw_label=시계방향으로 회전
-page_rotate_ccw.title=시계 반대방향으로 회전
-page_rotate_ccw.label=시계 반대방향으로 회전
-page_rotate_ccw_label=시계 반대방향으로 회전
-
-cursor_text_select_tool.title=텍스트 선택 도구 활성화
-cursor_text_select_tool_label=텍스트 선택 도구
-cursor_hand_tool.title=손 도구 활성화
-cursor_hand_tool_label=손 도구
-
-scroll_vertical.title=세로 스크롤 사용
-scroll_vertical_label=세로 스크롤
-scroll_horizontal.title=가로 스크롤 사용
-scroll_horizontal_label=가로 스크롤
-scroll_wrapped.title=감싼 스크롤 사용
-scroll_wrapped_label=감싼 스크롤
-
-spread_none.title=펼쳐진 페이지를 합치지 않음
-spread_none_label=펼쳐짐 없음
-spread_odd.title=홀수 페이지로 시작하게 펼쳐진 페이지 합침
-spread_odd_label=홀수 펼쳐짐
-spread_even.title=짝수 페이지로 시작하게 펼쳐진 페이지 합침
-spread_even_label=짝수 펼쳐짐
-
-# Document properties dialog box
-document_properties.title=문서 속성…
-document_properties_label=문서 속성…
-document_properties_file_name=파일 이름:
-document_properties_file_size=파일 크기:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}}바이트)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}}바이트)
-document_properties_title=제목:
-document_properties_author=작성자:
-document_properties_subject=주제:
-document_properties_keywords=키워드:
-document_properties_creation_date=작성 날짜:
-document_properties_modification_date=수정 날짜:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=작성 프로그램:
-document_properties_producer=PDF 변환 소프트웨어:
-document_properties_version=PDF 버전:
-document_properties_page_count=페이지 수:
-document_properties_page_size=페이지 크기:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=세로 방향
-document_properties_page_size_orientation_landscape=가로 방향
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=레터
-document_properties_page_size_name_legal=리걸
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=빠른 웹 보기:
-document_properties_linearized_yes=예
-document_properties_linearized_no=아니오
-document_properties_close=닫기
-
-print_progress_message=인쇄 문서 준비 중…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=취소
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=탐색창 표시/숨기기
-toggle_sidebar_notification.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일 포함)
-toggle_sidebar_label=탐색창 표시/숨기기
-document_outline.title=문서 아웃라인 보기(더블 클릭해서 모든 항목 펼치기/접기)
-document_outline_label=문서 아웃라인
-attachments.title=첨부파일 보기
-attachments_label=첨부파일
-thumbs.title=미리보기
-thumbs_label=미리보기
-findbar.title=검색
-findbar_label=검색
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas={{page}} 페이지
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}} 페이지
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} 페이지 미리보기
-
-# Find panel button title and messages
-find_input.title=찾기
-find_input.placeholder=문서에서 찾기…
-find_previous.title=지정 문자열에 일치하는 1개 부분을 검색
-find_previous_label=이전
-find_next.title=지정 문자열에 일치하는 다음 부분을 검색
-find_next_label=다음
-find_highlight=모두 강조 표시
-find_match_case_label=대/소문자 구분
-find_entire_word_label=단어 단위로
-find_reached_top=문서 처음까지 검색하고 끝으로 돌아와 검색했습니다.
-find_reached_bottom=문서 끝까지 검색하고 앞으로 돌아와 검색했습니다.
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} 중 {{current}} 일치
-find_match_count[two]={{total}} 중 {{current}} 일치
-find_match_count[few]={{total}} 중 {{current}} 일치
-find_match_count[many]={{total}} 중 {{current}} 일치
-find_match_count[other]={{total}} 중 {{current}} 일치
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} 이상 일치
-find_match_count_limit[one]={{limit}} 이상 일치
-find_match_count_limit[two]={{limit}} 이상 일치
-find_match_count_limit[few]={{limit}} 이상 일치
-find_match_count_limit[many]={{limit}} 이상 일치
-find_match_count_limit[other]={{limit}} 이상 일치
-find_not_found=검색 결과 없음
-
-# Error panel labels
-error_more_info=정보 더 보기
-error_less_info=정보 간단히 보기
-error_close=닫기
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (빌드: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=메시지: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=스택: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=파일: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=줄 번호: {{line}}
-rendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다.
-
-# Predefined zoom values
-page_scale_width=페이지 너비에 맞춤
-page_scale_fit=페이지에 맞춤
-page_scale_auto=자동 맞춤
-page_scale_actual=실제 크기에 맞춤
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=오류
-loading_error=PDF를 로드하는 동안 오류가 발생했습니다.
-invalid_file_error=잘못되었거나 손상된 PDF 파일.
-missing_file_error=PDF 파일 없음.
-unexpected_response_error=예상치 못한 서버 응답입니다.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}} {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} 주석]
-password_label=이 PDF 파일을 열 수 있는 비밀번호를 입력하세요.
-password_invalid=잘못된 비밀번호입니다. 다시 시도하세요.
-password_ok=확인
-password_cancel=취소
-
-printing_not_supported=경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다.
-printing_not_ready=경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다.
-web_fonts_disabled=웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다.
-document_colors_not_allowed=PDF 문서의 자체 색상 허용 안됨: “페이지 자체 색상 허용”이 브라우저에서 비활성화 되어 있습니다.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=이전 페이지
+previous_label=이전
+next.title=다음 페이지
+next_label=다음
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=페이지
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=축소
+zoom_out_label=축소
+zoom_in.title=확대
+zoom_in_label=확대
+zoom.title=확대/축소
+presentation_mode.title=프레젠테이션 모드로 전환
+presentation_mode_label=프레젠테이션 모드
+open_file.title=파일 열기
+open_file_label=열기
+print.title=인쇄
+print_label=인쇄
+download.title=다운로드
+download_label=다운로드
+bookmark.title=현재 뷰 (복사하거나 새 창에 열기)
+bookmark_label=현재 뷰
+
+# Secondary toolbar and context menu
+tools.title=도구
+tools_label=도구
+first_page.title=첫 페이지로 이동
+first_page.label=첫 페이지로 이동
+first_page_label=첫 페이지로 이동
+last_page.title=마지막 페이지로 이동
+last_page.label=마지막 페이지로 이동
+last_page_label=마지막 페이지로 이동
+page_rotate_cw.title=시계방향으로 회전
+page_rotate_cw.label=시계방향으로 회전
+page_rotate_cw_label=시계방향으로 회전
+page_rotate_ccw.title=시계 반대방향으로 회전
+page_rotate_ccw.label=시계 반대방향으로 회전
+page_rotate_ccw_label=시계 반대방향으로 회전
+
+cursor_text_select_tool.title=텍스트 선택 도구 활성화
+cursor_text_select_tool_label=텍스트 선택 도구
+cursor_hand_tool.title=손 도구 활성화
+cursor_hand_tool_label=손 도구
+
+scroll_vertical.title=세로 스크롤 사용
+scroll_vertical_label=세로 스크롤
+scroll_horizontal.title=가로 스크롤 사용
+scroll_horizontal_label=가로 스크롤
+scroll_wrapped.title=감싼 스크롤 사용
+scroll_wrapped_label=감싼 스크롤
+
+spread_none.title=펼쳐진 페이지를 합치지 않음
+spread_none_label=펼쳐짐 없음
+spread_odd.title=홀수 페이지로 시작하게 펼쳐진 페이지 합침
+spread_odd_label=홀수 펼쳐짐
+spread_even.title=짝수 페이지로 시작하게 펼쳐진 페이지 합침
+spread_even_label=짝수 펼쳐짐
+
+# Document properties dialog box
+document_properties.title=문서 속성…
+document_properties_label=문서 속성…
+document_properties_file_name=파일 이름:
+document_properties_file_size=파일 크기:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}}바이트)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}}바이트)
+document_properties_title=제목:
+document_properties_author=작성자:
+document_properties_subject=주제:
+document_properties_keywords=키워드:
+document_properties_creation_date=작성 날짜:
+document_properties_modification_date=수정 날짜:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=작성 프로그램:
+document_properties_producer=PDF 변환 소프트웨어:
+document_properties_version=PDF 버전:
+document_properties_page_count=페이지 수:
+document_properties_page_size=페이지 크기:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=세로 방향
+document_properties_page_size_orientation_landscape=가로 방향
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=레터
+document_properties_page_size_name_legal=리걸
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=빠른 웹 보기:
+document_properties_linearized_yes=예
+document_properties_linearized_no=아니오
+document_properties_close=닫기
+
+print_progress_message=인쇄 문서 준비 중…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=취소
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=탐색창 표시/숨기기
+toggle_sidebar_notification.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일 포함)
+toggle_sidebar_label=탐색창 표시/숨기기
+document_outline.title=문서 아웃라인 보기(더블 클릭해서 모든 항목 펼치기/접기)
+document_outline_label=문서 아웃라인
+attachments.title=첨부파일 보기
+attachments_label=첨부파일
+thumbs.title=미리보기
+thumbs_label=미리보기
+findbar.title=검색
+findbar_label=검색
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}} 페이지
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} 페이지
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} 페이지 미리보기
+
+# Find panel button title and messages
+find_input.title=찾기
+find_input.placeholder=문서에서 찾기…
+find_previous.title=지정 문자열에 일치하는 1개 부분을 검색
+find_previous_label=이전
+find_next.title=지정 문자열에 일치하는 다음 부분을 검색
+find_next_label=다음
+find_highlight=모두 강조 표시
+find_match_case_label=대/소문자 구분
+find_entire_word_label=단어 단위로
+find_reached_top=문서 처음까지 검색하고 끝으로 돌아와 검색했습니다.
+find_reached_bottom=문서 끝까지 검색하고 앞으로 돌아와 검색했습니다.
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} 중 {{current}} 일치
+find_match_count[two]={{total}} 중 {{current}} 일치
+find_match_count[few]={{total}} 중 {{current}} 일치
+find_match_count[many]={{total}} 중 {{current}} 일치
+find_match_count[other]={{total}} 중 {{current}} 일치
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} 이상 일치
+find_match_count_limit[one]={{limit}} 이상 일치
+find_match_count_limit[two]={{limit}} 이상 일치
+find_match_count_limit[few]={{limit}} 이상 일치
+find_match_count_limit[many]={{limit}} 이상 일치
+find_match_count_limit[other]={{limit}} 이상 일치
+find_not_found=검색 결과 없음
+
+# Error panel labels
+error_more_info=정보 더 보기
+error_less_info=정보 간단히 보기
+error_close=닫기
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (빌드: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=메시지: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=스택: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=파일: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=줄 번호: {{line}}
+rendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다.
+
+# Predefined zoom values
+page_scale_width=페이지 너비에 맞춤
+page_scale_fit=페이지에 맞춤
+page_scale_auto=자동 맞춤
+page_scale_actual=실제 크기에 맞춤
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=오류
+loading_error=PDF를 로드하는 동안 오류가 발생했습니다.
+invalid_file_error=잘못되었거나 손상된 PDF 파일.
+missing_file_error=PDF 파일 없음.
+unexpected_response_error=예상치 못한 서버 응답입니다.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 주석]
+password_label=이 PDF 파일을 열 수 있는 비밀번호를 입력하세요.
+password_invalid=잘못된 비밀번호입니다. 다시 시도하세요.
+password_ok=확인
+password_cancel=취소
+
+printing_not_supported=경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다.
+printing_not_ready=경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다.
+web_fonts_disabled=웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다.
+document_colors_not_allowed=PDF 문서의 자체 색상 허용 안됨: “페이지 자체 색상 허용”이 브라우저에서 비활성화 되어 있습니다.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lij/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lij/viewer.properties
index 71a53062d3eacaa5d2651fc2ee27932e19333e62..110b50ecbbfbc71b8cbee47c1d0037bf7b850ac9 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lij/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lij/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pagina primma
-previous_label=Precedente
-next.title=Pagina dòppo
-next_label=Pròscima
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pagina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Diminoisci zoom
-zoom_out_label=Diminoisci zoom
-zoom_in.title=Aomenta zoom
-zoom_in_label=Aomenta zoom
-zoom.title=Zoom
-presentation_mode.title=Vanni into mòddo de prezentaçion
-presentation_mode_label=Mòddo de prezentaçion
-open_file.title=Arvi file
-open_file_label=Arvi
-print.title=Stanpa
-print_label=Stanpa
-download.title=Descaregamento
-download_label=Descaregamento
-bookmark.title=Vixon corente (còpia ò arvi inte 'n neuvo barcon)
-bookmark_label=Vixon corente
-
-# Secondary toolbar and context menu
-tools.title=Atressi
-tools_label=Atressi
-first_page.title=Vanni a-a primma pagina
-first_page.label=Vanni a-a primma pagina
-first_page_label=Vanni a-a primma pagina
-last_page.title=Vanni a l'urtima pagina
-last_page.label=Vanni a l'urtima pagina
-last_page_label=Vanni a l'urtima pagina
-page_rotate_cw.title=Gia into verso oraio
-page_rotate_cw.label=Gia in senso do releuio
-page_rotate_cw_label=Gia into verso oraio
-page_rotate_ccw.title=Gia into verso antioraio
-page_rotate_ccw.label=Gia in senso do releuio a-a reversa
-page_rotate_ccw_label=Gia into verso antioraio
-
-cursor_text_select_tool.title=Abilita strumento de seleçion do testo
-cursor_text_select_tool_label=Strumento de seleçion do testo
-cursor_hand_tool.title=Abilita strumento man
-cursor_hand_tool_label=Strumento man
-
-scroll_vertical.title=Deuvia rebelamento verticale
-scroll_vertical_label=Rebelamento verticale
-scroll_horizontal.title=Deuvia rebelamento orizontâ
-scroll_horizontal_label=Rebelamento orizontâ
-scroll_wrapped.title=Deuvia rebelamento incapsolou
-scroll_wrapped_label=Rebelamento incapsolou
-
-spread_none.title=No unite a-a difuxon de pagina
-spread_none_label=No difuxon
-spread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa
-spread_odd_label=Difuxon dèspa
-spread_even.title=Uniscite a-a difuxon de pagina co-o numero pari
-spread_even_label=Difuxon pari
-
-# Document properties dialog box
-document_properties.title=Propietæ do documento…
-document_properties_label=Propietæ do documento…
-document_properties_file_name=Nomme schedaio:
-document_properties_file_size=Dimenscion schedaio:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kB ({{size_b}} byte)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} byte)
-document_properties_title=Titolo:
-document_properties_author=Aoto:
-document_properties_subject=Ogetto:
-document_properties_keywords=Paròlle ciave:
-document_properties_creation_date=Dæta creaçion:
-document_properties_modification_date=Dæta cangiamento:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Aotô originale:
-document_properties_producer=Produtô PDF:
-document_properties_version=Verscion PDF:
-document_properties_page_count=Contezzo pagine:
-document_properties_page_size=Dimenscion da pagina:
-document_properties_page_size_unit_inches=dii gròsci
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=drito
-document_properties_page_size_orientation_landscape=desteizo
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letia
-document_properties_page_size_name_legal=Lezze
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista veloce do Web:
-document_properties_linearized_yes=Sci
-document_properties_linearized_no=No
-document_properties_close=Særa
-
-print_progress_message=Praparo o documento pe-a stanpa…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Anulla
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Ativa/dizativa bara de scianco
-toggle_sidebar_notification.title=Cangia bara de löo (o documento o contegne di alegæ)
-toggle_sidebar_label=Ativa/dizativa bara de scianco
-document_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi)
-document_outline_label=Contorno do documento
-attachments.title=Fanni vedde alegæ
-attachments_label=Alegæ
-thumbs.title=Mostra miniatue
-thumbs_label=Miniatue
-findbar.title=Treuva into documento
-findbar_label=Treuva
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pagina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatua da pagina {{page}}
-
-# Find panel button title and messages
-find_input.title=Treuva
-find_input.placeholder=Treuva into documento…
-find_previous.title=Treuva a ripetiçion precedente do testo da çercâ
-find_previous_label=Precedente
-find_next.title=Treuva a ripetiçion dòppo do testo da çercâ
-find_next_label=Segoente
-find_highlight=Evidençia
-find_match_case_label=Maioscole/minoscole
-find_entire_word_label=Poula intrega
-find_reached_top=Razonto a fin da pagina, continoa da l'iniçio
-find_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} corispondensa
-find_match_count[two]={{current}} de {{total}} corispondense
-find_match_count[few]={{current}} de {{total}} corispondense
-find_match_count[many]={{current}} de {{total}} corispondense
-find_match_count[other]={{current}} de {{total}} corispondense
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Ciù de {{limit}} corispondense
-find_match_count_limit[one]=Ciù de {{limit}} corispondensa
-find_match_count_limit[two]=Ciù de {{limit}} corispondense
-find_match_count_limit[few]=Ciù de {{limit}} corispondense
-find_match_count_limit[many]=Ciù de {{limit}} corispondense
-find_match_count_limit[other]=Ciù de {{limit}} corispondense
-find_not_found=Testo no trovou
-
-# Error panel labels
-error_more_info=Ciù informaçioin
-error_less_info=Meno informaçioin
-error_close=Særa
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mesaggio: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Schedaio: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linia: {{line}}
-rendering_error=Gh'é stæto 'n'erô itno rendering da pagina.
-
-# Predefined zoom values
-page_scale_width=Larghessa pagina
-page_scale_fit=Adatta a una pagina
-page_scale_auto=Zoom aotomatico
-page_scale_actual=Dimenscioin efetive
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Erô
-loading_error=S'é verificou 'n'erô itno caregamento do PDF.
-invalid_file_error=O schedaio PDF o l'é no valido ò aroinou.
-missing_file_error=O schedaio PDF o no gh'é.
-unexpected_response_error=Risposta inprevista do-u server
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotaçion: {{type}}]
-password_label=Dimme a paròlla segreta pe arvî sto schedaio PDF.
-password_invalid=Paròlla segreta sbalia. Preuva torna.
-password_ok=Va ben
-password_cancel=Anulla
-
-printing_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô.
-printing_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa.
-web_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF.
-document_colors_not_allowed=No l'é poscibile adeuviâ i pròpi coî pe-i documenti PDF: l'opçion do navegatô “Permetti a-e pagine de çerne i pròpi coî in cangio de quelli inpostæ” a l'é dizativâ.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina primma
+previous_label=Precedente
+next.title=Pagina dòppo
+next_label=Pròscima
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Diminoisci zoom
+zoom_out_label=Diminoisci zoom
+zoom_in.title=Aomenta zoom
+zoom_in_label=Aomenta zoom
+zoom.title=Zoom
+presentation_mode.title=Vanni into mòddo de prezentaçion
+presentation_mode_label=Mòddo de prezentaçion
+open_file.title=Arvi file
+open_file_label=Arvi
+print.title=Stanpa
+print_label=Stanpa
+download.title=Descaregamento
+download_label=Descaregamento
+bookmark.title=Vixon corente (còpia ò arvi inte 'n neuvo barcon)
+bookmark_label=Vixon corente
+
+# Secondary toolbar and context menu
+tools.title=Atressi
+tools_label=Atressi
+first_page.title=Vanni a-a primma pagina
+first_page.label=Vanni a-a primma pagina
+first_page_label=Vanni a-a primma pagina
+last_page.title=Vanni a l'urtima pagina
+last_page.label=Vanni a l'urtima pagina
+last_page_label=Vanni a l'urtima pagina
+page_rotate_cw.title=Gia into verso oraio
+page_rotate_cw.label=Gia in senso do releuio
+page_rotate_cw_label=Gia into verso oraio
+page_rotate_ccw.title=Gia into verso antioraio
+page_rotate_ccw.label=Gia in senso do releuio a-a reversa
+page_rotate_ccw_label=Gia into verso antioraio
+
+cursor_text_select_tool.title=Abilita strumento de seleçion do testo
+cursor_text_select_tool_label=Strumento de seleçion do testo
+cursor_hand_tool.title=Abilita strumento man
+cursor_hand_tool_label=Strumento man
+
+scroll_vertical.title=Deuvia rebelamento verticale
+scroll_vertical_label=Rebelamento verticale
+scroll_horizontal.title=Deuvia rebelamento orizontâ
+scroll_horizontal_label=Rebelamento orizontâ
+scroll_wrapped.title=Deuvia rebelamento incapsolou
+scroll_wrapped_label=Rebelamento incapsolou
+
+spread_none.title=No unite a-a difuxon de pagina
+spread_none_label=No difuxon
+spread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa
+spread_odd_label=Difuxon dèspa
+spread_even.title=Uniscite a-a difuxon de pagina co-o numero pari
+spread_even_label=Difuxon pari
+
+# Document properties dialog box
+document_properties.title=Propietæ do documento…
+document_properties_label=Propietæ do documento…
+document_properties_file_name=Nomme schedaio:
+document_properties_file_size=Dimenscion schedaio:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Titolo:
+document_properties_author=Aoto:
+document_properties_subject=Ogetto:
+document_properties_keywords=Paròlle ciave:
+document_properties_creation_date=Dæta creaçion:
+document_properties_modification_date=Dæta cangiamento:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Aotô originale:
+document_properties_producer=Produtô PDF:
+document_properties_version=Verscion PDF:
+document_properties_page_count=Contezzo pagine:
+document_properties_page_size=Dimenscion da pagina:
+document_properties_page_size_unit_inches=dii gròsci
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=drito
+document_properties_page_size_orientation_landscape=desteizo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letia
+document_properties_page_size_name_legal=Lezze
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista veloce do Web:
+document_properties_linearized_yes=Sci
+document_properties_linearized_no=No
+document_properties_close=Særa
+
+print_progress_message=Praparo o documento pe-a stanpa…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anulla
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Ativa/dizativa bara de scianco
+toggle_sidebar_notification.title=Cangia bara de löo (o documento o contegne di alegæ)
+toggle_sidebar_label=Ativa/dizativa bara de scianco
+document_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi)
+document_outline_label=Contorno do documento
+attachments.title=Fanni vedde alegæ
+attachments_label=Alegæ
+thumbs.title=Mostra miniatue
+thumbs_label=Miniatue
+findbar.title=Treuva into documento
+findbar_label=Treuva
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatua da pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Treuva
+find_input.placeholder=Treuva into documento…
+find_previous.title=Treuva a ripetiçion precedente do testo da çercâ
+find_previous_label=Precedente
+find_next.title=Treuva a ripetiçion dòppo do testo da çercâ
+find_next_label=Segoente
+find_highlight=Evidençia
+find_match_case_label=Maioscole/minoscole
+find_entire_word_label=Poula intrega
+find_reached_top=Razonto a fin da pagina, continoa da l'iniçio
+find_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} corispondensa
+find_match_count[two]={{current}} de {{total}} corispondense
+find_match_count[few]={{current}} de {{total}} corispondense
+find_match_count[many]={{current}} de {{total}} corispondense
+find_match_count[other]={{current}} de {{total}} corispondense
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ciù de {{limit}} corispondense
+find_match_count_limit[one]=Ciù de {{limit}} corispondensa
+find_match_count_limit[two]=Ciù de {{limit}} corispondense
+find_match_count_limit[few]=Ciù de {{limit}} corispondense
+find_match_count_limit[many]=Ciù de {{limit}} corispondense
+find_match_count_limit[other]=Ciù de {{limit}} corispondense
+find_not_found=Testo no trovou
+
+# Error panel labels
+error_more_info=Ciù informaçioin
+error_less_info=Meno informaçioin
+error_close=Særa
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaggio: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Schedaio: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linia: {{line}}
+rendering_error=Gh'é stæto 'n'erô itno rendering da pagina.
+
+# Predefined zoom values
+page_scale_width=Larghessa pagina
+page_scale_fit=Adatta a una pagina
+page_scale_auto=Zoom aotomatico
+page_scale_actual=Dimenscioin efetive
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erô
+loading_error=S'é verificou 'n'erô itno caregamento do PDF.
+invalid_file_error=O schedaio PDF o l'é no valido ò aroinou.
+missing_file_error=O schedaio PDF o no gh'é.
+unexpected_response_error=Risposta inprevista do-u server
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotaçion: {{type}}]
+password_label=Dimme a paròlla segreta pe arvî sto schedaio PDF.
+password_invalid=Paròlla segreta sbalia. Preuva torna.
+password_ok=Va ben
+password_cancel=Anulla
+
+printing_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô.
+printing_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa.
+web_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF.
+document_colors_not_allowed=No l'é poscibile adeuviâ i pròpi coî pe-i documenti PDF: l'opçion do navegatô “Permetti a-e pagine de çerne i pròpi coî in cangio de quelli inpostæ” a l'é dizativâ.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lo/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lo/viewer.properties
index 00d3309c0feab5aefdd4b978da705b507a6a1000..cb4dc54ed14fdd7695da5e734602076ddebe945b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lo/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lo/viewer.properties
@@ -1,152 +1,152 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=ຫນ້າກ່ອນຫນ້າ
-previous_label=ກ່ອນຫນ້າ
-next.title=ຫນ້າຖັດໄປ
-next_label=ຖັດໄປ
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=ຫນ້າ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=ຈາກ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} ຈາກ {{pagesCount}})
-
-zoom_out.title=ຂະຫຍາຍອອກ
-zoom_out_label=ຂະຫຍາຍອອກ
-zoom_in.title=ຂະຫຍາຍເຂົ້າ
-zoom_in_label=ຂະຫຍາຍເຂົ້າ
-zoom.title=ຂະຫຍາຍ
-presentation_mode.title=ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ
-presentation_mode_label=ໂຫມດການນຳສະເຫນີ
-open_file.title=ເປີດໄຟລ໌
-open_file_label=ເປີດ
-print.title=ພິມ
-print_label=ພິມ
-download.title=ດາວໂຫລດ
-download_label=ດາວໂຫລດ
-bookmark.title=ມຸມມອງປະຈຸບັນ (ສຳເນົາ ຫລື ເປີດໃນວິນໂດໃຫມ່)
-bookmark_label=ມຸມມອງປະຈຸບັນ
-
-# Secondary toolbar and context menu
-tools.title=ເຄື່ອງມື
-tools_label=ເຄື່ອງມື
-first_page.title=ໄປທີ່ຫນ້າທຳອິດ
-first_page.label=ໄປທີ່ຫນ້າທຳອິດ
-first_page_label=ໄປທີ່ຫນ້າທຳອິດ
-last_page.title=ໄປທີ່ຫນ້າສຸດທ້າຍ
-last_page.label=ໄປທີ່ຫນ້າສຸດທ້າຍ
-last_page_label=ໄປທີ່ຫນ້າສຸດທ້າຍ
-page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ
-page_rotate_cw.label=ຫມູນຕາມເຂັມໂມງ
-page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ
-page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ
-page_rotate_ccw.label=ຫມູນທວນເຂັມໂມງ
-page_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ
-
-
-
-
-# Document properties dialog box
-document_properties_file_name=ຊື່ໄຟລ໌:
-document_properties_file_size=ຂະຫນາດໄຟລ໌:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=ລວງຕັ້ງ
-document_properties_page_size_orientation_landscape=ລວງນອນ
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=ຈົດໝາຍ
-document_properties_page_size_name_legal=ຂໍ້ກົດຫມາຍ
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_close=ປິດ
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_close=ຍົກເລີກ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=ເປີດ/ປິດແຖບຂ້າງ
-toggle_sidebar_notification.title=ເປີດ/ປິດແຖບຂ້າງ (ເອກະສານມີເຄົ້າຮ່າງ/ໄຟລ໌ແນບ)
-toggle_sidebar_label=ເປີດ/ປິດແຖບຂ້າງ
-document_outline_label=ເຄົ້າຮ່າງເອກະສານ
-findbar_label=ຄົ້ນຫາ
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-
-# Find panel button title and messages
-find_input.title=ຄົ້ນຫາ
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-
-# Error panel labels
-error_more_info=ຂໍ້ມູນເພີ່ມເຕີມ
-error_less_info=ຂໍ້ມູນນ້ອຍລົງ
-error_close=ປິດ
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-rendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ.
-
-# Predefined zoom values
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-
-# Loading indicator messages
-loading_error_indicator=ຂໍ້ຜິດພາດ
-loading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF.
-invalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-password_ok=ຕົກລົງ
-password_cancel=ຍົກເລີກ
-
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ຫນ້າກ່ອນຫນ້າ
+previous_label=ກ່ອນຫນ້າ
+next.title=ຫນ້າຖັດໄປ
+next_label=ຖັດໄປ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ຫນ້າ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ຈາກ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ຈາກ {{pagesCount}})
+
+zoom_out.title=ຂະຫຍາຍອອກ
+zoom_out_label=ຂະຫຍາຍອອກ
+zoom_in.title=ຂະຫຍາຍເຂົ້າ
+zoom_in_label=ຂະຫຍາຍເຂົ້າ
+zoom.title=ຂະຫຍາຍ
+presentation_mode.title=ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ
+presentation_mode_label=ໂຫມດການນຳສະເຫນີ
+open_file.title=ເປີດໄຟລ໌
+open_file_label=ເປີດ
+print.title=ພິມ
+print_label=ພິມ
+download.title=ດາວໂຫລດ
+download_label=ດາວໂຫລດ
+bookmark.title=ມຸມມອງປະຈຸບັນ (ສຳເນົາ ຫລື ເປີດໃນວິນໂດໃຫມ່)
+bookmark_label=ມຸມມອງປະຈຸບັນ
+
+# Secondary toolbar and context menu
+tools.title=ເຄື່ອງມື
+tools_label=ເຄື່ອງມື
+first_page.title=ໄປທີ່ຫນ້າທຳອິດ
+first_page.label=ໄປທີ່ຫນ້າທຳອິດ
+first_page_label=ໄປທີ່ຫນ້າທຳອິດ
+last_page.title=ໄປທີ່ຫນ້າສຸດທ້າຍ
+last_page.label=ໄປທີ່ຫນ້າສຸດທ້າຍ
+last_page_label=ໄປທີ່ຫນ້າສຸດທ້າຍ
+page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ
+page_rotate_cw.label=ຫມູນຕາມເຂັມໂມງ
+page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ
+page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ
+page_rotate_ccw.label=ຫມູນທວນເຂັມໂມງ
+page_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ
+
+
+
+
+# Document properties dialog box
+document_properties_file_name=ຊື່ໄຟລ໌:
+document_properties_file_size=ຂະຫນາດໄຟລ໌:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ລວງຕັ້ງ
+document_properties_page_size_orientation_landscape=ລວງນອນ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ຈົດໝາຍ
+document_properties_page_size_name_legal=ຂໍ້ກົດຫມາຍ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=ປິດ
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=ຍົກເລີກ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ເປີດ/ປິດແຖບຂ້າງ
+toggle_sidebar_notification.title=ເປີດ/ປິດແຖບຂ້າງ (ເອກະສານມີເຄົ້າຮ່າງ/ໄຟລ໌ແນບ)
+toggle_sidebar_label=ເປີດ/ປິດແຖບຂ້າງ
+document_outline_label=ເຄົ້າຮ່າງເອກະສານ
+findbar_label=ຄົ້ນຫາ
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=ຄົ້ນຫາ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+
+# Error panel labels
+error_more_info=ຂໍ້ມູນເພີ່ມເຕີມ
+error_less_info=ຂໍ້ມູນນ້ອຍລົງ
+error_close=ປິດ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+rendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ.
+
+# Predefined zoom values
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+loading_error_indicator=ຂໍ້ຜິດພາດ
+loading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF.
+invalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_ok=ຕົກລົງ
+password_cancel=ຍົກເລີກ
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/locale.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/locale.properties
index 411c1983089c4455ffbc992e50b59a991e8de8dc..3fbb0d0e7396b66dd87e33b75cc1b02bd16696f2 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/locale.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/locale.properties
@@ -1,309 +1,309 @@
-[ach]
-@import url(ach/viewer.properties)
-
-[af]
-@import url(af/viewer.properties)
-
-[an]
-@import url(an/viewer.properties)
-
-[ar]
-@import url(ar/viewer.properties)
-
-[ast]
-@import url(ast/viewer.properties)
-
-[az]
-@import url(az/viewer.properties)
-
-[be]
-@import url(be/viewer.properties)
-
-[bg]
-@import url(bg/viewer.properties)
-
-[bn]
-@import url(bn/viewer.properties)
-
-[bo]
-@import url(bo/viewer.properties)
-
-[br]
-@import url(br/viewer.properties)
-
-[brx]
-@import url(brx/viewer.properties)
-
-[bs]
-@import url(bs/viewer.properties)
-
-[ca]
-@import url(ca/viewer.properties)
-
-[cak]
-@import url(cak/viewer.properties)
-
-[cs]
-@import url(cs/viewer.properties)
-
-[cy]
-@import url(cy/viewer.properties)
-
-[da]
-@import url(da/viewer.properties)
-
-[de]
-@import url(de/viewer.properties)
-
-[dsb]
-@import url(dsb/viewer.properties)
-
-[el]
-@import url(el/viewer.properties)
-
-[en-CA]
-@import url(en-CA/viewer.properties)
-
-[en-GB]
-@import url(en-GB/viewer.properties)
-
-[en-US]
-@import url(en-US/viewer.properties)
-
-[eo]
-@import url(eo/viewer.properties)
-
-[es-AR]
-@import url(es-AR/viewer.properties)
-
-[es-CL]
-@import url(es-CL/viewer.properties)
-
-[es-ES]
-@import url(es-ES/viewer.properties)
-
-[es-MX]
-@import url(es-MX/viewer.properties)
-
-[et]
-@import url(et/viewer.properties)
-
-[eu]
-@import url(eu/viewer.properties)
-
-[fa]
-@import url(fa/viewer.properties)
-
-[ff]
-@import url(ff/viewer.properties)
-
-[fi]
-@import url(fi/viewer.properties)
-
-[fr]
-@import url(fr/viewer.properties)
-
-[fy-NL]
-@import url(fy-NL/viewer.properties)
-
-[ga-IE]
-@import url(ga-IE/viewer.properties)
-
-[gd]
-@import url(gd/viewer.properties)
-
-[gl]
-@import url(gl/viewer.properties)
-
-[gn]
-@import url(gn/viewer.properties)
-
-[gu-IN]
-@import url(gu-IN/viewer.properties)
-
-[he]
-@import url(he/viewer.properties)
-
-[hi-IN]
-@import url(hi-IN/viewer.properties)
-
-[hr]
-@import url(hr/viewer.properties)
-
-[hsb]
-@import url(hsb/viewer.properties)
-
-[hu]
-@import url(hu/viewer.properties)
-
-[hy-AM]
-@import url(hy-AM/viewer.properties)
-
-[hye]
-@import url(hye/viewer.properties)
-
-[ia]
-@import url(ia/viewer.properties)
-
-[id]
-@import url(id/viewer.properties)
-
-[is]
-@import url(is/viewer.properties)
-
-[it]
-@import url(it/viewer.properties)
-
-[ja]
-@import url(ja/viewer.properties)
-
-[ka]
-@import url(ka/viewer.properties)
-
-[kab]
-@import url(kab/viewer.properties)
-
-[kk]
-@import url(kk/viewer.properties)
-
-[km]
-@import url(km/viewer.properties)
-
-[kn]
-@import url(kn/viewer.properties)
-
-[ko]
-@import url(ko/viewer.properties)
-
-[lij]
-@import url(lij/viewer.properties)
-
-[lo]
-@import url(lo/viewer.properties)
-
-[lt]
-@import url(lt/viewer.properties)
-
-[ltg]
-@import url(ltg/viewer.properties)
-
-[lv]
-@import url(lv/viewer.properties)
-
-[meh]
-@import url(meh/viewer.properties)
-
-[mk]
-@import url(mk/viewer.properties)
-
-[mr]
-@import url(mr/viewer.properties)
-
-[ms]
-@import url(ms/viewer.properties)
-
-[my]
-@import url(my/viewer.properties)
-
-[nb-NO]
-@import url(nb-NO/viewer.properties)
-
-[ne-NP]
-@import url(ne-NP/viewer.properties)
-
-[nl]
-@import url(nl/viewer.properties)
-
-[nn-NO]
-@import url(nn-NO/viewer.properties)
-
-[oc]
-@import url(oc/viewer.properties)
-
-[pa-IN]
-@import url(pa-IN/viewer.properties)
-
-[pl]
-@import url(pl/viewer.properties)
-
-[pt-BR]
-@import url(pt-BR/viewer.properties)
-
-[pt-PT]
-@import url(pt-PT/viewer.properties)
-
-[rm]
-@import url(rm/viewer.properties)
-
-[ro]
-@import url(ro/viewer.properties)
-
-[ru]
-@import url(ru/viewer.properties)
-
-[scn]
-@import url(scn/viewer.properties)
-
-[si]
-@import url(si/viewer.properties)
-
-[sk]
-@import url(sk/viewer.properties)
-
-[sl]
-@import url(sl/viewer.properties)
-
-[son]
-@import url(son/viewer.properties)
-
-[sq]
-@import url(sq/viewer.properties)
-
-[sr]
-@import url(sr/viewer.properties)
-
-[sv-SE]
-@import url(sv-SE/viewer.properties)
-
-[ta]
-@import url(ta/viewer.properties)
-
-[te]
-@import url(te/viewer.properties)
-
-[th]
-@import url(th/viewer.properties)
-
-[tl]
-@import url(tl/viewer.properties)
-
-[tr]
-@import url(tr/viewer.properties)
-
-[trs]
-@import url(trs/viewer.properties)
-
-[uk]
-@import url(uk/viewer.properties)
-
-[ur]
-@import url(ur/viewer.properties)
-
-[uz]
-@import url(uz/viewer.properties)
-
-[vi]
-@import url(vi/viewer.properties)
-
-[wo]
-@import url(wo/viewer.properties)
-
-[xh]
-@import url(xh/viewer.properties)
-
-[zh-CN]
-@import url(zh-CN/viewer.properties)
-
-[zh-TW]
-@import url(zh-TW/viewer.properties)
-
+[ach]
+@import url(ach/viewer.properties)
+
+[af]
+@import url(af/viewer.properties)
+
+[an]
+@import url(an/viewer.properties)
+
+[ar]
+@import url(ar/viewer.properties)
+
+[ast]
+@import url(ast/viewer.properties)
+
+[az]
+@import url(az/viewer.properties)
+
+[be]
+@import url(be/viewer.properties)
+
+[bg]
+@import url(bg/viewer.properties)
+
+[bn]
+@import url(bn/viewer.properties)
+
+[bo]
+@import url(bo/viewer.properties)
+
+[br]
+@import url(br/viewer.properties)
+
+[brx]
+@import url(brx/viewer.properties)
+
+[bs]
+@import url(bs/viewer.properties)
+
+[ca]
+@import url(ca/viewer.properties)
+
+[cak]
+@import url(cak/viewer.properties)
+
+[cs]
+@import url(cs/viewer.properties)
+
+[cy]
+@import url(cy/viewer.properties)
+
+[da]
+@import url(da/viewer.properties)
+
+[de]
+@import url(de/viewer.properties)
+
+[dsb]
+@import url(dsb/viewer.properties)
+
+[el]
+@import url(el/viewer.properties)
+
+[en-CA]
+@import url(en-CA/viewer.properties)
+
+[en-GB]
+@import url(en-GB/viewer.properties)
+
+[en-US]
+@import url(en-US/viewer.properties)
+
+[eo]
+@import url(eo/viewer.properties)
+
+[es-AR]
+@import url(es-AR/viewer.properties)
+
+[es-CL]
+@import url(es-CL/viewer.properties)
+
+[es-ES]
+@import url(es-ES/viewer.properties)
+
+[es-MX]
+@import url(es-MX/viewer.properties)
+
+[et]
+@import url(et/viewer.properties)
+
+[eu]
+@import url(eu/viewer.properties)
+
+[fa]
+@import url(fa/viewer.properties)
+
+[ff]
+@import url(ff/viewer.properties)
+
+[fi]
+@import url(fi/viewer.properties)
+
+[fr]
+@import url(fr/viewer.properties)
+
+[fy-NL]
+@import url(fy-NL/viewer.properties)
+
+[ga-IE]
+@import url(ga-IE/viewer.properties)
+
+[gd]
+@import url(gd/viewer.properties)
+
+[gl]
+@import url(gl/viewer.properties)
+
+[gn]
+@import url(gn/viewer.properties)
+
+[gu-IN]
+@import url(gu-IN/viewer.properties)
+
+[he]
+@import url(he/viewer.properties)
+
+[hi-IN]
+@import url(hi-IN/viewer.properties)
+
+[hr]
+@import url(hr/viewer.properties)
+
+[hsb]
+@import url(hsb/viewer.properties)
+
+[hu]
+@import url(hu/viewer.properties)
+
+[hy-AM]
+@import url(hy-AM/viewer.properties)
+
+[hye]
+@import url(hye/viewer.properties)
+
+[ia]
+@import url(ia/viewer.properties)
+
+[id]
+@import url(id/viewer.properties)
+
+[is]
+@import url(is/viewer.properties)
+
+[it]
+@import url(it/viewer.properties)
+
+[ja]
+@import url(ja/viewer.properties)
+
+[ka]
+@import url(ka/viewer.properties)
+
+[kab]
+@import url(kab/viewer.properties)
+
+[kk]
+@import url(kk/viewer.properties)
+
+[km]
+@import url(km/viewer.properties)
+
+[kn]
+@import url(kn/viewer.properties)
+
+[ko]
+@import url(ko/viewer.properties)
+
+[lij]
+@import url(lij/viewer.properties)
+
+[lo]
+@import url(lo/viewer.properties)
+
+[lt]
+@import url(lt/viewer.properties)
+
+[ltg]
+@import url(ltg/viewer.properties)
+
+[lv]
+@import url(lv/viewer.properties)
+
+[meh]
+@import url(meh/viewer.properties)
+
+[mk]
+@import url(mk/viewer.properties)
+
+[mr]
+@import url(mr/viewer.properties)
+
+[ms]
+@import url(ms/viewer.properties)
+
+[my]
+@import url(my/viewer.properties)
+
+[nb-NO]
+@import url(nb-NO/viewer.properties)
+
+[ne-NP]
+@import url(ne-NP/viewer.properties)
+
+[nl]
+@import url(nl/viewer.properties)
+
+[nn-NO]
+@import url(nn-NO/viewer.properties)
+
+[oc]
+@import url(oc/viewer.properties)
+
+[pa-IN]
+@import url(pa-IN/viewer.properties)
+
+[pl]
+@import url(pl/viewer.properties)
+
+[pt-BR]
+@import url(pt-BR/viewer.properties)
+
+[pt-PT]
+@import url(pt-PT/viewer.properties)
+
+[rm]
+@import url(rm/viewer.properties)
+
+[ro]
+@import url(ro/viewer.properties)
+
+[ru]
+@import url(ru/viewer.properties)
+
+[scn]
+@import url(scn/viewer.properties)
+
+[si]
+@import url(si/viewer.properties)
+
+[sk]
+@import url(sk/viewer.properties)
+
+[sl]
+@import url(sl/viewer.properties)
+
+[son]
+@import url(son/viewer.properties)
+
+[sq]
+@import url(sq/viewer.properties)
+
+[sr]
+@import url(sr/viewer.properties)
+
+[sv-SE]
+@import url(sv-SE/viewer.properties)
+
+[ta]
+@import url(ta/viewer.properties)
+
+[te]
+@import url(te/viewer.properties)
+
+[th]
+@import url(th/viewer.properties)
+
+[tl]
+@import url(tl/viewer.properties)
+
+[tr]
+@import url(tr/viewer.properties)
+
+[trs]
+@import url(trs/viewer.properties)
+
+[uk]
+@import url(uk/viewer.properties)
+
+[ur]
+@import url(ur/viewer.properties)
+
+[uz]
+@import url(uz/viewer.properties)
+
+[vi]
+@import url(vi/viewer.properties)
+
+[wo]
+@import url(wo/viewer.properties)
+
+[xh]
+@import url(xh/viewer.properties)
+
+[zh-CN]
+@import url(zh-CN/viewer.properties)
+
+[zh-TW]
+@import url(zh-TW/viewer.properties)
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lt/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lt/viewer.properties
index dbdc82136638cc15384f03a26b0cc123679f9e53..5a6cb2b1132c5c54c383e01ae8ace7aef7193754 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lt/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lt/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Ankstesnis puslapis
-previous_label=Ankstesnis
-next.title=Kitas puslapis
-next_label=Kitas
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Puslapis
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=iš {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} iš {{pagesCount}})
-
-zoom_out.title=Sumažinti
-zoom_out_label=Sumažinti
-zoom_in.title=Padidinti
-zoom_in_label=Padidinti
-zoom.title=Mastelis
-presentation_mode.title=Pereiti į pateikties veikseną
-presentation_mode_label=Pateikties veiksena
-open_file.title=Atverti failą
-open_file_label=Atverti
-print.title=Spausdinti
-print_label=Spausdinti
-download.title=Parsiųsti
-download_label=Parsiųsti
-bookmark.title=Esamojo rodinio saitas (kopijavimui ar atvėrimui kitame lange)
-bookmark_label=Esamasis rodinys
-
-# Secondary toolbar and context menu
-tools.title=Priemonės
-tools_label=Priemonės
-first_page.title=Eiti į pirmą puslapį
-first_page.label=Eiti į pirmą puslapį
-first_page_label=Eiti į pirmą puslapį
-last_page.title=Eiti į paskutinį puslapį
-last_page.label=Eiti į paskutinį puslapį
-last_page_label=Eiti į paskutinį puslapį
-page_rotate_cw.title=Pasukti pagal laikrodžio rodyklę
-page_rotate_cw.label=Pasukti pagal laikrodžio rodyklę
-page_rotate_cw_label=Pasukti pagal laikrodžio rodyklę
-page_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę
-page_rotate_ccw.label=Pasukti prieš laikrodžio rodyklę
-page_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę
-
-cursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį
-cursor_text_select_tool_label=Teksto žymėjimo įrankis
-cursor_hand_tool.title=Įjungti vilkimo įrankį
-cursor_hand_tool_label=Vilkimo įrankis
-
-scroll_vertical.title=Naudoti vertikalų slinkimą
-scroll_vertical_label=Vertikalus slinkimas
-scroll_horizontal.title=Naudoti horizontalų slinkimą
-scroll_horizontal_label=Horizontalus slinkimas
-scroll_wrapped.title=Naudoti išklotą slinkimą
-scroll_wrapped_label=Išklotas slinkimas
-
-spread_none.title=Nesujungti puslapių sklaidų
-spread_none_label=Be sklaidų
-spread_odd.title=Sujungti puslapių sklaidas pradedant nelyginiais puslapiais
-spread_odd_label=Nelyginės sklaidos
-spread_even.title=Sujungti puslapių sklaidas pradedant lyginiais puslapiais
-spread_even_label=Lyginės sklaidos
-
-# Document properties dialog box
-document_properties.title=Dokumento savybės…
-document_properties_label=Dokumento savybės…
-document_properties_file_name=Failo vardas:
-document_properties_file_size=Failo dydis:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} B)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} B)
-document_properties_title=Antraštė:
-document_properties_author=Autorius:
-document_properties_subject=Tema:
-document_properties_keywords=Reikšminiai žodžiai:
-document_properties_creation_date=Sukūrimo data:
-document_properties_modification_date=Modifikavimo data:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Kūrėjas:
-document_properties_producer=PDF generatorius:
-document_properties_version=PDF versija:
-document_properties_page_count=Puslapių skaičius:
-document_properties_page_size=Puslapio dydis:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=stačias
-document_properties_page_size_orientation_landscape=gulsčias
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Laiškas
-document_properties_page_size_name_legal=Dokumentas
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Spartus žiniatinklio rodinys:
-document_properties_linearized_yes=Taip
-document_properties_linearized_no=Ne
-document_properties_close=Užverti
-
-print_progress_message=Dokumentas ruošiamas spausdinimui…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Atsisakyti
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Rodyti / slėpti šoninį polangį
-toggle_sidebar_notification.title=Parankinė (dokumentas turi struktūrą / priedų)
-toggle_sidebar_label=Šoninis polangis
-document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus)
-document_outline_label=Dokumento struktūra
-attachments.title=Rodyti priedus
-attachments_label=Priedai
-thumbs.title=Rodyti puslapių miniatiūras
-thumbs_label=Miniatiūros
-findbar.title=Ieškoti dokumente
-findbar_label=Rasti
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas={{page}} puslapis
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}} puslapis
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} puslapio miniatiūra
-
-# Find panel button title and messages
-find_input.title=Rasti
-find_input.placeholder=Rasti dokumente…
-find_previous.title=Ieškoti ankstesnio frazės egzemplioriaus
-find_previous_label=Ankstesnis
-find_next.title=Ieškoti tolesnio frazės egzemplioriaus
-find_next_label=Tolesnis
-find_highlight=Viską paryškinti
-find_match_case_label=Skirti didžiąsias ir mažąsias raides
-find_entire_word_label=Ištisi žodžiai
-find_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos
-find_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} iš {{total}} atitikmens
-find_match_count[two]={{current}} iš {{total}} atitikmenų
-find_match_count[few]={{current}} iš {{total}} atitikmenų
-find_match_count[many]={{current}} iš {{total}} atitikmenų
-find_match_count[other]={{current}} iš {{total}} atitikmens
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų
-find_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo
-find_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys
-find_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys
-find_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų
-find_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo
-find_not_found=Ieškoma frazė nerasta
-
-# Error panel labels
-error_more_info=Išsamiau
-error_less_info=Glausčiau
-error_close=Užverti
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v. {{version}} (darinys: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Pranešimas: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Dėklas: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Failas: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Eilutė: {{line}}
-rendering_error=Atvaizduojant puslapį įvyko klaida.
-
-# Predefined zoom values
-page_scale_width=Priderinti prie lapo pločio
-page_scale_fit=Pritaikyti prie lapo dydžio
-page_scale_auto=Automatinis mastelis
-page_scale_actual=Tikras dydis
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Klaida
-loading_error=Įkeliant PDF failą įvyko klaida.
-invalid_file_error=Tai nėra PDF failas arba jis yra sugadintas.
-missing_file_error=PDF failas nerastas.
-unexpected_response_error=Netikėtas serverio atsakas.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[„{{type}}“ tipo anotacija]
-password_label=Įveskite slaptažodį šiam PDF failui atverti.
-password_invalid=Slaptažodis neteisingas. Bandykite dar kartą.
-password_ok=Gerai
-password_cancel=Atsisakyti
-
-printing_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas.
-printing_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui.
-web_fonts_disabled=Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima.
-document_colors_not_allowed=PDF dokumentams neleidžiama nurodyti savo spalvų, nes išjungta naršyklės nuostata „Leisti tinklalapiams nurodyti spalvas“.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Ankstesnis puslapis
+previous_label=Ankstesnis
+next.title=Kitas puslapis
+next_label=Kitas
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Puslapis
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=iš {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} iš {{pagesCount}})
+
+zoom_out.title=Sumažinti
+zoom_out_label=Sumažinti
+zoom_in.title=Padidinti
+zoom_in_label=Padidinti
+zoom.title=Mastelis
+presentation_mode.title=Pereiti į pateikties veikseną
+presentation_mode_label=Pateikties veiksena
+open_file.title=Atverti failą
+open_file_label=Atverti
+print.title=Spausdinti
+print_label=Spausdinti
+download.title=Parsiųsti
+download_label=Parsiųsti
+bookmark.title=Esamojo rodinio saitas (kopijavimui ar atvėrimui kitame lange)
+bookmark_label=Esamasis rodinys
+
+# Secondary toolbar and context menu
+tools.title=Priemonės
+tools_label=Priemonės
+first_page.title=Eiti į pirmą puslapį
+first_page.label=Eiti į pirmą puslapį
+first_page_label=Eiti į pirmą puslapį
+last_page.title=Eiti į paskutinį puslapį
+last_page.label=Eiti į paskutinį puslapį
+last_page_label=Eiti į paskutinį puslapį
+page_rotate_cw.title=Pasukti pagal laikrodžio rodyklę
+page_rotate_cw.label=Pasukti pagal laikrodžio rodyklę
+page_rotate_cw_label=Pasukti pagal laikrodžio rodyklę
+page_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę
+page_rotate_ccw.label=Pasukti prieš laikrodžio rodyklę
+page_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę
+
+cursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį
+cursor_text_select_tool_label=Teksto žymėjimo įrankis
+cursor_hand_tool.title=Įjungti vilkimo įrankį
+cursor_hand_tool_label=Vilkimo įrankis
+
+scroll_vertical.title=Naudoti vertikalų slinkimą
+scroll_vertical_label=Vertikalus slinkimas
+scroll_horizontal.title=Naudoti horizontalų slinkimą
+scroll_horizontal_label=Horizontalus slinkimas
+scroll_wrapped.title=Naudoti išklotą slinkimą
+scroll_wrapped_label=Išklotas slinkimas
+
+spread_none.title=Nesujungti puslapių sklaidų
+spread_none_label=Be sklaidų
+spread_odd.title=Sujungti puslapių sklaidas pradedant nelyginiais puslapiais
+spread_odd_label=Nelyginės sklaidos
+spread_even.title=Sujungti puslapių sklaidas pradedant lyginiais puslapiais
+spread_even_label=Lyginės sklaidos
+
+# Document properties dialog box
+document_properties.title=Dokumento savybės…
+document_properties_label=Dokumento savybės…
+document_properties_file_name=Failo vardas:
+document_properties_file_size=Failo dydis:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Antraštė:
+document_properties_author=Autorius:
+document_properties_subject=Tema:
+document_properties_keywords=Reikšminiai žodžiai:
+document_properties_creation_date=Sukūrimo data:
+document_properties_modification_date=Modifikavimo data:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kūrėjas:
+document_properties_producer=PDF generatorius:
+document_properties_version=PDF versija:
+document_properties_page_count=Puslapių skaičius:
+document_properties_page_size=Puslapio dydis:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stačias
+document_properties_page_size_orientation_landscape=gulsčias
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Laiškas
+document_properties_page_size_name_legal=Dokumentas
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Spartus žiniatinklio rodinys:
+document_properties_linearized_yes=Taip
+document_properties_linearized_no=Ne
+document_properties_close=Užverti
+
+print_progress_message=Dokumentas ruošiamas spausdinimui…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atsisakyti
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Rodyti / slėpti šoninį polangį
+toggle_sidebar_notification.title=Parankinė (dokumentas turi struktūrą / priedų)
+toggle_sidebar_label=Šoninis polangis
+document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus)
+document_outline_label=Dokumento struktūra
+attachments.title=Rodyti priedus
+attachments_label=Priedai
+thumbs.title=Rodyti puslapių miniatiūras
+thumbs_label=Miniatiūros
+findbar.title=Ieškoti dokumente
+findbar_label=Rasti
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}} puslapis
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} puslapis
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} puslapio miniatiūra
+
+# Find panel button title and messages
+find_input.title=Rasti
+find_input.placeholder=Rasti dokumente…
+find_previous.title=Ieškoti ankstesnio frazės egzemplioriaus
+find_previous_label=Ankstesnis
+find_next.title=Ieškoti tolesnio frazės egzemplioriaus
+find_next_label=Tolesnis
+find_highlight=Viską paryškinti
+find_match_case_label=Skirti didžiąsias ir mažąsias raides
+find_entire_word_label=Ištisi žodžiai
+find_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos
+find_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} iš {{total}} atitikmens
+find_match_count[two]={{current}} iš {{total}} atitikmenų
+find_match_count[few]={{current}} iš {{total}} atitikmenų
+find_match_count[many]={{current}} iš {{total}} atitikmenų
+find_match_count[other]={{current}} iš {{total}} atitikmens
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų
+find_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo
+find_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys
+find_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys
+find_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų
+find_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo
+find_not_found=Ieškoma frazė nerasta
+
+# Error panel labels
+error_more_info=Išsamiau
+error_less_info=Glausčiau
+error_close=Užverti
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v. {{version}} (darinys: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Pranešimas: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Dėklas: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Failas: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Eilutė: {{line}}
+rendering_error=Atvaizduojant puslapį įvyko klaida.
+
+# Predefined zoom values
+page_scale_width=Priderinti prie lapo pločio
+page_scale_fit=Pritaikyti prie lapo dydžio
+page_scale_auto=Automatinis mastelis
+page_scale_actual=Tikras dydis
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Klaida
+loading_error=Įkeliant PDF failą įvyko klaida.
+invalid_file_error=Tai nėra PDF failas arba jis yra sugadintas.
+missing_file_error=PDF failas nerastas.
+unexpected_response_error=Netikėtas serverio atsakas.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[„{{type}}“ tipo anotacija]
+password_label=Įveskite slaptažodį šiam PDF failui atverti.
+password_invalid=Slaptažodis neteisingas. Bandykite dar kartą.
+password_ok=Gerai
+password_cancel=Atsisakyti
+
+printing_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas.
+printing_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui.
+web_fonts_disabled=Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima.
+document_colors_not_allowed=PDF dokumentams neleidžiama nurodyti savo spalvų, nes išjungta naršyklės nuostata „Leisti tinklalapiams nurodyti spalvas“.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ltg/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ltg/viewer.properties
index ecdb72352ad522da809d45522a2a946b0ac7bed3..cc1660026ea6b76dd64772ea4a226e95dda09b09 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ltg/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ltg/viewer.properties
@@ -1,220 +1,220 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Īprīkšejā lopa
-previous_label=Īprīkšejā
-next.title=Nuokomuo lopa
-next_label=Nuokomuo
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Lopa
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=nu {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} nu {{pagesCount}})
-
-zoom_out.title=Attuolynuot
-zoom_out_label=Attuolynuot
-zoom_in.title=Pītuvynuot
-zoom_in_label=Pītuvynuot
-zoom.title=Palelynuojums
-presentation_mode.title=Puorslēgtīs iz Prezentacejis režymu
-presentation_mode_label=Prezentacejis režyms
-open_file.title=Attaiseit failu
-open_file_label=Attaiseit
-print.title=Drukuošona
-print_label=Drukōt
-download.title=Lejupīluode
-download_label=Lejupīluodeit
-bookmark.title=Pošreizejais skots (kopēt voi attaiseit jaunā lūgā)
-bookmark_label=Pošreizejais skots
-
-# Secondary toolbar and context menu
-tools.title=Reiki
-tools_label=Reiki
-first_page.title=Īt iz pyrmū lopu
-first_page.label=Īt iz pyrmū lopu
-first_page_label=Īt iz pyrmū lopu
-last_page.title=Īt iz piedejū lopu
-last_page.label=Īt iz piedejū lopu
-last_page_label=Īt iz piedejū lopu
-page_rotate_cw.title=Pagrīzt pa pulksteni
-page_rotate_cw.label=Pagrīzt pa pulksteni
-page_rotate_cw_label=Pagrīzt pa pulksteni
-page_rotate_ccw.title=Pagrīzt pret pulksteni
-page_rotate_ccw.label=Pagrīzt pret pulksteni
-page_rotate_ccw_label=Pagrīzt pret pulksteni
-
-cursor_text_select_tool.title=Aktivizēt teksta izvieles reiku
-cursor_text_select_tool_label=Teksta izvieles reiks
-cursor_hand_tool.title=Aktivēt rūkys reiku
-cursor_hand_tool_label=Rūkys reiks
-
-scroll_vertical.title=Izmontōt vertikalū ritinōšonu
-scroll_vertical_label=Vertikalō ritinōšona
-scroll_horizontal.title=Izmontōt horizontalū ritinōšonu
-scroll_horizontal_label=Horizontalō ritinōšona
-scroll_wrapped.title=Izmontōt mārūgojamū ritinōšonu
-scroll_wrapped_label=Mārūgojamō ritinōšona
-
-spread_none.title=Naizmontōt lopu atvāruma režimu
-spread_none_label=Bez atvārumim
-spread_odd.title=Izmontōt lopu atvārumus sōkut nu napōra numeru lopom
-spread_odd_label=Napōra lopys pa kreisi
-spread_even.title=Izmontōt lopu atvārumus sōkut nu pōra numeru lopom
-spread_even_label=Pōra lopys pa kreisi
-
-# Document properties dialog box
-document_properties.title=Dokumenta īstatiejumi…
-document_properties_label=Dokumenta īstatiejumi…
-document_properties_file_name=Faila nūsaukums:
-document_properties_file_size=Faila izmārs:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} biti)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} biti)
-document_properties_title=Nūsaukums:
-document_properties_author=Autors:
-document_properties_subject=Tema:
-document_properties_keywords=Atslāgi vuordi:
-document_properties_creation_date=Izveides datums:
-document_properties_modification_date=lobuošonys datums:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Radeituojs:
-document_properties_producer=PDF producents:
-document_properties_version=PDF verseja:
-document_properties_page_count=Lopu skaits:
-document_properties_page_size=Lopas izmārs:
-document_properties_page_size_unit_inches=collas
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portreta orientaceja
-document_properties_page_size_orientation_landscape=ainovys orientaceja
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Jā
-document_properties_linearized_no=Nā
-document_properties_close=Aiztaiseit
-
-print_progress_message=Preparing document for printing…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Atceļt
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Puorslēgt suonu jūslu
-toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
-toggle_sidebar_label=Puorslēgt suonu jūslu
-document_outline.title=Show Document Outline (double-click to expand/collapse all items)
-document_outline_label=Dokumenta saturs
-attachments.title=Show Attachments
-attachments_label=Attachments
-thumbs.title=Paruodeit seiktālus
-thumbs_label=Seiktāli
-findbar.title=Mekleit dokumentā
-findbar_label=Mekleit
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Lopa {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Lopys {{page}} seiktāls
-
-# Find panel button title and messages
-find_input.title=Mekleit
-find_input.placeholder=Mekleit dokumentā…
-find_previous.title=Atrast īprīkšejū
-find_previous_label=Īprīkšejā
-find_next.title=Atrast nuokamū
-find_next_label=Nuokomuo
-find_highlight=Īkruosuot vysys
-find_match_case_label=Lelū, mozū burtu jiuteigs
-find_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom
-find_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma
-find_not_found=Frāze nav atrosta
-
-# Error panel labels
-error_more_info=Vairuok informacejis
-error_less_info=mozuok informacejis
-error_close=Close
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Ziņuojums: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Steks: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Ryndeņa: {{line}}
-rendering_error=Attālojūt lopu rodās klaida
-
-# Predefined zoom values
-page_scale_width=Lopys plotumā
-page_scale_fit=Ītylpynūt lopu
-page_scale_auto=Automatiskais izmārs
-page_scale_actual=Patīsais izmārs
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Klaida
-loading_error=Īluodejūt PDF nūtyka klaida.
-invalid_file_error=Nadereigs voi būjuots PDF fails.
-missing_file_error=PDF fails nav atrosts.
-unexpected_response_error=Unexpected server response.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Īvodit paroli, kab attaiseitu PDF failu.
-password_invalid=Napareiza parole, raugit vēļreiz.
-password_ok=Labi
-password_cancel=Atceļt
-
-printing_not_supported=Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji.
-printing_not_ready=Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai.
-web_fonts_disabled=Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus.
-document_colors_not_allowed=PDF dokumentym nav atļauts izmantuot pošym sovys kruosys: „Atļaut lopom izavieleit pošom sovys kruosys“ ir deaktiveits puorlyukā.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Īprīkšejā lopa
+previous_label=Īprīkšejā
+next.title=Nuokomuo lopa
+next_label=Nuokomuo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Lopa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=nu {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} nu {{pagesCount}})
+
+zoom_out.title=Attuolynuot
+zoom_out_label=Attuolynuot
+zoom_in.title=Pītuvynuot
+zoom_in_label=Pītuvynuot
+zoom.title=Palelynuojums
+presentation_mode.title=Puorslēgtīs iz Prezentacejis režymu
+presentation_mode_label=Prezentacejis režyms
+open_file.title=Attaiseit failu
+open_file_label=Attaiseit
+print.title=Drukuošona
+print_label=Drukōt
+download.title=Lejupīluode
+download_label=Lejupīluodeit
+bookmark.title=Pošreizejais skots (kopēt voi attaiseit jaunā lūgā)
+bookmark_label=Pošreizejais skots
+
+# Secondary toolbar and context menu
+tools.title=Reiki
+tools_label=Reiki
+first_page.title=Īt iz pyrmū lopu
+first_page.label=Īt iz pyrmū lopu
+first_page_label=Īt iz pyrmū lopu
+last_page.title=Īt iz piedejū lopu
+last_page.label=Īt iz piedejū lopu
+last_page_label=Īt iz piedejū lopu
+page_rotate_cw.title=Pagrīzt pa pulksteni
+page_rotate_cw.label=Pagrīzt pa pulksteni
+page_rotate_cw_label=Pagrīzt pa pulksteni
+page_rotate_ccw.title=Pagrīzt pret pulksteni
+page_rotate_ccw.label=Pagrīzt pret pulksteni
+page_rotate_ccw_label=Pagrīzt pret pulksteni
+
+cursor_text_select_tool.title=Aktivizēt teksta izvieles reiku
+cursor_text_select_tool_label=Teksta izvieles reiks
+cursor_hand_tool.title=Aktivēt rūkys reiku
+cursor_hand_tool_label=Rūkys reiks
+
+scroll_vertical.title=Izmontōt vertikalū ritinōšonu
+scroll_vertical_label=Vertikalō ritinōšona
+scroll_horizontal.title=Izmontōt horizontalū ritinōšonu
+scroll_horizontal_label=Horizontalō ritinōšona
+scroll_wrapped.title=Izmontōt mārūgojamū ritinōšonu
+scroll_wrapped_label=Mārūgojamō ritinōšona
+
+spread_none.title=Naizmontōt lopu atvāruma režimu
+spread_none_label=Bez atvārumim
+spread_odd.title=Izmontōt lopu atvārumus sōkut nu napōra numeru lopom
+spread_odd_label=Napōra lopys pa kreisi
+spread_even.title=Izmontōt lopu atvārumus sōkut nu pōra numeru lopom
+spread_even_label=Pōra lopys pa kreisi
+
+# Document properties dialog box
+document_properties.title=Dokumenta īstatiejumi…
+document_properties_label=Dokumenta īstatiejumi…
+document_properties_file_name=Faila nūsaukums:
+document_properties_file_size=Faila izmārs:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} biti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} biti)
+document_properties_title=Nūsaukums:
+document_properties_author=Autors:
+document_properties_subject=Tema:
+document_properties_keywords=Atslāgi vuordi:
+document_properties_creation_date=Izveides datums:
+document_properties_modification_date=lobuošonys datums:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Radeituojs:
+document_properties_producer=PDF producents:
+document_properties_version=PDF verseja:
+document_properties_page_count=Lopu skaits:
+document_properties_page_size=Lopas izmārs:
+document_properties_page_size_unit_inches=collas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portreta orientaceja
+document_properties_page_size_orientation_landscape=ainovys orientaceja
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Jā
+document_properties_linearized_no=Nā
+document_properties_close=Aiztaiseit
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atceļt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Puorslēgt suonu jūslu
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Puorslēgt suonu jūslu
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Dokumenta saturs
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Paruodeit seiktālus
+thumbs_label=Seiktāli
+findbar.title=Mekleit dokumentā
+findbar_label=Mekleit
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Lopa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Lopys {{page}} seiktāls
+
+# Find panel button title and messages
+find_input.title=Mekleit
+find_input.placeholder=Mekleit dokumentā…
+find_previous.title=Atrast īprīkšejū
+find_previous_label=Īprīkšejā
+find_next.title=Atrast nuokamū
+find_next_label=Nuokomuo
+find_highlight=Īkruosuot vysys
+find_match_case_label=Lelū, mozū burtu jiuteigs
+find_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom
+find_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma
+find_not_found=Frāze nav atrosta
+
+# Error panel labels
+error_more_info=Vairuok informacejis
+error_less_info=mozuok informacejis
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ziņuojums: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Steks: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ryndeņa: {{line}}
+rendering_error=Attālojūt lopu rodās klaida
+
+# Predefined zoom values
+page_scale_width=Lopys plotumā
+page_scale_fit=Ītylpynūt lopu
+page_scale_auto=Automatiskais izmārs
+page_scale_actual=Patīsais izmārs
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Klaida
+loading_error=Īluodejūt PDF nūtyka klaida.
+invalid_file_error=Nadereigs voi būjuots PDF fails.
+missing_file_error=PDF fails nav atrosts.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Īvodit paroli, kab attaiseitu PDF failu.
+password_invalid=Napareiza parole, raugit vēļreiz.
+password_ok=Labi
+password_cancel=Atceļt
+
+printing_not_supported=Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji.
+printing_not_ready=Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai.
+web_fonts_disabled=Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus.
+document_colors_not_allowed=PDF dokumentym nav atļauts izmantuot pošym sovys kruosys: „Atļaut lopom izavieleit pošom sovys kruosys“ ir deaktiveits puorlyukā.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lv/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lv/viewer.properties
index 18ed55efbc11ee1abe7b832c9f445112390ca941..2120465d9a791c7d28a671585c60aeacd8de144e 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lv/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/lv/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Iepriekšējā lapa
-previous_label=Iepriekšējā
-next.title=Nākamā lapa
-next_label=Nākamā
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Lapa
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=no {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} no {{pagesCount}})
-
-zoom_out.title=Attālināt\u0020
-zoom_out_label=Attālināt
-zoom_in.title=Pietuvināt
-zoom_in_label=Pietuvināt
-zoom.title=Palielinājums
-presentation_mode.title=Pārslēgties uz Prezentācijas režīmu
-presentation_mode_label=Prezentācijas režīms
-open_file.title=Atvērt failu
-open_file_label=Atvērt
-print.title=Drukāšana
-print_label=Drukāt
-download.title=Lejupielāde
-download_label=Lejupielādēt
-bookmark.title=Pašreizējais skats (kopēt vai atvērt jaunā logā)
-bookmark_label=Pašreizējais skats
-
-# Secondary toolbar and context menu
-tools.title=Rīki
-tools_label=Rīki
-first_page.title=Iet uz pirmo lapu
-first_page.label=Iet uz pirmo lapu
-first_page_label=Iet uz pirmo lapu
-last_page.title=Iet uz pēdējo lapu
-last_page.label=Iet uz pēdējo lapu
-last_page_label=Iet uz pēdējo lapu
-page_rotate_cw.title=Pagriezt pa pulksteni
-page_rotate_cw.label=Pagriezt pa pulksteni
-page_rotate_cw_label=Pagriezt pa pulksteni
-page_rotate_ccw.title=Pagriezt pret pulksteni
-page_rotate_ccw.label=Pagriezt pret pulksteni
-page_rotate_ccw_label=Pagriezt pret pulksteni
-
-cursor_text_select_tool.title=Aktivizēt teksta izvēles rīku
-cursor_text_select_tool_label=Teksta izvēles rīks
-cursor_hand_tool.title=Aktivēt rokas rīku
-cursor_hand_tool_label=Rokas rīks
-
-scroll_vertical.title=Izmantot vertikālo ritināšanu
-scroll_vertical_label=Vertikālā ritināšana
-scroll_horizontal.title=Izmantot horizontālo ritināšanu
-scroll_horizontal_label=Horizontālā ritināšana
-scroll_wrapped.title=Izmantot apkļauto ritināšanu
-scroll_wrapped_label=Apkļautā ritināšana
-
-spread_none.title=Nepievienoties lapu izpletumiem
-spread_none_label=Neizmantot izpletumus
-spread_odd.title=Izmantot lapu izpletumus sākot ar nepāra numuru lapām
-spread_odd_label=Nepāra izpletumi
-spread_even.title=Izmantot lapu izpletumus sākot ar pāra numuru lapām
-spread_even_label=Pāra izpletumi
-
-# Document properties dialog box
-document_properties.title=Dokumenta iestatījumi…
-document_properties_label=Dokumenta iestatījumi…
-document_properties_file_name=Faila nosaukums:
-document_properties_file_size=Faila izmērs:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} biti)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} biti)
-document_properties_title=Nosaukums:
-document_properties_author=Autors:
-document_properties_subject=Tēma:
-document_properties_keywords=Atslēgas vārdi:
-document_properties_creation_date=Izveides datums:
-document_properties_modification_date=LAbošanas datums:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Radītājs:
-document_properties_producer=PDF producents:
-document_properties_version=PDF versija:
-document_properties_page_count=Lapu skaits:
-document_properties_page_size=Papīra izmērs:
-document_properties_page_size_unit_inches=collas
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portretorientācija
-document_properties_page_size_orientation_landscape=ainavorientācija
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Vēstule
-document_properties_page_size_name_legal=Juridiskie teksti
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Ātrā tīmekļa skats:
-document_properties_linearized_yes=Jā
-document_properties_linearized_no=Nē
-document_properties_close=Aizvērt
-
-print_progress_message=Gatavo dokumentu drukāšanai...
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Atcelt
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Pārslēgt sānu joslu
-toggle_sidebar_notification.title=Pārslēgt sānu joslu (dokumenta saturu un pielikumus)
-toggle_sidebar_label=Pārslēgt sānu joslu
-document_outline.title=Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus)
-document_outline_label=Dokumenta saturs
-attachments.title=Rādīt pielikumus
-attachments_label=Pielikumi
-thumbs.title=Parādīt sīktēlus
-thumbs_label=Sīktēli
-findbar.title=Meklēt dokumentā
-findbar_label=Meklēt
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Lapa {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Lapas {{page}} sīktēls
-
-# Find panel button title and messages
-find_input.title=Meklēt
-find_input.placeholder=Meklēt dokumentā…
-find_previous.title=Atrast iepriekšējo
-find_previous_label=Iepriekšējā
-find_next.title=Atrast nākamo
-find_next_label=Nākamā
-find_highlight=Iekrāsot visas
-find_match_case_label=Lielo, mazo burtu jutīgs
-find_entire_word_label=Veselus vārdus
-find_reached_top=Sasniegts dokumenta sākums, turpinām no beigām
-find_reached_bottom=Sasniegtas dokumenta beigas, turpinām no sākuma
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} no {{total}} rezultāta
-find_match_count[two]={{current}} no {{total}} rezultātiem
-find_match_count[few]={{current}} no {{total}} rezultātiem
-find_match_count[many]={{current}} no {{total}} rezultātiem
-find_match_count[other]={{current}} no {{total}} rezultātiem
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Vairāk nekā {{limit}} rezultāti
-find_match_count_limit[one]=Vairāk nekā {{limit}} rezultāti
-find_match_count_limit[two]=Vairāk nekā {{limit}} rezultāti
-find_match_count_limit[few]=Vairāk nekā {{limit}} rezultāti
-find_match_count_limit[many]=Vairāk nekā {{limit}} rezultāti
-find_match_count_limit[other]=Vairāk nekā {{limit}} rezultāti
-find_not_found=Frāze nav atrasta
-
-# Error panel labels
-error_more_info=Vairāk informācijas
-error_less_info=MAzāk informācijas
-error_close=Close
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Ziņojums: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Steks: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rindiņa: {{line}}
-rendering_error=Attēlojot lapu radās kļūda
-
-# Predefined zoom values
-page_scale_width=Lapas platumā
-page_scale_fit=Ietilpinot lapu
-page_scale_auto=Automātiskais izmērs
-page_scale_actual=Patiesais izmērs
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Kļūda
-loading_error=Ielādējot PDF notika kļūda.
-invalid_file_error=Nederīgs vai bojāts PDF fails.
-missing_file_error=PDF fails nav atrasts.
-unexpected_response_error=Negaidīa servera atbilde.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} anotācija]
-password_label=Ievadiet paroli, lai atvērtu PDF failu.
-password_invalid=Nepareiza parole, mēģiniet vēlreiz.
-password_ok=Labi
-password_cancel=Atcelt
-
-printing_not_supported=Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji.
-printing_not_ready=Uzmanību: PDF nav pilnībā ielādēts drukāšanai.
-web_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus.
-document_colors_not_allowed=PDF dokumentiem nav atļauts izmantot pašiem savas krāsas: „Atļaut lapām izvēlēties pašām savas krāsas“ ir deaktivēts pārlūkā.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Iepriekšējā lapa
+previous_label=Iepriekšējā
+next.title=Nākamā lapa
+next_label=Nākamā
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Lapa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=no {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} no {{pagesCount}})
+
+zoom_out.title=Attālināt\u0020
+zoom_out_label=Attālināt
+zoom_in.title=Pietuvināt
+zoom_in_label=Pietuvināt
+zoom.title=Palielinājums
+presentation_mode.title=Pārslēgties uz Prezentācijas režīmu
+presentation_mode_label=Prezentācijas režīms
+open_file.title=Atvērt failu
+open_file_label=Atvērt
+print.title=Drukāšana
+print_label=Drukāt
+download.title=Lejupielāde
+download_label=Lejupielādēt
+bookmark.title=Pašreizējais skats (kopēt vai atvērt jaunā logā)
+bookmark_label=Pašreizējais skats
+
+# Secondary toolbar and context menu
+tools.title=Rīki
+tools_label=Rīki
+first_page.title=Iet uz pirmo lapu
+first_page.label=Iet uz pirmo lapu
+first_page_label=Iet uz pirmo lapu
+last_page.title=Iet uz pēdējo lapu
+last_page.label=Iet uz pēdējo lapu
+last_page_label=Iet uz pēdējo lapu
+page_rotate_cw.title=Pagriezt pa pulksteni
+page_rotate_cw.label=Pagriezt pa pulksteni
+page_rotate_cw_label=Pagriezt pa pulksteni
+page_rotate_ccw.title=Pagriezt pret pulksteni
+page_rotate_ccw.label=Pagriezt pret pulksteni
+page_rotate_ccw_label=Pagriezt pret pulksteni
+
+cursor_text_select_tool.title=Aktivizēt teksta izvēles rīku
+cursor_text_select_tool_label=Teksta izvēles rīks
+cursor_hand_tool.title=Aktivēt rokas rīku
+cursor_hand_tool_label=Rokas rīks
+
+scroll_vertical.title=Izmantot vertikālo ritināšanu
+scroll_vertical_label=Vertikālā ritināšana
+scroll_horizontal.title=Izmantot horizontālo ritināšanu
+scroll_horizontal_label=Horizontālā ritināšana
+scroll_wrapped.title=Izmantot apkļauto ritināšanu
+scroll_wrapped_label=Apkļautā ritināšana
+
+spread_none.title=Nepievienoties lapu izpletumiem
+spread_none_label=Neizmantot izpletumus
+spread_odd.title=Izmantot lapu izpletumus sākot ar nepāra numuru lapām
+spread_odd_label=Nepāra izpletumi
+spread_even.title=Izmantot lapu izpletumus sākot ar pāra numuru lapām
+spread_even_label=Pāra izpletumi
+
+# Document properties dialog box
+document_properties.title=Dokumenta iestatījumi…
+document_properties_label=Dokumenta iestatījumi…
+document_properties_file_name=Faila nosaukums:
+document_properties_file_size=Faila izmērs:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} biti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} biti)
+document_properties_title=Nosaukums:
+document_properties_author=Autors:
+document_properties_subject=Tēma:
+document_properties_keywords=Atslēgas vārdi:
+document_properties_creation_date=Izveides datums:
+document_properties_modification_date=LAbošanas datums:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Radītājs:
+document_properties_producer=PDF producents:
+document_properties_version=PDF versija:
+document_properties_page_count=Lapu skaits:
+document_properties_page_size=Papīra izmērs:
+document_properties_page_size_unit_inches=collas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portretorientācija
+document_properties_page_size_orientation_landscape=ainavorientācija
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Vēstule
+document_properties_page_size_name_legal=Juridiskie teksti
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ātrā tīmekļa skats:
+document_properties_linearized_yes=Jā
+document_properties_linearized_no=Nē
+document_properties_close=Aizvērt
+
+print_progress_message=Gatavo dokumentu drukāšanai...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atcelt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Pārslēgt sānu joslu
+toggle_sidebar_notification.title=Pārslēgt sānu joslu (dokumenta saturu un pielikumus)
+toggle_sidebar_label=Pārslēgt sānu joslu
+document_outline.title=Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus)
+document_outline_label=Dokumenta saturs
+attachments.title=Rādīt pielikumus
+attachments_label=Pielikumi
+thumbs.title=Parādīt sīktēlus
+thumbs_label=Sīktēli
+findbar.title=Meklēt dokumentā
+findbar_label=Meklēt
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Lapa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Lapas {{page}} sīktēls
+
+# Find panel button title and messages
+find_input.title=Meklēt
+find_input.placeholder=Meklēt dokumentā…
+find_previous.title=Atrast iepriekšējo
+find_previous_label=Iepriekšējā
+find_next.title=Atrast nākamo
+find_next_label=Nākamā
+find_highlight=Iekrāsot visas
+find_match_case_label=Lielo, mazo burtu jutīgs
+find_entire_word_label=Veselus vārdus
+find_reached_top=Sasniegts dokumenta sākums, turpinām no beigām
+find_reached_bottom=Sasniegtas dokumenta beigas, turpinām no sākuma
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} no {{total}} rezultāta
+find_match_count[two]={{current}} no {{total}} rezultātiem
+find_match_count[few]={{current}} no {{total}} rezultātiem
+find_match_count[many]={{current}} no {{total}} rezultātiem
+find_match_count[other]={{current}} no {{total}} rezultātiem
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[one]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[two]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[few]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[many]=Vairāk nekā {{limit}} rezultāti
+find_match_count_limit[other]=Vairāk nekā {{limit}} rezultāti
+find_not_found=Frāze nav atrasta
+
+# Error panel labels
+error_more_info=Vairāk informācijas
+error_less_info=MAzāk informācijas
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ziņojums: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Steks: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rindiņa: {{line}}
+rendering_error=Attēlojot lapu radās kļūda
+
+# Predefined zoom values
+page_scale_width=Lapas platumā
+page_scale_fit=Ietilpinot lapu
+page_scale_auto=Automātiskais izmērs
+page_scale_actual=Patiesais izmērs
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Kļūda
+loading_error=Ielādējot PDF notika kļūda.
+invalid_file_error=Nederīgs vai bojāts PDF fails.
+missing_file_error=PDF fails nav atrasts.
+unexpected_response_error=Negaidīa servera atbilde.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} anotācija]
+password_label=Ievadiet paroli, lai atvērtu PDF failu.
+password_invalid=Nepareiza parole, mēģiniet vēlreiz.
+password_ok=Labi
+password_cancel=Atcelt
+
+printing_not_supported=Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji.
+printing_not_ready=Uzmanību: PDF nav pilnībā ielādēts drukāšanai.
+web_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus.
+document_colors_not_allowed=PDF dokumentiem nav atļauts izmantot pašiem savas krāsas: „Atļaut lapām izvēlēties pašām savas krāsas“ ir deaktivēts pārlūkā.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/meh/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/meh/viewer.properties
index 7a1bf04a674b3c522f35887ac7a9d5d05cf6ca3d..b416cf29b59417c4d32ca5a838338982eb3d7c6b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/meh/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/meh/viewer.properties
@@ -1,111 +1,111 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Página yata
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-
-zoom.title=Nasa´a ka´nu/Nasa´a luli
-open_file_label=Síne
-
-# Secondary toolbar and context menu
-
-
-
-
-# Document properties dialog box
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=Kuvi
-document_properties_close=Nakasɨ
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Nkuvi-ka
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-findbar_label=Nánuku
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-
-# Find panel button title and messages
-find_input.title=Nánuku
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-
-# Error panel labels
-error_close=Nakasɨ
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-
-# Predefined zoom values
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-password_cancel=Nkuvi-ka
-
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página yata
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom.title=Nasa´a ka´nu/Nasa´a luli
+open_file_label=Síne
+
+# Secondary toolbar and context menu
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Kuvi
+document_properties_close=Nakasɨ
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nkuvi-ka
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+findbar_label=Nánuku
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=Nánuku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+
+# Error panel labels
+error_close=Nakasɨ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Nkuvi-ka
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mk/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mk/viewer.properties
index 85350255a126779421b745629df99057b190e6ee..0f99b1515c2be3cf9787097bd66e1267a7755816 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mk/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mk/viewer.properties
@@ -1,145 +1,145 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Претходна страница
-previous_label=Претходна
-next.title=Следна страница
-next_label=Следна
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-
-zoom_out.title=Намалување
-zoom_out_label=Намали
-zoom_in.title=Зголемување
-zoom_in_label=Зголеми
-zoom.title=Променување на големина
-presentation_mode.title=Премини во презентациски режим
-presentation_mode_label=Презентациски режим
-open_file.title=Отворање датотека
-open_file_label=Отвори
-print.title=Печатење
-print_label=Печати
-download.title=Преземање
-download_label=Преземи
-bookmark.title=Овој преглед (копирај или отвори во нов прозорец)
-bookmark_label=Овој преглед
-
-# Secondary toolbar and context menu
-tools.title=Алатки
-first_page.label=Оди до првата страница
-last_page.label=Оди до последната страница
-page_rotate_cw.label=Ротирај по стрелките на часовникот
-page_rotate_ccw.label=Ротирај спротивно од стрелките на часовникот
-
-
-
-
-# Document properties dialog box
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_close=Откажи
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Вклучи странична лента
-toggle_sidebar_label=Вклучи странична лента
-thumbs.title=Прикажување на икони
-thumbs_label=Икони
-findbar.title=Најди во документот
-findbar_label=Најди
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Страница {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Икона од страница {{page}}
-
-# Find panel button title and messages
-find_previous.title=Најди ја предходната појава на фразата
-find_previous_label=Претходно
-find_next.title=Најди ја следната појава на фразата
-find_next_label=Следно
-find_highlight=Означи сѐ
-find_match_case_label=Токму така
-find_reached_top=Барањето стигна до почетокот на документот и почнува од крајот
-find_reached_bottom=Барањето стигна до крајот на документот и почнува од почеток
-find_not_found=Фразата не е пронајдена
-
-# Error panel labels
-error_more_info=Повеќе информации
-error_less_info=Помалку информации
-error_close=Затвори
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Порака: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Датотека: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Линија: {{line}}
-rendering_error=Настана грешка при прикажувањето на страницата.
-
-# Predefined zoom values
-page_scale_width=Ширина на страница
-page_scale_fit=Цела страница
-page_scale_auto=Автоматска големина
-page_scale_actual=Вистинска големина
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-
-# Loading indicator messages
-loading_error_indicator=Грешка
-loading_error=Настана грешка при вчитувањето на PDF-от.
-invalid_file_error=Невалидна или корумпирана PDF датотека.
-missing_file_error=Недостасува PDF документ.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-password_cancel=Откажи
-
-printing_not_supported=Предупредување: Печатењето не е целосно поддржано во овој прелистувач.
-printing_not_ready=Предупредување: PDF документот не е целосно вчитан за печатење.
-web_fonts_disabled=Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови.
-document_colors_not_allowed=PDF-документите немаат дозвола да користат сопствени бои: Поставката „Дозволи страниците сами да ги избираат своите бои“ е деактивирана од прелистувачот.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Претходна страница
+previous_label=Претходна
+next.title=Следна страница
+next_label=Следна
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Намалување
+zoom_out_label=Намали
+zoom_in.title=Зголемување
+zoom_in_label=Зголеми
+zoom.title=Променување на големина
+presentation_mode.title=Премини во презентациски режим
+presentation_mode_label=Презентациски режим
+open_file.title=Отворање датотека
+open_file_label=Отвори
+print.title=Печатење
+print_label=Печати
+download.title=Преземање
+download_label=Преземи
+bookmark.title=Овој преглед (копирај или отвори во нов прозорец)
+bookmark_label=Овој преглед
+
+# Secondary toolbar and context menu
+tools.title=Алатки
+first_page.label=Оди до првата страница
+last_page.label=Оди до последната страница
+page_rotate_cw.label=Ротирај по стрелките на часовникот
+page_rotate_ccw.label=Ротирај спротивно од стрелките на часовникот
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=Откажи
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Вклучи странична лента
+toggle_sidebar_label=Вклучи странична лента
+thumbs.title=Прикажување на икони
+thumbs_label=Икони
+findbar.title=Најди во документот
+findbar_label=Најди
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Икона од страница {{page}}
+
+# Find panel button title and messages
+find_previous.title=Најди ја предходната појава на фразата
+find_previous_label=Претходно
+find_next.title=Најди ја следната појава на фразата
+find_next_label=Следно
+find_highlight=Означи сѐ
+find_match_case_label=Токму така
+find_reached_top=Барањето стигна до почетокот на документот и почнува од крајот
+find_reached_bottom=Барањето стигна до крајот на документот и почнува од почеток
+find_not_found=Фразата не е пронајдена
+
+# Error panel labels
+error_more_info=Повеќе информации
+error_less_info=Помалку информации
+error_close=Затвори
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Порака: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Датотека: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Линија: {{line}}
+rendering_error=Настана грешка при прикажувањето на страницата.
+
+# Predefined zoom values
+page_scale_width=Ширина на страница
+page_scale_fit=Цела страница
+page_scale_auto=Автоматска големина
+page_scale_actual=Вистинска големина
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+loading_error_indicator=Грешка
+loading_error=Настана грешка при вчитувањето на PDF-от.
+invalid_file_error=Невалидна или корумпирана PDF датотека.
+missing_file_error=Недостасува PDF документ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Откажи
+
+printing_not_supported=Предупредување: Печатењето не е целосно поддржано во овој прелистувач.
+printing_not_ready=Предупредување: PDF документот не е целосно вчитан за печатење.
+web_fonts_disabled=Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови.
+document_colors_not_allowed=PDF-документите немаат дозвола да користат сопствени бои: Поставката „Дозволи страниците сами да ги избираат своите бои“ е деактивирана од прелистувачот.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mr/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mr/viewer.properties
index 25229ea4fad72fbe87970409b7aa606cea7b9a78..bc6cf37ded8856be49f7d257244a4124b601c2d5 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mr/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/mr/viewer.properties
@@ -1,238 +1,238 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=मागील पृष्ठ
-previous_label=मागील
-next.title=पुढील पृष्ठ
-next_label=पुढील
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=पृष्ठ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}}पैकी
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pagesCount}} पैकी {{pageNumber}})
-
-zoom_out.title=छोटे करा
-zoom_out_label=छोटे करा
-zoom_in.title=मोठे करा
-zoom_in_label=मोठे करा
-zoom.title=लहान किंवा मोठे करा
-presentation_mode.title=प्रस्तुतिकरण मोडचा वापर करा
-presentation_mode_label=प्रस्तुतिकरण मोड
-open_file.title=फाइल उघडा
-open_file_label=उघडा
-print.title=छपाई करा
-print_label=छपाई करा
-download.title=डाउनलोड करा
-download_label=डाउनलोड करा
-bookmark.title=सध्याचे अवलोकन (नवीन पटलात प्रत बनवा किंवा उघडा)
-bookmark_label=सध्याचे अवलोकन
-
-# Secondary toolbar and context menu
-tools.title=साधने
-tools_label=साधने
-first_page.title=पहिल्या पृष्ठावर जा
-first_page.label=पहिल्या पृष्ठावर जा
-first_page_label=पहिल्या पृष्ठावर जा
-last_page.title=शेवटच्या पृष्ठावर जा
-last_page.label=शेवटच्या पृष्ठावर जा
-last_page_label=शेवटच्या पृष्ठावर जा
-page_rotate_cw.title=घड्याळाच्या काट्याच्या दिशेने फिरवा
-page_rotate_cw.label=घड्याळाच्या काट्याच्या दिशेने फिरवा
-page_rotate_cw_label=घड्याळाच्या काट्याच्या दिशेने फिरवा
-page_rotate_ccw.title=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
-page_rotate_ccw.label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
-page_rotate_ccw_label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
-
-cursor_text_select_tool.title=मजकूर निवड साधन कार्यान्वयीत करा
-cursor_text_select_tool_label=मजकूर निवड साधन
-cursor_hand_tool.title=हात साधन कार्यान्वित करा
-cursor_hand_tool_label=हस्त साधन
-
-scroll_vertical.title=अनुलंब स्क्रोलिंग वापरा
-scroll_vertical_label=अनुलंब स्क्रोलिंग
-scroll_horizontal.title=क्षैतिज स्क्रोलिंग वापरा
-scroll_horizontal_label=क्षैतिज स्क्रोलिंग
-
-
-# Document properties dialog box
-document_properties.title=दस्तऐवज गुणधर्म…
-document_properties_label=दस्तऐवज गुणधर्म…
-document_properties_file_name=फाइलचे नाव:
-document_properties_file_size=फाइल आकार:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} बाइट्स)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} बाइट्स)
-document_properties_title=शिर्षक:
-document_properties_author=लेखक:
-document_properties_subject=विषय:
-document_properties_keywords=मुख्यशब्द:
-document_properties_creation_date=निर्माण दिनांक:
-document_properties_modification_date=दुरूस्ती दिनांक:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=निर्माता:
-document_properties_producer=PDF निर्माता:
-document_properties_version=PDF आवृत्ती:
-document_properties_page_count=पृष्ठ संख्या:
-document_properties_page_size=पृष्ठ आकार:
-document_properties_page_size_unit_inches=इंच
-document_properties_page_size_unit_millimeters=मीमी
-document_properties_page_size_orientation_portrait=उभी मांडणी
-document_properties_page_size_orientation_landscape=आडवे
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=जलद वेब दृष्य:
-document_properties_linearized_yes=हो
-document_properties_linearized_no=नाही
-document_properties_close=बंद करा
-
-print_progress_message=छपाई करीता पृष्ठ तयार करीत आहे…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=रद्द करा
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=बाजूचीपट्टी टॉगल करा
-toggle_sidebar_notification.title=बाजूची पट्टी टॉगल करा (दस्तऐवजामध्ये रुपरेषा/जोडण्या आहेत)
-toggle_sidebar_label=बाजूचीपट्टी टॉगल करा
-document_outline.title=दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा)
-document_outline_label=दस्तऐवज रूपरेषा
-attachments.title=जोडपत्र दाखवा
-attachments_label=जोडपत्र
-thumbs.title=थंबनेल्स् दाखवा
-thumbs_label=थंबनेल्स्
-findbar.title=दस्तऐवजात शोधा
-findbar_label=शोधा
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=पृष्ठ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=पृष्ठाचे थंबनेल {{page}}
-
-# Find panel button title and messages
-find_input.title=शोधा
-find_input.placeholder=दस्तऐवजात शोधा…
-find_previous.title=वाकप्रयोगची मागील घटना शोधा
-find_previous_label=मागील
-find_next.title=वाकप्रयोगची पुढील घटना शोधा
-find_next_label=पुढील
-find_highlight=सर्व ठळक करा
-find_match_case_label=आकार जुळवा
-find_entire_word_label=संपूर्ण शब्द
-find_reached_top=दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे
-find_reached_bottom=दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} पैकी {{current}} सुसंगत
-find_match_count[two]={{total}} पैकी {{current}} सुसंगत
-find_match_count[few]={{total}} पैकी {{current}} सुसंगत
-find_match_count[many]={{total}} पैकी {{current}} सुसंगत
-find_match_count[other]={{total}} पैकी {{current}} सुसंगत
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} पेक्षा अधिक जुळण्या
-find_match_count_limit[one]={{limit}} पेक्षा अधिक जुळण्या
-find_match_count_limit[two]={{limit}} पेक्षा अधिक जुळण्या
-find_match_count_limit[few]={{limit}} पेक्षा अधिक जुळण्या
-find_match_count_limit[many]={{limit}} पेक्षा अधिक जुळण्या
-find_match_count_limit[other]={{limit}} पेक्षा अधिक जुळण्या
-find_not_found=वाकप्रयोग आढळले नाही
-
-# Error panel labels
-error_more_info=आणखी माहिती
-error_less_info=कमी माहिती
-error_close=बंद करा
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=संदेश: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=स्टॅक: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=फाइल: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=रेष: {{line}}
-rendering_error=पृष्ठ दाखवतेवेळी त्रुटी आढळली.
-
-# Predefined zoom values
-page_scale_width=पृष्ठाची रूंदी
-page_scale_fit=पृष्ठ बसवा
-page_scale_auto=स्वयं लाहन किंवा मोठे करणे
-page_scale_actual=प्रत्यक्ष आकार
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=त्रुटी
-loading_error=PDF लोड करतेवेळी त्रुटी आढळली.
-invalid_file_error=अवैध किंवा दोषीत PDF फाइल.
-missing_file_error=न आढळणारी PDF फाइल.
-unexpected_response_error=अनपेक्षित सर्व्हर प्रतिसाद.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} टिपण्णी]
-password_label=ही PDF फाइल उघडण्याकरिता पासवर्ड द्या.
-password_invalid=अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा.
-password_ok=ठीक आहे
-password_cancel=रद्द करा
-
-printing_not_supported=सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही.
-printing_not_ready=सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही.
-web_fonts_disabled=वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य.
-document_colors_not_allowed=PDF दस्तऐवजांना त्यांचे रंग वापरण्यास अनुमती नाही: ब्राउझरमध्ये ' पृष्ठांना त्यांचे रंग निवडण्यास अनुमती द्या' बंद केले आहे.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=मागील पृष्ठ
+previous_label=मागील
+next.title=पुढील पृष्ठ
+next_label=पुढील
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृष्ठ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}पैकी
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} पैकी {{pageNumber}})
+
+zoom_out.title=छोटे करा
+zoom_out_label=छोटे करा
+zoom_in.title=मोठे करा
+zoom_in_label=मोठे करा
+zoom.title=लहान किंवा मोठे करा
+presentation_mode.title=प्रस्तुतिकरण मोडचा वापर करा
+presentation_mode_label=प्रस्तुतिकरण मोड
+open_file.title=फाइल उघडा
+open_file_label=उघडा
+print.title=छपाई करा
+print_label=छपाई करा
+download.title=डाउनलोड करा
+download_label=डाउनलोड करा
+bookmark.title=सध्याचे अवलोकन (नवीन पटलात प्रत बनवा किंवा उघडा)
+bookmark_label=सध्याचे अवलोकन
+
+# Secondary toolbar and context menu
+tools.title=साधने
+tools_label=साधने
+first_page.title=पहिल्या पृष्ठावर जा
+first_page.label=पहिल्या पृष्ठावर जा
+first_page_label=पहिल्या पृष्ठावर जा
+last_page.title=शेवटच्या पृष्ठावर जा
+last_page.label=शेवटच्या पृष्ठावर जा
+last_page_label=शेवटच्या पृष्ठावर जा
+page_rotate_cw.title=घड्याळाच्या काट्याच्या दिशेने फिरवा
+page_rotate_cw.label=घड्याळाच्या काट्याच्या दिशेने फिरवा
+page_rotate_cw_label=घड्याळाच्या काट्याच्या दिशेने फिरवा
+page_rotate_ccw.title=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
+page_rotate_ccw.label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
+page_rotate_ccw_label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा
+
+cursor_text_select_tool.title=मजकूर निवड साधन कार्यान्वयीत करा
+cursor_text_select_tool_label=मजकूर निवड साधन
+cursor_hand_tool.title=हात साधन कार्यान्वित करा
+cursor_hand_tool_label=हस्त साधन
+
+scroll_vertical.title=अनुलंब स्क्रोलिंग वापरा
+scroll_vertical_label=अनुलंब स्क्रोलिंग
+scroll_horizontal.title=क्षैतिज स्क्रोलिंग वापरा
+scroll_horizontal_label=क्षैतिज स्क्रोलिंग
+
+
+# Document properties dialog box
+document_properties.title=दस्तऐवज गुणधर्म…
+document_properties_label=दस्तऐवज गुणधर्म…
+document_properties_file_name=फाइलचे नाव:
+document_properties_file_size=फाइल आकार:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} बाइट्स)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} बाइट्स)
+document_properties_title=शिर्षक:
+document_properties_author=लेखक:
+document_properties_subject=विषय:
+document_properties_keywords=मुख्यशब्द:
+document_properties_creation_date=निर्माण दिनांक:
+document_properties_modification_date=दुरूस्ती दिनांक:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=निर्माता:
+document_properties_producer=PDF निर्माता:
+document_properties_version=PDF आवृत्ती:
+document_properties_page_count=पृष्ठ संख्या:
+document_properties_page_size=पृष्ठ आकार:
+document_properties_page_size_unit_inches=इंच
+document_properties_page_size_unit_millimeters=मीमी
+document_properties_page_size_orientation_portrait=उभी मांडणी
+document_properties_page_size_orientation_landscape=आडवे
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=जलद वेब दृष्य:
+document_properties_linearized_yes=हो
+document_properties_linearized_no=नाही
+document_properties_close=बंद करा
+
+print_progress_message=छपाई करीता पृष्ठ तयार करीत आहे…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रद्द करा
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=बाजूचीपट्टी टॉगल करा
+toggle_sidebar_notification.title=बाजूची पट्टी टॉगल करा (दस्तऐवजामध्ये रुपरेषा/जोडण्या आहेत)
+toggle_sidebar_label=बाजूचीपट्टी टॉगल करा
+document_outline.title=दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा)
+document_outline_label=दस्तऐवज रूपरेषा
+attachments.title=जोडपत्र दाखवा
+attachments_label=जोडपत्र
+thumbs.title=थंबनेल्स् दाखवा
+thumbs_label=थंबनेल्स्
+findbar.title=दस्तऐवजात शोधा
+findbar_label=शोधा
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृष्ठ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=पृष्ठाचे थंबनेल {{page}}
+
+# Find panel button title and messages
+find_input.title=शोधा
+find_input.placeholder=दस्तऐवजात शोधा…
+find_previous.title=वाकप्रयोगची मागील घटना शोधा
+find_previous_label=मागील
+find_next.title=वाकप्रयोगची पुढील घटना शोधा
+find_next_label=पुढील
+find_highlight=सर्व ठळक करा
+find_match_case_label=आकार जुळवा
+find_entire_word_label=संपूर्ण शब्द
+find_reached_top=दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे
+find_reached_bottom=दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} पैकी {{current}} सुसंगत
+find_match_count[two]={{total}} पैकी {{current}} सुसंगत
+find_match_count[few]={{total}} पैकी {{current}} सुसंगत
+find_match_count[many]={{total}} पैकी {{current}} सुसंगत
+find_match_count[other]={{total}} पैकी {{current}} सुसंगत
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[one]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[two]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[few]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[many]={{limit}} पेक्षा अधिक जुळण्या
+find_match_count_limit[other]={{limit}} पेक्षा अधिक जुळण्या
+find_not_found=वाकप्रयोग आढळले नाही
+
+# Error panel labels
+error_more_info=आणखी माहिती
+error_less_info=कमी माहिती
+error_close=बंद करा
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=संदेश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्टॅक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=रेष: {{line}}
+rendering_error=पृष्ठ दाखवतेवेळी त्रुटी आढळली.
+
+# Predefined zoom values
+page_scale_width=पृष्ठाची रूंदी
+page_scale_fit=पृष्ठ बसवा
+page_scale_auto=स्वयं लाहन किंवा मोठे करणे
+page_scale_actual=प्रत्यक्ष आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=त्रुटी
+loading_error=PDF लोड करतेवेळी त्रुटी आढळली.
+invalid_file_error=अवैध किंवा दोषीत PDF फाइल.
+missing_file_error=न आढळणारी PDF फाइल.
+unexpected_response_error=अनपेक्षित सर्व्हर प्रतिसाद.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} टिपण्णी]
+password_label=ही PDF फाइल उघडण्याकरिता पासवर्ड द्या.
+password_invalid=अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा.
+password_ok=ठीक आहे
+password_cancel=रद्द करा
+
+printing_not_supported=सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही.
+printing_not_ready=सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही.
+web_fonts_disabled=वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य.
+document_colors_not_allowed=PDF दस्तऐवजांना त्यांचे रंग वापरण्यास अनुमती नाही: ब्राउझरमध्ये ' पृष्ठांना त्यांचे रंग निवडण्यास अनुमती द्या' बंद केले आहे.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ms/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ms/viewer.properties
index 3bc7907b80cdf59e777505f792feac68b4265b8b..0f9eb9708534e29bad02532a69da7755711bfc55 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ms/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ms/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Halaman Dahulu
-previous_label=Dahulu
-next.title=Halaman Berikut
-next_label=Berikut
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Halaman
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=daripada {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} daripada {{pagesCount}})
-
-zoom_out.title=Zum Keluar
-zoom_out_label=Zum Keluar
-zoom_in.title=Zum Masuk
-zoom_in_label=Zum Masuk
-zoom.title=Zum
-presentation_mode.title=Tukar ke Mod Persembahan
-presentation_mode_label=Mod Persembahan
-open_file.title=Buka Fail
-open_file_label=Buka
-print.title=Cetak
-print_label=Cetak
-download.title=Muat turun
-download_label=Muat turun
-bookmark.title=Paparan semasa (salin atau buka dalam tetingkap baru)
-bookmark_label=Paparan Semasa
-
-# Secondary toolbar and context menu
-tools.title=Alatan
-tools_label=Alatan
-first_page.title=Pergi ke Halaman Pertama
-first_page.label=Pergi ke Halaman Pertama
-first_page_label=Pergi ke Halaman Pertama
-last_page.title=Pergi ke Halaman Terakhir
-last_page.label=Pergi ke Halaman Terakhir
-last_page_label=Pergi ke Halaman Terakhir
-page_rotate_cw.title=Berputar ikut arah Jam
-page_rotate_cw.label=Berputar ikut arah Jam
-page_rotate_cw_label=Berputar ikut arah Jam
-page_rotate_ccw.title=Pusing berlawan arah jam
-page_rotate_ccw.label=Pusing berlawan arah jam
-page_rotate_ccw_label=Pusing berlawan arah jam
-
-cursor_text_select_tool.title=Dayakan Alatan Pilihan Teks
-cursor_text_select_tool_label=Alatan Pilihan Teks
-cursor_hand_tool.title=Dayakan Alatan Tangan
-cursor_hand_tool_label=Alatan Tangan
-
-scroll_vertical.title=Guna Skrol Menegak
-scroll_vertical_label=Skrol Menegak
-scroll_horizontal.title=Guna Skrol Mengufuk
-scroll_horizontal_label=Skrol Mengufuk
-scroll_wrapped.title=Guna Skrol Berbalut
-scroll_wrapped_label=Skrol Berbalut
-
-spread_none.title=Jangan hubungkan hamparan halaman
-spread_none_label=Tanpa Hamparan
-spread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil
-spread_odd_label=Hamparan Ganjil
-spread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap
-spread_even_label=Hamparan Seimbang
-
-# Document properties dialog box
-document_properties.title=Sifat Dokumen…
-document_properties_label=Sifat Dokumen…
-document_properties_file_name=Nama fail:
-document_properties_file_size=Saiz fail:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bait)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bait)
-document_properties_title=Tajuk:
-document_properties_author=Pengarang:
-document_properties_subject=Subjek:
-document_properties_keywords=Kata kunci:
-document_properties_creation_date=Masa Dicipta:
-document_properties_modification_date=Tarikh Ubahsuai:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Pencipta:
-document_properties_producer=Pengeluar PDF:
-document_properties_version=Versi PDF:
-document_properties_page_count=Kiraan Laman:
-document_properties_page_size=Saiz Halaman:
-document_properties_page_size_unit_inches=dalam
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=potret
-document_properties_page_size_orientation_landscape=landskap
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Paparan Web Pantas:
-document_properties_linearized_yes=Ya
-document_properties_linearized_no=Tidak
-document_properties_close=Tutup
-
-print_progress_message=Menyediakan dokumen untuk dicetak…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Batal
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Togol Bar Sisi
-toggle_sidebar_notification.title=Togol Sidebar (dokumen mengandungi rangka/attachments)
-toggle_sidebar_label=Togol Bar Sisi
-document_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item)
-document_outline_label=Rangka Dokumen
-attachments.title=Papar Lampiran
-attachments_label=Lampiran
-thumbs.title=Papar Thumbnails
-thumbs_label=Imej kecil
-findbar.title=Cari didalam Dokumen
-findbar_label=Cari
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Halaman {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Halaman Imej kecil {{page}}
-
-# Find panel button title and messages
-find_input.title=Cari
-find_input.placeholder=Cari dalam dokumen…
-find_previous.title=Cari teks frasa berkenaan yang terdahulu
-find_previous_label=Dahulu
-find_next.title=Cari teks frasa berkenaan yang berikut
-find_next_label=Berikut
-find_highlight=Serlahkan semua
-find_match_case_label=Huruf sepadan
-find_entire_word_label=Seluruh perkataan
-find_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah
-find_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} daripada {{total}} padanan
-find_match_count[two]={{current}} daripada {{total}} padanan
-find_match_count[few]={{current}} daripada {{total}} padanan
-find_match_count[many]={{current}} daripada {{total}} padanan
-find_match_count[other]={{current}} daripada {{total}} padanan
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Lebih daripada {{limit}} padanan
-find_match_count_limit[one]=Lebih daripada {{limit}} padanan
-find_match_count_limit[two]=Lebih daripada {{limit}} padanan
-find_match_count_limit[few]=Lebih daripada {{limit}} padanan
-find_match_count_limit[many]=Lebih daripada {{limit}} padanan
-find_match_count_limit[other]=Lebih daripada {{limit}} padanan
-find_not_found=Frasa tidak ditemui
-
-# Error panel labels
-error_more_info=Maklumat Lanjut
-error_less_info=Kurang Informasi
-error_close=Tutup
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mesej: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Timbun: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fail: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Garis: {{line}}
-rendering_error=Ralat berlaku ketika memberikan halaman.
-
-# Predefined zoom values
-page_scale_width=Lebar Halaman
-page_scale_fit=Muat Halaman
-page_scale_auto=Zoom Automatik
-page_scale_actual=Saiz Sebenar
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Ralat
-loading_error=Masalah berlaku semasa menuatkan sebuah PDF.
-invalid_file_error=Tidak sah atau fail PDF rosak.
-missing_file_error=Fail PDF Hilang.
-unexpected_response_error=Respon pelayan yang tidak dijangka.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Anotasi]
-password_label=Masukan kata kunci untuk membuka fail PDF ini.
-password_invalid=Kata laluan salah. Cuba lagi.
-password_ok=OK
-password_cancel=Batal
-
-printing_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini.
-printing_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak.
-web_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF.
-document_colors_not_allowed=Dokumen PDF tidak dibenarkan untuk menggunakan warna sendiri: “Izinkan halaman untuk memilih warna sendiri” telah dinyahaktifkan dalam pelayar.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Halaman Dahulu
+previous_label=Dahulu
+next.title=Halaman Berikut
+next_label=Berikut
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Halaman
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=daripada {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} daripada {{pagesCount}})
+
+zoom_out.title=Zum Keluar
+zoom_out_label=Zum Keluar
+zoom_in.title=Zum Masuk
+zoom_in_label=Zum Masuk
+zoom.title=Zum
+presentation_mode.title=Tukar ke Mod Persembahan
+presentation_mode_label=Mod Persembahan
+open_file.title=Buka Fail
+open_file_label=Buka
+print.title=Cetak
+print_label=Cetak
+download.title=Muat turun
+download_label=Muat turun
+bookmark.title=Paparan semasa (salin atau buka dalam tetingkap baru)
+bookmark_label=Paparan Semasa
+
+# Secondary toolbar and context menu
+tools.title=Alatan
+tools_label=Alatan
+first_page.title=Pergi ke Halaman Pertama
+first_page.label=Pergi ke Halaman Pertama
+first_page_label=Pergi ke Halaman Pertama
+last_page.title=Pergi ke Halaman Terakhir
+last_page.label=Pergi ke Halaman Terakhir
+last_page_label=Pergi ke Halaman Terakhir
+page_rotate_cw.title=Berputar ikut arah Jam
+page_rotate_cw.label=Berputar ikut arah Jam
+page_rotate_cw_label=Berputar ikut arah Jam
+page_rotate_ccw.title=Pusing berlawan arah jam
+page_rotate_ccw.label=Pusing berlawan arah jam
+page_rotate_ccw_label=Pusing berlawan arah jam
+
+cursor_text_select_tool.title=Dayakan Alatan Pilihan Teks
+cursor_text_select_tool_label=Alatan Pilihan Teks
+cursor_hand_tool.title=Dayakan Alatan Tangan
+cursor_hand_tool_label=Alatan Tangan
+
+scroll_vertical.title=Guna Skrol Menegak
+scroll_vertical_label=Skrol Menegak
+scroll_horizontal.title=Guna Skrol Mengufuk
+scroll_horizontal_label=Skrol Mengufuk
+scroll_wrapped.title=Guna Skrol Berbalut
+scroll_wrapped_label=Skrol Berbalut
+
+spread_none.title=Jangan hubungkan hamparan halaman
+spread_none_label=Tanpa Hamparan
+spread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil
+spread_odd_label=Hamparan Ganjil
+spread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap
+spread_even_label=Hamparan Seimbang
+
+# Document properties dialog box
+document_properties.title=Sifat Dokumen…
+document_properties_label=Sifat Dokumen…
+document_properties_file_name=Nama fail:
+document_properties_file_size=Saiz fail:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bait)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bait)
+document_properties_title=Tajuk:
+document_properties_author=Pengarang:
+document_properties_subject=Subjek:
+document_properties_keywords=Kata kunci:
+document_properties_creation_date=Masa Dicipta:
+document_properties_modification_date=Tarikh Ubahsuai:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Pencipta:
+document_properties_producer=Pengeluar PDF:
+document_properties_version=Versi PDF:
+document_properties_page_count=Kiraan Laman:
+document_properties_page_size=Saiz Halaman:
+document_properties_page_size_unit_inches=dalam
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=potret
+document_properties_page_size_orientation_landscape=landskap
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Paparan Web Pantas:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Tidak
+document_properties_close=Tutup
+
+print_progress_message=Menyediakan dokumen untuk dicetak…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Batal
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Togol Bar Sisi
+toggle_sidebar_notification.title=Togol Sidebar (dokumen mengandungi rangka/attachments)
+toggle_sidebar_label=Togol Bar Sisi
+document_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item)
+document_outline_label=Rangka Dokumen
+attachments.title=Papar Lampiran
+attachments_label=Lampiran
+thumbs.title=Papar Thumbnails
+thumbs_label=Imej kecil
+findbar.title=Cari didalam Dokumen
+findbar_label=Cari
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Halaman {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Halaman Imej kecil {{page}}
+
+# Find panel button title and messages
+find_input.title=Cari
+find_input.placeholder=Cari dalam dokumen…
+find_previous.title=Cari teks frasa berkenaan yang terdahulu
+find_previous_label=Dahulu
+find_next.title=Cari teks frasa berkenaan yang berikut
+find_next_label=Berikut
+find_highlight=Serlahkan semua
+find_match_case_label=Huruf sepadan
+find_entire_word_label=Seluruh perkataan
+find_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah
+find_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} daripada {{total}} padanan
+find_match_count[two]={{current}} daripada {{total}} padanan
+find_match_count[few]={{current}} daripada {{total}} padanan
+find_match_count[many]={{current}} daripada {{total}} padanan
+find_match_count[other]={{current}} daripada {{total}} padanan
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Lebih daripada {{limit}} padanan
+find_match_count_limit[one]=Lebih daripada {{limit}} padanan
+find_match_count_limit[two]=Lebih daripada {{limit}} padanan
+find_match_count_limit[few]=Lebih daripada {{limit}} padanan
+find_match_count_limit[many]=Lebih daripada {{limit}} padanan
+find_match_count_limit[other]=Lebih daripada {{limit}} padanan
+find_not_found=Frasa tidak ditemui
+
+# Error panel labels
+error_more_info=Maklumat Lanjut
+error_less_info=Kurang Informasi
+error_close=Tutup
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesej: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Timbun: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Garis: {{line}}
+rendering_error=Ralat berlaku ketika memberikan halaman.
+
+# Predefined zoom values
+page_scale_width=Lebar Halaman
+page_scale_fit=Muat Halaman
+page_scale_auto=Zoom Automatik
+page_scale_actual=Saiz Sebenar
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Ralat
+loading_error=Masalah berlaku semasa menuatkan sebuah PDF.
+invalid_file_error=Tidak sah atau fail PDF rosak.
+missing_file_error=Fail PDF Hilang.
+unexpected_response_error=Respon pelayan yang tidak dijangka.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotasi]
+password_label=Masukan kata kunci untuk membuka fail PDF ini.
+password_invalid=Kata laluan salah. Cuba lagi.
+password_ok=OK
+password_cancel=Batal
+
+printing_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini.
+printing_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak.
+web_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF.
+document_colors_not_allowed=Dokumen PDF tidak dibenarkan untuk menggunakan warna sendiri: “Izinkan halaman untuk memilih warna sendiri” telah dinyahaktifkan dalam pelayar.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/my/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/my/viewer.properties
index f5676198f9523e2ac4e244536fffd5754a46585d..23dfed6443dfeef0e507a10b54bfc085e2a3091a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/my/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/my/viewer.properties
@@ -1,198 +1,198 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=အရင် စာမျက်နှာ
-previous_label=အရင်နေရာ
-next.title=ရှေ့ စာမျက်နှာ
-next_label=နောက်တခု
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=စာမျက်နှာ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} ၏
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pagesCount}} ၏ {{pageNumber}})
-
-zoom_out.title=ချုံ့ပါ
-zoom_out_label=ချုံ့ပါ
-zoom_in.title=ချဲ့ပါ
-zoom_in_label=ချဲ့ပါ
-zoom.title=ချုံ့/ချဲ့ပါ
-presentation_mode.title=ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ
-presentation_mode_label=ဆွေးနွေးတင်ပြစနစ်
-open_file.title=ဖိုင်အားဖွင့်ပါ။
-open_file_label=ဖွင့်ပါ
-print.title=ပုံနှိုပ်ပါ
-print_label=ပုံနှိုပ်ပါ
-download.title=ကူးဆွဲ
-download_label=ကူးဆွဲ
-bookmark.title=လက်ရှိ မြင်ကွင်း (ဝင်းဒိုးအသစ်မှာ ကူးပါ သို့မဟုတ် ဖွင့်ပါ)
-bookmark_label=လက်ရှိ မြင်ကွင်း
-
-# Secondary toolbar and context menu
-tools.title=ကိရိယာများ
-tools_label=ကိရိယာများ
-first_page.title=ပထမ စာမျက်နှာသို့
-first_page.label=ပထမ စာမျက်နှာသို့
-first_page_label=ပထမ စာမျက်နှာသို့
-last_page.title=နောက်ဆုံး စာမျက်နှာသို့
-last_page.label=နောက်ဆုံး စာမျက်နှာသို့
-last_page_label=နောက်ဆုံး စာမျက်နှာသို့
-page_rotate_cw.title=နာရီလက်တံ အတိုင်း
-page_rotate_cw.label=နာရီလက်တံ အတိုင်း
-page_rotate_cw_label=နာရီလက်တံ အတိုင်း
-page_rotate_ccw.title=နာရီလက်တံ ပြောင်းပြန်
-page_rotate_ccw.label=နာရီလက်တံ ပြောင်းပြန်
-page_rotate_ccw_label=နာရီလက်တံ ပြောင်းပြန်
-
-
-
-
-# Document properties dialog box
-document_properties.title=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ
-document_properties_label=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ
-document_properties_file_name=ဖိုင် :
-document_properties_file_size=ဖိုင်ဆိုဒ် :
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} ကီလိုဘိုတ် ({{size_b}}ဘိုတ်)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=ခေါင်းစဉ် -
-document_properties_author=ရေးသားသူ:
-document_properties_subject=အကြောင်းအရာ:\u0020
-document_properties_keywords=သော့ချက် စာလုံး:
-document_properties_creation_date=ထုတ်လုပ်ရက်စွဲ:
-document_properties_modification_date=ပြင်ဆင်ရက်စွဲ:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=ဖန်တီးသူ:
-document_properties_producer=PDF ထုတ်လုပ်သူ:
-document_properties_version=PDF ဗားရှင်း:
-document_properties_page_count=စာမျက်နှာအရေအတွက်:
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_close=ပိတ်
-
-print_progress_message=Preparing document for printing…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=ပယ်ဖျက်ပါ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=ဘေးတန်းဖွင့်ပိတ်
-toggle_sidebar_notification.title=ဘေးဘားတန်းကို အဖွင့်/အပိတ် လုပ်ရန် (စာတမ်းတွင် outline/attachments ပါဝင်နိုင်သည်)
-toggle_sidebar_label=ဖွင့်ပိတ် ဆလိုက်ဒါ
-document_outline.title=စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ)
-document_outline_label=စာတမ်းအကျဉ်းချုပ်
-attachments.title=တွဲချက်များ ပြပါ
-attachments_label=တွဲထားချက်များ
-thumbs.title=ပုံရိပ်ငယ်များကို ပြပါ
-thumbs_label=ပုံရိပ်ငယ်များ
-findbar.title=Find in Document
-findbar_label=ရှာဖွေပါ
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=စာမျက်နှာ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=စာမျက်နှာရဲ့ ပုံရိပ်ငယ် {{page}}
-
-# Find panel button title and messages
-find_input.title=ရှာဖွေပါ
-find_input.placeholder=စာတမ်းထဲတွင် ရှာဖွေရန်…
-find_previous.title=စကားစုရဲ့ အရင် ဖြစ်ပွားမှုကို ရှာဖွေပါ
-find_previous_label=နောက်သို့
-find_next.title=စကားစုရဲ့ နောက်ထပ် ဖြစ်ပွားမှုကို ရှာဖွေပါ
-find_next_label=ရှေ့သို့
-find_highlight=အားလုံးကို မျဉ်းသားပါ
-find_match_case_label=စာလုံး တိုက်ဆိုင်ပါ
-find_reached_top=စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ
-find_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_not_found=စကားစု မတွေ့ရဘူး
-
-# Error panel labels
-error_more_info=နောက်ထပ်အချက်အလက်များ
-error_less_info=အနည်းငယ်မျှသော သတင်းအချက်အလက်
-error_close=ပိတ်
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=မက်ဆေ့ - {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=အထပ် - {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ဖိုင် {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=လိုင်း - {{line}}
-rendering_error=စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။
-
-# Predefined zoom values
-page_scale_width=စာမျက်နှာ အကျယ်
-page_scale_fit=စာမျက်နှာ ကွက်တိ
-page_scale_auto=အလိုအလျောက် ချုံ့ချဲ့
-page_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ်
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=အမှား
-loading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။
-invalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင်
-missing_file_error=PDF ပျောက်ဆုံး
-unexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက်
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} အဓိပ္ပာယ်ဖွင့်ဆိုချက်]
-password_label=ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။
-password_invalid=စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။
-password_ok=OK
-password_cancel=ပယ်ဖျက်ပါ
-
-printing_not_supported=သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။
-printing_not_ready=သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
-document_colors_not_allowed=PDF ဖိုင်အား ၎င်းဤ ကိုယ်ပိုင်အရောင်များကို အသုံးပြုခွင့်မပေးထားပါ ။ 'စာမျက်နှာအားလုံးအားအရောင်ရွေးချယ်ခွင့်' အား ယခု ဘယောက်ဆာတွင် ပိတ်ထားခြင်းကြောင့်ဖြစ် သှ်
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=အရင် စာမျက်နှာ
+previous_label=အရင်နေရာ
+next.title=ရှေ့ စာမျက်နှာ
+next_label=နောက်တခု
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=စာမျက်နှာ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ၏
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} ၏ {{pageNumber}})
+
+zoom_out.title=ချုံ့ပါ
+zoom_out_label=ချုံ့ပါ
+zoom_in.title=ချဲ့ပါ
+zoom_in_label=ချဲ့ပါ
+zoom.title=ချုံ့/ချဲ့ပါ
+presentation_mode.title=ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ
+presentation_mode_label=ဆွေးနွေးတင်ပြစနစ်
+open_file.title=ဖိုင်အားဖွင့်ပါ။
+open_file_label=ဖွင့်ပါ
+print.title=ပုံနှိုပ်ပါ
+print_label=ပုံနှိုပ်ပါ
+download.title=ကူးဆွဲ
+download_label=ကူးဆွဲ
+bookmark.title=လက်ရှိ မြင်ကွင်း (ဝင်းဒိုးအသစ်မှာ ကူးပါ သို့မဟုတ် ဖွင့်ပါ)
+bookmark_label=လက်ရှိ မြင်ကွင်း
+
+# Secondary toolbar and context menu
+tools.title=ကိရိယာများ
+tools_label=ကိရိယာများ
+first_page.title=ပထမ စာမျက်နှာသို့
+first_page.label=ပထမ စာမျက်နှာသို့
+first_page_label=ပထမ စာမျက်နှာသို့
+last_page.title=နောက်ဆုံး စာမျက်နှာသို့
+last_page.label=နောက်ဆုံး စာမျက်နှာသို့
+last_page_label=နောက်ဆုံး စာမျက်နှာသို့
+page_rotate_cw.title=နာရီလက်တံ အတိုင်း
+page_rotate_cw.label=နာရီလက်တံ အတိုင်း
+page_rotate_cw_label=နာရီလက်တံ အတိုင်း
+page_rotate_ccw.title=နာရီလက်တံ ပြောင်းပြန်
+page_rotate_ccw.label=နာရီလက်တံ ပြောင်းပြန်
+page_rotate_ccw_label=နာရီလက်တံ ပြောင်းပြန်
+
+
+
+
+# Document properties dialog box
+document_properties.title=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ
+document_properties_label=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ
+document_properties_file_name=ဖိုင် :
+document_properties_file_size=ဖိုင်ဆိုဒ် :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ကီလိုဘိုတ် ({{size_b}}ဘိုတ်)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=ခေါင်းစဉ် -
+document_properties_author=ရေးသားသူ:
+document_properties_subject=အကြောင်းအရာ:\u0020
+document_properties_keywords=သော့ချက် စာလုံး:
+document_properties_creation_date=ထုတ်လုပ်ရက်စွဲ:
+document_properties_modification_date=ပြင်ဆင်ရက်စွဲ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ဖန်တီးသူ:
+document_properties_producer=PDF ထုတ်လုပ်သူ:
+document_properties_version=PDF ဗားရှင်း:
+document_properties_page_count=စာမျက်နှာအရေအတွက်:
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=ပိတ်
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ပယ်ဖျက်ပါ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ဘေးတန်းဖွင့်ပိတ်
+toggle_sidebar_notification.title=ဘေးဘားတန်းကို အဖွင့်/အပိတ် လုပ်ရန် (စာတမ်းတွင် outline/attachments ပါဝင်နိုင်သည်)
+toggle_sidebar_label=ဖွင့်ပိတ် ဆလိုက်ဒါ
+document_outline.title=စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ)
+document_outline_label=စာတမ်းအကျဉ်းချုပ်
+attachments.title=တွဲချက်များ ပြပါ
+attachments_label=တွဲထားချက်များ
+thumbs.title=ပုံရိပ်ငယ်များကို ပြပါ
+thumbs_label=ပုံရိပ်ငယ်များ
+findbar.title=Find in Document
+findbar_label=ရှာဖွေပါ
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=စာမျက်နှာ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=စာမျက်နှာရဲ့ ပုံရိပ်ငယ် {{page}}
+
+# Find panel button title and messages
+find_input.title=ရှာဖွေပါ
+find_input.placeholder=စာတမ်းထဲတွင် ရှာဖွေရန်…
+find_previous.title=စကားစုရဲ့ အရင် ဖြစ်ပွားမှုကို ရှာဖွေပါ
+find_previous_label=နောက်သို့
+find_next.title=စကားစုရဲ့ နောက်ထပ် ဖြစ်ပွားမှုကို ရှာဖွေပါ
+find_next_label=ရှေ့သို့
+find_highlight=အားလုံးကို မျဉ်းသားပါ
+find_match_case_label=စာလုံး တိုက်ဆိုင်ပါ
+find_reached_top=စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ
+find_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=စကားစု မတွေ့ရဘူး
+
+# Error panel labels
+error_more_info=နောက်ထပ်အချက်အလက်များ
+error_less_info=အနည်းငယ်မျှသော သတင်းအချက်အလက်
+error_close=ပိတ်
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=မက်ဆေ့ - {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=အထပ် - {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ဖိုင် {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=လိုင်း - {{line}}
+rendering_error=စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။
+
+# Predefined zoom values
+page_scale_width=စာမျက်နှာ အကျယ်
+page_scale_fit=စာမျက်နှာ ကွက်တိ
+page_scale_auto=အလိုအလျောက် ချုံ့ချဲ့
+page_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ်
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=အမှား
+loading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။
+invalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင်
+missing_file_error=PDF ပျောက်ဆုံး
+unexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက်
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} အဓိပ္ပာယ်ဖွင့်ဆိုချက်]
+password_label=ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။
+password_invalid=စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။
+password_ok=OK
+password_cancel=ပယ်ဖျက်ပါ
+
+printing_not_supported=သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။
+printing_not_ready=သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
+document_colors_not_allowed=PDF ဖိုင်အား ၎င်းဤ ကိုယ်ပိုင်အရောင်များကို အသုံးပြုခွင့်မပေးထားပါ ။ 'စာမျက်နှာအားလုံးအားအရောင်ရွေးချယ်ခွင့်' အား ယခု ဘယောက်ဆာတွင် ပိတ်ထားခြင်းကြောင့်ဖြစ် သှ်
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nb-NO/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nb-NO/viewer.properties
index 5612abb0bf8ac98525d46daf12e65603db92ccaa..e2841f7e47aa83e4cc5ed7584af3dd8a684c0553 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nb-NO/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nb-NO/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Forrige side
-previous_label=Forrige
-next.title=Neste side
-next_label=Neste
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Side
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=av {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} av {{pagesCount}})
-
-zoom_out.title=Zoom ut
-zoom_out_label=Zoom ut
-zoom_in.title=Zoom inn
-zoom_in_label=Zoom inn
-zoom.title=Zoom
-presentation_mode.title=Bytt til presentasjonsmodus
-presentation_mode_label=Presentasjonsmodus
-open_file.title=Åpne fil
-open_file_label=Åpne
-print.title=Skriv ut
-print_label=Skriv ut
-download.title=Last ned
-download_label=Last ned
-bookmark.title=Nåværende visning (kopier eller åpne i et nytt vindu)
-bookmark_label=Nåværende visning
-
-# Secondary toolbar and context menu
-tools.title=Verktøy
-tools_label=Verktøy
-first_page.title=Gå til første side
-first_page.label=Gå til første side
-first_page_label=Gå til første side
-last_page.title=Gå til siste side
-last_page.label=Gå til siste side
-last_page_label=Gå til siste side
-page_rotate_cw.title=Roter med klokken
-page_rotate_cw.label=Roter med klokken
-page_rotate_cw_label=Roter med klokken
-page_rotate_ccw.title=Roter mot klokken
-page_rotate_ccw.label=Roter mot klokken
-page_rotate_ccw_label=Roter mot klokken
-
-cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
-cursor_text_select_tool_label=Tekstmarkeringsverktøy
-cursor_hand_tool.title=Aktiver handverktøy
-cursor_hand_tool_label=Handverktøy
-
-scroll_vertical.title=Bruk vertikal rulling
-scroll_vertical_label=Vertikal rulling
-scroll_horizontal.title=Bruk horisontal rulling
-scroll_horizontal_label=Horisontal rulling
-scroll_wrapped.title=Bruk flersiderulling
-scroll_wrapped_label=Flersiderulling
-
-spread_none.title=Vis enkeltsider
-spread_none_label=Enkeltsider
-spread_odd.title=Vis oppslag med ulike sidenumre til venstre
-spread_odd_label=Oppslag med forside
-spread_even.title=Vis oppslag med like sidenumre til venstre
-spread_even_label=Oppslag uten forside
-
-# Document properties dialog box
-document_properties.title=Dokumentegenskaper …
-document_properties_label=Dokumentegenskaper …
-document_properties_file_name=Filnavn:
-document_properties_file_size=Filstørrelse:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Dokumentegenskaper …
-document_properties_author=Forfatter:
-document_properties_subject=Emne:
-document_properties_keywords=Nøkkelord:
-document_properties_creation_date=Opprettet dato:
-document_properties_modification_date=Endret dato:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Opprettet av:
-document_properties_producer=PDF-verktøy:
-document_properties_version=PDF-versjon:
-document_properties_page_count=Sideantall:
-document_properties_page_size=Sidestørrelse:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=stående
-document_properties_page_size_orientation_landscape=liggende
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Hurtig nettvisning:
-document_properties_linearized_yes=Ja
-document_properties_linearized_no=Nei
-document_properties_close=Lukk
-
-print_progress_message=Forbereder dokument for utskrift …
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Avbryt
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Slå av/på sidestolpe
-toggle_sidebar_notification.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg)
-toggle_sidebar_label=Slå av/på sidestolpe
-document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer)
-document_outline_label=Dokumentdisposisjon
-attachments.title=Vis vedlegg
-attachments_label=Vedlegg
-thumbs.title=Vis miniatyrbilde
-thumbs_label=Miniatyrbilde
-findbar.title=Finn i dokumentet
-findbar_label=Finn
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Side {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Side {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatyrbilde av side {{page}}
-
-# Find panel button title and messages
-find_input.title=Søk
-find_input.placeholder=Søk i dokument…
-find_previous.title=Finn forrige forekomst av frasen
-find_previous_label=Forrige
-find_next.title=Finn neste forekomst av frasen
-find_next_label=Neste
-find_highlight=Uthev alle
-find_match_case_label=Skill store/små bokstaver
-find_entire_word_label=Hele ord
-find_reached_top=Nådde toppen av dokumentet, fortsetter fra bunnen
-find_reached_bottom=Nådde bunnen av dokumentet, fortsetter fra toppen
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} av {{total}} treff
-find_match_count[two]={{current}} av {{total}} treff
-find_match_count[few]={{current}} av {{total}} treff
-find_match_count[many]={{current}} av {{total}} treff
-find_match_count[other]={{current}} av {{total}} treff
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mer enn {{limit}} treff
-find_match_count_limit[one]=Mer enn {{limit}} treff
-find_match_count_limit[two]=Mer enn {{limit}} treff
-find_match_count_limit[few]=Mer enn {{limit}} treff
-find_match_count_limit[many]=Mer enn {{limit}} treff
-find_match_count_limit[other]=Mer enn {{limit}} treff
-find_not_found=Fant ikke teksten
-
-# Error panel labels
-error_more_info=Mer info
-error_less_info=Mindre info
-error_close=Lukk
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (bygg: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Melding: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stakk: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fil: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linje: {{line}}
-rendering_error=En feil oppstod ved opptegning av siden.
-
-# Predefined zoom values
-page_scale_width=Sidebredde
-page_scale_fit=Tilpass til siden
-page_scale_auto=Automatisk zoom
-page_scale_actual=Virkelig størrelse
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Feil
-loading_error=En feil oppstod ved lasting av PDF.
-invalid_file_error=Ugyldig eller skadet PDF-fil.
-missing_file_error=Manglende PDF-fil.
-unexpected_response_error=Uventet serverrespons.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} annotasjon]
-password_label=Skriv inn passordet for å åpne denne PDF-filen.
-password_invalid=Ugyldig passord. Prøv igjen.
-password_ok=OK
-password_cancel=Avbryt
-
-printing_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren.
-printing_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift.
-web_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter.
-document_colors_not_allowed=PDF-dokumenter tillates ikke å bruke deres egne farger: "Tillat sider å velge egne farger" er deaktivert i nettleseren.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Forrige side
+previous_label=Forrige
+next.title=Neste side
+next_label=Neste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zoom ut
+zoom_out_label=Zoom ut
+zoom_in.title=Zoom inn
+zoom_in_label=Zoom inn
+zoom.title=Zoom
+presentation_mode.title=Bytt til presentasjonsmodus
+presentation_mode_label=Presentasjonsmodus
+open_file.title=Åpne fil
+open_file_label=Åpne
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Last ned
+download_label=Last ned
+bookmark.title=Nåværende visning (kopier eller åpne i et nytt vindu)
+bookmark_label=Nåværende visning
+
+# Secondary toolbar and context menu
+tools.title=Verktøy
+tools_label=Verktøy
+first_page.title=Gå til første side
+first_page.label=Gå til første side
+first_page_label=Gå til første side
+last_page.title=Gå til siste side
+last_page.label=Gå til siste side
+last_page_label=Gå til siste side
+page_rotate_cw.title=Roter med klokken
+page_rotate_cw.label=Roter med klokken
+page_rotate_cw_label=Roter med klokken
+page_rotate_ccw.title=Roter mot klokken
+page_rotate_ccw.label=Roter mot klokken
+page_rotate_ccw_label=Roter mot klokken
+
+cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
+cursor_text_select_tool_label=Tekstmarkeringsverktøy
+cursor_hand_tool.title=Aktiver handverktøy
+cursor_hand_tool_label=Handverktøy
+
+scroll_vertical.title=Bruk vertikal rulling
+scroll_vertical_label=Vertikal rulling
+scroll_horizontal.title=Bruk horisontal rulling
+scroll_horizontal_label=Horisontal rulling
+scroll_wrapped.title=Bruk flersiderulling
+scroll_wrapped_label=Flersiderulling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltsider
+spread_odd.title=Vis oppslag med ulike sidenumre til venstre
+spread_odd_label=Oppslag med forside
+spread_even.title=Vis oppslag med like sidenumre til venstre
+spread_even_label=Oppslag uten forside
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaper …
+document_properties_label=Dokumentegenskaper …
+document_properties_file_name=Filnavn:
+document_properties_file_size=Filstørrelse:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Dokumentegenskaper …
+document_properties_author=Forfatter:
+document_properties_subject=Emne:
+document_properties_keywords=Nøkkelord:
+document_properties_creation_date=Opprettet dato:
+document_properties_modification_date=Endret dato:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Opprettet av:
+document_properties_producer=PDF-verktøy:
+document_properties_version=PDF-versjon:
+document_properties_page_count=Sideantall:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stående
+document_properties_page_size_orientation_landscape=liggende
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hurtig nettvisning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nei
+document_properties_close=Lukk
+
+print_progress_message=Forbereder dokument for utskrift …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå av/på sidestolpe
+toggle_sidebar_notification.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg)
+toggle_sidebar_label=Slå av/på sidestolpe
+document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer)
+document_outline_label=Dokumentdisposisjon
+attachments.title=Vis vedlegg
+attachments_label=Vedlegg
+thumbs.title=Vis miniatyrbilde
+thumbs_label=Miniatyrbilde
+findbar.title=Finn i dokumentet
+findbar_label=Finn
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyrbilde av side {{page}}
+
+# Find panel button title and messages
+find_input.title=Søk
+find_input.placeholder=Søk i dokument…
+find_previous.title=Finn forrige forekomst av frasen
+find_previous_label=Forrige
+find_next.title=Finn neste forekomst av frasen
+find_next_label=Neste
+find_highlight=Uthev alle
+find_match_case_label=Skill store/små bokstaver
+find_entire_word_label=Hele ord
+find_reached_top=Nådde toppen av dokumentet, fortsetter fra bunnen
+find_reached_bottom=Nådde bunnen av dokumentet, fortsetter fra toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} treff
+find_match_count[two]={{current}} av {{total}} treff
+find_match_count[few]={{current}} av {{total}} treff
+find_match_count[many]={{current}} av {{total}} treff
+find_match_count[other]={{current}} av {{total}} treff
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mer enn {{limit}} treff
+find_match_count_limit[one]=Mer enn {{limit}} treff
+find_match_count_limit[two]=Mer enn {{limit}} treff
+find_match_count_limit[few]=Mer enn {{limit}} treff
+find_match_count_limit[many]=Mer enn {{limit}} treff
+find_match_count_limit[other]=Mer enn {{limit}} treff
+find_not_found=Fant ikke teksten
+
+# Error panel labels
+error_more_info=Mer info
+error_less_info=Mindre info
+error_close=Lukk
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (bygg: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Melding: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stakk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=En feil oppstod ved opptegning av siden.
+
+# Predefined zoom values
+page_scale_width=Sidebredde
+page_scale_fit=Tilpass til siden
+page_scale_auto=Automatisk zoom
+page_scale_actual=Virkelig størrelse
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Feil
+loading_error=En feil oppstod ved lasting av PDF.
+invalid_file_error=Ugyldig eller skadet PDF-fil.
+missing_file_error=Manglende PDF-fil.
+unexpected_response_error=Uventet serverrespons.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} annotasjon]
+password_label=Skriv inn passordet for å åpne denne PDF-filen.
+password_invalid=Ugyldig passord. Prøv igjen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren.
+printing_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift.
+web_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter.
+document_colors_not_allowed=PDF-dokumenter tillates ikke å bruke deres egne farger: "Tillat sider å velge egne farger" er deaktivert i nettleseren.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ne-NP/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ne-NP/viewer.properties
index 13bf69ba9a63494359f3ff1cc097441637fd5123..c5bab943a9b4cf25d8206d3e93781566db598358 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ne-NP/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ne-NP/viewer.properties
@@ -1,184 +1,184 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=अघिल्लो पृष्ठ
-previous_label=अघिल्लो
-next.title=पछिल्लो पृष्ठ
-next_label=पछिल्लो
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=पृष्ठ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} मध्ये
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pagesCount}} को {{pageNumber}})
-
-zoom_out.title=जुम घटाउनुहोस्
-zoom_out_label=जुम घटाउनुहोस्
-zoom_in.title=जुम बढाउनुहोस्
-zoom_in_label=जुम बढाउनुहोस्
-zoom.title=जुम गर्नुहोस्
-presentation_mode.title=प्रस्तुति मोडमा जानुहोस्
-presentation_mode_label=प्रस्तुति मोड
-open_file.title=फाइल खोल्नुहोस्
-open_file_label=खोल्नुहोस्
-print.title=मुद्रण गर्नुहोस्
-print_label=मुद्रण गर्नुहोस्
-download.title=डाउनलोडहरू
-download_label=डाउनलोडहरू
-bookmark.title=वर्तमान दृश्य (प्रतिलिपि गर्नुहोस् वा नयाँ सञ्झ्यालमा खुल्नुहोस्)
-bookmark_label=हालको दृश्य
-
-# Secondary toolbar and context menu
-tools.title=औजारहरू
-tools_label=औजारहरू
-first_page.title=पहिलो पृष्ठमा जानुहोस्
-first_page.label=पहिलो पृष्ठमा जानुहोस्
-first_page_label=पहिलो पृष्ठमा जानुहोस्
-last_page.title=पछिल्लो पृष्ठमा जानुहोस्
-last_page.label=पछिल्लो पृष्ठमा जानुहोस्
-last_page_label=पछिल्लो पृष्ठमा जानुहोस्
-page_rotate_cw.title=घडीको दिशामा घुमाउनुहोस्
-page_rotate_cw.label=घडीको दिशामा घुमाउनुहोस्
-page_rotate_cw_label=घडीको दिशामा घुमाउनुहोस्
-page_rotate_ccw.title=घडीको विपरित दिशामा घुमाउनुहोस्
-page_rotate_ccw.label=घडीको विपरित दिशामा घुमाउनुहोस्
-page_rotate_ccw_label=घडीको विपरित दिशामा घुमाउनुहोस्
-
-cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम गर्नुहोस्
-cursor_text_select_tool_label=पाठ चयन उपकरण
-cursor_hand_tool.title=हाते उपकरण सक्षम गर्नुहोस्
-cursor_hand_tool_label=हाते उपकरण
-
-# Document properties dialog box
-document_properties.title=कागजात विशेषताहरू...
-document_properties_label=कागजात विशेषताहरू...
-document_properties_file_name=फाइल नाम:
-document_properties_file_size=फाइल आकार:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=शीर्षक:
-document_properties_author=लेखक:
-document_properties_subject=विषयः
-document_properties_keywords=शब्दकुञ्जीः
-document_properties_creation_date=सिर्जना गरिएको मिति:
-document_properties_modification_date=परिमार्जित मिति:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=सर्जक:
-document_properties_producer=PDF निर्माता:
-document_properties_version=PDF संस्करण
-document_properties_page_count=पृष्ठ गणना:
-document_properties_close=बन्द गर्नुहोस्
-
-print_progress_message=मुद्रणका लागि कागजात तयारी गरिदै…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=रद्द गर्नुहोस्
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=टगल साइडबार
-toggle_sidebar_notification.title=साइडबार टगल गर्नुहोस् (कागजातमा समावेश भएको कुराहरू रूपरेखा/attachments)
-toggle_sidebar_label=टगल साइडबार
-document_outline.title=कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्)
-document_outline_label=दस्तावेजको रूपरेखा
-attachments.title=संलग्नहरू देखाउनुहोस्
-attachments_label=संलग्नकहरू
-thumbs.title=थम्बनेलहरू देखाउनुहोस्
-thumbs_label=थम्बनेलहरू
-findbar.title=कागजातमा फेला पार्नुहोस्
-findbar_label=फेला पार्नुहोस्
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=पृष्ठ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} पृष्ठको थम्बनेल
-
-# Find panel button title and messages
-find_input.title=फेला पार्नुहोस्
-find_input.placeholder=कागजातमा फेला पार्नुहोस्…
-find_previous.title=यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस्
-find_previous_label=अघिल्लो
-find_next.title=यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस्
-find_next_label=अर्को
-find_highlight=सबै हाइलाइट गर्ने
-find_match_case_label=केस जोडा मिलाउनुहोस्
-find_reached_top=पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो
-find_reached_bottom=पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो
-find_not_found=वाक्यांश फेला परेन
-
-# Error panel labels
-error_more_info=थप जानकारी
-error_less_info=कम जानकारी
-error_close=बन्द गर्नुहोस्
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=सन्देश: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=स्ट्याक: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=फाइल: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=लाइन: {{line}}
-rendering_error=पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्यो।
-
-# Predefined zoom values
-page_scale_width=पृष्ठ चौडाइ
-page_scale_fit=पृष्ठ ठिक्क मिल्ने
-page_scale_auto=स्वचालित जुम
-page_scale_actual=वास्तविक आकार
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=त्रुटि
-loading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्यो।
-invalid_file_error=अवैध वा दुषित PDF फाइल।
-missing_file_error=हराईरहेको PDF फाइल।
-unexpected_response_error=अप्रत्याशित सर्भर प्रतिक्रिया।
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्।
-password_invalid=अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्।
-password_ok=ठिक छ
-password_cancel=रद्द गर्नुहोस्
-
-printing_not_supported=चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन।
-printing_not_ready=चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन।
-web_fonts_disabled=वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ।
-document_colors_not_allowed=PDF कागजातहरूलाई आफ्नै रङ प्रयोग गर्न अनुमति छैन: 'पृष्ठलाई आफ्नै रङ चयन गर्न अनुमति दिने' ब्राउजरमा निष्क्रिय गरिएको छ।
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=अघिल्लो पृष्ठ
+previous_label=अघिल्लो
+next.title=पछिल्लो पृष्ठ
+next_label=पछिल्लो
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृष्ठ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} मध्ये
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} को {{pageNumber}})
+
+zoom_out.title=जुम घटाउनुहोस्
+zoom_out_label=जुम घटाउनुहोस्
+zoom_in.title=जुम बढाउनुहोस्
+zoom_in_label=जुम बढाउनुहोस्
+zoom.title=जुम गर्नुहोस्
+presentation_mode.title=प्रस्तुति मोडमा जानुहोस्
+presentation_mode_label=प्रस्तुति मोड
+open_file.title=फाइल खोल्नुहोस्
+open_file_label=खोल्नुहोस्
+print.title=मुद्रण गर्नुहोस्
+print_label=मुद्रण गर्नुहोस्
+download.title=डाउनलोडहरू
+download_label=डाउनलोडहरू
+bookmark.title=वर्तमान दृश्य (प्रतिलिपि गर्नुहोस् वा नयाँ सञ्झ्यालमा खुल्नुहोस्)
+bookmark_label=हालको दृश्य
+
+# Secondary toolbar and context menu
+tools.title=औजारहरू
+tools_label=औजारहरू
+first_page.title=पहिलो पृष्ठमा जानुहोस्
+first_page.label=पहिलो पृष्ठमा जानुहोस्
+first_page_label=पहिलो पृष्ठमा जानुहोस्
+last_page.title=पछिल्लो पृष्ठमा जानुहोस्
+last_page.label=पछिल्लो पृष्ठमा जानुहोस्
+last_page_label=पछिल्लो पृष्ठमा जानुहोस्
+page_rotate_cw.title=घडीको दिशामा घुमाउनुहोस्
+page_rotate_cw.label=घडीको दिशामा घुमाउनुहोस्
+page_rotate_cw_label=घडीको दिशामा घुमाउनुहोस्
+page_rotate_ccw.title=घडीको विपरित दिशामा घुमाउनुहोस्
+page_rotate_ccw.label=घडीको विपरित दिशामा घुमाउनुहोस्
+page_rotate_ccw_label=घडीको विपरित दिशामा घुमाउनुहोस्
+
+cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम गर्नुहोस्
+cursor_text_select_tool_label=पाठ चयन उपकरण
+cursor_hand_tool.title=हाते उपकरण सक्षम गर्नुहोस्
+cursor_hand_tool_label=हाते उपकरण
+
+# Document properties dialog box
+document_properties.title=कागजात विशेषताहरू...
+document_properties_label=कागजात विशेषताहरू...
+document_properties_file_name=फाइल नाम:
+document_properties_file_size=फाइल आकार:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=शीर्षक:
+document_properties_author=लेखक:
+document_properties_subject=विषयः
+document_properties_keywords=शब्दकुञ्जीः
+document_properties_creation_date=सिर्जना गरिएको मिति:
+document_properties_modification_date=परिमार्जित मिति:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=सर्जक:
+document_properties_producer=PDF निर्माता:
+document_properties_version=PDF संस्करण
+document_properties_page_count=पृष्ठ गणना:
+document_properties_close=बन्द गर्नुहोस्
+
+print_progress_message=मुद्रणका लागि कागजात तयारी गरिदै…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रद्द गर्नुहोस्
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=टगल साइडबार
+toggle_sidebar_notification.title=साइडबार टगल गर्नुहोस् (कागजातमा समावेश भएको कुराहरू रूपरेखा/attachments)
+toggle_sidebar_label=टगल साइडबार
+document_outline.title=कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्)
+document_outline_label=दस्तावेजको रूपरेखा
+attachments.title=संलग्नहरू देखाउनुहोस्
+attachments_label=संलग्नकहरू
+thumbs.title=थम्बनेलहरू देखाउनुहोस्
+thumbs_label=थम्बनेलहरू
+findbar.title=कागजातमा फेला पार्नुहोस्
+findbar_label=फेला पार्नुहोस्
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृष्ठ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} पृष्ठको थम्बनेल
+
+# Find panel button title and messages
+find_input.title=फेला पार्नुहोस्
+find_input.placeholder=कागजातमा फेला पार्नुहोस्…
+find_previous.title=यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस्
+find_previous_label=अघिल्लो
+find_next.title=यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस्
+find_next_label=अर्को
+find_highlight=सबै हाइलाइट गर्ने
+find_match_case_label=केस जोडा मिलाउनुहोस्
+find_reached_top=पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो
+find_reached_bottom=पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो
+find_not_found=वाक्यांश फेला परेन
+
+# Error panel labels
+error_more_info=थप जानकारी
+error_less_info=कम जानकारी
+error_close=बन्द गर्नुहोस्
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=सन्देश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=स्ट्याक: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=लाइन: {{line}}
+rendering_error=पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्यो।
+
+# Predefined zoom values
+page_scale_width=पृष्ठ चौडाइ
+page_scale_fit=पृष्ठ ठिक्क मिल्ने
+page_scale_auto=स्वचालित जुम
+page_scale_actual=वास्तविक आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=त्रुटि
+loading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्यो।
+invalid_file_error=अवैध वा दुषित PDF फाइल।
+missing_file_error=हराईरहेको PDF फाइल।
+unexpected_response_error=अप्रत्याशित सर्भर प्रतिक्रिया।
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्।
+password_invalid=अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्।
+password_ok=ठिक छ
+password_cancel=रद्द गर्नुहोस्
+
+printing_not_supported=चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन।
+printing_not_ready=चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन।
+web_fonts_disabled=वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ।
+document_colors_not_allowed=PDF कागजातहरूलाई आफ्नै रङ प्रयोग गर्न अनुमति छैन: 'पृष्ठलाई आफ्नै रङ चयन गर्न अनुमति दिने' ब्राउजरमा निष्क्रिय गरिएको छ।
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nl/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nl/viewer.properties
index af8fb681e8f1bdc0b65101f4f922a14d286e9652..408ade10c547e4316856e946e51c322f8a5b3786 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nl/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nl/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Vorige pagina
-previous_label=Vorige
-next.title=Volgende pagina
-next_label=Volgende
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pagina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=van {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} van {{pagesCount}})
-
-zoom_out.title=Uitzoomen
-zoom_out_label=Uitzoomen
-zoom_in.title=Inzoomen
-zoom_in_label=Inzoomen
-zoom.title=Zoomen
-presentation_mode.title=Wisselen naar presentatiemodus
-presentation_mode_label=Presentatiemodus
-open_file.title=Bestand openen
-open_file_label=Openen
-print.title=Afdrukken
-print_label=Afdrukken
-download.title=Downloaden
-download_label=Downloaden
-bookmark.title=Huidige weergave (kopiëren of openen in nieuw venster)
-bookmark_label=Huidige weergave
-
-# Secondary toolbar and context menu
-tools.title=Hulpmiddelen
-tools_label=Hulpmiddelen
-first_page.title=Naar eerste pagina gaan
-first_page.label=Naar eerste pagina gaan
-first_page_label=Naar eerste pagina gaan
-last_page.title=Naar laatste pagina gaan
-last_page.label=Naar laatste pagina gaan
-last_page_label=Naar laatste pagina gaan
-page_rotate_cw.title=Rechtsom draaien
-page_rotate_cw.label=Rechtsom draaien
-page_rotate_cw_label=Rechtsom draaien
-page_rotate_ccw.title=Linksom draaien
-page_rotate_ccw.label=Linksom draaien
-page_rotate_ccw_label=Linksom draaien
-
-cursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen
-cursor_text_select_tool_label=Tekstselectiehulpmiddel
-cursor_hand_tool.title=Handhulpmiddel inschakelen
-cursor_hand_tool_label=Handhulpmiddel
-
-scroll_vertical.title=Verticaal scrollen gebruiken
-scroll_vertical_label=Verticaal scrollen
-scroll_horizontal.title=Horizontaal scrollen gebruiken
-scroll_horizontal_label=Horizontaal scrollen
-scroll_wrapped.title=Scrollen met terugloop gebruiken
-scroll_wrapped_label=Scrollen met terugloop
-
-spread_none.title=Dubbele pagina’s niet samenvoegen
-spread_none_label=Geen dubbele pagina’s
-spread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s
-spread_odd_label=Oneven dubbele pagina’s
-spread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s
-spread_even_label=Even dubbele pagina’s
-
-# Document properties dialog box
-document_properties.title=Documenteigenschappen…
-document_properties_label=Documenteigenschappen…
-document_properties_file_name=Bestandsnaam:
-document_properties_file_size=Bestandsgrootte:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Titel:
-document_properties_author=Auteur:
-document_properties_subject=Onderwerp:
-document_properties_keywords=Trefwoorden:
-document_properties_creation_date=Aanmaakdatum:
-document_properties_modification_date=Wijzigingsdatum:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Maker:
-document_properties_producer=PDF-producent:
-document_properties_version=PDF-versie:
-document_properties_page_count=Aantal pagina’s:
-document_properties_page_size=Paginagrootte:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=staand
-document_properties_page_size_orientation_landscape=liggend
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Snelle webweergave:
-document_properties_linearized_yes=Ja
-document_properties_linearized_no=Nee
-document_properties_close=Sluiten
-
-print_progress_message=Document voorbereiden voor afdrukken…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Annuleren
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Zijbalk in-/uitschakelen
-toggle_sidebar_notification.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen)
-toggle_sidebar_label=Zijbalk in-/uitschakelen
-document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen)
-document_outline_label=Documentoverzicht
-attachments.title=Bijlagen tonen
-attachments_label=Bijlagen
-thumbs.title=Miniaturen tonen
-thumbs_label=Miniaturen
-findbar.title=Zoeken in document
-findbar_label=Zoeken
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pagina {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pagina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatuur van pagina {{page}}
-
-# Find panel button title and messages
-find_input.title=Zoeken
-find_input.placeholder=Zoeken in document…
-find_previous.title=De vorige overeenkomst van de tekst zoeken
-find_previous_label=Vorige
-find_next.title=De volgende overeenkomst van de tekst zoeken
-find_next_label=Volgende
-find_highlight=Alles markeren
-find_match_case_label=Hoofdlettergevoelig
-find_entire_word_label=Hele woorden
-find_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant
-find_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} van {{total}} overeenkomst
-find_match_count[two]={{current}} van {{total}} overeenkomsten
-find_match_count[few]={{current}} van {{total}} overeenkomsten
-find_match_count[many]={{current}} van {{total}} overeenkomsten
-find_match_count[other]={{current}} van {{total}} overeenkomsten
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten
-find_match_count_limit[one]=Meer dan {{limit}} overeenkomst
-find_match_count_limit[two]=Meer dan {{limit}} overeenkomsten
-find_match_count_limit[few]=Meer dan {{limit}} overeenkomsten
-find_match_count_limit[many]=Meer dan {{limit}} overeenkomsten
-find_match_count_limit[other]=Meer dan {{limit}} overeenkomsten
-find_not_found=Tekst niet gevonden
-
-# Error panel labels
-error_more_info=Meer informatie
-error_less_info=Minder informatie
-error_close=Sluiten
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Bericht: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Bestand: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Regel: {{line}}
-rendering_error=Er is een fout opgetreden bij het weergeven van de pagina.
-
-# Predefined zoom values
-page_scale_width=Paginabreedte
-page_scale_fit=Hele pagina
-page_scale_auto=Automatisch zoomen
-page_scale_actual=Werkelijke grootte
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Fout
-loading_error=Er is een fout opgetreden bij het laden van de PDF.
-invalid_file_error=Ongeldig of beschadigd PDF-bestand.
-missing_file_error=PDF-bestand ontbreekt.
-unexpected_response_error=Onverwacht serverantwoord.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}}-aantekening]
-password_label=Voer het wachtwoord in om dit PDF-bestand te openen.
-password_invalid=Ongeldig wachtwoord. Probeer het opnieuw.
-password_ok=OK
-password_cancel=Annuleren
-
-printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.
-printing_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken.
-web_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk.
-document_colors_not_allowed=PDF-documenten mogen hun eigen kleuren niet gebruiken: ‘Pagina’s toestaan om hun eigen kleuren te kiezen’ is uitgeschakeld in de browser.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Vorige pagina
+previous_label=Vorige
+next.title=Volgende pagina
+next_label=Volgende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=van {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} van {{pagesCount}})
+
+zoom_out.title=Uitzoomen
+zoom_out_label=Uitzoomen
+zoom_in.title=Inzoomen
+zoom_in_label=Inzoomen
+zoom.title=Zoomen
+presentation_mode.title=Wisselen naar presentatiemodus
+presentation_mode_label=Presentatiemodus
+open_file.title=Bestand openen
+open_file_label=Openen
+print.title=Afdrukken
+print_label=Afdrukken
+download.title=Downloaden
+download_label=Downloaden
+bookmark.title=Huidige weergave (kopiëren of openen in nieuw venster)
+bookmark_label=Huidige weergave
+
+# Secondary toolbar and context menu
+tools.title=Hulpmiddelen
+tools_label=Hulpmiddelen
+first_page.title=Naar eerste pagina gaan
+first_page.label=Naar eerste pagina gaan
+first_page_label=Naar eerste pagina gaan
+last_page.title=Naar laatste pagina gaan
+last_page.label=Naar laatste pagina gaan
+last_page_label=Naar laatste pagina gaan
+page_rotate_cw.title=Rechtsom draaien
+page_rotate_cw.label=Rechtsom draaien
+page_rotate_cw_label=Rechtsom draaien
+page_rotate_ccw.title=Linksom draaien
+page_rotate_ccw.label=Linksom draaien
+page_rotate_ccw_label=Linksom draaien
+
+cursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen
+cursor_text_select_tool_label=Tekstselectiehulpmiddel
+cursor_hand_tool.title=Handhulpmiddel inschakelen
+cursor_hand_tool_label=Handhulpmiddel
+
+scroll_vertical.title=Verticaal scrollen gebruiken
+scroll_vertical_label=Verticaal scrollen
+scroll_horizontal.title=Horizontaal scrollen gebruiken
+scroll_horizontal_label=Horizontaal scrollen
+scroll_wrapped.title=Scrollen met terugloop gebruiken
+scroll_wrapped_label=Scrollen met terugloop
+
+spread_none.title=Dubbele pagina’s niet samenvoegen
+spread_none_label=Geen dubbele pagina’s
+spread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s
+spread_odd_label=Oneven dubbele pagina’s
+spread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s
+spread_even_label=Even dubbele pagina’s
+
+# Document properties dialog box
+document_properties.title=Documenteigenschappen…
+document_properties_label=Documenteigenschappen…
+document_properties_file_name=Bestandsnaam:
+document_properties_file_size=Bestandsgrootte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Auteur:
+document_properties_subject=Onderwerp:
+document_properties_keywords=Trefwoorden:
+document_properties_creation_date=Aanmaakdatum:
+document_properties_modification_date=Wijzigingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Maker:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-versie:
+document_properties_page_count=Aantal pagina’s:
+document_properties_page_size=Paginagrootte:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=staand
+document_properties_page_size_orientation_landscape=liggend
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Snelle webweergave:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nee
+document_properties_close=Sluiten
+
+print_progress_message=Document voorbereiden voor afdrukken…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annuleren
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Zijbalk in-/uitschakelen
+toggle_sidebar_notification.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen)
+toggle_sidebar_label=Zijbalk in-/uitschakelen
+document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen)
+document_outline_label=Documentoverzicht
+attachments.title=Bijlagen tonen
+attachments_label=Bijlagen
+thumbs.title=Miniaturen tonen
+thumbs_label=Miniaturen
+findbar.title=Zoeken in document
+findbar_label=Zoeken
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatuur van pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Zoeken
+find_input.placeholder=Zoeken in document…
+find_previous.title=De vorige overeenkomst van de tekst zoeken
+find_previous_label=Vorige
+find_next.title=De volgende overeenkomst van de tekst zoeken
+find_next_label=Volgende
+find_highlight=Alles markeren
+find_match_case_label=Hoofdlettergevoelig
+find_entire_word_label=Hele woorden
+find_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant
+find_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} van {{total}} overeenkomst
+find_match_count[two]={{current}} van {{total}} overeenkomsten
+find_match_count[few]={{current}} van {{total}} overeenkomsten
+find_match_count[many]={{current}} van {{total}} overeenkomsten
+find_match_count[other]={{current}} van {{total}} overeenkomsten
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[one]=Meer dan {{limit}} overeenkomst
+find_match_count_limit[two]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[few]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[many]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[other]=Meer dan {{limit}} overeenkomsten
+find_not_found=Tekst niet gevonden
+
+# Error panel labels
+error_more_info=Meer informatie
+error_less_info=Minder informatie
+error_close=Sluiten
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Bericht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Bestand: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Regel: {{line}}
+rendering_error=Er is een fout opgetreden bij het weergeven van de pagina.
+
+# Predefined zoom values
+page_scale_width=Paginabreedte
+page_scale_fit=Hele pagina
+page_scale_auto=Automatisch zoomen
+page_scale_actual=Werkelijke grootte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fout
+loading_error=Er is een fout opgetreden bij het laden van de PDF.
+invalid_file_error=Ongeldig of beschadigd PDF-bestand.
+missing_file_error=PDF-bestand ontbreekt.
+unexpected_response_error=Onverwacht serverantwoord.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-aantekening]
+password_label=Voer het wachtwoord in om dit PDF-bestand te openen.
+password_invalid=Ongeldig wachtwoord. Probeer het opnieuw.
+password_ok=OK
+password_cancel=Annuleren
+
+printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.
+printing_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken.
+web_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk.
+document_colors_not_allowed=PDF-documenten mogen hun eigen kleuren niet gebruiken: ‘Pagina’s toestaan om hun eigen kleuren te kiezen’ is uitgeschakeld in de browser.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nn-NO/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nn-NO/viewer.properties
index ad6de8f8108091cb4dc48523799c31f002c1a11a..123043fa3a19aed13b36b84fdff5ed81e7062b3a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nn-NO/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/nn-NO/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Føregåande side
-previous_label=Føregåande
-next.title=Neste side
-next_label=Neste
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Side
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=av {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} av {{pagesCount}})
-
-zoom_out.title=Zoom ut
-zoom_out_label=Zoom ut
-zoom_in.title=Zoom inn
-zoom_in_label=Zoom inn
-zoom.title=Zoom
-presentation_mode.title=Byt til presentasjonsmodus
-presentation_mode_label=Presentasjonsmodus
-open_file.title=Opne fil
-open_file_label=Opne
-print.title=Skriv ut
-print_label=Skriv ut
-download.title=Last ned
-download_label=Last ned
-bookmark.title=Gjeldande vising (kopier eller opne i nytt vindauge)
-bookmark_label=Gjeldande vising
-
-# Secondary toolbar and context menu
-tools.title=Verktøy
-tools_label=Verktøy
-first_page.title=Gå til første side
-first_page.label=Gå til første side
-first_page_label=Gå til første side
-last_page.title=Gå til siste side
-last_page.label=Gå til siste side
-last_page_label=Gå til siste side
-page_rotate_cw.title=Roter med klokka
-page_rotate_cw.label=Roter med klokka
-page_rotate_cw_label=Roter med klokka
-page_rotate_ccw.title=Roter mot klokka
-page_rotate_ccw.label=Roter mot klokka
-page_rotate_ccw_label=Roter mot klokka
-
-cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
-cursor_text_select_tool_label=Tekstmarkeringsverktøy
-cursor_hand_tool.title=Aktiver handverktøy
-cursor_hand_tool_label=Handverktøy
-
-scroll_vertical.title=Bruk vertikal rulling
-scroll_vertical_label=Vertikal rulling
-scroll_horizontal.title=Bruk horisontal rulling
-scroll_horizontal_label=Horisontal rulling
-scroll_wrapped.title=Bruk fleirsiderulling
-scroll_wrapped_label=Fleirsiderulling
-
-spread_none.title=Vis enkeltsider
-spread_none_label=Enkeltside
-spread_odd.title=Vis oppslag med ulike sidenummer til venstre
-spread_odd_label=Oppslag med framside
-spread_even.title=Vis oppslag med like sidenummmer til venstre
-spread_even_label=Oppslag utan framside
-
-# Document properties dialog box
-document_properties.title=Dokumenteigenskapar…
-document_properties_label=Dokumenteigenskapar…
-document_properties_file_name=Filnamn:
-document_properties_file_size=Filstorleik:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Tittel:
-document_properties_author=Forfattar:
-document_properties_subject=Emne:
-document_properties_keywords=Stikkord:
-document_properties_creation_date=Dato oppretta:
-document_properties_modification_date=Dato endra:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Oppretta av:
-document_properties_producer=PDF-verktøy:
-document_properties_version=PDF-versjon:
-document_properties_page_count=Sidetal:
-document_properties_page_size=Sidestørrelse:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=ståande
-document_properties_page_size_orientation_landscape=liggande
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Brev
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Rask nettvising:
-document_properties_linearized_yes=Ja
-document_properties_linearized_no=Nei
-document_properties_close=Lat att
-
-print_progress_message=Førebur dokumentet for utskrift…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Avbryt
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Slå av/på sidestolpe
-toggle_sidebar_notification.title=Vis/gøym sidestolpen (dokumentet inneheld oversikt/vedlegg)
-toggle_sidebar_label=Slå av/på sidestolpe
-document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa)
-document_outline_label=Dokumentdisposisjon
-attachments.title=Vis vedlegg
-attachments_label=Vedlegg
-thumbs.title=Vis miniatyrbilde
-thumbs_label=Miniatyrbilde
-findbar.title=Finn i dokumentet
-findbar_label=Finn
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Side {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Side {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatyrbilde av side {{page}}
-
-# Find panel button title and messages
-find_input.title=Søk
-find_input.placeholder=Søk i dokument…
-find_previous.title=Finn førre førekomst av frasen
-find_previous_label=Førre
-find_next.title=Finn neste førekomst av frasen
-find_next_label=Neste
-find_highlight=Uthev alle
-find_match_case_label=Skil store/små bokstavar
-find_entire_word_label=Heile ord
-find_reached_top=Nådde toppen av dokumentet, fortset frå botnen
-find_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} av {{total}} treff
-find_match_count[two]={{current}} av {{total}} treff
-find_match_count[few]={{current}} av {{total}} treff
-find_match_count[many]={{current}} av {{total}} treff
-find_match_count[other]={{current}} av {{total}} treff
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Meir enn {{limit}} treff
-find_match_count_limit[one]=Meir enn {{limit}} treff
-find_match_count_limit[two]=Meir enn {{limit}} treff
-find_match_count_limit[few]=Meir enn {{limit}} treff
-find_match_count_limit[many]=Meir enn {{limit}} treff
-find_match_count_limit[other]=Meir enn {{limit}} treff
-find_not_found=Fann ikkje teksten
-
-# Error panel labels
-error_more_info=Meir info
-error_less_info=Mindre info
-error_close=Lat att
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (bygg: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Melding: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stakk: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fil: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linje: {{line}}
-rendering_error=Ein feil oppstod under vising av sida.
-
-# Predefined zoom values
-page_scale_width=Sidebreidde
-page_scale_fit=Tilpass til sida
-page_scale_auto=Automatisk skalering
-page_scale_actual=Verkeleg storleik
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Feil
-loading_error=Ein feil oppstod ved lasting av PDF.
-invalid_file_error=Ugyldig eller korrupt PDF-fil.
-missing_file_error=Manglande PDF-fil.
-unexpected_response_error=Uventa tenarrespons.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}} {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} annotasjon]
-password_label=Skriv inn passordet for å opne denne PDF-fila.
-password_invalid=Ugyldig passord. Prøv igjen.
-password_ok=OK
-password_cancel=Avbryt
-
-printing_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren.
-printing_not_ready=Åtvaring: PDF ikkje fullstendig innlasta for utskrift.
-web_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter.
-document_colors_not_allowed=PDF-dokument kan ikkje bruke eigne fargar: «Tillat sider å velje eigne fargar» er deaktivert i nettlesaren.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Føregåande side
+previous_label=Føregåande
+next.title=Neste side
+next_label=Neste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zoom ut
+zoom_out_label=Zoom ut
+zoom_in.title=Zoom inn
+zoom_in_label=Zoom inn
+zoom.title=Zoom
+presentation_mode.title=Byt til presentasjonsmodus
+presentation_mode_label=Presentasjonsmodus
+open_file.title=Opne fil
+open_file_label=Opne
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Last ned
+download_label=Last ned
+bookmark.title=Gjeldande vising (kopier eller opne i nytt vindauge)
+bookmark_label=Gjeldande vising
+
+# Secondary toolbar and context menu
+tools.title=Verktøy
+tools_label=Verktøy
+first_page.title=Gå til første side
+first_page.label=Gå til første side
+first_page_label=Gå til første side
+last_page.title=Gå til siste side
+last_page.label=Gå til siste side
+last_page_label=Gå til siste side
+page_rotate_cw.title=Roter med klokka
+page_rotate_cw.label=Roter med klokka
+page_rotate_cw_label=Roter med klokka
+page_rotate_ccw.title=Roter mot klokka
+page_rotate_ccw.label=Roter mot klokka
+page_rotate_ccw_label=Roter mot klokka
+
+cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
+cursor_text_select_tool_label=Tekstmarkeringsverktøy
+cursor_hand_tool.title=Aktiver handverktøy
+cursor_hand_tool_label=Handverktøy
+
+scroll_vertical.title=Bruk vertikal rulling
+scroll_vertical_label=Vertikal rulling
+scroll_horizontal.title=Bruk horisontal rulling
+scroll_horizontal_label=Horisontal rulling
+scroll_wrapped.title=Bruk fleirsiderulling
+scroll_wrapped_label=Fleirsiderulling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltside
+spread_odd.title=Vis oppslag med ulike sidenummer til venstre
+spread_odd_label=Oppslag med framside
+spread_even.title=Vis oppslag med like sidenummmer til venstre
+spread_even_label=Oppslag utan framside
+
+# Document properties dialog box
+document_properties.title=Dokumenteigenskapar…
+document_properties_label=Dokumenteigenskapar…
+document_properties_file_name=Filnamn:
+document_properties_file_size=Filstorleik:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Tittel:
+document_properties_author=Forfattar:
+document_properties_subject=Emne:
+document_properties_keywords=Stikkord:
+document_properties_creation_date=Dato oppretta:
+document_properties_modification_date=Dato endra:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Oppretta av:
+document_properties_producer=PDF-verktøy:
+document_properties_version=PDF-versjon:
+document_properties_page_count=Sidetal:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ståande
+document_properties_page_size_orientation_landscape=liggande
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Brev
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rask nettvising:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nei
+document_properties_close=Lat att
+
+print_progress_message=Førebur dokumentet for utskrift…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå av/på sidestolpe
+toggle_sidebar_notification.title=Vis/gøym sidestolpen (dokumentet inneheld oversikt/vedlegg)
+toggle_sidebar_label=Slå av/på sidestolpe
+document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa)
+document_outline_label=Dokumentdisposisjon
+attachments.title=Vis vedlegg
+attachments_label=Vedlegg
+thumbs.title=Vis miniatyrbilde
+thumbs_label=Miniatyrbilde
+findbar.title=Finn i dokumentet
+findbar_label=Finn
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyrbilde av side {{page}}
+
+# Find panel button title and messages
+find_input.title=Søk
+find_input.placeholder=Søk i dokument…
+find_previous.title=Finn førre førekomst av frasen
+find_previous_label=Førre
+find_next.title=Finn neste førekomst av frasen
+find_next_label=Neste
+find_highlight=Uthev alle
+find_match_case_label=Skil store/små bokstavar
+find_entire_word_label=Heile ord
+find_reached_top=Nådde toppen av dokumentet, fortset frå botnen
+find_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} treff
+find_match_count[two]={{current}} av {{total}} treff
+find_match_count[few]={{current}} av {{total}} treff
+find_match_count[many]={{current}} av {{total}} treff
+find_match_count[other]={{current}} av {{total}} treff
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Meir enn {{limit}} treff
+find_match_count_limit[one]=Meir enn {{limit}} treff
+find_match_count_limit[two]=Meir enn {{limit}} treff
+find_match_count_limit[few]=Meir enn {{limit}} treff
+find_match_count_limit[many]=Meir enn {{limit}} treff
+find_match_count_limit[other]=Meir enn {{limit}} treff
+find_not_found=Fann ikkje teksten
+
+# Error panel labels
+error_more_info=Meir info
+error_less_info=Mindre info
+error_close=Lat att
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (bygg: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Melding: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stakk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=Ein feil oppstod under vising av sida.
+
+# Predefined zoom values
+page_scale_width=Sidebreidde
+page_scale_fit=Tilpass til sida
+page_scale_auto=Automatisk skalering
+page_scale_actual=Verkeleg storleik
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Feil
+loading_error=Ein feil oppstod ved lasting av PDF.
+invalid_file_error=Ugyldig eller korrupt PDF-fil.
+missing_file_error=Manglande PDF-fil.
+unexpected_response_error=Uventa tenarrespons.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} annotasjon]
+password_label=Skriv inn passordet for å opne denne PDF-fila.
+password_invalid=Ugyldig passord. Prøv igjen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren.
+printing_not_ready=Åtvaring: PDF ikkje fullstendig innlasta for utskrift.
+web_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter.
+document_colors_not_allowed=PDF-dokument kan ikkje bruke eigne fargar: «Tillat sider å velje eigne fargar» er deaktivert i nettlesaren.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/oc/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/oc/viewer.properties
index 3732e943b75bf93906f8149c0b8bf8df21cad2f3..368bb64e134a520dee3fd956c07ec9d2084c58bb 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/oc/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/oc/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pagina precedenta
-previous_label=Precedent
-next.title=Pagina seguenta
-next_label=Seguent
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pagina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=sus {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} sus {{pagesCount}})
-
-zoom_out.title=Zoom arrièr
-zoom_out_label=Zoom arrièr
-zoom_in.title=Zoom avant
-zoom_in_label=Zoom avant
-zoom.title=Zoom
-presentation_mode.title=Bascular en mòde presentacion
-presentation_mode_label=Mòde Presentacion
-open_file.title=Dobrir lo fichièr
-open_file_label=Dobrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Telecargar
-download_label=Telecargar
-bookmark.title=Afichatge corrent (copiar o dobrir dins una fenèstra novèla)
-bookmark_label=Afichatge actual
-
-# Secondary toolbar and context menu
-tools.title=Aisinas
-tools_label=Aisinas
-first_page.title=Anar a la primièra pagina
-first_page.label=Anar a la primièra pagina
-first_page_label=Anar a la primièra pagina
-last_page.title=Anar a la darrièra pagina
-last_page.label=Anar a la darrièra pagina
-last_page_label=Anar a la darrièra pagina
-page_rotate_cw.title=Rotacion orària
-page_rotate_cw.label=Rotacion orària
-page_rotate_cw_label=Rotacion orària
-page_rotate_ccw.title=Rotacion antiorària
-page_rotate_ccw.label=Rotacion antiorària
-page_rotate_ccw_label=Rotacion antiorària
-
-cursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte
-cursor_text_select_tool_label=Aisina de seleccion de tèxte
-cursor_hand_tool.title=Activar l’aisina man
-cursor_hand_tool_label=Aisina man
-
-scroll_vertical.title=Utilizar lo desfilament vertical
-scroll_vertical_label=Desfilament vertical
-scroll_horizontal.title=Utilizar lo desfilament orizontal
-scroll_horizontal_label=Desfilament orizontal
-scroll_wrapped.title=Activar lo desfilament continú
-scroll_wrapped_label=Desfilament continú
-
-spread_none.title=Agropar pas las paginas doas a doas
-spread_none_label=Una sola pagina
-spread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra
-spread_odd_label=Dobla pagina, impara a drecha
-spread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra
-spread_even_label=Dobla pagina, para a drecha
-
-# Document properties dialog box
-document_properties.title=Proprietats del document…
-document_properties_label=Proprietats del document…
-document_properties_file_name=Nom del fichièr :
-document_properties_file_size=Talha del fichièr :
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} Ko ({{size_b}} octets)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} Mo ({{size_b}} octets)
-document_properties_title=Títol :
-document_properties_author=Autor :
-document_properties_subject=Subjècte :
-document_properties_keywords=Mots claus :
-document_properties_creation_date=Data de creacion :
-document_properties_modification_date=Data de modificacion :
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator :
-document_properties_producer=Aisina de conversion PDF :
-document_properties_version=Version PDF :
-document_properties_page_count=Nombre de paginas :
-document_properties_page_size=Talha de la pagina :
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=retrait
-document_properties_page_size_orientation_landscape=païsatge
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letra
-document_properties_page_size_name_legal=Document juridic
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista web rapida :
-document_properties_linearized_yes=Òc
-document_properties_linearized_no=Non
-document_properties_close=Tampar
-
-print_progress_message=Preparacion del document per l’impression…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Anullar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Afichar/amagar lo panèl lateral
-toggle_sidebar_notification.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas)
-toggle_sidebar_label=Afichar/amagar lo panèl lateral
-document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements)
-document_outline_label=Marcapaginas del document
-attachments.title=Visualizar las pèças juntas
-attachments_label=Pèças juntas
-thumbs.title=Afichar las vinhetas
-thumbs_label=Vinhetas
-findbar.title=Cercar dins lo document
-findbar_label=Recercar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pagina {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pagina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Vinheta de la pagina {{page}}
-
-# Find panel button title and messages
-find_input.title=Recercar
-find_input.placeholder=Cercar dins lo document…
-find_previous.title=Tròba l'ocurréncia precedenta de la frasa
-find_previous_label=Precedent
-find_next.title=Tròba l'ocurréncia venenta de la frasa
-find_next_label=Seguent
-find_highlight=Suslinhar tot
-find_match_case_label=Respectar la cassa
-find_entire_word_label=Mots entièrs
-find_reached_top=Naut de la pagina atenh, perseguida del bas
-find_reached_bottom=Bas de la pagina atench, perseguida al començament
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=Occuréncia {{current}} sus {{total}}
-find_match_count[two]=Occuréncia {{current}} sus {{total}}
-find_match_count[few]=Occuréncia {{current}} sus {{total}}
-find_match_count[many]=Occuréncia {{current}} sus {{total}}
-find_match_count[other]=Occuréncia {{current}} sus {{total}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mai de {{limit}} occuréncias
-find_match_count_limit[one]=Mai de {{limit}} occuréncia
-find_match_count_limit[two]=Mai de {{limit}} occuréncias
-find_match_count_limit[few]=Mai de {{limit}} occuréncias
-find_match_count_limit[many]=Mai de {{limit}} occuréncias
-find_match_count_limit[other]=Mai de {{limit}} occuréncias
-find_not_found=Frasa pas trobada
-
-# Error panel labels
-error_more_info=Mai de detalhs
-error_less_info=Mens d'informacions
-error_close=Tampar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (identificant de compilacion : {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Messatge : {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pila : {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fichièr : {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linha : {{line}}
-rendering_error=Una error s'es produita pendent l'afichatge de la pagina.
-
-# Predefined zoom values
-page_scale_width=Largor plena
-page_scale_fit=Pagina entièra
-page_scale_auto=Zoom automatic
-page_scale_actual=Talha vertadièra
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Una error s'es produita pendent lo cargament del fichièr PDF.
-invalid_file_error=Fichièr PDF invalid o corromput.
-missing_file_error=Fichièr PDF mancant.
-unexpected_response_error=Responsa de servidor imprevista.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}} a {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotacion {{type}}]
-password_label=Picatz lo senhal per dobrir aqueste fichièr PDF.
-password_invalid=Senhal incorrècte. Tornatz ensajar.
-password_ok=D'acòrdi
-password_cancel=Anullar
-
-printing_not_supported=Atencion : l'impression es pas completament gerida per aqueste navegador.
-printing_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir.
-web_fonts_disabled=Las poliças web son desactivadas : impossible d'utilizar las poliças integradas al PDF.
-document_colors_not_allowed=Los documents PDF pòdon pas utilizar lors pròprias colors : « Autorizar las paginas web d'utilizar lors pròprias colors » es desactivat dins lo navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedenta
+previous_label=Precedent
+next.title=Pagina seguenta
+next_label=Seguent
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=sus {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} sus {{pagesCount}})
+
+zoom_out.title=Zoom arrièr
+zoom_out_label=Zoom arrièr
+zoom_in.title=Zoom avant
+zoom_in_label=Zoom avant
+zoom.title=Zoom
+presentation_mode.title=Bascular en mòde presentacion
+presentation_mode_label=Mòde Presentacion
+open_file.title=Dobrir lo fichièr
+open_file_label=Dobrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Telecargar
+download_label=Telecargar
+bookmark.title=Afichatge corrent (copiar o dobrir dins una fenèstra novèla)
+bookmark_label=Afichatge actual
+
+# Secondary toolbar and context menu
+tools.title=Aisinas
+tools_label=Aisinas
+first_page.title=Anar a la primièra pagina
+first_page.label=Anar a la primièra pagina
+first_page_label=Anar a la primièra pagina
+last_page.title=Anar a la darrièra pagina
+last_page.label=Anar a la darrièra pagina
+last_page_label=Anar a la darrièra pagina
+page_rotate_cw.title=Rotacion orària
+page_rotate_cw.label=Rotacion orària
+page_rotate_cw_label=Rotacion orària
+page_rotate_ccw.title=Rotacion antiorària
+page_rotate_ccw.label=Rotacion antiorària
+page_rotate_ccw_label=Rotacion antiorària
+
+cursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte
+cursor_text_select_tool_label=Aisina de seleccion de tèxte
+cursor_hand_tool.title=Activar l’aisina man
+cursor_hand_tool_label=Aisina man
+
+scroll_vertical.title=Utilizar lo desfilament vertical
+scroll_vertical_label=Desfilament vertical
+scroll_horizontal.title=Utilizar lo desfilament orizontal
+scroll_horizontal_label=Desfilament orizontal
+scroll_wrapped.title=Activar lo desfilament continú
+scroll_wrapped_label=Desfilament continú
+
+spread_none.title=Agropar pas las paginas doas a doas
+spread_none_label=Una sola pagina
+spread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra
+spread_odd_label=Dobla pagina, impara a drecha
+spread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra
+spread_even_label=Dobla pagina, para a drecha
+
+# Document properties dialog box
+document_properties.title=Proprietats del document…
+document_properties_label=Proprietats del document…
+document_properties_file_name=Nom del fichièr :
+document_properties_file_size=Talha del fichièr :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ko ({{size_b}} octets)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mo ({{size_b}} octets)
+document_properties_title=Títol :
+document_properties_author=Autor :
+document_properties_subject=Subjècte :
+document_properties_keywords=Mots claus :
+document_properties_creation_date=Data de creacion :
+document_properties_modification_date=Data de modificacion :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator :
+document_properties_producer=Aisina de conversion PDF :
+document_properties_version=Version PDF :
+document_properties_page_count=Nombre de paginas :
+document_properties_page_size=Talha de la pagina :
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrait
+document_properties_page_size_orientation_landscape=païsatge
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letra
+document_properties_page_size_name_legal=Document juridic
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapida :
+document_properties_linearized_yes=Òc
+document_properties_linearized_no=Non
+document_properties_close=Tampar
+
+print_progress_message=Preparacion del document per l’impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anullar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Afichar/amagar lo panèl lateral
+toggle_sidebar_notification.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas)
+toggle_sidebar_label=Afichar/amagar lo panèl lateral
+document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements)
+document_outline_label=Marcapaginas del document
+attachments.title=Visualizar las pèças juntas
+attachments_label=Pèças juntas
+thumbs.title=Afichar las vinhetas
+thumbs_label=Vinhetas
+findbar.title=Cercar dins lo document
+findbar_label=Recercar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vinheta de la pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Recercar
+find_input.placeholder=Cercar dins lo document…
+find_previous.title=Tròba l'ocurréncia precedenta de la frasa
+find_previous_label=Precedent
+find_next.title=Tròba l'ocurréncia venenta de la frasa
+find_next_label=Seguent
+find_highlight=Suslinhar tot
+find_match_case_label=Respectar la cassa
+find_entire_word_label=Mots entièrs
+find_reached_top=Naut de la pagina atenh, perseguida del bas
+find_reached_bottom=Bas de la pagina atench, perseguida al començament
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Occuréncia {{current}} sus {{total}}
+find_match_count[two]=Occuréncia {{current}} sus {{total}}
+find_match_count[few]=Occuréncia {{current}} sus {{total}}
+find_match_count[many]=Occuréncia {{current}} sus {{total}}
+find_match_count[other]=Occuréncia {{current}} sus {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mai de {{limit}} occuréncias
+find_match_count_limit[one]=Mai de {{limit}} occuréncia
+find_match_count_limit[two]=Mai de {{limit}} occuréncias
+find_match_count_limit[few]=Mai de {{limit}} occuréncias
+find_match_count_limit[many]=Mai de {{limit}} occuréncias
+find_match_count_limit[other]=Mai de {{limit}} occuréncias
+find_not_found=Frasa pas trobada
+
+# Error panel labels
+error_more_info=Mai de detalhs
+error_less_info=Mens d'informacions
+error_close=Tampar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (identificant de compilacion : {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Messatge : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichièr : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha : {{line}}
+rendering_error=Una error s'es produita pendent l'afichatge de la pagina.
+
+# Predefined zoom values
+page_scale_width=Largor plena
+page_scale_fit=Pagina entièra
+page_scale_auto=Zoom automatic
+page_scale_actual=Talha vertadièra
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Una error s'es produita pendent lo cargament del fichièr PDF.
+invalid_file_error=Fichièr PDF invalid o corromput.
+missing_file_error=Fichièr PDF mancant.
+unexpected_response_error=Responsa de servidor imprevista.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} a {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotacion {{type}}]
+password_label=Picatz lo senhal per dobrir aqueste fichièr PDF.
+password_invalid=Senhal incorrècte. Tornatz ensajar.
+password_ok=D'acòrdi
+password_cancel=Anullar
+
+printing_not_supported=Atencion : l'impression es pas completament gerida per aqueste navegador.
+printing_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir.
+web_fonts_disabled=Las poliças web son desactivadas : impossible d'utilizar las poliças integradas al PDF.
+document_colors_not_allowed=Los documents PDF pòdon pas utilizar lors pròprias colors : « Autorizar las paginas web d'utilizar lors pròprias colors » es desactivat dins lo navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pa-IN/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pa-IN/viewer.properties
index e1ccb654190cd918a541d3e0efa192e8e03e4a12..195abed33b41e96ebfa36d35620f29b35371116a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pa-IN/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pa-IN/viewer.properties
@@ -1,246 +1,246 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=ਪਿਛਲਾ ਸਫ਼ਾ
-previous_label=ਪਿੱਛੇ
-next.title=ਅਗਲਾ ਸਫ਼ਾ
-next_label=ਅੱਗੇ
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=ਸਫ਼ਾ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} ਵਿੱਚੋਂ
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}}
-
-zoom_out.title=ਜ਼ੂਮ ਆਉਟ
-zoom_out_label=ਜ਼ੂਮ ਆਉਟ
-zoom_in.title=ਜ਼ੂਮ ਇਨ
-zoom_in_label=ਜ਼ੂਮ ਇਨ
-zoom.title=ਜ਼ੂਨ
-presentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ
-presentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ
-open_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ
-open_file_label=ਖੋਲ੍ਹੋ
-print.title=ਪਰਿੰਟ
-print_label=ਪਰਿੰਟ
-download.title=ਡਾਊਨਲੋਡ
-download_label=ਡਾਊਨਲੋਡ
-bookmark.title=ਮੌਜੂਦਾ ਝਲਕ (ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਕਾਪੀ ਕਰੋ ਜਾਂ ਖੋਲ੍ਹੋ)
-bookmark_label=ਮੌਜੂਦਾ ਝਲਕ
-
-# Secondary toolbar and context menu
-tools.title=ਟੂਲ
-tools_label=ਟੂਲ
-first_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
-first_page.label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
-first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
-last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
-last_page.label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
-last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
-page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ
-page_rotate_cw.label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਉ
-page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ
-page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ
-page_rotate_ccw.label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਉ
-page_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ
-
-cursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
-cursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ
-cursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
-cursor_hand_tool_label=ਹੱਥ ਟੂਲ
-
-scroll_vertical.title=ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ
-scroll_vertical_label=ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ
-scroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
-scroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ
-scroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
-scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ
-
-spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ
-spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ
-spread_odd.title=ਅਜੀਬ-ਨੰਬਰ ਵਾਲੇ ਪੰਨਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਪੰਨੇ ਸਪਰਸ਼ਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
-spread_even.title=ਜਿਸਤ ਨੰਬਰ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
-
-# Document properties dialog box
-document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
-document_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
-document_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ:
-document_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ)
-document_properties_title=ਟਾਈਟਲ:
-document_properties_author=ਲੇਖਕ:
-document_properties_subject=ਵਿਸ਼ਾ:
-document_properties_keywords=ਸ਼ਬਦ:
-document_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ:
-document_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=ਨਿਰਮਾਤਾ:
-document_properties_producer=PDF ਪ੍ਰੋਡਿਊਸਰ:
-document_properties_version=PDF ਵਰਜਨ:
-document_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ:
-document_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ:
-document_properties_page_size_unit_inches=ਇੰਚ
-document_properties_page_size_unit_millimeters=ਮਿਮੀ
-document_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ
-document_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=ਲੈਟਰ
-document_properties_page_size_name_legal=ਕਨੂੰਨੀ
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=ਤੇਜ਼ ਵੈੱਬ ਝਲਕ:
-document_properties_linearized_yes=ਹਾਂ
-document_properties_linearized_no=ਨਹੀਂ
-document_properties_close=ਬੰਦ ਕਰੋ
-
-print_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=ਰੱਦ ਕਰੋ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ
-toggle_sidebar_notification.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟਾਂ ਰੱਖਦਾ ਹੈ)
-toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ
-document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
-document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ
-attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ
-attachments_label=ਅਟੈਚਮੈਂਟਾਂ
-thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ
-thumbs_label=ਥੰਮਨੇਲ
-findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ
-findbar_label=ਲੱਭੋ
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=ਸਫ਼ਾ {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=ਸਫ਼ਾ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ
-
-# Find panel button title and messages
-find_input.title=ਲੱਭੋ
-find_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ
-find_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ
-find_previous_label=ਪਿੱਛੇ
-find_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ
-find_next_label=ਅੱਗੇ
-find_highlight=ਸਭ ਉਭਾਰੋ
-find_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ
-find_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ
-find_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
-find_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
-find_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
-find_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
-find_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
-find_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
-find_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ
-find_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
-find_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
-find_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
-find_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
-find_not_found=ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ
-
-# Error panel labels
-error_more_info=ਹੋਰ ਜਾਣਕਾਰੀ
-error_less_info=ਘੱਟ ਜਾਣਕਾਰੀ
-error_close=ਬੰਦ ਕਰੋ
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (ਬਿਲਡ: {{build}}
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=ਸੁਨੇਹਾ: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=ਸਟੈਕ: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ਫਾਈਲ: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=ਲਾਈਨ: {{line}}
-rendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
-
-# Predefined zoom values
-page_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ
-page_scale_fit=ਸਫ਼ਾ ਫਿੱਟ
-page_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ
-page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=ਗਲਤੀ
-loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
-invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ।
-missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ।
-unexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ।
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ]
-password_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ।
-password_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।
-password_ok=ਠੀਕ ਹੈ
-password_cancel=ਰੱਦ ਕਰੋ
-
-printing_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।
-printing_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ।
-web_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।
-document_colors_not_allowed=PDF ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਆਪਣੇ ਰੰਗ ਵਰਤਣ ਦੀ ਇਜ਼ਾਜ਼ਤ ਨਹੀਂ ਹੈ।: ਬਰਾਊਜ਼ਰ ਵਿੱਚ “ਸਫ਼ਿਆਂ ਨੂੰ ਆਪਣੇ ਰੰਗ ਚੁਣਨ ਦੀ ਇਜ਼ਾਜ਼ਤ ਦਿਓ” ਨਾ-ਸਰਗਰਮ ਹੈ।
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ਪਿਛਲਾ ਸਫ਼ਾ
+previous_label=ਪਿੱਛੇ
+next.title=ਅਗਲਾ ਸਫ਼ਾ
+next_label=ਅੱਗੇ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ਸਫ਼ਾ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ਵਿੱਚੋਂ
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}}
+
+zoom_out.title=ਜ਼ੂਮ ਆਉਟ
+zoom_out_label=ਜ਼ੂਮ ਆਉਟ
+zoom_in.title=ਜ਼ੂਮ ਇਨ
+zoom_in_label=ਜ਼ੂਮ ਇਨ
+zoom.title=ਜ਼ੂਨ
+presentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ
+presentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ
+open_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ
+open_file_label=ਖੋਲ੍ਹੋ
+print.title=ਪਰਿੰਟ
+print_label=ਪਰਿੰਟ
+download.title=ਡਾਊਨਲੋਡ
+download_label=ਡਾਊਨਲੋਡ
+bookmark.title=ਮੌਜੂਦਾ ਝਲਕ (ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਕਾਪੀ ਕਰੋ ਜਾਂ ਖੋਲ੍ਹੋ)
+bookmark_label=ਮੌਜੂਦਾ ਝਲਕ
+
+# Secondary toolbar and context menu
+tools.title=ਟੂਲ
+tools_label=ਟੂਲ
+first_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+first_page.label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page.label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ
+page_rotate_cw.label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਉ
+page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ
+page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ
+page_rotate_ccw.label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਉ
+page_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ
+
+cursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
+cursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ
+cursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
+cursor_hand_tool_label=ਹੱਥ ਟੂਲ
+
+scroll_vertical.title=ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_vertical_label=ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ
+scroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ
+scroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ
+
+spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ
+spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ
+spread_odd.title=ਅਜੀਬ-ਨੰਬਰ ਵਾਲੇ ਪੰਨਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਪੰਨੇ ਸਪਰਸ਼ਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+spread_even.title=ਜਿਸਤ ਨੰਬਰ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+
+# Document properties dialog box
+document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
+document_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
+document_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ:
+document_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ)
+document_properties_title=ਟਾਈਟਲ:
+document_properties_author=ਲੇਖਕ:
+document_properties_subject=ਵਿਸ਼ਾ:
+document_properties_keywords=ਸ਼ਬਦ:
+document_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ:
+document_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ਨਿਰਮਾਤਾ:
+document_properties_producer=PDF ਪ੍ਰੋਡਿਊਸਰ:
+document_properties_version=PDF ਵਰਜਨ:
+document_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ:
+document_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ:
+document_properties_page_size_unit_inches=ਇੰਚ
+document_properties_page_size_unit_millimeters=ਮਿਮੀ
+document_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ
+document_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ਲੈਟਰ
+document_properties_page_size_name_legal=ਕਨੂੰਨੀ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ਤੇਜ਼ ਵੈੱਬ ਝਲਕ:
+document_properties_linearized_yes=ਹਾਂ
+document_properties_linearized_no=ਨਹੀਂ
+document_properties_close=ਬੰਦ ਕਰੋ
+
+print_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ਰੱਦ ਕਰੋ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ
+toggle_sidebar_notification.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟਾਂ ਰੱਖਦਾ ਹੈ)
+toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ
+document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
+document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ
+attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ
+attachments_label=ਅਟੈਚਮੈਂਟਾਂ
+thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ
+thumbs_label=ਥੰਮਨੇਲ
+findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ
+findbar_label=ਲੱਭੋ
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=ਸਫ਼ਾ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ਸਫ਼ਾ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ
+
+# Find panel button title and messages
+find_input.title=ਲੱਭੋ
+find_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ
+find_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ
+find_previous_label=ਪਿੱਛੇ
+find_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ
+find_next_label=ਅੱਗੇ
+find_highlight=ਸਭ ਉਭਾਰੋ
+find_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ
+find_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ
+find_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
+find_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ
+find_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_not_found=ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ
+
+# Error panel labels
+error_more_info=ਹੋਰ ਜਾਣਕਾਰੀ
+error_less_info=ਘੱਟ ਜਾਣਕਾਰੀ
+error_close=ਬੰਦ ਕਰੋ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ਬਿਲਡ: {{build}}
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ਸੁਨੇਹਾ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ਸਟੈਕ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ਫਾਈਲ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ਲਾਈਨ: {{line}}
+rendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
+
+# Predefined zoom values
+page_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ
+page_scale_fit=ਸਫ਼ਾ ਫਿੱਟ
+page_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ
+page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ਗਲਤੀ
+loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
+invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ।
+missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ।
+unexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ]
+password_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ।
+password_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।
+password_ok=ਠੀਕ ਹੈ
+password_cancel=ਰੱਦ ਕਰੋ
+
+printing_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।
+printing_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ।
+web_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।
+document_colors_not_allowed=PDF ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਆਪਣੇ ਰੰਗ ਵਰਤਣ ਦੀ ਇਜ਼ਾਜ਼ਤ ਨਹੀਂ ਹੈ।: ਬਰਾਊਜ਼ਰ ਵਿੱਚ “ਸਫ਼ਿਆਂ ਨੂੰ ਆਪਣੇ ਰੰਗ ਚੁਣਨ ਦੀ ਇਜ਼ਾਜ਼ਤ ਦਿਓ” ਨਾ-ਸਰਗਰਮ ਹੈ।
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pl/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pl/viewer.properties
index c18ea5ed833868e9fc778288c4c430f234147bcf..134e96aa31326309d3496b0431df8628b024a7cd 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pl/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pl/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Poprzednia strona
-previous_label=Poprzednia
-next.title=Następna strona
-next_label=Następna
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Strona
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=z {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} z {{pagesCount}})
-
-zoom_out.title=Pomniejsz
-zoom_out_label=Pomniejsz
-zoom_in.title=Powiększ
-zoom_in_label=Powiększ
-zoom.title=Skala
-presentation_mode.title=Przełącz na tryb prezentacji
-presentation_mode_label=Tryb prezentacji
-open_file.title=Otwórz plik
-open_file_label=Otwórz
-print.title=Drukuj
-print_label=Drukuj
-download.title=Pobierz
-download_label=Pobierz
-bookmark.title=Bieżąca pozycja (skopiuj lub otwórz jako odnośnik w nowym oknie)
-bookmark_label=Bieżąca pozycja
-
-# Secondary toolbar and context menu
-tools.title=Narzędzia
-tools_label=Narzędzia
-first_page.title=Przejdź do pierwszej strony
-first_page.label=Przejdź do pierwszej strony
-first_page_label=Przejdź do pierwszej strony
-last_page.title=Przejdź do ostatniej strony
-last_page.label=Przejdź do ostatniej strony
-last_page_label=Przejdź do ostatniej strony
-page_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara
-page_rotate_cw.label=Obróć zgodnie z ruchem wskazówek zegara
-page_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara
-page_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara
-page_rotate_ccw.label=Obróć przeciwnie do ruchu wskazówek zegara
-page_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara
-
-cursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu
-cursor_text_select_tool_label=Narzędzie zaznaczania tekstu
-cursor_hand_tool.title=Włącz narzędzie rączka
-cursor_hand_tool_label=Narzędzie rączka
-
-scroll_vertical.title=Przewijaj dokument w pionie
-scroll_vertical_label=Przewijanie pionowe
-scroll_horizontal.title=Przewijaj dokument w poziomie
-scroll_horizontal_label=Przewijanie poziome
-scroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach
-scroll_wrapped_label=Widok dwóch stron
-
-spread_none.title=Nie ustawiaj stron obok siebie
-spread_none_label=Brak kolumn
-spread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych
-spread_odd_label=Nieparzyste po lewej
-spread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych
-spread_even_label=Parzyste po lewej
-
-# Document properties dialog box
-document_properties.title=Właściwości dokumentu…
-document_properties_label=Właściwości dokumentu…
-document_properties_file_name=Nazwa pliku:
-document_properties_file_size=Rozmiar pliku:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} B)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} B)
-document_properties_title=Tytuł:
-document_properties_author=Autor:
-document_properties_subject=Temat:
-document_properties_keywords=Słowa kluczowe:
-document_properties_creation_date=Data utworzenia:
-document_properties_modification_date=Data modyfikacji:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Utworzony przez:
-document_properties_producer=PDF wyprodukowany przez:
-document_properties_version=Wersja PDF:
-document_properties_page_count=Liczba stron:
-document_properties_page_size=Wymiary strony:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=pionowa
-document_properties_page_size_orientation_landscape=pozioma
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=US Letter
-document_properties_page_size_name_legal=US Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Szybki podgląd w Internecie:
-document_properties_linearized_yes=tak
-document_properties_linearized_no=nie
-document_properties_close=Zamknij
-
-print_progress_message=Przygotowywanie dokumentu do druku…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Anuluj
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Przełącz panel boczny
-toggle_sidebar_notification.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki)
-toggle_sidebar_label=Przełącz panel boczny
-document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje)
-document_outline_label=Konspekt dokumentu
-attachments.title=Załączniki
-attachments_label=Załączniki
-thumbs.title=Miniatury
-thumbs_label=Miniatury
-findbar.title=Znajdź w dokumencie
-findbar_label=Znajdź
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas={{page}}. strona
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}}. strona
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura {{page}}. strony
-
-# Find panel button title and messages
-find_input.title=Znajdź
-find_input.placeholder=Znajdź w dokumencie…
-find_previous.title=Znajdź poprzednie wystąpienie tekstu
-find_previous_label=Poprzednie
-find_next.title=Znajdź następne wystąpienie tekstu
-find_next_label=Następne
-find_highlight=Wyróżnianie wszystkich
-find_match_case_label=Rozróżnianie wielkości liter
-find_entire_word_label=Całe słowa
-find_reached_top=Początek dokumentu. Wyszukiwanie od końca.
-find_reached_bottom=Koniec dokumentu. Wyszukiwanie od początku.
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=Pierwsze z {{total}} trafień
-find_match_count[two]=Drugie z {{total}} trafień
-find_match_count[few]={{current}}. z {{total}} trafień
-find_match_count[many]={{current}}. z {{total}} trafień
-find_match_count[other]={{current}}. z {{total}} trafień
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Brak trafień.
-find_match_count_limit[one]=Więcej niż jedno trafienie.
-find_match_count_limit[two]=Więcej niż dwa trafienia.
-find_match_count_limit[few]=Więcej niż {{limit}} trafienia.
-find_match_count_limit[many]=Więcej niż {{limit}} trafień.
-find_match_count_limit[other]=Więcej niż {{limit}} trafień.
-find_not_found=Nie znaleziono tekstu
-
-# Error panel labels
-error_more_info=Więcej informacji
-error_less_info=Mniej informacji
-error_close=Zamknij
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (kompilacja: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Komunikat: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stos: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Plik: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Wiersz: {{line}}
-rendering_error=Podczas renderowania strony wystąpił błąd.
-
-# Predefined zoom values
-page_scale_width=Szerokość strony
-page_scale_fit=Dopasowanie strony
-page_scale_auto=Skala automatyczna
-page_scale_actual=Rozmiar oryginalny
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Błąd
-loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd.
-invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF.
-missing_file_error=Brak pliku PDF.
-unexpected_response_error=Nieoczekiwana odpowiedź serwera.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Adnotacja: {{type}}]
-password_label=Wprowadź hasło, aby otworzyć ten dokument PDF.
-password_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie.
-password_ok=OK
-password_cancel=Anuluj
-
-printing_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę.
-printing_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować.
-web_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF.
-document_colors_not_allowed=Dokumenty PDF nie mogą używać własnych kolorów: opcja „Pozwalaj stronom stosować inne kolory” w przeglądarce jest nieaktywna.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Poprzednia strona
+previous_label=Poprzednia
+next.title=Następna strona
+next_label=Następna
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strona
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pomniejsz
+zoom_out_label=Pomniejsz
+zoom_in.title=Powiększ
+zoom_in_label=Powiększ
+zoom.title=Skala
+presentation_mode.title=Przełącz na tryb prezentacji
+presentation_mode_label=Tryb prezentacji
+open_file.title=Otwórz plik
+open_file_label=Otwórz
+print.title=Drukuj
+print_label=Drukuj
+download.title=Pobierz
+download_label=Pobierz
+bookmark.title=Bieżąca pozycja (skopiuj lub otwórz jako odnośnik w nowym oknie)
+bookmark_label=Bieżąca pozycja
+
+# Secondary toolbar and context menu
+tools.title=Narzędzia
+tools_label=Narzędzia
+first_page.title=Przejdź do pierwszej strony
+first_page.label=Przejdź do pierwszej strony
+first_page_label=Przejdź do pierwszej strony
+last_page.title=Przejdź do ostatniej strony
+last_page.label=Przejdź do ostatniej strony
+last_page_label=Przejdź do ostatniej strony
+page_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_cw.label=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara
+page_rotate_ccw.label=Obróć przeciwnie do ruchu wskazówek zegara
+page_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara
+
+cursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu
+cursor_text_select_tool_label=Narzędzie zaznaczania tekstu
+cursor_hand_tool.title=Włącz narzędzie rączka
+cursor_hand_tool_label=Narzędzie rączka
+
+scroll_vertical.title=Przewijaj dokument w pionie
+scroll_vertical_label=Przewijanie pionowe
+scroll_horizontal.title=Przewijaj dokument w poziomie
+scroll_horizontal_label=Przewijanie poziome
+scroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach
+scroll_wrapped_label=Widok dwóch stron
+
+spread_none.title=Nie ustawiaj stron obok siebie
+spread_none_label=Brak kolumn
+spread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych
+spread_odd_label=Nieparzyste po lewej
+spread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych
+spread_even_label=Parzyste po lewej
+
+# Document properties dialog box
+document_properties.title=Właściwości dokumentu…
+document_properties_label=Właściwości dokumentu…
+document_properties_file_name=Nazwa pliku:
+document_properties_file_size=Rozmiar pliku:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Tytuł:
+document_properties_author=Autor:
+document_properties_subject=Temat:
+document_properties_keywords=Słowa kluczowe:
+document_properties_creation_date=Data utworzenia:
+document_properties_modification_date=Data modyfikacji:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Utworzony przez:
+document_properties_producer=PDF wyprodukowany przez:
+document_properties_version=Wersja PDF:
+document_properties_page_count=Liczba stron:
+document_properties_page_size=Wymiary strony:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pionowa
+document_properties_page_size_orientation_landscape=pozioma
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=US Letter
+document_properties_page_size_name_legal=US Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Szybki podgląd w Internecie:
+document_properties_linearized_yes=tak
+document_properties_linearized_no=nie
+document_properties_close=Zamknij
+
+print_progress_message=Przygotowywanie dokumentu do druku…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anuluj
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Przełącz panel boczny
+toggle_sidebar_notification.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki)
+toggle_sidebar_label=Przełącz panel boczny
+document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje)
+document_outline_label=Konspekt dokumentu
+attachments.title=Załączniki
+attachments_label=Załączniki
+thumbs.title=Miniatury
+thumbs_label=Miniatury
+findbar.title=Znajdź w dokumencie
+findbar_label=Znajdź
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}}. strona
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. strona
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura {{page}}. strony
+
+# Find panel button title and messages
+find_input.title=Znajdź
+find_input.placeholder=Znajdź w dokumencie…
+find_previous.title=Znajdź poprzednie wystąpienie tekstu
+find_previous_label=Poprzednie
+find_next.title=Znajdź następne wystąpienie tekstu
+find_next_label=Następne
+find_highlight=Wyróżnianie wszystkich
+find_match_case_label=Rozróżnianie wielkości liter
+find_entire_word_label=Całe słowa
+find_reached_top=Początek dokumentu. Wyszukiwanie od końca.
+find_reached_bottom=Koniec dokumentu. Wyszukiwanie od początku.
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Pierwsze z {{total}} trafień
+find_match_count[two]=Drugie z {{total}} trafień
+find_match_count[few]={{current}}. z {{total}} trafień
+find_match_count[many]={{current}}. z {{total}} trafień
+find_match_count[other]={{current}}. z {{total}} trafień
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Brak trafień.
+find_match_count_limit[one]=Więcej niż jedno trafienie.
+find_match_count_limit[two]=Więcej niż dwa trafienia.
+find_match_count_limit[few]=Więcej niż {{limit}} trafienia.
+find_match_count_limit[many]=Więcej niż {{limit}} trafień.
+find_match_count_limit[other]=Więcej niż {{limit}} trafień.
+find_not_found=Nie znaleziono tekstu
+
+# Error panel labels
+error_more_info=Więcej informacji
+error_less_info=Mniej informacji
+error_close=Zamknij
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (kompilacja: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Komunikat: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stos: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Plik: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Wiersz: {{line}}
+rendering_error=Podczas renderowania strony wystąpił błąd.
+
+# Predefined zoom values
+page_scale_width=Szerokość strony
+page_scale_fit=Dopasowanie strony
+page_scale_auto=Skala automatyczna
+page_scale_actual=Rozmiar oryginalny
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Błąd
+loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd.
+invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF.
+missing_file_error=Brak pliku PDF.
+unexpected_response_error=Nieoczekiwana odpowiedź serwera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Adnotacja: {{type}}]
+password_label=Wprowadź hasło, aby otworzyć ten dokument PDF.
+password_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie.
+password_ok=OK
+password_cancel=Anuluj
+
+printing_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę.
+printing_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować.
+web_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF.
+document_colors_not_allowed=Dokumenty PDF nie mogą używać własnych kolorów: opcja „Pozwalaj stronom stosować inne kolory” w przeglądarce jest nieaktywna.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-BR/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-BR/viewer.properties
index 5947d2d43b6bdfe7df3a92de90ac9e98deb7927f..5444d96d8ed13046deace384c04dc41d22e95685 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-BR/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-BR/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Página anterior
-previous_label=Anterior
-next.title=Próxima página
-next_label=Próxima
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Página
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Reduzir
-zoom_out_label=Reduzir
-zoom_in.title=Ampliar
-zoom_in_label=Ampliar
-zoom.title=Zoom
-presentation_mode.title=Alternar para o modo de apresentação
-presentation_mode_label=Modo de apresentação
-open_file.title=Abrir arquivo
-open_file_label=Abrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Download
-download_label=Download
-bookmark.title=Visualização atual (copiar ou abrir em uma nova janela)
-bookmark_label=Visualização atual
-
-# Secondary toolbar and context menu
-tools.title=Ferramentas
-tools_label=Ferramentas
-first_page.title=Ir para a primeira página
-first_page.label=Ir para a primeira página
-first_page_label=Ir para a primeira página
-last_page.title=Ir para a última página
-last_page.label=Ir para a última página
-last_page_label=Ir para a última página
-page_rotate_cw.title=Girar no sentido horário
-page_rotate_cw.label=Girar no sentido horário
-page_rotate_cw_label=Girar no sentido horário
-page_rotate_ccw.title=Girar no sentido anti-horário
-page_rotate_ccw.label=Girar no sentido anti-horário
-page_rotate_ccw_label=Girar no sentido anti-horário
-
-cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto
-cursor_text_select_tool_label=Ferramenta de seleção de texto
-cursor_hand_tool.title=Ativar ferramenta de mão
-cursor_hand_tool_label=Ferramenta de mão
-
-scroll_vertical.title=Usar rolagem vertical
-scroll_vertical_label=Rolagem vertical
-scroll_horizontal.title=Usar rolagem horizontal
-scroll_horizontal_label=Rolagem horizontal
-scroll_wrapped.title=Usar rolagem contida
-scroll_wrapped_label=Rolagem contida
-
-spread_none.title=Não reagrupar páginas
-spread_none_label=Não estender
-spread_odd.title=Agrupar páginas começando em páginas com números ímpares
-spread_odd_label=Estender ímpares
-spread_even.title=Agrupar páginas começando em páginas com números pares
-spread_even_label=Estender pares
-
-# Document properties dialog box
-document_properties.title=Propriedades do documento…
-document_properties_label=Propriedades do documento…
-document_properties_file_name=Nome do arquivo:
-document_properties_file_size=Tamanho do arquivo:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Título:
-document_properties_author=Autor:
-document_properties_subject=Assunto:
-document_properties_keywords=Palavras-chave:
-document_properties_creation_date=Data da criação:
-document_properties_modification_date=Data da modificação:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Criação:
-document_properties_producer=Criador do PDF:
-document_properties_version=Versão do PDF:
-document_properties_page_count=Número de páginas:
-document_properties_page_size=Tamanho da página:
-document_properties_page_size_unit_inches=pol.
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=retrato
-document_properties_page_size_orientation_landscape=paisagem
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Jurídico
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Visualização rápida da Web:
-document_properties_linearized_yes=Sim
-document_properties_linearized_no=Não
-document_properties_close=Fechar
-
-print_progress_message=Preparando documento para impressão…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}} %
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Alternar painel
-toggle_sidebar_notification.title=Alternar o painel (documento contém marcadores e anexos)
-toggle_sidebar_label=Alternar painel
-document_outline.title=Mostrar a estrutura do documento (duplo-clique para expandir/recolher todos os ítens)
-document_outline_label=Estrutura do documento
-attachments.title=Mostrar anexos
-attachments_label=Anexos
-thumbs.title=Mostrar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Procurar no documento
-findbar_label=Procurar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Página {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Página {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura da página {{page}}
-
-# Find panel button title and messages
-find_input.title=Procurar
-find_input.placeholder=Procurar no documento…
-find_previous.title=Procurar a ocorrência anterior da frase
-find_previous_label=Anterior
-find_next.title=Procurar a próxima ocorrência da frase
-find_next_label=Próxima
-find_highlight=Realçar tudo
-find_match_case_label=Diferenciar maiúsculas/minúsculas
-find_entire_word_label=Palavras completas
-find_reached_top=Início do documento alcançado, continuando do fim
-find_reached_bottom=Fim do documento alcançado, continuando do início
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} ocorrência
-find_match_count[two]={{current}} de {{total}} ocorrências
-find_match_count[few]={{current}} de {{total}} ocorrências
-find_match_count[many]={{current}} de {{total}} ocorrências
-find_match_count[other]={{current}} de {{total}} ocorrências
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mais de {{limit}} ocorrências
-find_match_count_limit[one]=Mais de {{limit}} ocorrência
-find_match_count_limit[two]=Mais de {{limit}} ocorrências
-find_match_count_limit[few]=Mais de {{limit}} ocorrências
-find_match_count_limit[many]=Mais de {{limit}} ocorrências
-find_match_count_limit[other]=Mais de {{limit}} ocorrências
-find_not_found=Frase não encontrada
-
-# Error panel labels
-error_more_info=Mais informações
-error_less_info=Menos informações
-error_close=Fechar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (compilação: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensagem: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Pilha: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Arquivo: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linha: {{line}}
-rendering_error=Ocorreu um erro ao renderizar a página.
-
-# Predefined zoom values
-page_scale_width=Largura da página
-page_scale_fit=Ajustar à janela
-page_scale_auto=Zoom automático
-page_scale_actual=Tamanho real
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Erro
-loading_error=Ocorreu um erro ao carregar o PDF.
-invalid_file_error=Arquivo PDF corrompido ou inválido.
-missing_file_error=Arquivo PDF ausente.
-unexpected_response_error=Resposta inesperada do servidor.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotação {{type}}]
-password_label=Forneça a senha para abrir este arquivo PDF.
-password_invalid=Senha inválida. Tente novamente.
-password_ok=OK
-password_cancel=Cancelar
-
-printing_not_supported=Aviso: a impressão não é totalmente suportada neste navegador.
-printing_not_ready=Aviso: o PDF não está totalmente carregado para impressão.
-web_fonts_disabled=As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF.
-document_colors_not_allowed=Documentos PDF não estão autorizados a usar as próprias cores: a opção “Permitir que as páginas escolham suas próprias cores” está desativada no navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Próxima página
+next_label=Próxima
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reduzir
+zoom_out_label=Reduzir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Alternar para o modo de apresentação
+presentation_mode_label=Modo de apresentação
+open_file.title=Abrir arquivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Download
+download_label=Download
+bookmark.title=Visualização atual (copiar ou abrir em uma nova janela)
+bookmark_label=Visualização atual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir para a primeira página
+first_page.label=Ir para a primeira página
+first_page_label=Ir para a primeira página
+last_page.title=Ir para a última página
+last_page.label=Ir para a última página
+last_page_label=Ir para a última página
+page_rotate_cw.title=Girar no sentido horário
+page_rotate_cw.label=Girar no sentido horário
+page_rotate_cw_label=Girar no sentido horário
+page_rotate_ccw.title=Girar no sentido anti-horário
+page_rotate_ccw.label=Girar no sentido anti-horário
+page_rotate_ccw_label=Girar no sentido anti-horário
+
+cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto
+cursor_text_select_tool_label=Ferramenta de seleção de texto
+cursor_hand_tool.title=Ativar ferramenta de mão
+cursor_hand_tool_label=Ferramenta de mão
+
+scroll_vertical.title=Usar rolagem vertical
+scroll_vertical_label=Rolagem vertical
+scroll_horizontal.title=Usar rolagem horizontal
+scroll_horizontal_label=Rolagem horizontal
+scroll_wrapped.title=Usar rolagem contida
+scroll_wrapped_label=Rolagem contida
+
+spread_none.title=Não reagrupar páginas
+spread_none_label=Não estender
+spread_odd.title=Agrupar páginas começando em páginas com números ímpares
+spread_odd_label=Estender ímpares
+spread_even.title=Agrupar páginas começando em páginas com números pares
+spread_even_label=Estender pares
+
+# Document properties dialog box
+document_properties.title=Propriedades do documento…
+document_properties_label=Propriedades do documento…
+document_properties_file_name=Nome do arquivo:
+document_properties_file_size=Tamanho do arquivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Assunto:
+document_properties_keywords=Palavras-chave:
+document_properties_creation_date=Data da criação:
+document_properties_modification_date=Data da modificação:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Criação:
+document_properties_producer=Criador do PDF:
+document_properties_version=Versão do PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamanho da página:
+document_properties_page_size_unit_inches=pol.
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrato
+document_properties_page_size_orientation_landscape=paisagem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Jurídico
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Visualização rápida da Web:
+document_properties_linearized_yes=Sim
+document_properties_linearized_no=Não
+document_properties_close=Fechar
+
+print_progress_message=Preparando documento para impressão…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar painel
+toggle_sidebar_notification.title=Alternar o painel (documento contém marcadores e anexos)
+toggle_sidebar_label=Alternar painel
+document_outline.title=Mostrar a estrutura do documento (duplo-clique para expandir/recolher todos os ítens)
+document_outline_label=Estrutura do documento
+attachments.title=Mostrar anexos
+attachments_label=Anexos
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Procurar no documento
+findbar_label=Procurar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da página {{page}}
+
+# Find panel button title and messages
+find_input.title=Procurar
+find_input.placeholder=Procurar no documento…
+find_previous.title=Procurar a ocorrência anterior da frase
+find_previous_label=Anterior
+find_next.title=Procurar a próxima ocorrência da frase
+find_next_label=Próxima
+find_highlight=Realçar tudo
+find_match_case_label=Diferenciar maiúsculas/minúsculas
+find_entire_word_label=Palavras completas
+find_reached_top=Início do documento alcançado, continuando do fim
+find_reached_bottom=Fim do documento alcançado, continuando do início
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} ocorrência
+find_match_count[two]={{current}} de {{total}} ocorrências
+find_match_count[few]={{current}} de {{total}} ocorrências
+find_match_count[many]={{current}} de {{total}} ocorrências
+find_match_count[other]={{current}} de {{total}} ocorrências
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mais de {{limit}} ocorrências
+find_match_count_limit[one]=Mais de {{limit}} ocorrência
+find_match_count_limit[two]=Mais de {{limit}} ocorrências
+find_match_count_limit[few]=Mais de {{limit}} ocorrências
+find_match_count_limit[many]=Mais de {{limit}} ocorrências
+find_match_count_limit[other]=Mais de {{limit}} ocorrências
+find_not_found=Frase não encontrada
+
+# Error panel labels
+error_more_info=Mais informações
+error_less_info=Menos informações
+error_close=Fechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilação: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensagem: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pilha: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Arquivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha: {{line}}
+rendering_error=Ocorreu um erro ao renderizar a página.
+
+# Predefined zoom values
+page_scale_width=Largura da página
+page_scale_fit=Ajustar à janela
+page_scale_auto=Zoom automático
+page_scale_actual=Tamanho real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erro
+loading_error=Ocorreu um erro ao carregar o PDF.
+invalid_file_error=Arquivo PDF corrompido ou inválido.
+missing_file_error=Arquivo PDF ausente.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotação {{type}}]
+password_label=Forneça a senha para abrir este arquivo PDF.
+password_invalid=Senha inválida. Tente novamente.
+password_ok=OK
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: a impressão não é totalmente suportada neste navegador.
+printing_not_ready=Aviso: o PDF não está totalmente carregado para impressão.
+web_fonts_disabled=As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF.
+document_colors_not_allowed=Documentos PDF não estão autorizados a usar as próprias cores: a opção “Permitir que as páginas escolham suas próprias cores” está desativada no navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-PT/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-PT/viewer.properties
index 5129a522613546749a866f8b9310fbe413b2f626..5a7b2b5284eb7bba07ce749ae3b61c2b9e95a7e2 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-PT/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/pt-PT/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Página anterior
-previous_label=Anterior
-next.title=Página seguinte
-next_label=Seguinte
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Página
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=de {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} de {{pagesCount}})
-
-zoom_out.title=Reduzir
-zoom_out_label=Reduzir
-zoom_in.title=Ampliar
-zoom_in_label=Ampliar
-zoom.title=Zoom
-presentation_mode.title=Trocar para o modo de apresentação
-presentation_mode_label=Modo de apresentação
-open_file.title=Abrir ficheiro
-open_file_label=Abrir
-print.title=Imprimir
-print_label=Imprimir
-download.title=Transferir
-download_label=Transferir
-bookmark.title=Vista atual (copiar ou abrir numa nova janela)
-bookmark_label=Visão atual
-
-# Secondary toolbar and context menu
-tools.title=Ferramentas
-tools_label=Ferramentas
-first_page.title=Ir para a primeira página
-first_page.label=Ir para a primeira página
-first_page_label=Ir para a primeira página
-last_page.title=Ir para a última página
-last_page.label=Ir para a última página
-last_page_label=Ir para a última página
-page_rotate_cw.title=Rodar à direita
-page_rotate_cw.label=Rodar à direita
-page_rotate_cw_label=Rodar à direita
-page_rotate_ccw.title=Rodar à esquerda
-page_rotate_ccw.label=Rodar à esquerda
-page_rotate_ccw_label=Rodar à esquerda
-
-cursor_text_select_tool.title=Ativar ferramenta de seleção de texto
-cursor_text_select_tool_label=Ferramenta de seleção de texto
-cursor_hand_tool.title=Ativar ferramenta de mão
-cursor_hand_tool_label=Ferramenta de mão
-
-scroll_vertical.title=Utilizar deslocação vertical
-scroll_vertical_label=Deslocação vertical
-scroll_horizontal.title=Utilizar deslocação horizontal
-scroll_horizontal_label=Deslocação horizontal
-scroll_wrapped.title=Utilizar deslocação encapsulada
-scroll_wrapped_label=Deslocação encapsulada
-
-spread_none.title=Não juntar páginas dispersas
-spread_none_label=Sem spreads
-spread_odd.title=Juntar páginas dispersas a partir de páginas com números ímpares
-spread_odd_label=Spreads ímpares
-spread_even.title=Juntar páginas dispersas a partir de páginas com números pares
-spread_even_label=Spreads pares
-
-# Document properties dialog box
-document_properties.title=Propriedades do documento…
-document_properties_label=Propriedades do documento…
-document_properties_file_name=Nome do ficheiro:
-document_properties_file_size=Tamanho do ficheiro:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Título:
-document_properties_author=Autor:
-document_properties_subject=Assunto:
-document_properties_keywords=Palavras-chave:
-document_properties_creation_date=Data de criação:
-document_properties_modification_date=Data de modificação:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Criador:
-document_properties_producer=Produtor de PDF:
-document_properties_version=Versão do PDF:
-document_properties_page_count=N.º de páginas:
-document_properties_page_size=Tamanho da página:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=retrato
-document_properties_page_size_orientation_landscape=paisagem
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Carta
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista rápida web:
-document_properties_linearized_yes=Sim
-document_properties_linearized_no=Não
-document_properties_close=Fechar
-
-print_progress_message=A preparar o documento para impressão…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Cancelar
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Alternar barra lateral
-toggle_sidebar_notification.title=Alternar barra lateral (documento contém contorno/anexos)
-toggle_sidebar_label=Alternar barra lateral
-document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens)
-document_outline_label=Esquema do documento
-attachments.title=Mostrar anexos
-attachments_label=Anexos
-thumbs.title=Mostrar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Localizar em documento
-findbar_label=Localizar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Página {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Página {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura da página {{page}}
-
-# Find panel button title and messages
-find_input.title=Localizar
-find_input.placeholder=Localizar em documento…
-find_previous.title=Localizar ocorrência anterior da frase
-find_previous_label=Anterior
-find_next.title=Localizar ocorrência seguinte da frase
-find_next_label=Seguinte
-find_highlight=Destacar tudo
-find_match_case_label=Correspondência
-find_entire_word_label=Palavras completas
-find_reached_top=Topo do documento atingido, a continuar a partir do fundo
-find_reached_bottom=Fim do documento atingido, a continuar a partir do topo
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} de {{total}} correspondência
-find_match_count[two]={{current}} de {{total}} correspondências
-find_match_count[few]={{current}} de {{total}} correspondências
-find_match_count[many]={{current}} de {{total}} correspondências
-find_match_count[other]={{current}} de {{total}} correspondências
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mais de {{limit}} correspondências
-find_match_count_limit[one]=Mais de {{limit}} correspondência
-find_match_count_limit[two]=Mais de {{limit}} correspondências
-find_match_count_limit[few]=Mais de {{limit}} correspondências
-find_match_count_limit[many]=Mais de {{limit}} correspondências
-find_match_count_limit[other]=Mais de {{limit}} correspondências
-find_not_found=Frase não encontrada
-
-# Error panel labels
-error_more_info=Mais informação
-error_less_info=Menos informação
-error_close=Fechar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (compilação: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensagem: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Ficheiro: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linha: {{line}}
-rendering_error=Ocorreu um erro ao processar a página.
-
-# Predefined zoom values
-page_scale_width=Ajustar à largura
-page_scale_fit=Ajustar à página
-page_scale_auto=Zoom automático
-page_scale_actual=Tamanho real
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Erro
-loading_error=Ocorreu um erro ao carregar o PDF.
-invalid_file_error=Ficheiro PDF inválido ou danificado.
-missing_file_error=Ficheiro PDF inexistente.
-unexpected_response_error=Resposta inesperada do servidor.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotação {{type}}]
-password_label=Introduza a palavra-passe para abrir este ficheiro PDF.
-password_invalid=Palavra-passe inválida. Por favor, tente novamente.
-password_ok=OK
-password_cancel=Cancelar
-
-printing_not_supported=Aviso: a impressão não é totalmente suportada por este navegador.
-printing_not_ready=Aviso: o PDF ainda não está totalmente carregado.
-web_fonts_disabled=Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos.
-document_colors_not_allowed=Os documentos PDF não permitem a utilização das suas próprias cores: “Permitir às páginas escolher as suas próprias cores” está desativado no navegador.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página seguinte
+next_label=Seguinte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reduzir
+zoom_out_label=Reduzir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Trocar para o modo de apresentação
+presentation_mode_label=Modo de apresentação
+open_file.title=Abrir ficheiro
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Transferir
+download_label=Transferir
+bookmark.title=Vista atual (copiar ou abrir numa nova janela)
+bookmark_label=Visão atual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir para a primeira página
+first_page.label=Ir para a primeira página
+first_page_label=Ir para a primeira página
+last_page.title=Ir para a última página
+last_page.label=Ir para a última página
+last_page_label=Ir para a última página
+page_rotate_cw.title=Rodar à direita
+page_rotate_cw.label=Rodar à direita
+page_rotate_cw_label=Rodar à direita
+page_rotate_ccw.title=Rodar à esquerda
+page_rotate_ccw.label=Rodar à esquerda
+page_rotate_ccw_label=Rodar à esquerda
+
+cursor_text_select_tool.title=Ativar ferramenta de seleção de texto
+cursor_text_select_tool_label=Ferramenta de seleção de texto
+cursor_hand_tool.title=Ativar ferramenta de mão
+cursor_hand_tool_label=Ferramenta de mão
+
+scroll_vertical.title=Utilizar deslocação vertical
+scroll_vertical_label=Deslocação vertical
+scroll_horizontal.title=Utilizar deslocação horizontal
+scroll_horizontal_label=Deslocação horizontal
+scroll_wrapped.title=Utilizar deslocação encapsulada
+scroll_wrapped_label=Deslocação encapsulada
+
+spread_none.title=Não juntar páginas dispersas
+spread_none_label=Sem spreads
+spread_odd.title=Juntar páginas dispersas a partir de páginas com números ímpares
+spread_odd_label=Spreads ímpares
+spread_even.title=Juntar páginas dispersas a partir de páginas com números pares
+spread_even_label=Spreads pares
+
+# Document properties dialog box
+document_properties.title=Propriedades do documento…
+document_properties_label=Propriedades do documento…
+document_properties_file_name=Nome do ficheiro:
+document_properties_file_size=Tamanho do ficheiro:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Título:
+document_properties_author=Autor:
+document_properties_subject=Assunto:
+document_properties_keywords=Palavras-chave:
+document_properties_creation_date=Data de criação:
+document_properties_modification_date=Data de modificação:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Criador:
+document_properties_producer=Produtor de PDF:
+document_properties_version=Versão do PDF:
+document_properties_page_count=N.º de páginas:
+document_properties_page_size=Tamanho da página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrato
+document_properties_page_size_orientation_landscape=paisagem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida web:
+document_properties_linearized_yes=Sim
+document_properties_linearized_no=Não
+document_properties_close=Fechar
+
+print_progress_message=A preparar o documento para impressão…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar barra lateral
+toggle_sidebar_notification.title=Alternar barra lateral (documento contém contorno/anexos)
+toggle_sidebar_label=Alternar barra lateral
+document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens)
+document_outline_label=Esquema do documento
+attachments.title=Mostrar anexos
+attachments_label=Anexos
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Localizar em documento
+findbar_label=Localizar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da página {{page}}
+
+# Find panel button title and messages
+find_input.title=Localizar
+find_input.placeholder=Localizar em documento…
+find_previous.title=Localizar ocorrência anterior da frase
+find_previous_label=Anterior
+find_next.title=Localizar ocorrência seguinte da frase
+find_next_label=Seguinte
+find_highlight=Destacar tudo
+find_match_case_label=Correspondência
+find_entire_word_label=Palavras completas
+find_reached_top=Topo do documento atingido, a continuar a partir do fundo
+find_reached_bottom=Fim do documento atingido, a continuar a partir do topo
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} correspondência
+find_match_count[two]={{current}} de {{total}} correspondências
+find_match_count[few]={{current}} de {{total}} correspondências
+find_match_count[many]={{current}} de {{total}} correspondências
+find_match_count[other]={{current}} de {{total}} correspondências
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mais de {{limit}} correspondências
+find_match_count_limit[one]=Mais de {{limit}} correspondência
+find_match_count_limit[two]=Mais de {{limit}} correspondências
+find_match_count_limit[few]=Mais de {{limit}} correspondências
+find_match_count_limit[many]=Mais de {{limit}} correspondências
+find_match_count_limit[other]=Mais de {{limit}} correspondências
+find_not_found=Frase não encontrada
+
+# Error panel labels
+error_more_info=Mais informação
+error_less_info=Menos informação
+error_close=Fechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilação: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensagem: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheiro: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha: {{line}}
+rendering_error=Ocorreu um erro ao processar a página.
+
+# Predefined zoom values
+page_scale_width=Ajustar à largura
+page_scale_fit=Ajustar à página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamanho real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erro
+loading_error=Ocorreu um erro ao carregar o PDF.
+invalid_file_error=Ficheiro PDF inválido ou danificado.
+missing_file_error=Ficheiro PDF inexistente.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotação {{type}}]
+password_label=Introduza a palavra-passe para abrir este ficheiro PDF.
+password_invalid=Palavra-passe inválida. Por favor, tente novamente.
+password_ok=OK
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: a impressão não é totalmente suportada por este navegador.
+printing_not_ready=Aviso: o PDF ainda não está totalmente carregado.
+web_fonts_disabled=Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos.
+document_colors_not_allowed=Os documentos PDF não permitem a utilização das suas próprias cores: “Permitir às páginas escolher as suas próprias cores” está desativado no navegador.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/rm/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/rm/viewer.properties
index 99aca5c6b49b77f043e8daf13e84692227bd7fb5..188c378a50d4586cde228f71f07eecb17fc1d674 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/rm/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/rm/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pagina precedenta
-previous_label=Enavos
-next.title=Proxima pagina
-next_label=Enavant
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pagina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=da {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} da {{pagesCount}})
-
-zoom_out.title=Empitschnir
-zoom_out_label=Empitschnir
-zoom_in.title=Engrondir
-zoom_in_label=Engrondir
-zoom.title=Zoom
-presentation_mode.title=Midar en il modus da preschentaziun
-presentation_mode_label=Modus da preschentaziun
-open_file.title=Avrir datoteca
-open_file_label=Avrir
-print.title=Stampar
-print_label=Stampar
-download.title=Telechargiar
-download_label=Telechargiar
-bookmark.title=Vista actuala (copiar u avrir en ina nova fanestra)
-bookmark_label=Vista actuala
-
-# Secondary toolbar and context menu
-tools.title=Utensils
-tools_label=Utensils
-first_page.title=Siglir a l'emprima pagina
-first_page.label=Siglir a l'emprima pagina
-first_page_label=Siglir a l'emprima pagina
-last_page.title=Siglir a la davosa pagina
-last_page.label=Siglir a la davosa pagina
-last_page_label=Siglir a la davosa pagina
-page_rotate_cw.title=Rotar en direcziun da l'ura
-page_rotate_cw.label=Rotar en direcziun da l'ura
-page_rotate_cw_label=Rotar en direcziun da l'ura
-page_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura
-page_rotate_ccw.label=Rotar en direcziun cuntraria a l'ura
-page_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura
-
-cursor_text_select_tool.title=Activar l'utensil per selecziunar text
-cursor_text_select_tool_label=Utensil per selecziunar text
-cursor_hand_tool.title=Activar l'utensil da maun
-cursor_hand_tool_label=Utensil da maun
-
-scroll_vertical.title=Utilisar il defilar vertical
-scroll_vertical_label=Defilar vertical
-scroll_horizontal.title=Utilisar il defilar orizontal
-scroll_horizontal_label=Defilar orizontal
-scroll_wrapped.title=Utilisar il defilar en colonnas
-scroll_wrapped_label=Defilar en colonnas
-
-spread_none.title=Betg parallelisar las paginas
-spread_none_label=Betg parallel
-spread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras
-spread_odd_label=Parallel spèr
-spread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras
-spread_even_label=Parallel pèr
-
-# Document properties dialog box
-document_properties.title=Caracteristicas dal document…
-document_properties_label=Caracteristicas dal document…
-document_properties_file_name=Num da la datoteca:
-document_properties_file_size=Grondezza da la datoteca:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Titel:
-document_properties_author=Autur:
-document_properties_subject=Tema:
-document_properties_keywords=Chavazzins:
-document_properties_creation_date=Data da creaziun:
-document_properties_modification_date=Data da modificaziun:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}} {{time}}
-document_properties_creator=Creà da:
-document_properties_producer=Creà il PDF cun:
-document_properties_version=Versiun da PDF:
-document_properties_page_count=Dumber da paginas:
-document_properties_page_size=Grondezza da la pagina:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=vertical
-document_properties_page_size_orientation_landscape=orizontal
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Gea
-document_properties_linearized_no=Na
-document_properties_close=Serrar
-
-print_progress_message=Preparar il document per stampar…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Interrumper
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Activar/deactivar la trav laterala
-toggle_sidebar_notification.title=Activar/deactivar la trav laterala (structura dal document/agiuntas)
-toggle_sidebar_label=Activar/deactivar la trav laterala
-document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements)
-document_outline_label=Structura dal document
-attachments.title=Mussar agiuntas
-attachments_label=Agiuntas
-thumbs.title=Mussar las miniaturas
-thumbs_label=Miniaturas
-findbar.title=Tschertgar en il document
-findbar_label=Tschertgar
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pagina {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pagina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura da la pagina {{page}}
-
-# Find panel button title and messages
-find_input.title=Tschertgar
-find_input.placeholder=Tschertgar en il document…
-find_previous.title=Tschertgar la posiziun precedenta da l'expressiun
-find_previous_label=Enavos
-find_next.title=Tschertgar la proxima posiziun da l'expressiun
-find_next_label=Enavant
-find_highlight=Relevar tuts
-find_match_case_label=Resguardar maiusclas/minusclas
-find_entire_word_label=Pleds entirs
-find_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document
-find_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} dad {{total}} correspundenza
-find_match_count[two]={{current}} da {{total}} correspundenzas
-find_match_count[few]={{current}} da {{total}} correspundenzas
-find_match_count[many]={{current}} da {{total}} correspundenzas
-find_match_count[other]={{current}} da {{total}} correspundenzas
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Dapli che {{limit}} correspundenzas
-find_match_count_limit[one]=Dapli che {{limit}} correspundenza
-find_match_count_limit[two]=Dapli che {{limit}} correspundenzas
-find_match_count_limit[few]=Dapli che {{limit}} correspundenzas
-find_match_count_limit[many]=Dapli che {{limit}} correspundenzas
-find_match_count_limit[other]=Dapli che {{limit}} correspundenzas
-find_not_found=Impussibel da chattar l'expressiun
-
-# Error panel labels
-error_more_info=Dapli infurmaziuns
-error_less_info=Damain infurmaziuns
-error_close=Serrar
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Messadi: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Datoteca: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Lingia: {{line}}
-rendering_error=Ina errur è cumparida cun visualisar questa pagina.
-
-# Predefined zoom values
-page_scale_width=Ladezza da la pagina
-page_scale_fit=Entira pagina
-page_scale_auto=Zoom automatic
-page_scale_actual=Grondezza actuala
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Errur
-loading_error=Ina errur è cumparida cun chargiar il PDF.
-invalid_file_error=Datoteca PDF nunvalida u donnegiada.
-missing_file_error=Datoteca PDF manconta.
-unexpected_response_error=Resposta nunspetgada dal server.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Annotaziun da {{type}}]
-password_label=Endatescha il pled-clav per avrir questa datoteca da PDF.
-password_invalid=Pled-clav nunvalid. Emprova anc ina giada.
-password_ok=OK
-password_cancel=Interrumper
-
-printing_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur.
-printing_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar.
-web_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF.
-document_colors_not_allowed=Documents da PDF na dastgan betg duvrar las atgnas colurs: 'Permetter a paginas da tscherner lur atgna colur' è deactivà en il navigatur.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedenta
+previous_label=Enavos
+next.title=Proxima pagina
+next_label=Enavant
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=da {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} da {{pagesCount}})
+
+zoom_out.title=Empitschnir
+zoom_out_label=Empitschnir
+zoom_in.title=Engrondir
+zoom_in_label=Engrondir
+zoom.title=Zoom
+presentation_mode.title=Midar en il modus da preschentaziun
+presentation_mode_label=Modus da preschentaziun
+open_file.title=Avrir datoteca
+open_file_label=Avrir
+print.title=Stampar
+print_label=Stampar
+download.title=Telechargiar
+download_label=Telechargiar
+bookmark.title=Vista actuala (copiar u avrir en ina nova fanestra)
+bookmark_label=Vista actuala
+
+# Secondary toolbar and context menu
+tools.title=Utensils
+tools_label=Utensils
+first_page.title=Siglir a l'emprima pagina
+first_page.label=Siglir a l'emprima pagina
+first_page_label=Siglir a l'emprima pagina
+last_page.title=Siglir a la davosa pagina
+last_page.label=Siglir a la davosa pagina
+last_page_label=Siglir a la davosa pagina
+page_rotate_cw.title=Rotar en direcziun da l'ura
+page_rotate_cw.label=Rotar en direcziun da l'ura
+page_rotate_cw_label=Rotar en direcziun da l'ura
+page_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura
+page_rotate_ccw.label=Rotar en direcziun cuntraria a l'ura
+page_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura
+
+cursor_text_select_tool.title=Activar l'utensil per selecziunar text
+cursor_text_select_tool_label=Utensil per selecziunar text
+cursor_hand_tool.title=Activar l'utensil da maun
+cursor_hand_tool_label=Utensil da maun
+
+scroll_vertical.title=Utilisar il defilar vertical
+scroll_vertical_label=Defilar vertical
+scroll_horizontal.title=Utilisar il defilar orizontal
+scroll_horizontal_label=Defilar orizontal
+scroll_wrapped.title=Utilisar il defilar en colonnas
+scroll_wrapped_label=Defilar en colonnas
+
+spread_none.title=Betg parallelisar las paginas
+spread_none_label=Betg parallel
+spread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras
+spread_odd_label=Parallel spèr
+spread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras
+spread_even_label=Parallel pèr
+
+# Document properties dialog box
+document_properties.title=Caracteristicas dal document…
+document_properties_label=Caracteristicas dal document…
+document_properties_file_name=Num da la datoteca:
+document_properties_file_size=Grondezza da la datoteca:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Autur:
+document_properties_subject=Tema:
+document_properties_keywords=Chavazzins:
+document_properties_creation_date=Data da creaziun:
+document_properties_modification_date=Data da modificaziun:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Creà da:
+document_properties_producer=Creà il PDF cun:
+document_properties_version=Versiun da PDF:
+document_properties_page_count=Dumber da paginas:
+document_properties_page_size=Grondezza da la pagina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=orizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Gea
+document_properties_linearized_no=Na
+document_properties_close=Serrar
+
+print_progress_message=Preparar il document per stampar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Interrumper
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Activar/deactivar la trav laterala
+toggle_sidebar_notification.title=Activar/deactivar la trav laterala (structura dal document/agiuntas)
+toggle_sidebar_label=Activar/deactivar la trav laterala
+document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements)
+document_outline_label=Structura dal document
+attachments.title=Mussar agiuntas
+attachments_label=Agiuntas
+thumbs.title=Mussar las miniaturas
+thumbs_label=Miniaturas
+findbar.title=Tschertgar en il document
+findbar_label=Tschertgar
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da la pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Tschertgar
+find_input.placeholder=Tschertgar en il document…
+find_previous.title=Tschertgar la posiziun precedenta da l'expressiun
+find_previous_label=Enavos
+find_next.title=Tschertgar la proxima posiziun da l'expressiun
+find_next_label=Enavant
+find_highlight=Relevar tuts
+find_match_case_label=Resguardar maiusclas/minusclas
+find_entire_word_label=Pleds entirs
+find_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document
+find_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} dad {{total}} correspundenza
+find_match_count[two]={{current}} da {{total}} correspundenzas
+find_match_count[few]={{current}} da {{total}} correspundenzas
+find_match_count[many]={{current}} da {{total}} correspundenzas
+find_match_count[other]={{current}} da {{total}} correspundenzas
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[one]=Dapli che {{limit}} correspundenza
+find_match_count_limit[two]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[few]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[many]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[other]=Dapli che {{limit}} correspundenzas
+find_not_found=Impussibel da chattar l'expressiun
+
+# Error panel labels
+error_more_info=Dapli infurmaziuns
+error_less_info=Damain infurmaziuns
+error_close=Serrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Messadi: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteca: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lingia: {{line}}
+rendering_error=Ina errur è cumparida cun visualisar questa pagina.
+
+# Predefined zoom values
+page_scale_width=Ladezza da la pagina
+page_scale_fit=Entira pagina
+page_scale_auto=Zoom automatic
+page_scale_actual=Grondezza actuala
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Errur
+loading_error=Ina errur è cumparida cun chargiar il PDF.
+invalid_file_error=Datoteca PDF nunvalida u donnegiada.
+missing_file_error=Datoteca PDF manconta.
+unexpected_response_error=Resposta nunspetgada dal server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Annotaziun da {{type}}]
+password_label=Endatescha il pled-clav per avrir questa datoteca da PDF.
+password_invalid=Pled-clav nunvalid. Emprova anc ina giada.
+password_ok=OK
+password_cancel=Interrumper
+
+printing_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur.
+printing_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar.
+web_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF.
+document_colors_not_allowed=Documents da PDF na dastgan betg duvrar las atgnas colurs: 'Permetter a paginas da tscherner lur atgna colur' è deactivà en il navigatur.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ro/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ro/viewer.properties
index 691d9dc32536321a6f18fc0104c53b6c060ea9c0..10b02ccf976a36cc3b1a6f8a3eb4c08b4276af81 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ro/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ro/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pagina precedentă
-previous_label=Înapoi
-next.title=Pagina următoare
-next_label=Înainte
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pagina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=din {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} din {{pagesCount}})
-
-zoom_out.title=Micșorează
-zoom_out_label=Micșorează
-zoom_in.title=Mărește
-zoom_in_label=Mărește
-zoom.title=Focalizare
-presentation_mode.title=Comută la modul de prezentare
-presentation_mode_label=Mod de prezentare
-open_file.title=Deschide un fișier
-open_file_label=Deschide
-print.title=Tipărește
-print_label=Tipărește
-download.title=Descarcă
-download_label=Descarcă
-bookmark.title=Vizualizare actuală (copiază sau deschide într-o fereastră nouă)
-bookmark_label=Vizualizare actuală
-
-# Secondary toolbar and context menu
-tools.title=Instrumente
-tools_label=Instrumente
-first_page.title=Mergi la prima pagină
-first_page.label=Mergi la prima pagină
-first_page_label=Mergi la prima pagină
-last_page.title=Mergi la ultima pagină
-last_page.label=Mergi la ultima pagină
-last_page_label=Mergi la ultima pagină
-page_rotate_cw.title=Rotește în sensul acelor de ceasornic
-page_rotate_cw.label=Rotește în sensul acelor de ceasornic
-page_rotate_cw_label=Rotește în sensul acelor de ceasornic
-page_rotate_ccw.title=Rotește în sens invers al acelor de ceasornic
-page_rotate_ccw.label=Rotește în sens invers al acelor de ceasornic
-page_rotate_ccw_label=Rotește în sens invers al acelor de ceasornic
-
-cursor_text_select_tool.title=Activează instrumentul de selecție a textului
-cursor_text_select_tool_label=Instrumentul de selecție a textului
-cursor_hand_tool.title=Activează instrumentul mână
-cursor_hand_tool_label=Unealta mână
-
-scroll_vertical.title=Folosește derularea verticală
-scroll_vertical_label=Derulare verticală
-scroll_horizontal.title=Folosește derularea orizontală
-scroll_horizontal_label=Derulare orizontală
-scroll_wrapped.title=Folosește derularea încadrată
-scroll_wrapped_label=Derulare încadrată
-
-spread_none.title=Nu uni paginile broșate
-spread_none_label=Fără pagini broșate
-spread_odd.title=Unește paginile broșate începând cu cele impare
-spread_odd_label=Broșare pagini impare
-spread_even.title=Unește paginile broșate începând cu cele pare
-spread_even_label=Broșare pagini pare
-
-# Document properties dialog box
-document_properties.title=Proprietățile documentului…
-document_properties_label=Proprietățile documentului…
-document_properties_file_name=Numele fișierului:
-document_properties_file_size=Mărimea fișierului:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} byți)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} byți)
-document_properties_title=Titlu:
-document_properties_author=Autor:
-document_properties_subject=Subiect:
-document_properties_keywords=Cuvinte cheie:
-document_properties_creation_date=Data creării:
-document_properties_modification_date=Data modificării:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Autor:
-document_properties_producer=Producător PDF:
-document_properties_version=Versiune PDF:
-document_properties_page_count=Număr de pagini:
-document_properties_page_size=Mărimea paginii:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portret
-document_properties_page_size_orientation_landscape=peisaj
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Literă
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vizualizare web rapidă:
-document_properties_linearized_yes=Da
-document_properties_linearized_no=Nu
-document_properties_close=Închide
-
-print_progress_message=Se pregătește documentul pentru tipărire…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Renunță
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Comută bara laterală
-toggle_sidebar_notification.title=Comută bara laterală (documentul conține schițe/atașamente)
-toggle_sidebar_label=Comută bara laterală
-document_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele)
-document_outline_label=Schița documentului
-attachments.title=Afișează atașamentele
-attachments_label=Atașamente
-thumbs.title=Afișează miniaturi
-thumbs_label=Miniaturi
-findbar.title=Caută în document
-findbar_label=Caută
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pagina {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pagina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatura paginii {{page}}
-
-# Find panel button title and messages
-find_input.title=Caută
-find_input.placeholder=Caută în document…
-find_previous.title=Mergi la apariția anterioară a textului
-find_previous_label=Înapoi
-find_next.title=Mergi la apariția următoare a textului
-find_next_label=Înainte
-find_highlight=Evidențiază toate aparițiile
-find_match_case_label=Ține cont de majuscule și minuscule
-find_entire_word_label=Cuvinte întregi
-find_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit
-find_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} din {{total}} rezultat
-find_match_count[two]={{current}} din {{total}} rezultate
-find_match_count[few]={{current}} din {{total}} rezultate
-find_match_count[many]={{current}} din {{total}} de rezultate
-find_match_count[other]={{current}} din {{total}} de rezultate
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Peste {{limit}} rezultate
-find_match_count_limit[one]=Peste {{limit}} rezultat
-find_match_count_limit[two]=Peste {{limit}} rezultate
-find_match_count_limit[few]=Peste {{limit}} rezultate
-find_match_count_limit[many]=Peste {{limit}} de rezultate
-find_match_count_limit[other]=Peste {{limit}} de rezultate
-find_not_found=Nu s-a găsit textul
-
-# Error panel labels
-error_more_info=Mai multe informații
-error_less_info=Mai puține informații
-error_close=Închide
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (versiunea compilată: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mesaj: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stivă: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fișier: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rând: {{line}}
-rendering_error=A intervenit o eroare la randarea paginii.
-
-# Predefined zoom values
-page_scale_width=Lățime pagină
-page_scale_fit=Potrivire la pagină
-page_scale_auto=Focalizare automată
-page_scale_actual=Mărime reală
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Eroare
-loading_error=A intervenit o eroare la încărcarea PDF-ului.
-invalid_file_error=Fișier PDF nevalid sau corupt.
-missing_file_error=Fișier PDF lipsă.
-unexpected_response_error=Răspuns neașteptat de la server.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Adnotare {{type}}]
-password_label=Introdu parola pentru a deschide acest fișier PDF.
-password_invalid=Parolă nevalidă. Te rugăm să încerci din nou.
-password_ok=Ok
-password_cancel=Renunță
-
-printing_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser.
-printing_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire.
-web_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate.
-document_colors_not_allowed=Documentele PDF nu sunt autorizate să folosească propriile culori: „Permite paginilor să aleagă propriile culori” este dezactivat în browser.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedentă
+previous_label=Înapoi
+next.title=Pagina următoare
+next_label=Înainte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=din {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} din {{pagesCount}})
+
+zoom_out.title=Micșorează
+zoom_out_label=Micșorează
+zoom_in.title=Mărește
+zoom_in_label=Mărește
+zoom.title=Focalizare
+presentation_mode.title=Comută la modul de prezentare
+presentation_mode_label=Mod de prezentare
+open_file.title=Deschide un fișier
+open_file_label=Deschide
+print.title=Tipărește
+print_label=Tipărește
+download.title=Descarcă
+download_label=Descarcă
+bookmark.title=Vizualizare actuală (copiază sau deschide într-o fereastră nouă)
+bookmark_label=Vizualizare actuală
+
+# Secondary toolbar and context menu
+tools.title=Instrumente
+tools_label=Instrumente
+first_page.title=Mergi la prima pagină
+first_page.label=Mergi la prima pagină
+first_page_label=Mergi la prima pagină
+last_page.title=Mergi la ultima pagină
+last_page.label=Mergi la ultima pagină
+last_page_label=Mergi la ultima pagină
+page_rotate_cw.title=Rotește în sensul acelor de ceasornic
+page_rotate_cw.label=Rotește în sensul acelor de ceasornic
+page_rotate_cw_label=Rotește în sensul acelor de ceasornic
+page_rotate_ccw.title=Rotește în sens invers al acelor de ceasornic
+page_rotate_ccw.label=Rotește în sens invers al acelor de ceasornic
+page_rotate_ccw_label=Rotește în sens invers al acelor de ceasornic
+
+cursor_text_select_tool.title=Activează instrumentul de selecție a textului
+cursor_text_select_tool_label=Instrumentul de selecție a textului
+cursor_hand_tool.title=Activează instrumentul mână
+cursor_hand_tool_label=Unealta mână
+
+scroll_vertical.title=Folosește derularea verticală
+scroll_vertical_label=Derulare verticală
+scroll_horizontal.title=Folosește derularea orizontală
+scroll_horizontal_label=Derulare orizontală
+scroll_wrapped.title=Folosește derularea încadrată
+scroll_wrapped_label=Derulare încadrată
+
+spread_none.title=Nu uni paginile broșate
+spread_none_label=Fără pagini broșate
+spread_odd.title=Unește paginile broșate începând cu cele impare
+spread_odd_label=Broșare pagini impare
+spread_even.title=Unește paginile broșate începând cu cele pare
+spread_even_label=Broșare pagini pare
+
+# Document properties dialog box
+document_properties.title=Proprietățile documentului…
+document_properties_label=Proprietățile documentului…
+document_properties_file_name=Numele fișierului:
+document_properties_file_size=Mărimea fișierului:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byți)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byți)
+document_properties_title=Titlu:
+document_properties_author=Autor:
+document_properties_subject=Subiect:
+document_properties_keywords=Cuvinte cheie:
+document_properties_creation_date=Data creării:
+document_properties_modification_date=Data modificării:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Autor:
+document_properties_producer=Producător PDF:
+document_properties_version=Versiune PDF:
+document_properties_page_count=Număr de pagini:
+document_properties_page_size=Mărimea paginii:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portret
+document_properties_page_size_orientation_landscape=peisaj
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Literă
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vizualizare web rapidă:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Nu
+document_properties_close=Închide
+
+print_progress_message=Se pregătește documentul pentru tipărire…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Renunță
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Comută bara laterală
+toggle_sidebar_notification.title=Comută bara laterală (documentul conține schițe/atașamente)
+toggle_sidebar_label=Comută bara laterală
+document_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele)
+document_outline_label=Schița documentului
+attachments.title=Afișează atașamentele
+attachments_label=Atașamente
+thumbs.title=Afișează miniaturi
+thumbs_label=Miniaturi
+findbar.title=Caută în document
+findbar_label=Caută
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura paginii {{page}}
+
+# Find panel button title and messages
+find_input.title=Caută
+find_input.placeholder=Caută în document…
+find_previous.title=Mergi la apariția anterioară a textului
+find_previous_label=Înapoi
+find_next.title=Mergi la apariția următoare a textului
+find_next_label=Înainte
+find_highlight=Evidențiază toate aparițiile
+find_match_case_label=Ține cont de majuscule și minuscule
+find_entire_word_label=Cuvinte întregi
+find_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit
+find_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} din {{total}} rezultat
+find_match_count[two]={{current}} din {{total}} rezultate
+find_match_count[few]={{current}} din {{total}} rezultate
+find_match_count[many]={{current}} din {{total}} de rezultate
+find_match_count[other]={{current}} din {{total}} de rezultate
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Peste {{limit}} rezultate
+find_match_count_limit[one]=Peste {{limit}} rezultat
+find_match_count_limit[two]=Peste {{limit}} rezultate
+find_match_count_limit[few]=Peste {{limit}} rezultate
+find_match_count_limit[many]=Peste {{limit}} de rezultate
+find_match_count_limit[other]=Peste {{limit}} de rezultate
+find_not_found=Nu s-a găsit textul
+
+# Error panel labels
+error_more_info=Mai multe informații
+error_less_info=Mai puține informații
+error_close=Închide
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (versiunea compilată: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaj: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stivă: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fișier: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rând: {{line}}
+rendering_error=A intervenit o eroare la randarea paginii.
+
+# Predefined zoom values
+page_scale_width=Lățime pagină
+page_scale_fit=Potrivire la pagină
+page_scale_auto=Focalizare automată
+page_scale_actual=Mărime reală
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Eroare
+loading_error=A intervenit o eroare la încărcarea PDF-ului.
+invalid_file_error=Fișier PDF nevalid sau corupt.
+missing_file_error=Fișier PDF lipsă.
+unexpected_response_error=Răspuns neașteptat de la server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Adnotare {{type}}]
+password_label=Introdu parola pentru a deschide acest fișier PDF.
+password_invalid=Parolă nevalidă. Te rugăm să încerci din nou.
+password_ok=Ok
+password_cancel=Renunță
+
+printing_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser.
+printing_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire.
+web_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate.
+document_colors_not_allowed=Documentele PDF nu sunt autorizate să folosească propriile culori: „Permite paginilor să aleagă propriile culori” este dezactivat în browser.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ru/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ru/viewer.properties
index bf417bcb495903d7ee132e1c3668a31bbdee36db..d3ec91935343706519756a822dd0cf46ed2e9711 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ru/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ru/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Предыдущая страница
-previous_label=Предыдущая
-next.title=Следующая страница
-next_label=Следующая
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Страница
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=из {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} из {{pagesCount}})
-
-zoom_out.title=Уменьшить
-zoom_out_label=Уменьшить
-zoom_in.title=Увеличить
-zoom_in_label=Увеличить
-zoom.title=Масштаб
-presentation_mode.title=Перейти в режим презентации
-presentation_mode_label=Режим презентации
-open_file.title=Открыть файл
-open_file_label=Открыть
-print.title=Печать
-print_label=Печать
-download.title=Загрузить
-download_label=Загрузить
-bookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне)
-bookmark_label=Текущий вид
-
-# Secondary toolbar and context menu
-tools.title=Инструменты
-tools_label=Инструменты
-first_page.title=Перейти на первую страницу
-first_page.label=Перейти на первую страницу
-first_page_label=Перейти на первую страницу
-last_page.title=Перейти на последнюю страницу
-last_page.label=Перейти на последнюю страницу
-last_page_label=Перейти на последнюю страницу
-page_rotate_cw.title=Повернуть по часовой стрелке
-page_rotate_cw.label=Повернуть по часовой стрелке
-page_rotate_cw_label=Повернуть по часовой стрелке
-page_rotate_ccw.title=Повернуть против часовой стрелки
-page_rotate_ccw.label=Повернуть против часовой стрелки
-page_rotate_ccw_label=Повернуть против часовой стрелки
-
-cursor_text_select_tool.title=Включить Инструмент «Выделение текста»
-cursor_text_select_tool_label=Инструмент «Выделение текста»
-cursor_hand_tool.title=Включить Инструмент «Рука»
-cursor_hand_tool_label=Инструмент «Рука»
-
-scroll_vertical.title=Использовать вертикальную прокрутку
-scroll_vertical_label=Вертикальная прокрутка
-scroll_horizontal.title=Использовать горизонтальную прокрутку
-scroll_horizontal_label=Горизонтальная прокрутка
-scroll_wrapped.title=Использовать масштабируемую прокрутку
-scroll_wrapped_label=Масштабируемая прокрутка
-
-spread_none.title=Не использовать режим разворотов страниц
-spread_none_label=Без разворотов страниц
-spread_odd.title=Развороты начинаются с нечётных номеров страниц
-spread_odd_label=Нечётные страницы слева
-spread_even.title=Развороты начинаются с чётных номеров страниц
-spread_even_label=Чётные страницы слева
-
-# Document properties dialog box
-document_properties.title=Свойства документа…
-document_properties_label=Свойства документа…
-document_properties_file_name=Имя файла:
-document_properties_file_size=Размер файла:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
-document_properties_title=Заголовок:
-document_properties_author=Автор:
-document_properties_subject=Тема:
-document_properties_keywords=Ключевые слова:
-document_properties_creation_date=Дата создания:
-document_properties_modification_date=Дата изменения:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Приложение:
-document_properties_producer=Производитель PDF:
-document_properties_version=Версия PDF:
-document_properties_page_count=Число страниц:
-document_properties_page_size=Размер страницы:
-document_properties_page_size_unit_inches=дюймов
-document_properties_page_size_unit_millimeters=мм
-document_properties_page_size_orientation_portrait=книжная
-document_properties_page_size_orientation_landscape=альбомная
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Быстрый просмотр в Web:
-document_properties_linearized_yes=Да
-document_properties_linearized_no=Нет
-document_properties_close=Закрыть
-
-print_progress_message=Подготовка документа к печати…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Отмена
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Показать/скрыть боковую панель
-toggle_sidebar_notification.title=Показать/скрыть боковую панель (документ имеет содержание/вложения)
-toggle_sidebar_label=Показать/скрыть боковую панель
-document_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы)
-document_outline_label=Содержание документа
-attachments.title=Показать вложения
-attachments_label=Вложения
-thumbs.title=Показать миниатюры
-thumbs_label=Миниатюры
-findbar.title=Найти в документе
-findbar_label=Найти
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Страница {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Страница {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Миниатюра страницы {{page}}
-
-# Find panel button title and messages
-find_input.title=Найти
-find_input.placeholder=Найти в документе…
-find_previous.title=Найти предыдущее вхождение фразы в текст
-find_previous_label=Назад
-find_next.title=Найти следующее вхождение фразы в текст
-find_next_label=Далее
-find_highlight=Подсветить все
-find_match_case_label=С учётом регистра
-find_entire_word_label=Слова целиком
-find_reached_top=Достигнут верх документа, продолжено снизу
-find_reached_bottom=Достигнут конец документа, продолжено сверху
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} из {{total}} совпадения
-find_match_count[two]={{current}} из {{total}} совпадений
-find_match_count[few]={{current}} из {{total}} совпадений
-find_match_count[many]={{current}} из {{total}} совпадений
-find_match_count[other]={{current}} из {{total}} совпадений
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Более {{limit}} совпадений
-find_match_count_limit[one]=Более {{limit}} совпадения
-find_match_count_limit[two]=Более {{limit}} совпадений
-find_match_count_limit[few]=Более {{limit}} совпадений
-find_match_count_limit[many]=Более {{limit}} совпадений
-find_match_count_limit[other]=Более {{limit}} совпадений
-find_not_found=Фраза не найдена
-
-# Error panel labels
-error_more_info=Детали
-error_less_info=Скрыть детали
-error_close=Закрыть
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (сборка: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Сообщение: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Стeк: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Файл: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Строка: {{line}}
-rendering_error=При создании страницы произошла ошибка.
-
-# Predefined zoom values
-page_scale_width=По ширине страницы
-page_scale_fit=По размеру страницы
-page_scale_auto=Автоматически
-page_scale_actual=Реальный размер
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Ошибка
-loading_error=При загрузке PDF произошла ошибка.
-invalid_file_error=Некорректный или повреждённый PDF-файл.
-missing_file_error=PDF-файл отсутствует.
-unexpected_response_error=Неожиданный ответ сервера.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Аннотация {{type}}]
-password_label=Введите пароль, чтобы открыть этот PDF-файл.
-password_invalid=Неверный пароль. Пожалуйста, попробуйте снова.
-password_ok=OK
-password_cancel=Отмена
-
-printing_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать.
-printing_not_ready=Предупреждение: PDF не полностью загружен для печати.
-web_fonts_disabled=Веб-шрифты отключены: невозможно использовать встроенные PDF-шрифты.
-document_colors_not_allowed=PDF-документам не разрешено использовать свои цвета: в браузере отключён параметр «Разрешить веб-сайтам использовать свои цвета».
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Предыдущая страница
+previous_label=Предыдущая
+next.title=Следующая страница
+next_label=Следующая
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=из {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} из {{pagesCount}})
+
+zoom_out.title=Уменьшить
+zoom_out_label=Уменьшить
+zoom_in.title=Увеличить
+zoom_in_label=Увеличить
+zoom.title=Масштаб
+presentation_mode.title=Перейти в режим презентации
+presentation_mode_label=Режим презентации
+open_file.title=Открыть файл
+open_file_label=Открыть
+print.title=Печать
+print_label=Печать
+download.title=Загрузить
+download_label=Загрузить
+bookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне)
+bookmark_label=Текущий вид
+
+# Secondary toolbar and context menu
+tools.title=Инструменты
+tools_label=Инструменты
+first_page.title=Перейти на первую страницу
+first_page.label=Перейти на первую страницу
+first_page_label=Перейти на первую страницу
+last_page.title=Перейти на последнюю страницу
+last_page.label=Перейти на последнюю страницу
+last_page_label=Перейти на последнюю страницу
+page_rotate_cw.title=Повернуть по часовой стрелке
+page_rotate_cw.label=Повернуть по часовой стрелке
+page_rotate_cw_label=Повернуть по часовой стрелке
+page_rotate_ccw.title=Повернуть против часовой стрелки
+page_rotate_ccw.label=Повернуть против часовой стрелки
+page_rotate_ccw_label=Повернуть против часовой стрелки
+
+cursor_text_select_tool.title=Включить Инструмент «Выделение текста»
+cursor_text_select_tool_label=Инструмент «Выделение текста»
+cursor_hand_tool.title=Включить Инструмент «Рука»
+cursor_hand_tool_label=Инструмент «Рука»
+
+scroll_vertical.title=Использовать вертикальную прокрутку
+scroll_vertical_label=Вертикальная прокрутка
+scroll_horizontal.title=Использовать горизонтальную прокрутку
+scroll_horizontal_label=Горизонтальная прокрутка
+scroll_wrapped.title=Использовать масштабируемую прокрутку
+scroll_wrapped_label=Масштабируемая прокрутка
+
+spread_none.title=Не использовать режим разворотов страниц
+spread_none_label=Без разворотов страниц
+spread_odd.title=Развороты начинаются с нечётных номеров страниц
+spread_odd_label=Нечётные страницы слева
+spread_even.title=Развороты начинаются с чётных номеров страниц
+spread_even_label=Чётные страницы слева
+
+# Document properties dialog box
+document_properties.title=Свойства документа…
+document_properties_label=Свойства документа…
+document_properties_file_name=Имя файла:
+document_properties_file_size=Размер файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Заголовок:
+document_properties_author=Автор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключевые слова:
+document_properties_creation_date=Дата создания:
+document_properties_modification_date=Дата изменения:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Приложение:
+document_properties_producer=Производитель PDF:
+document_properties_version=Версия PDF:
+document_properties_page_count=Число страниц:
+document_properties_page_size=Размер страницы:
+document_properties_page_size_unit_inches=дюймов
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=книжная
+document_properties_page_size_orientation_landscape=альбомная
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Быстрый просмотр в Web:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Нет
+document_properties_close=Закрыть
+
+print_progress_message=Подготовка документа к печати…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Отмена
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Показать/скрыть боковую панель
+toggle_sidebar_notification.title=Показать/скрыть боковую панель (документ имеет содержание/вложения)
+toggle_sidebar_label=Показать/скрыть боковую панель
+document_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы)
+document_outline_label=Содержание документа
+attachments.title=Показать вложения
+attachments_label=Вложения
+thumbs.title=Показать миниатюры
+thumbs_label=Миниатюры
+findbar.title=Найти в документе
+findbar_label=Найти
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Страница {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Миниатюра страницы {{page}}
+
+# Find panel button title and messages
+find_input.title=Найти
+find_input.placeholder=Найти в документе…
+find_previous.title=Найти предыдущее вхождение фразы в текст
+find_previous_label=Назад
+find_next.title=Найти следующее вхождение фразы в текст
+find_next_label=Далее
+find_highlight=Подсветить все
+find_match_case_label=С учётом регистра
+find_entire_word_label=Слова целиком
+find_reached_top=Достигнут верх документа, продолжено снизу
+find_reached_bottom=Достигнут конец документа, продолжено сверху
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} из {{total}} совпадения
+find_match_count[two]={{current}} из {{total}} совпадений
+find_match_count[few]={{current}} из {{total}} совпадений
+find_match_count[many]={{current}} из {{total}} совпадений
+find_match_count[other]={{current}} из {{total}} совпадений
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Более {{limit}} совпадений
+find_match_count_limit[one]=Более {{limit}} совпадения
+find_match_count_limit[two]=Более {{limit}} совпадений
+find_match_count_limit[few]=Более {{limit}} совпадений
+find_match_count_limit[many]=Более {{limit}} совпадений
+find_match_count_limit[other]=Более {{limit}} совпадений
+find_not_found=Фраза не найдена
+
+# Error panel labels
+error_more_info=Детали
+error_less_info=Скрыть детали
+error_close=Закрыть
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (сборка: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Сообщение: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стeк: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Строка: {{line}}
+rendering_error=При создании страницы произошла ошибка.
+
+# Predefined zoom values
+page_scale_width=По ширине страницы
+page_scale_fit=По размеру страницы
+page_scale_auto=Автоматически
+page_scale_actual=Реальный размер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Ошибка
+loading_error=При загрузке PDF произошла ошибка.
+invalid_file_error=Некорректный или повреждённый PDF-файл.
+missing_file_error=PDF-файл отсутствует.
+unexpected_response_error=Неожиданный ответ сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Аннотация {{type}}]
+password_label=Введите пароль, чтобы открыть этот PDF-файл.
+password_invalid=Неверный пароль. Пожалуйста, попробуйте снова.
+password_ok=OK
+password_cancel=Отмена
+
+printing_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать.
+printing_not_ready=Предупреждение: PDF не полностью загружен для печати.
+web_fonts_disabled=Веб-шрифты отключены: невозможно использовать встроенные PDF-шрифты.
+document_colors_not_allowed=PDF-документам не разрешено использовать свои цвета: в браузере отключён параметр «Разрешить веб-сайтам использовать свои цвета».
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/scn/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/scn/viewer.properties
index e9a650a914e2e538cbc32221ec71b557f20f0493..32e852daa3a9911b6e49aab6225868b0f55ca683 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/scn/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/scn/viewer.properties
@@ -1,101 +1,101 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-
-zoom_out.title=Cchiù nicu
-zoom_out_label=Cchiù nicu
-zoom_in.title=Cchiù granni
-zoom_in_label=Cchiù granni
-
-# Secondary toolbar and context menu
-
-
-
-
-# Document properties dialog box
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Vista web lesta:
-document_properties_linearized_yes=Se
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_close=Sfai
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-
-# Find panel button title and messages
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-
-# Error panel labels
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-
-# Predefined zoom values
-page_scale_width=Larghizza dâ pàggina
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-
-# Loading indicator messages
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-password_cancel=Sfai
-
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Cchiù nicu
+zoom_out_label=Cchiù nicu
+zoom_in.title=Cchiù granni
+zoom_in_label=Cchiù granni
+
+# Secondary toolbar and context menu
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web lesta:
+document_properties_linearized_yes=Se
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=Sfai
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+
+# Error panel labels
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+page_scale_width=Larghizza dâ pàggina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Sfai
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/si/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/si/viewer.properties
index 9a1d1e8bcdc73e75911ec2f60a1f81dba0dafc7f..67e816bb21bfd9e72d6dc6f0dab666db4da25f95 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/si/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/si/viewer.properties
@@ -1,207 +1,207 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=මීට පෙර පිටුව
-previous_label=පෙර
-next.title=මීළඟ පිටුව
-next_label=මීළඟ
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=පිටුව
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-
-zoom_out.title=කුඩා කරන්න
-zoom_out_label=කුඩා කරන්න
-zoom_in.title=විශාල කරන්න
-zoom_in_label=විශාල කරන්න
-zoom.title=විශාලණය
-presentation_mode.title=ඉදිරිපත්කිරීම් ප්රකාරය වෙත මාරුවන්න
-presentation_mode_label=ඉදිරිපත්කිරීම් ප්රකාරය
-open_file.title=ගොනුව විවෘත කරන්න
-open_file_label=විවෘත කරන්න
-print.title=මුද්රණය
-print_label=මුද්රණය
-download.title=බාගන්න
-download_label=බාගන්න
-bookmark.title=දැනට ඇති දසුන (පිටපත් කරන්න හෝ නව කවුළුවක විවෘත කරන්න)
-bookmark_label=දැනට ඇති දසුන
-
-# Secondary toolbar and context menu
-tools.title=මෙවලම්
-tools_label=මෙවලම්
-first_page.title=මුල් පිටුවට යන්න
-first_page.label=මුල් පිටුවට යන්න
-first_page_label=මුල් පිටුවට යන්න
-last_page.title=අවසන් පිටුවට යන්න
-last_page.label=අවසන් පිටුවට යන්න
-last_page_label=අවසන් පිටුවට යන්න
-page_rotate_cw.title=දක්ශිණාවර්තව භ්රමණය
-page_rotate_cw.label=දක්ශිණාවර්තව භ්රමණය
-page_rotate_cw_label=දක්ශිණාවර්තව භ්රමණය
-page_rotate_ccw.title=වාමාවර්තව භ්රමණය
-page_rotate_ccw.label=වාමාවර්තව භ්රමණය
-page_rotate_ccw_label=වාමාවර්තව භ්රමණය
-
-cursor_hand_tool_label=අත් මෙවලම
-
-
-
-# Document properties dialog box
-document_properties.title=ලේඛන වත්කම්...
-document_properties_label=ලේඛන වත්කම්...
-document_properties_file_name=ගොනු නම:
-document_properties_file_size=ගොනු ප්රමාණය:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} බයිට)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} බයිට)
-document_properties_title=සිරස්තලය:
-document_properties_author=කතෲ
-document_properties_subject=මාතෘකාව:
-document_properties_keywords=යතුරු වදන්:
-document_properties_creation_date=නිර්මිත දිනය:
-document_properties_modification_date=වෙනස්කල දිනය:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=නිර්මාපක:
-document_properties_producer=PDF නිශ්පාදක:
-document_properties_version=PDF නිකුතුව:
-document_properties_page_count=පිටු ගණන:
-document_properties_page_size=පිටුවේ විශාලත්වය:
-document_properties_page_size_unit_inches=අඟල්
-document_properties_page_size_unit_millimeters=මිමි
-document_properties_page_size_orientation_portrait=සිරස්
-document_properties_page_size_orientation_landscape=තිරස්
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}}
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=වේගවත් ජාල දසුන:
-document_properties_linearized_yes=ඔව්
-document_properties_linearized_no=නැහැ
-document_properties_close=වසන්න
-
-print_progress_message=ලේඛනය මුද්රණය සඳහා සූදානම් කරමින්…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=අවලංගු කරන්න
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=පැති තීරුවට මාරුවන්න
-toggle_sidebar_label=පැති තීරුවට මාරුවන්න
-document_outline_label=ලේඛනයේ පිට මායිම
-attachments.title=ඇමිණුම් පෙන්වන්න
-attachments_label=ඇමිණුම්
-thumbs.title=සිඟිති රූ පෙන්වන්න
-thumbs_label=සිඟිති රූ
-findbar.title=ලේඛනය තුළ සොයන්න
-findbar_label=සොයන්න
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=පිටුව {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=පිටුවෙ සිඟිත රූව {{page}}
-
-# Find panel button title and messages
-find_input.title=සොයන්න
-find_previous.title=මේ වාක්ය ඛණ්ඩය මීට පෙර යෙදුණු ස්ථානය සොයන්න
-find_previous_label=පෙර:
-find_next.title=මේ වාක්ය ඛණ්ඩය මීළඟට යෙදෙන ස්ථානය සොයන්න
-find_next_label=මීළඟ
-find_highlight=සියල්ල උද්දීපනය
-find_match_case_label=අකුරු ගළපන්න
-find_entire_word_label=සම්පූර්ණ වචන
-find_reached_top=පිටුවේ ඉහළ කෙළවරට ලගාවිය, පහළ සිට ඉදිරියට යමින්
-find_reached_bottom=පිටුවේ පහළ කෙළවරට ලගාවිය, ඉහළ සිට ඉදිරියට යමින්
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit[zero]=ගැලපුම් {{limit}} ට වඩා
-find_not_found=ඔබ සෙව් වචන හමු නොවීය
-
-# Error panel labels
-error_more_info=බොහෝ තොරතුරු
-error_less_info=අවම තොරතුරු
-error_close=වසන්න
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (නිකුතුව: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=පණිවිඩය: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ගොනුව: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=පේළිය: {{line}}
-rendering_error=පිටුව රෙන්ඩර් විමේදි ගැටලුවක් හට ගැනුණි.
-
-# Predefined zoom values
-page_scale_width=පිටුවේ පළල
-page_scale_fit=පිටුවට සුදුසු ලෙස
-page_scale_auto=ස්වයංක්රීය විශාලණය
-page_scale_actual=නියමිත ප්රමාණය
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=දෝෂය
-loading_error=PDF පූරණය විමේදි දෝෂයක් හට ගැනුණි.
-invalid_file_error=දූශිත හෝ සාවද්ය PDF ගොනුව.
-missing_file_error=නැතිවූ PDF ගොනුව.
-unexpected_response_error=බලාපොරොත්තු නොවූ සේවාදායක ප්රතිචාරය.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} විස්තරය]
-password_label=මෙම PDF ගොනුව විවෘත කිරීමට මුරපදය ඇතුළත් කරන්න.
-password_invalid=වැරදි මුරපදයක්. කරුණාකර නැවත උත්සහ කරන්න.
-password_ok=හරි
-password_cancel=එපා
-
-printing_not_supported=අවවාදයයි: මෙම ගවේශකය මුද්රණය සඳහා සම්පූර්ණයෙන් සහය නොදක්වයි.
-printing_not_ready=අවවාදයයි: මුද්රණය සඳහා PDF සම්පූර්ණයෙන් පූර්ණය වී නොමැත.
-web_fonts_disabled=ජාල අකුරු අක්රීයයි: තිළැලි PDF අකුරු භාවිත කළ නොහැක.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=මීට පෙර පිටුව
+previous_label=පෙර
+next.title=මීළඟ පිටුව
+next_label=මීළඟ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=පිටුව
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=කුඩා කරන්න
+zoom_out_label=කුඩා කරන්න
+zoom_in.title=විශාල කරන්න
+zoom_in_label=විශාල කරන්න
+zoom.title=විශාලණය
+presentation_mode.title=ඉදිරිපත්කිරීම් ප්රකාරය වෙත මාරුවන්න
+presentation_mode_label=ඉදිරිපත්කිරීම් ප්රකාරය
+open_file.title=ගොනුව විවෘත කරන්න
+open_file_label=විවෘත කරන්න
+print.title=මුද්රණය
+print_label=මුද්රණය
+download.title=බාගන්න
+download_label=බාගන්න
+bookmark.title=දැනට ඇති දසුන (පිටපත් කරන්න හෝ නව කවුළුවක විවෘත කරන්න)
+bookmark_label=දැනට ඇති දසුන
+
+# Secondary toolbar and context menu
+tools.title=මෙවලම්
+tools_label=මෙවලම්
+first_page.title=මුල් පිටුවට යන්න
+first_page.label=මුල් පිටුවට යන්න
+first_page_label=මුල් පිටුවට යන්න
+last_page.title=අවසන් පිටුවට යන්න
+last_page.label=අවසන් පිටුවට යන්න
+last_page_label=අවසන් පිටුවට යන්න
+page_rotate_cw.title=දක්ශිණාවර්තව භ්රමණය
+page_rotate_cw.label=දක්ශිණාවර්තව භ්රමණය
+page_rotate_cw_label=දක්ශිණාවර්තව භ්රමණය
+page_rotate_ccw.title=වාමාවර්තව භ්රමණය
+page_rotate_ccw.label=වාමාවර්තව භ්රමණය
+page_rotate_ccw_label=වාමාවර්තව භ්රමණය
+
+cursor_hand_tool_label=අත් මෙවලම
+
+
+
+# Document properties dialog box
+document_properties.title=ලේඛන වත්කම්...
+document_properties_label=ලේඛන වත්කම්...
+document_properties_file_name=ගොනු නම:
+document_properties_file_size=ගොනු ප්රමාණය:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} බයිට)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} බයිට)
+document_properties_title=සිරස්තලය:
+document_properties_author=කතෲ
+document_properties_subject=මාතෘකාව:
+document_properties_keywords=යතුරු වදන්:
+document_properties_creation_date=නිර්මිත දිනය:
+document_properties_modification_date=වෙනස්කල දිනය:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=නිර්මාපක:
+document_properties_producer=PDF නිශ්පාදක:
+document_properties_version=PDF නිකුතුව:
+document_properties_page_count=පිටු ගණන:
+document_properties_page_size=පිටුවේ විශාලත්වය:
+document_properties_page_size_unit_inches=අඟල්
+document_properties_page_size_unit_millimeters=මිමි
+document_properties_page_size_orientation_portrait=සිරස්
+document_properties_page_size_orientation_landscape=තිරස්
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=වේගවත් ජාල දසුන:
+document_properties_linearized_yes=ඔව්
+document_properties_linearized_no=නැහැ
+document_properties_close=වසන්න
+
+print_progress_message=ලේඛනය මුද්රණය සඳහා සූදානම් කරමින්…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=අවලංගු කරන්න
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=පැති තීරුවට මාරුවන්න
+toggle_sidebar_label=පැති තීරුවට මාරුවන්න
+document_outline_label=ලේඛනයේ පිට මායිම
+attachments.title=ඇමිණුම් පෙන්වන්න
+attachments_label=ඇමිණුම්
+thumbs.title=සිඟිති රූ පෙන්වන්න
+thumbs_label=සිඟිති රූ
+findbar.title=ලේඛනය තුළ සොයන්න
+findbar_label=සොයන්න
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=පිටුව {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=පිටුවෙ සිඟිත රූව {{page}}
+
+# Find panel button title and messages
+find_input.title=සොයන්න
+find_previous.title=මේ වාක්ය ඛණ්ඩය මීට පෙර යෙදුණු ස්ථානය සොයන්න
+find_previous_label=පෙර:
+find_next.title=මේ වාක්ය ඛණ්ඩය මීළඟට යෙදෙන ස්ථානය සොයන්න
+find_next_label=මීළඟ
+find_highlight=සියල්ල උද්දීපනය
+find_match_case_label=අකුරු ගළපන්න
+find_entire_word_label=සම්පූර්ණ වචන
+find_reached_top=පිටුවේ ඉහළ කෙළවරට ලගාවිය, පහළ සිට ඉදිරියට යමින්
+find_reached_bottom=පිටුවේ පහළ කෙළවරට ලගාවිය, ඉහළ සිට ඉදිරියට යමින්
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit[zero]=ගැලපුම් {{limit}} ට වඩා
+find_not_found=ඔබ සෙව් වචන හමු නොවීය
+
+# Error panel labels
+error_more_info=බොහෝ තොරතුරු
+error_less_info=අවම තොරතුරු
+error_close=වසන්න
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (නිකුතුව: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=පණිවිඩය: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ගොනුව: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=පේළිය: {{line}}
+rendering_error=පිටුව රෙන්ඩර් විමේදි ගැටලුවක් හට ගැනුණි.
+
+# Predefined zoom values
+page_scale_width=පිටුවේ පළල
+page_scale_fit=පිටුවට සුදුසු ලෙස
+page_scale_auto=ස්වයංක්රීය විශාලණය
+page_scale_actual=නියමිත ප්රමාණය
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=දෝෂය
+loading_error=PDF පූරණය විමේදි දෝෂයක් හට ගැනුණි.
+invalid_file_error=දූශිත හෝ සාවද්ය PDF ගොනුව.
+missing_file_error=නැතිවූ PDF ගොනුව.
+unexpected_response_error=බලාපොරොත්තු නොවූ සේවාදායක ප්රතිචාරය.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} විස්තරය]
+password_label=මෙම PDF ගොනුව විවෘත කිරීමට මුරපදය ඇතුළත් කරන්න.
+password_invalid=වැරදි මුරපදයක්. කරුණාකර නැවත උත්සහ කරන්න.
+password_ok=හරි
+password_cancel=එපා
+
+printing_not_supported=අවවාදයයි: මෙම ගවේශකය මුද්රණය සඳහා සම්පූර්ණයෙන් සහය නොදක්වයි.
+printing_not_ready=අවවාදයයි: මුද්රණය සඳහා PDF සම්පූර්ණයෙන් පූර්ණය වී නොමැත.
+web_fonts_disabled=ජාල අකුරු අක්රීයයි: තිළැලි PDF අකුරු භාවිත කළ නොහැක.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sk/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sk/viewer.properties
index a08911bf999a1af41012f5e9d7e7f3bad3c6f6f4..cdf83210c624a076ed1d04d1fe37257045c7ab3b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sk/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sk/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Predchádzajúca strana
-previous_label=Predchádzajúca
-next.title=Nasledujúca strana
-next_label=Nasledujúca
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Strana
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=z {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} z {{pagesCount}})
-
-zoom_out.title=Zmenšiť veľkosť
-zoom_out_label=Zmenšiť veľkosť
-zoom_in.title=Zväčšiť veľkosť
-zoom_in_label=Zväčšiť veľkosť
-zoom.title=Nastavenie veľkosti
-presentation_mode.title=Prepnúť na režim prezentácie
-presentation_mode_label=Režim prezentácie
-open_file.title=Otvoriť súbor
-open_file_label=Otvoriť
-print.title=Tlačiť
-print_label=Tlačiť
-download.title=Prevziať
-download_label=Prevziať
-bookmark.title=Aktuálne zobrazenie (kopírovať alebo otvoriť v novom okne)
-bookmark_label=Aktuálne zobrazenie
-
-# Secondary toolbar and context menu
-tools.title=Nástroje
-tools_label=Nástroje
-first_page.title=Prejsť na prvú stranu
-first_page.label=Prejsť na prvú stranu
-first_page_label=Prejsť na prvú stranu
-last_page.title=Prejsť na poslednú stranu
-last_page.label=Prejsť na poslednú stranu
-last_page_label=Prejsť na poslednú stranu
-page_rotate_cw.title=Otočiť v smere hodinových ručičiek
-page_rotate_cw.label=Otočiť v smere hodinových ručičiek
-page_rotate_cw_label=Otočiť v smere hodinových ručičiek
-page_rotate_ccw.title=Otočiť proti smeru hodinových ručičiek
-page_rotate_ccw.label=Otočiť proti smeru hodinových ručičiek
-page_rotate_ccw_label=Otočiť proti smeru hodinových ručičiek
-
-cursor_text_select_tool.title=Povoliť výber textu
-cursor_text_select_tool_label=Výber textu
-cursor_hand_tool.title=Povoliť nástroj ruka
-cursor_hand_tool_label=Nástroj ruka
-
-scroll_vertical.title=Používať zvislé posúvanie
-scroll_vertical_label=Zvislé posúvanie
-scroll_horizontal.title=Používať vodorovné posúvanie
-scroll_horizontal_label=Vodorovné posúvanie
-scroll_wrapped.title=Použiť postupné posúvanie
-scroll_wrapped_label=Postupné posúvanie
-
-spread_none.title=Nezdružovať stránky
-spread_none_label=Žiadne združovanie
-spread_odd.title=Združí stránky a umiestni nepárne stránky vľavo
-spread_odd_label=Združiť stránky (nepárne vľavo)
-spread_even.title=Združí stránky a umiestni párne stránky vľavo
-spread_even_label=Združiť stránky (párne vľavo)
-
-# Document properties dialog box
-document_properties.title=Vlastnosti dokumentu…
-document_properties_label=Vlastnosti dokumentu…
-document_properties_file_name=Názov súboru:
-document_properties_file_size=Veľkosť súboru:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kB ({{size_b}} bajtov)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
-document_properties_title=Názov:
-document_properties_author=Autor:
-document_properties_subject=Predmet:
-document_properties_keywords=Kľúčové slová:
-document_properties_creation_date=Dátum vytvorenia:
-document_properties_modification_date=Dátum úpravy:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Vytvoril:
-document_properties_producer=Tvorca PDF:
-document_properties_version=Verzia PDF:
-document_properties_page_count=Počet strán:
-document_properties_page_size=Veľkosť stránky:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=na výšku
-document_properties_page_size_orientation_landscape=na šírku
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=List
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Rýchle Web View:
-document_properties_linearized_yes=Áno
-document_properties_linearized_no=Nie
-document_properties_close=Zavrieť
-
-print_progress_message=Príprava dokumentu na tlač…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Zrušiť
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Prepnúť bočný panel
-toggle_sidebar_notification.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy)
-toggle_sidebar_label=Prepnúť bočný panel
-document_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky)
-document_outline_label=Osnova dokumentu
-attachments.title=Zobraziť prílohy
-attachments_label=Prílohy
-thumbs.title=Zobraziť miniatúry
-thumbs_label=Miniatúry
-findbar.title=Hľadať v dokumente
-findbar_label=Hľadať
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Strana {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Strana {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatúra strany {{page}}
-
-# Find panel button title and messages
-find_input.title=Hľadať
-find_input.placeholder=Hľadať v dokumente…
-find_previous.title=Vyhľadať predchádzajúci výskyt reťazca
-find_previous_label=Predchádzajúce
-find_next.title=Vyhľadať ďalší výskyt reťazca
-find_next_label=Ďalšie
-find_highlight=Zvýrazniť všetky
-find_match_case_label=Rozlišovať veľkosť písmen
-find_entire_word_label=Celé slová
-find_reached_top=Bol dosiahnutý začiatok stránky, pokračuje sa od konca
-find_reached_bottom=Bol dosiahnutý koniec stránky, pokračuje sa od začiatku
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}}. z {{total}} výsledku
-find_match_count[two]={{current}}. z {{total}} výsledkov
-find_match_count[few]={{current}}. z {{total}} výsledkov
-find_match_count[many]={{current}}. z {{total}} výsledkov
-find_match_count[other]={{current}}. z {{total}} výsledkov
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Viac než {{limit}} výsledkov
-find_match_count_limit[one]=Viac než {{limit}} výsledok
-find_match_count_limit[two]=Viac než {{limit}} výsledky
-find_match_count_limit[few]=Viac než {{limit}} výsledky
-find_match_count_limit[many]=Viac než {{limit}} výsledkov
-find_match_count_limit[other]=Viac než {{limit}} výsledkov
-find_not_found=Výraz nebol nájdený
-
-# Error panel labels
-error_more_info=Viac informácií
-error_less_info=Menej informácií
-error_close=Zavrieť
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (zostavenie: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Správa: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Zásobník: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Súbor: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Riadok: {{line}}
-rendering_error=Pri vykresľovaní stránky sa vyskytla chyba.
-
-# Predefined zoom values
-page_scale_width=Na šírku strany
-page_scale_fit=Na veľkosť strany
-page_scale_auto=Automatická veľkosť
-page_scale_actual=Skutočná veľkosť
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Chyba
-loading_error=Počas načítavania dokumentu PDF sa vyskytla chyba.
-invalid_file_error=Neplatný alebo poškodený súbor PDF.
-missing_file_error=Chýbajúci súbor PDF.
-unexpected_response_error=Neočakávaná odpoveď zo servera.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Anotácia typu {{type}}]
-password_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo.
-password_invalid=Heslo nie je platné. Skúste to znova.
-password_ok=OK
-password_cancel=Zrušiť
-
-printing_not_supported=Upozornenie: tlač nie je v tomto prehliadači plne podporovaná.
-printing_not_ready=Upozornenie: súbor PDF nie je plne načítaný pre tlač.
-web_fonts_disabled=Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF.
-document_colors_not_allowed=Dokumenty PDF nemajú povolené používať vlastné farby, pretože voľba "Povoliť stránkam používať vlastné farby" je v nastaveniach prehliadača vypnutá.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Predchádzajúca strana
+previous_label=Predchádzajúca
+next.title=Nasledujúca strana
+next_label=Nasledujúca
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strana
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Zmenšiť veľkosť
+zoom_out_label=Zmenšiť veľkosť
+zoom_in.title=Zväčšiť veľkosť
+zoom_in_label=Zväčšiť veľkosť
+zoom.title=Nastavenie veľkosti
+presentation_mode.title=Prepnúť na režim prezentácie
+presentation_mode_label=Režim prezentácie
+open_file.title=Otvoriť súbor
+open_file_label=Otvoriť
+print.title=Tlačiť
+print_label=Tlačiť
+download.title=Prevziať
+download_label=Prevziať
+bookmark.title=Aktuálne zobrazenie (kopírovať alebo otvoriť v novom okne)
+bookmark_label=Aktuálne zobrazenie
+
+# Secondary toolbar and context menu
+tools.title=Nástroje
+tools_label=Nástroje
+first_page.title=Prejsť na prvú stranu
+first_page.label=Prejsť na prvú stranu
+first_page_label=Prejsť na prvú stranu
+last_page.title=Prejsť na poslednú stranu
+last_page.label=Prejsť na poslednú stranu
+last_page_label=Prejsť na poslednú stranu
+page_rotate_cw.title=Otočiť v smere hodinových ručičiek
+page_rotate_cw.label=Otočiť v smere hodinových ručičiek
+page_rotate_cw_label=Otočiť v smere hodinových ručičiek
+page_rotate_ccw.title=Otočiť proti smeru hodinových ručičiek
+page_rotate_ccw.label=Otočiť proti smeru hodinových ručičiek
+page_rotate_ccw_label=Otočiť proti smeru hodinových ručičiek
+
+cursor_text_select_tool.title=Povoliť výber textu
+cursor_text_select_tool_label=Výber textu
+cursor_hand_tool.title=Povoliť nástroj ruka
+cursor_hand_tool_label=Nástroj ruka
+
+scroll_vertical.title=Používať zvislé posúvanie
+scroll_vertical_label=Zvislé posúvanie
+scroll_horizontal.title=Používať vodorovné posúvanie
+scroll_horizontal_label=Vodorovné posúvanie
+scroll_wrapped.title=Použiť postupné posúvanie
+scroll_wrapped_label=Postupné posúvanie
+
+spread_none.title=Nezdružovať stránky
+spread_none_label=Žiadne združovanie
+spread_odd.title=Združí stránky a umiestni nepárne stránky vľavo
+spread_odd_label=Združiť stránky (nepárne vľavo)
+spread_even.title=Združí stránky a umiestni párne stránky vľavo
+spread_even_label=Združiť stránky (párne vľavo)
+
+# Document properties dialog box
+document_properties.title=Vlastnosti dokumentu…
+document_properties_label=Vlastnosti dokumentu…
+document_properties_file_name=Názov súboru:
+document_properties_file_size=Veľkosť súboru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bajtov)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
+document_properties_title=Názov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=Kľúčové slová:
+document_properties_creation_date=Dátum vytvorenia:
+document_properties_modification_date=Dátum úpravy:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Vytvoril:
+document_properties_producer=Tvorca PDF:
+document_properties_version=Verzia PDF:
+document_properties_page_count=Počet strán:
+document_properties_page_size=Veľkosť stránky:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=na výšku
+document_properties_page_size_orientation_landscape=na šírku
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=List
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rýchle Web View:
+document_properties_linearized_yes=Áno
+document_properties_linearized_no=Nie
+document_properties_close=Zavrieť
+
+print_progress_message=Príprava dokumentu na tlač…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Zrušiť
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Prepnúť bočný panel
+toggle_sidebar_notification.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy)
+toggle_sidebar_label=Prepnúť bočný panel
+document_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky)
+document_outline_label=Osnova dokumentu
+attachments.title=Zobraziť prílohy
+attachments_label=Prílohy
+thumbs.title=Zobraziť miniatúry
+thumbs_label=Miniatúry
+findbar.title=Hľadať v dokumente
+findbar_label=Hľadať
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Strana {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatúra strany {{page}}
+
+# Find panel button title and messages
+find_input.title=Hľadať
+find_input.placeholder=Hľadať v dokumente…
+find_previous.title=Vyhľadať predchádzajúci výskyt reťazca
+find_previous_label=Predchádzajúce
+find_next.title=Vyhľadať ďalší výskyt reťazca
+find_next_label=Ďalšie
+find_highlight=Zvýrazniť všetky
+find_match_case_label=Rozlišovať veľkosť písmen
+find_entire_word_label=Celé slová
+find_reached_top=Bol dosiahnutý začiatok stránky, pokračuje sa od konca
+find_reached_bottom=Bol dosiahnutý koniec stránky, pokračuje sa od začiatku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}}. z {{total}} výsledku
+find_match_count[two]={{current}}. z {{total}} výsledkov
+find_match_count[few]={{current}}. z {{total}} výsledkov
+find_match_count[many]={{current}}. z {{total}} výsledkov
+find_match_count[other]={{current}}. z {{total}} výsledkov
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Viac než {{limit}} výsledkov
+find_match_count_limit[one]=Viac než {{limit}} výsledok
+find_match_count_limit[two]=Viac než {{limit}} výsledky
+find_match_count_limit[few]=Viac než {{limit}} výsledky
+find_match_count_limit[many]=Viac než {{limit}} výsledkov
+find_match_count_limit[other]=Viac než {{limit}} výsledkov
+find_not_found=Výraz nebol nájdený
+
+# Error panel labels
+error_more_info=Viac informácií
+error_less_info=Menej informácií
+error_close=Zavrieť
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (zostavenie: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Správa: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Zásobník: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Súbor: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Riadok: {{line}}
+rendering_error=Pri vykresľovaní stránky sa vyskytla chyba.
+
+# Predefined zoom values
+page_scale_width=Na šírku strany
+page_scale_fit=Na veľkosť strany
+page_scale_auto=Automatická veľkosť
+page_scale_actual=Skutočná veľkosť
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Chyba
+loading_error=Počas načítavania dokumentu PDF sa vyskytla chyba.
+invalid_file_error=Neplatný alebo poškodený súbor PDF.
+missing_file_error=Chýbajúci súbor PDF.
+unexpected_response_error=Neočakávaná odpoveď zo servera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotácia typu {{type}}]
+password_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo.
+password_invalid=Heslo nie je platné. Skúste to znova.
+password_ok=OK
+password_cancel=Zrušiť
+
+printing_not_supported=Upozornenie: tlač nie je v tomto prehliadači plne podporovaná.
+printing_not_ready=Upozornenie: súbor PDF nie je plne načítaný pre tlač.
+web_fonts_disabled=Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF.
+document_colors_not_allowed=Dokumenty PDF nemajú povolené používať vlastné farby, pretože voľba "Povoliť stránkam používať vlastné farby" je v nastaveniach prehliadača vypnutá.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sl/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sl/viewer.properties
index 86db2d9abc84b52b960a19546be8c963f1fcade3..f0243a29038b22ff428b5ee6ece318b21dabf960 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sl/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sl/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Prejšnja stran
-previous_label=Nazaj
-next.title=Naslednja stran
-next_label=Naprej
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Stran
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=od {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} od {{pagesCount}})
-
-zoom_out.title=Pomanjšaj
-zoom_out_label=Pomanjšaj
-zoom_in.title=Povečaj
-zoom_in_label=Povečaj
-zoom.title=Povečava
-presentation_mode.title=Preklopi v način predstavitve
-presentation_mode_label=Način predstavitve
-open_file.title=Odpri datoteko
-open_file_label=Odpri
-print.title=Natisni
-print_label=Natisni
-download.title=Prenesi
-download_label=Prenesi
-bookmark.title=Trenutni pogled (kopiraj ali odpri v novem oknu)
-bookmark_label=Trenutni pogled
-
-# Secondary toolbar and context menu
-tools.title=Orodja
-tools_label=Orodja
-first_page.title=Pojdi na prvo stran
-first_page.label=Pojdi na prvo stran
-first_page_label=Pojdi na prvo stran
-last_page.title=Pojdi na zadnjo stran
-last_page.label=Pojdi na zadnjo stran
-last_page_label=Pojdi na zadnjo stran
-page_rotate_cw.title=Zavrti v smeri urnega kazalca
-page_rotate_cw.label=Zavrti v smeri urnega kazalca
-page_rotate_cw_label=Zavrti v smeri urnega kazalca
-page_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca
-page_rotate_ccw.label=Zavrti v nasprotni smeri urnega kazalca
-page_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca
-
-cursor_text_select_tool.title=Omogoči orodje za izbor besedila
-cursor_text_select_tool_label=Orodje za izbor besedila
-cursor_hand_tool.title=Omogoči roko
-cursor_hand_tool_label=Roka
-
-scroll_vertical.title=Uporabi navpično drsenje
-scroll_vertical_label=Navpično drsenje
-scroll_horizontal.title=Uporabi vodoravno drsenje
-scroll_horizontal_label=Vodoravno drsenje
-scroll_wrapped.title=Uporabi ovito drsenje
-scroll_wrapped_label=Ovito drsenje
-
-spread_none.title=Ne združuj razponov strani
-spread_none_label=Brez razponov
-spread_odd.title=Združuj razpone strani z začetkom pri lihih straneh
-spread_odd_label=Lihi razponi
-spread_even.title=Združuj razpone strani z začetkom pri sodih straneh
-spread_even_label=Sodi razponi
-
-# Document properties dialog box
-document_properties.title=Lastnosti dokumenta …
-document_properties_label=Lastnosti dokumenta …
-document_properties_file_name=Ime datoteke:
-document_properties_file_size=Velikost datoteke:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bajtov)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
-document_properties_title=Ime:
-document_properties_author=Avtor:
-document_properties_subject=Tema:
-document_properties_keywords=Ključne besede:
-document_properties_creation_date=Datum nastanka:
-document_properties_modification_date=Datum spremembe:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Ustvaril:
-document_properties_producer=Izdelovalec PDF:
-document_properties_version=Različica PDF:
-document_properties_page_count=Število strani:
-document_properties_page_size=Velikost strani:
-document_properties_page_size_unit_inches=palcev
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=pokončno
-document_properties_page_size_orientation_landscape=ležeče
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Pismo
-document_properties_page_size_name_legal=Pravno
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Hitri spletni ogled:
-document_properties_linearized_yes=Da
-document_properties_linearized_no=Ne
-document_properties_close=Zapri
-
-print_progress_message=Priprava dokumenta na tiskanje …
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}} %
-print_progress_close=Prekliči
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Preklopi stransko vrstico
-toggle_sidebar_notification.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke)
-toggle_sidebar_label=Preklopi stransko vrstico
-document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov)
-document_outline_label=Oris dokumenta
-attachments.title=Prikaži priponke
-attachments_label=Priponke
-thumbs.title=Prikaži sličice
-thumbs_label=Sličice
-findbar.title=Iskanje po dokumentu
-findbar_label=Najdi
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Stran {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Stran {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Sličica strani {{page}}
-
-# Find panel button title and messages
-find_input.title=Najdi
-find_input.placeholder=Najdi v dokumentu …
-find_previous.title=Najdi prejšnjo ponovitev iskanega
-find_previous_label=Najdi nazaj
-find_next.title=Najdi naslednjo ponovitev iskanega
-find_next_label=Najdi naprej
-find_highlight=Označi vse
-find_match_case_label=Razlikuj velike/male črke
-find_entire_word_label=Cele besede
-find_reached_top=Dosežen začetek dokumenta iz smeri konca
-find_reached_bottom=Doseženo konec dokumenta iz smeri začetka
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=Zadetek {{current}} od {{total}}
-find_match_count[two]=Zadetek {{current}} od {{total}}
-find_match_count[few]=Zadetek {{current}} od {{total}}
-find_match_count[many]=Zadetek {{current}} od {{total}}
-find_match_count[other]=Zadetek {{current}} od {{total}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Več kot {{limit}} zadetkov
-find_match_count_limit[one]=Več kot {{limit}} zadetek
-find_match_count_limit[two]=Več kot {{limit}} zadetka
-find_match_count_limit[few]=Več kot {{limit}} zadetki
-find_match_count_limit[many]=Več kot {{limit}} zadetkov
-find_match_count_limit[other]=Več kot {{limit}} zadetkov
-find_not_found=Iskanega ni mogoče najti
-
-# Error panel labels
-error_more_info=Več informacij
-error_less_info=Manj informacij
-error_close=Zapri
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js r{{version}} (graditev: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Sporočilo: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Sklad: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Datoteka: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Vrstica: {{line}}
-rendering_error=Med pripravljanjem strani je prišlo do napake!
-
-# Predefined zoom values
-page_scale_width=Širina strani
-page_scale_fit=Prilagodi stran
-page_scale_auto=Samodejno
-page_scale_actual=Dejanska velikost
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}} %
-
-# Loading indicator messages
-loading_error_indicator=Napaka
-loading_error=Med nalaganjem datoteke PDF je prišlo do napake.
-invalid_file_error=Neveljavna ali pokvarjena datoteka PDF.
-missing_file_error=Ni datoteke PDF.
-unexpected_response_error=Nepričakovan odgovor strežnika.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Opomba vrste {{type}}]
-password_label=Vnesite geslo za odpiranje te datoteke PDF.
-password_invalid=Neveljavno geslo. Poskusite znova.
-password_ok=V redu
-password_cancel=Prekliči
-
-printing_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja.
-printing_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje.
-web_fonts_disabled=Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti.
-document_colors_not_allowed=Dokumenti PDF ne smejo uporabljati svojih lastnih barv: možnost 'Dovoli stranem uporabo lastnih barv' je v brskalniku onemogočena.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prejšnja stran
+previous_label=Nazaj
+next.title=Naslednja stran
+next_label=Naprej
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stran
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Pomanjšaj
+zoom_out_label=Pomanjšaj
+zoom_in.title=Povečaj
+zoom_in_label=Povečaj
+zoom.title=Povečava
+presentation_mode.title=Preklopi v način predstavitve
+presentation_mode_label=Način predstavitve
+open_file.title=Odpri datoteko
+open_file_label=Odpri
+print.title=Natisni
+print_label=Natisni
+download.title=Prenesi
+download_label=Prenesi
+bookmark.title=Trenutni pogled (kopiraj ali odpri v novem oknu)
+bookmark_label=Trenutni pogled
+
+# Secondary toolbar and context menu
+tools.title=Orodja
+tools_label=Orodja
+first_page.title=Pojdi na prvo stran
+first_page.label=Pojdi na prvo stran
+first_page_label=Pojdi na prvo stran
+last_page.title=Pojdi na zadnjo stran
+last_page.label=Pojdi na zadnjo stran
+last_page_label=Pojdi na zadnjo stran
+page_rotate_cw.title=Zavrti v smeri urnega kazalca
+page_rotate_cw.label=Zavrti v smeri urnega kazalca
+page_rotate_cw_label=Zavrti v smeri urnega kazalca
+page_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca
+page_rotate_ccw.label=Zavrti v nasprotni smeri urnega kazalca
+page_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca
+
+cursor_text_select_tool.title=Omogoči orodje za izbor besedila
+cursor_text_select_tool_label=Orodje za izbor besedila
+cursor_hand_tool.title=Omogoči roko
+cursor_hand_tool_label=Roka
+
+scroll_vertical.title=Uporabi navpično drsenje
+scroll_vertical_label=Navpično drsenje
+scroll_horizontal.title=Uporabi vodoravno drsenje
+scroll_horizontal_label=Vodoravno drsenje
+scroll_wrapped.title=Uporabi ovito drsenje
+scroll_wrapped_label=Ovito drsenje
+
+spread_none.title=Ne združuj razponov strani
+spread_none_label=Brez razponov
+spread_odd.title=Združuj razpone strani z začetkom pri lihih straneh
+spread_odd_label=Lihi razponi
+spread_even.title=Združuj razpone strani z začetkom pri sodih straneh
+spread_even_label=Sodi razponi
+
+# Document properties dialog box
+document_properties.title=Lastnosti dokumenta …
+document_properties_label=Lastnosti dokumenta …
+document_properties_file_name=Ime datoteke:
+document_properties_file_size=Velikost datoteke:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtov)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
+document_properties_title=Ime:
+document_properties_author=Avtor:
+document_properties_subject=Tema:
+document_properties_keywords=Ključne besede:
+document_properties_creation_date=Datum nastanka:
+document_properties_modification_date=Datum spremembe:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ustvaril:
+document_properties_producer=Izdelovalec PDF:
+document_properties_version=Različica PDF:
+document_properties_page_count=Število strani:
+document_properties_page_size=Velikost strani:
+document_properties_page_size_unit_inches=palcev
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pokončno
+document_properties_page_size_orientation_landscape=ležeče
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Pismo
+document_properties_page_size_name_legal=Pravno
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hitri spletni ogled:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Ne
+document_properties_close=Zapri
+
+print_progress_message=Priprava dokumenta na tiskanje …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Prekliči
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Preklopi stransko vrstico
+toggle_sidebar_notification.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke)
+toggle_sidebar_label=Preklopi stransko vrstico
+document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov)
+document_outline_label=Oris dokumenta
+attachments.title=Prikaži priponke
+attachments_label=Priponke
+thumbs.title=Prikaži sličice
+thumbs_label=Sličice
+findbar.title=Iskanje po dokumentu
+findbar_label=Najdi
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Stran {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Stran {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Sličica strani {{page}}
+
+# Find panel button title and messages
+find_input.title=Najdi
+find_input.placeholder=Najdi v dokumentu …
+find_previous.title=Najdi prejšnjo ponovitev iskanega
+find_previous_label=Najdi nazaj
+find_next.title=Najdi naslednjo ponovitev iskanega
+find_next_label=Najdi naprej
+find_highlight=Označi vse
+find_match_case_label=Razlikuj velike/male črke
+find_entire_word_label=Cele besede
+find_reached_top=Dosežen začetek dokumenta iz smeri konca
+find_reached_bottom=Doseženo konec dokumenta iz smeri začetka
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Zadetek {{current}} od {{total}}
+find_match_count[two]=Zadetek {{current}} od {{total}}
+find_match_count[few]=Zadetek {{current}} od {{total}}
+find_match_count[many]=Zadetek {{current}} od {{total}}
+find_match_count[other]=Zadetek {{current}} od {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Več kot {{limit}} zadetkov
+find_match_count_limit[one]=Več kot {{limit}} zadetek
+find_match_count_limit[two]=Več kot {{limit}} zadetka
+find_match_count_limit[few]=Več kot {{limit}} zadetki
+find_match_count_limit[many]=Več kot {{limit}} zadetkov
+find_match_count_limit[other]=Več kot {{limit}} zadetkov
+find_not_found=Iskanega ni mogoče najti
+
+# Error panel labels
+error_more_info=Več informacij
+error_less_info=Manj informacij
+error_close=Zapri
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js r{{version}} (graditev: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Sporočilo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Sklad: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteka: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Vrstica: {{line}}
+rendering_error=Med pripravljanjem strani je prišlo do napake!
+
+# Predefined zoom values
+page_scale_width=Širina strani
+page_scale_fit=Prilagodi stran
+page_scale_auto=Samodejno
+page_scale_actual=Dejanska velikost
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Napaka
+loading_error=Med nalaganjem datoteke PDF je prišlo do napake.
+invalid_file_error=Neveljavna ali pokvarjena datoteka PDF.
+missing_file_error=Ni datoteke PDF.
+unexpected_response_error=Nepričakovan odgovor strežnika.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Opomba vrste {{type}}]
+password_label=Vnesite geslo za odpiranje te datoteke PDF.
+password_invalid=Neveljavno geslo. Poskusite znova.
+password_ok=V redu
+password_cancel=Prekliči
+
+printing_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja.
+printing_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje.
+web_fonts_disabled=Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti.
+document_colors_not_allowed=Dokumenti PDF ne smejo uporabljati svojih lastnih barv: možnost 'Dovoli stranem uporabo lastnih barv' je v brskalniku onemogočena.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/son/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/son/viewer.properties
index f5c1b46f5e5823833153d9c97624cb5dfd2029be..4085f55bc47a4ea39080ccccb5498d713a441504 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/son/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/son/viewer.properties
@@ -1,180 +1,180 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Moo bisante
-previous_label=Bisante
-next.title=Jinehere moo
-next_label=Jine
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Moo
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} ra
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra
-
-zoom_out.title=Nakasandi
-zoom_out_label=Nakasandi
-zoom_in.title=Bebbeerandi
-zoom_in_label=Bebbeerandi
-zoom.title=Bebbeerandi
-presentation_mode.title=Bere cebeyan alhaali
-presentation_mode_label=Cebeyan alhaali
-open_file.title=Tuku feeri
-open_file_label=Feeri
-print.title=Kar
-print_label=Kar
-download.title=Zumandi
-download_label=Zumandi
-bookmark.title=Sohõ gunarro (bere wala feeri zanfun taaga ra)
-bookmark_label=Sohõ gunaroo
-
-# Secondary toolbar and context menu
-tools.title=Goyjinawey
-tools_label=Goyjinawey
-first_page.title=Koy moo jinaa ga
-first_page.label=Koy moo jinaa ga
-first_page_label=Koy moo jinaa ga
-last_page.title=Koy moo koraa ga
-last_page.label=Koy moo koraa ga
-last_page_label=Koy moo koraa ga
-page_rotate_cw.title=Kuubi kanbe guma here
-page_rotate_cw.label=Kuubi kanbe guma here
-page_rotate_cw_label=Kuubi kanbe guma here
-page_rotate_ccw.title=Kuubi kanbe wowa here
-page_rotate_ccw.label=Kuubi kanbe wowa here
-page_rotate_ccw_label=Kuubi kanbe wowa here
-
-
-# Document properties dialog box
-document_properties.title=Takadda mayrawey…
-document_properties_label=Takadda mayrawey…
-document_properties_file_name=Tuku maa:
-document_properties_file_size=Tuku adadu:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}})
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}})
-document_properties_title=Tiiramaa:
-document_properties_author=Hantumkaw:
-document_properties_subject=Dalil:
-document_properties_keywords=Kufalkalimawey:
-document_properties_creation_date=Teeyan han:
-document_properties_modification_date=Barmayan han:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Teekaw:
-document_properties_producer=PDF berandikaw:
-document_properties_version=PDF dumi:
-document_properties_page_count=Moo hinna:
-document_properties_close=Daabu
-
-print_progress_message=Goo ma takaddaa soolu k'a kar se…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Naŋ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Kanjari ceraw zuu
-toggle_sidebar_notification.title=Kanjari ceraw-zuu (takaddaa goo nda filla-boŋ/hangandiyaŋ)
-toggle_sidebar_label=Kanjari ceraw zuu
-document_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi)
-document_outline_label=Takadda filla-boŋ
-attachments.title=Hangarey cebe
-attachments_label=Hangarey
-thumbs.title=Kabeboy biyey cebe
-thumbs_label=Kabeboy biyey
-findbar.title=Ceeci takaddaa ra
-findbar_label=Ceeci
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}} moo
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Kabeboy bii {{page}} moo še
-
-# Find panel button title and messages
-find_input.title=Ceeci
-find_input.placeholder=Ceeci takaddaa ra…
-find_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci
-find_previous_label=Bisante
-find_next.title=Kalimaɲaŋoo hiino bangayroo ceeci
-find_next_label=Jine
-find_highlight=Ikul šilbay
-find_match_case_label=Harfu-beeriyan hawgay
-find_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo
-find_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga
-find_not_found=Kalimaɲaa mana duwandi
-
-# Error panel labels
-error_more_info=Alhabar tontoni
-error_less_info=Alhabar tontoni
-error_close=Daabu
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Alhabar: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Dekeri: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Tuku: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Žeeri: {{line}}
-rendering_error=Firka bangay kaŋ moɲoo goo ma willandi.
-
-# Predefined zoom values
-page_scale_width=Mooo hayyan
-page_scale_fit=Moo sawayan
-page_scale_auto=Boŋše azzaati barmayyan
-page_scale_actual=Adadu cimi
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Firka
-loading_error=Firka bangay kaŋ PDF goo ma zumandi.
-invalid_file_error=PDF tuku laala wala laybante.
-missing_file_error=PDF tuku kumante.
-unexpected_response_error=Manti feršikaw tuuruyan maatante.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt={{type}} maasa-caw]
-password_label=Šennikufal dam ka PDF tukoo woo feeri.
-password_invalid=Šennikufal laalo. Ceeci koyne taare.
-password_ok=Ayyo
-password_cancel=Naŋ
-
-printing_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo.
-printing_not_ready=Yaamar: PDF ši zunbu ka timme karyan še.
-web_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey.
-document_colors_not_allowed=PDF takaddawey ši duu fondo ka ngey boŋ noonawey zaa: “Naŋ moɲey ma ngey boŋ noonawey suuba” ši dira ceecikaa ga.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Moo bisante
+previous_label=Bisante
+next.title=Jinehere moo
+next_label=Jine
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Moo
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ra
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra
+
+zoom_out.title=Nakasandi
+zoom_out_label=Nakasandi
+zoom_in.title=Bebbeerandi
+zoom_in_label=Bebbeerandi
+zoom.title=Bebbeerandi
+presentation_mode.title=Bere cebeyan alhaali
+presentation_mode_label=Cebeyan alhaali
+open_file.title=Tuku feeri
+open_file_label=Feeri
+print.title=Kar
+print_label=Kar
+download.title=Zumandi
+download_label=Zumandi
+bookmark.title=Sohõ gunarro (bere wala feeri zanfun taaga ra)
+bookmark_label=Sohõ gunaroo
+
+# Secondary toolbar and context menu
+tools.title=Goyjinawey
+tools_label=Goyjinawey
+first_page.title=Koy moo jinaa ga
+first_page.label=Koy moo jinaa ga
+first_page_label=Koy moo jinaa ga
+last_page.title=Koy moo koraa ga
+last_page.label=Koy moo koraa ga
+last_page_label=Koy moo koraa ga
+page_rotate_cw.title=Kuubi kanbe guma here
+page_rotate_cw.label=Kuubi kanbe guma here
+page_rotate_cw_label=Kuubi kanbe guma here
+page_rotate_ccw.title=Kuubi kanbe wowa here
+page_rotate_ccw.label=Kuubi kanbe wowa here
+page_rotate_ccw_label=Kuubi kanbe wowa here
+
+
+# Document properties dialog box
+document_properties.title=Takadda mayrawey…
+document_properties_label=Takadda mayrawey…
+document_properties_file_name=Tuku maa:
+document_properties_file_size=Tuku adadu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}})
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}})
+document_properties_title=Tiiramaa:
+document_properties_author=Hantumkaw:
+document_properties_subject=Dalil:
+document_properties_keywords=Kufalkalimawey:
+document_properties_creation_date=Teeyan han:
+document_properties_modification_date=Barmayan han:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Teekaw:
+document_properties_producer=PDF berandikaw:
+document_properties_version=PDF dumi:
+document_properties_page_count=Moo hinna:
+document_properties_close=Daabu
+
+print_progress_message=Goo ma takaddaa soolu k'a kar se…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Naŋ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Kanjari ceraw zuu
+toggle_sidebar_notification.title=Kanjari ceraw-zuu (takaddaa goo nda filla-boŋ/hangandiyaŋ)
+toggle_sidebar_label=Kanjari ceraw zuu
+document_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi)
+document_outline_label=Takadda filla-boŋ
+attachments.title=Hangarey cebe
+attachments_label=Hangarey
+thumbs.title=Kabeboy biyey cebe
+thumbs_label=Kabeboy biyey
+findbar.title=Ceeci takaddaa ra
+findbar_label=Ceeci
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} moo
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Kabeboy bii {{page}} moo še
+
+# Find panel button title and messages
+find_input.title=Ceeci
+find_input.placeholder=Ceeci takaddaa ra…
+find_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci
+find_previous_label=Bisante
+find_next.title=Kalimaɲaŋoo hiino bangayroo ceeci
+find_next_label=Jine
+find_highlight=Ikul šilbay
+find_match_case_label=Harfu-beeriyan hawgay
+find_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo
+find_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga
+find_not_found=Kalimaɲaa mana duwandi
+
+# Error panel labels
+error_more_info=Alhabar tontoni
+error_less_info=Alhabar tontoni
+error_close=Daabu
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Alhabar: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Dekeri: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tuku: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Žeeri: {{line}}
+rendering_error=Firka bangay kaŋ moɲoo goo ma willandi.
+
+# Predefined zoom values
+page_scale_width=Mooo hayyan
+page_scale_fit=Moo sawayan
+page_scale_auto=Boŋše azzaati barmayyan
+page_scale_actual=Adadu cimi
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Firka
+loading_error=Firka bangay kaŋ PDF goo ma zumandi.
+invalid_file_error=PDF tuku laala wala laybante.
+missing_file_error=PDF tuku kumante.
+unexpected_response_error=Manti feršikaw tuuruyan maatante.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt={{type}} maasa-caw]
+password_label=Šennikufal dam ka PDF tukoo woo feeri.
+password_invalid=Šennikufal laalo. Ceeci koyne taare.
+password_ok=Ayyo
+password_cancel=Naŋ
+
+printing_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo.
+printing_not_ready=Yaamar: PDF ši zunbu ka timme karyan še.
+web_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey.
+document_colors_not_allowed=PDF takaddawey ši duu fondo ka ngey boŋ noonawey zaa: “Naŋ moɲey ma ngey boŋ noonawey suuba” ši dira ceecikaa ga.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sq/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sq/viewer.properties
index b0f12b21e8c8aa75beb7341b42796c9d9aa3a9c5..96265f14ce4097bc1598f58e036e8f685eca0a53 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sq/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sq/viewer.properties
@@ -1,241 +1,241 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Faqja e Mëparshme
-previous_label=E mëparshmja
-next.title=Faqja Pasuese
-next_label=Pasuesja
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Faqe
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=nga {{pagesCount}} gjithsej
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} nga {{pagesCount}})
-
-zoom_out.title=Zvogëlojeni
-zoom_out_label=Zvogëlojeni
-zoom_in.title=Zmadhojeni
-zoom_in_label=Zmadhojini
-zoom.title=Zoom
-presentation_mode.title=Kalo te Mënyra Paraqitje
-presentation_mode_label=Mënyra Paraqitje
-open_file.title=Hapni Kartelë
-open_file_label=Hape
-print.title=Shtypje
-print_label=Shtype
-download.title=Shkarkim
-download_label=Shkarkoje
-bookmark.title=Pamja e tanishme (kopjojeni ose hapeni në dritare të re)
-bookmark_label=Pamja e Tanishme
-
-# Secondary toolbar and context menu
-tools.title=Mjete
-tools_label=Mjete
-first_page.title=Kaloni te Faqja e Parë
-first_page.label=Kaloni te Faqja e Parë
-first_page_label=Kaloni te Faqja e Parë
-last_page.title=Kaloni te Faqja e Fundit
-last_page.label=Kaloni te Faqja e Fundit
-last_page_label=Kaloni te Faqja e Fundit
-page_rotate_cw.title=Rrotullojeni Në Kahun Orar
-page_rotate_cw.label=Rrotulloje Në Kahun Orar
-page_rotate_cw_label=Rrotulloje Në Kahun Orar
-page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar
-page_rotate_ccw.label=Rrotulloje Në Kahun Kundërorar
-page_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar
-
-cursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti
-cursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti
-cursor_hand_tool.title=Aktivizo Mjetin Dorë
-cursor_hand_tool_label=Mjeti Dorë
-
-scroll_vertical.title=Përdor Rrëshqitje Vertikale
-scroll_vertical_label=Rrëshqitje Vertikale
-scroll_horizontal.title=Përdor Rrëshqitje Horizontale
-scroll_horizontal_label=Rrëshqitje Horizontale
-scroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje
-scroll_wrapped_label=Rrëshqitje Me Mbështjellje
-
-
-# Document properties dialog box
-document_properties.title=Veti Dokumenti…
-document_properties_label=Veti Dokumenti…
-document_properties_file_name=Emër kartele:
-document_properties_file_size=Madhësi kartele:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bajte)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bajte)
-document_properties_title=Titull:
-document_properties_author=Autor:
-document_properties_subject=Subjekt:
-document_properties_keywords=Fjalëkyçe:
-document_properties_creation_date=Datë Krijimi:
-document_properties_modification_date=Datë Ndryshimi:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Krijues:
-document_properties_producer=Prodhues PDF-je:
-document_properties_version=Version PDF-je:
-document_properties_page_count=Numër Faqesh:
-document_properties_page_size=Madhësi Faqeje:
-document_properties_page_size_unit_inches=inç
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portret
-document_properties_page_size_orientation_landscape=së gjeri
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=Po
-document_properties_linearized_no=Jo
-document_properties_close=Mbylleni
-
-print_progress_message=Po përgatitet dokumenti për shtypje…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Anuloje
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Shfaqni/Fshihni Anështyllën
-toggle_sidebar_notification.title=Shfaqni Anështyllën (dokumenti përmban përvijim/bashkëngjitje)
-toggle_sidebar_label=Shfaq/Fshih Anështyllën
-document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët)
-document_outline_label=Përvijim Dokumenti
-attachments.title=Shfaqni Bashkëngjitje
-attachments_label=Bashkëngjitje
-thumbs.title=Shfaqni Miniatura
-thumbs_label=Miniatura
-findbar.title=Gjeni në Dokument
-findbar_label=Gjej
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Faqja {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Faqja {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniaturë e Faqes {{page}}
-
-# Find panel button title and messages
-find_input.title=Gjej
-find_input.placeholder=Gjeni në dokument…
-find_previous.title=Gjeni hasjen e mëparshme të togfjalëshit
-find_previous_label=E mëparshmja
-find_next.title=Gjeni hasjen pasuese të togfjalëshit
-find_next_label=Pasuesja
-find_highlight=Theksoji të tëra
-find_match_case_label=Siç është shkruar
-find_entire_word_label=Krejt fjalët
-find_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit
-find_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} nga {{total}} përputhje gjithsej
-find_match_count[two]={{current}} nga {{total}} përputhje gjithsej
-find_match_count[few]={{current}} nga {{total}} përputhje gjithsej
-find_match_count[many]={{current}} nga {{total}} përputhje gjithsej
-find_match_count[other]={{current}} nga {{total}} përputhje gjithsej
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Më shumë se {{limit}} përputhje
-find_match_count_limit[one]=Më shumë se {{limit}} përputhje
-find_match_count_limit[two]=Më shumë se {{limit}} përputhje
-find_match_count_limit[few]=Më shumë se {{limit}} përputhje
-find_match_count_limit[many]=Më shumë se {{limit}} përputhje
-find_match_count_limit[other]=Më shumë se {{limit}} përputhje
-find_not_found=Togfjalësh që s’gjendet
-
-# Error panel labels
-error_more_info=Më Tepër të Dhëna
-error_less_info=Më Pak të Dhëna
-error_close=Mbylleni
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mesazh: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Kartelë: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rresht: {{line}}
-rendering_error=Ndodhi një gabim gjatë riprodhimit të faqes.
-
-# Predefined zoom values
-page_scale_width=Gjerësi Faqeje
-page_scale_fit=Sa Nxë Faqja
-page_scale_auto=Zoom i Vetvetishëm
-page_scale_actual=Madhësia Faktike
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Gabim
-loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së.
-invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar.
-missing_file_error=Kartelë PDF që mungon.
-unexpected_response_error=Përgjigje shërbyesi e papritur.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Nënvizim {{type}}]
-password_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF.
-password_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni.
-password_ok=OK
-password_cancel=Anuloje
-
-printing_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues.
-printing_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni.
-web_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF.
-document_colors_not_allowed=Dokumenteve PDF s’u lejohet të përdorin ngjyrat e tyre: 'Lejoji faqet t’i zgjedhin vetë ngjyrat' është e çaktivizuar te shfletuesi.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Faqja e Mëparshme
+previous_label=E mëparshmja
+next.title=Faqja Pasuese
+next_label=Pasuesja
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Faqe
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=nga {{pagesCount}} gjithsej
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} nga {{pagesCount}})
+
+zoom_out.title=Zvogëlojeni
+zoom_out_label=Zvogëlojeni
+zoom_in.title=Zmadhojeni
+zoom_in_label=Zmadhojini
+zoom.title=Zoom
+presentation_mode.title=Kalo te Mënyra Paraqitje
+presentation_mode_label=Mënyra Paraqitje
+open_file.title=Hapni Kartelë
+open_file_label=Hape
+print.title=Shtypje
+print_label=Shtype
+download.title=Shkarkim
+download_label=Shkarkoje
+bookmark.title=Pamja e tanishme (kopjojeni ose hapeni në dritare të re)
+bookmark_label=Pamja e Tanishme
+
+# Secondary toolbar and context menu
+tools.title=Mjete
+tools_label=Mjete
+first_page.title=Kaloni te Faqja e Parë
+first_page.label=Kaloni te Faqja e Parë
+first_page_label=Kaloni te Faqja e Parë
+last_page.title=Kaloni te Faqja e Fundit
+last_page.label=Kaloni te Faqja e Fundit
+last_page_label=Kaloni te Faqja e Fundit
+page_rotate_cw.title=Rrotullojeni Në Kahun Orar
+page_rotate_cw.label=Rrotulloje Në Kahun Orar
+page_rotate_cw_label=Rrotulloje Në Kahun Orar
+page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar
+page_rotate_ccw.label=Rrotulloje Në Kahun Kundërorar
+page_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar
+
+cursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti
+cursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti
+cursor_hand_tool.title=Aktivizo Mjetin Dorë
+cursor_hand_tool_label=Mjeti Dorë
+
+scroll_vertical.title=Përdor Rrëshqitje Vertikale
+scroll_vertical_label=Rrëshqitje Vertikale
+scroll_horizontal.title=Përdor Rrëshqitje Horizontale
+scroll_horizontal_label=Rrëshqitje Horizontale
+scroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje
+scroll_wrapped_label=Rrëshqitje Me Mbështjellje
+
+
+# Document properties dialog box
+document_properties.title=Veti Dokumenti…
+document_properties_label=Veti Dokumenti…
+document_properties_file_name=Emër kartele:
+document_properties_file_size=Madhësi kartele:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajte)
+document_properties_title=Titull:
+document_properties_author=Autor:
+document_properties_subject=Subjekt:
+document_properties_keywords=Fjalëkyçe:
+document_properties_creation_date=Datë Krijimi:
+document_properties_modification_date=Datë Ndryshimi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Krijues:
+document_properties_producer=Prodhues PDF-je:
+document_properties_version=Version PDF-je:
+document_properties_page_count=Numër Faqesh:
+document_properties_page_size=Madhësi Faqeje:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portret
+document_properties_page_size_orientation_landscape=së gjeri
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Po
+document_properties_linearized_no=Jo
+document_properties_close=Mbylleni
+
+print_progress_message=Po përgatitet dokumenti për shtypje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anuloje
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Shfaqni/Fshihni Anështyllën
+toggle_sidebar_notification.title=Shfaqni Anështyllën (dokumenti përmban përvijim/bashkëngjitje)
+toggle_sidebar_label=Shfaq/Fshih Anështyllën
+document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët)
+document_outline_label=Përvijim Dokumenti
+attachments.title=Shfaqni Bashkëngjitje
+attachments_label=Bashkëngjitje
+thumbs.title=Shfaqni Miniatura
+thumbs_label=Miniatura
+findbar.title=Gjeni në Dokument
+findbar_label=Gjej
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Faqja {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Faqja {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturë e Faqes {{page}}
+
+# Find panel button title and messages
+find_input.title=Gjej
+find_input.placeholder=Gjeni në dokument…
+find_previous.title=Gjeni hasjen e mëparshme të togfjalëshit
+find_previous_label=E mëparshmja
+find_next.title=Gjeni hasjen pasuese të togfjalëshit
+find_next_label=Pasuesja
+find_highlight=Theksoji të tëra
+find_match_case_label=Siç është shkruar
+find_entire_word_label=Krejt fjalët
+find_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit
+find_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[two]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[few]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[many]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[other]={{current}} nga {{total}} përputhje gjithsej
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Më shumë se {{limit}} përputhje
+find_match_count_limit[one]=Më shumë se {{limit}} përputhje
+find_match_count_limit[two]=Më shumë se {{limit}} përputhje
+find_match_count_limit[few]=Më shumë se {{limit}} përputhje
+find_match_count_limit[many]=Më shumë se {{limit}} përputhje
+find_match_count_limit[other]=Më shumë se {{limit}} përputhje
+find_not_found=Togfjalësh që s’gjendet
+
+# Error panel labels
+error_more_info=Më Tepër të Dhëna
+error_less_info=Më Pak të Dhëna
+error_close=Mbylleni
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesazh: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Kartelë: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rresht: {{line}}
+rendering_error=Ndodhi një gabim gjatë riprodhimit të faqes.
+
+# Predefined zoom values
+page_scale_width=Gjerësi Faqeje
+page_scale_fit=Sa Nxë Faqja
+page_scale_auto=Zoom i Vetvetishëm
+page_scale_actual=Madhësia Faktike
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Gabim
+loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së.
+invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar.
+missing_file_error=Kartelë PDF që mungon.
+unexpected_response_error=Përgjigje shërbyesi e papritur.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Nënvizim {{type}}]
+password_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF.
+password_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni.
+password_ok=OK
+password_cancel=Anuloje
+
+printing_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues.
+printing_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni.
+web_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF.
+document_colors_not_allowed=Dokumenteve PDF s’u lejohet të përdorin ngjyrat e tyre: 'Lejoji faqet t’i zgjedhin vetë ngjyrat' është e çaktivizuar te shfletuesi.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sr/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sr/viewer.properties
index cee0a4f839bf2ef74196d33aea2b93f5cd9900de..8915b5c8f8f8031cddb0b55f38702d7d5c6f1a88 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sr/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sr/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Претходна страница
-previous_label=Претходна
-next.title=Следећа страница
-next_label=Следећа
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Страница
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=од {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} од {{pagesCount}})
-
-zoom_out.title=Умањи
-zoom_out_label=Умањи
-zoom_in.title=Увеличај
-zoom_in_label=Увеличај
-zoom.title=Увеличавање
-presentation_mode.title=Промени на приказ у режиму презентације
-presentation_mode_label=Режим презентације
-open_file.title=Отвори датотеку
-open_file_label=Отвори
-print.title=Штампај
-print_label=Штампај
-download.title=Преузми
-download_label=Преузми
-bookmark.title=Тренутни приказ (копирај или отвори нови прозор)
-bookmark_label=Тренутни приказ
-
-# Secondary toolbar and context menu
-tools.title=Алатке
-tools_label=Алатке
-first_page.title=Иди на прву страницу
-first_page.label=Иди на прву страницу
-first_page_label=Иди на прву страницу
-last_page.title=Иди на последњу страницу
-last_page.label=Иди на последњу страницу
-last_page_label=Иди на последњу страницу
-page_rotate_cw.title=Ротирај у смеру казаљке на сату
-page_rotate_cw.label=Ротирај у смеру казаљке на сату
-page_rotate_cw_label=Ротирај у смеру казаљке на сату
-page_rotate_ccw.title=Ротирај у смеру супротном од казаљке на сату
-page_rotate_ccw.label=Ротирај у смеру супротном од казаљке на сату
-page_rotate_ccw_label=Ротирај у смеру супротном од казаљке на сату
-
-cursor_text_select_tool.title=Омогући алат за селектовање текста
-cursor_text_select_tool_label=Алат за селектовање текста
-cursor_hand_tool.title=Омогући алат за померање
-cursor_hand_tool_label=Алат за померање
-
-scroll_vertical.title=Користи вертикално скроловање
-scroll_vertical_label=Вертикално скроловање
-scroll_horizontal.title=Користи хоризонтално скроловање
-scroll_horizontal_label=Хоризонтално скроловање
-scroll_wrapped.title=Користи скроловање по омоту
-scroll_wrapped_label=Скроловање по омоту
-
-spread_none.title=Немој спајати ширења страница
-spread_none_label=Без распростирања
-spread_odd.title=Споји ширења страница које почињу непарним бројем
-spread_odd_label=Непарна распростирања
-spread_even.title=Споји ширења страница које почињу парним бројем
-spread_even_label=Парна распростирања
-
-# Document properties dialog box
-document_properties.title=Параметри документа…
-document_properties_label=Параметри документа…
-document_properties_file_name=Име датотеке:
-document_properties_file_size=Величина датотеке:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} B)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} B)
-document_properties_title=Наслов:
-document_properties_author=Аутор:
-document_properties_subject=Тема:
-document_properties_keywords=Кључне речи:
-document_properties_creation_date=Датум креирања:
-document_properties_modification_date=Датум модификације:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Стваралац:
-document_properties_producer=PDF произвођач:
-document_properties_version=PDF верзија:
-document_properties_page_count=Број страница:
-document_properties_page_size=Величина странице:
-document_properties_page_size_unit_inches=ин
-document_properties_page_size_unit_millimeters=мм
-document_properties_page_size_orientation_portrait=усправно
-document_properties_page_size_orientation_landscape=водоравно
-document_properties_page_size_name_a3=А3
-document_properties_page_size_name_a4=А4
-document_properties_page_size_name_letter=Слово
-document_properties_page_size_name_legal=Права
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Брз веб приказ:
-document_properties_linearized_yes=Да
-document_properties_linearized_no=Не
-document_properties_close=Затвори
-
-print_progress_message=Припремам документ за штампање…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Откажи
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Прикажи додатну палету
-toggle_sidebar_notification.title=Прикажи додатну траку (докуменат садржи оквире/прилоге)
-toggle_sidebar_label=Прикажи додатну палету
-document_outline.title=Прикажи контуру документа (дупли клик за проширење/скупљање елемената)
-document_outline_label=Контура документа
-attachments.title=Прикажи прилоге
-attachments_label=Прилози
-thumbs.title=Прикажи сличице
-thumbs_label=Сличице
-findbar.title=Пронађи у документу
-findbar_label=Пронађи
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Страница {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Страница {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Сличица од странице {{page}}
-
-# Find panel button title and messages
-find_input.title=Пронађи
-find_input.placeholder=Пронађи у документу…
-find_previous.title=Пронађи претходну појаву фразе
-find_previous_label=Претходна
-find_next.title=Пронађи следећу појаву фразе
-find_next_label=Следећа
-find_highlight=Истакнути све
-find_match_case_label=Подударања
-find_entire_word_label=Целе речи
-find_reached_top=Достигнут врх документа, наставио са дна
-find_reached_bottom=Достигнуто дно документа, наставио са врха
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} од {{total}} одговара
-find_match_count[two]={{current}} од {{total}} одговара
-find_match_count[few]={{current}} од {{total}} одговара
-find_match_count[many]={{current}} од {{total}} одговара
-find_match_count[other]={{current}} од {{total}} одговара
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Више од {{limit}} одговара
-find_match_count_limit[one]=Више од {{limit}} одговара
-find_match_count_limit[two]=Више од {{limit}} одговара
-find_match_count_limit[few]=Више од {{limit}} одговара
-find_match_count_limit[many]=Више од {{limit}} одговара
-find_match_count_limit[other]=Више од {{limit}} одговара
-find_not_found=Фраза није пронађена
-
-# Error panel labels
-error_more_info=Више информација
-error_less_info=Мање информација
-error_close=Затвори
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Порука: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Стек: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Датотека: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Линија: {{line}}
-rendering_error=Дошло је до грешке приликом рендеровања ове странице.
-
-# Predefined zoom values
-page_scale_width=Ширина странице
-page_scale_fit=Прилагоди страницу
-page_scale_auto=Аутоматско увеличавање
-page_scale_actual=Стварна величина
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Грешка
-loading_error=Дошло је до грешке приликом учитавања PDF-а.
-invalid_file_error=PDF датотека је оштећена или је неисправна.
-missing_file_error=PDF датотека није пронађена.
-unexpected_response_error=Неочекиван одговор од сервера.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} коментар]
-password_label=Унесите лозинку да бисте отворили овај PDF докуменат.
-password_invalid=Неисправна лозинка. Покушајте поново.
-password_ok=У реду
-password_cancel=Откажи
-
-printing_not_supported=Упозорење: Штампање није у потпуности подржано у овом прегледачу.
-printing_not_ready=Упозорење: PDF није у потпуности учитан за штампу.
-web_fonts_disabled=Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове.
-document_colors_not_allowed=PDF документи не могу да користе сопствене боје: “Дозволи страницама да изаберу своје боје” је деактивирано у прегледачу.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Претходна страница
+previous_label=Претходна
+next.title=Следећа страница
+next_label=Следећа
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=од {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} од {{pagesCount}})
+
+zoom_out.title=Умањи
+zoom_out_label=Умањи
+zoom_in.title=Увеличај
+zoom_in_label=Увеличај
+zoom.title=Увеличавање
+presentation_mode.title=Промени на приказ у режиму презентације
+presentation_mode_label=Режим презентације
+open_file.title=Отвори датотеку
+open_file_label=Отвори
+print.title=Штампај
+print_label=Штампај
+download.title=Преузми
+download_label=Преузми
+bookmark.title=Тренутни приказ (копирај или отвори нови прозор)
+bookmark_label=Тренутни приказ
+
+# Secondary toolbar and context menu
+tools.title=Алатке
+tools_label=Алатке
+first_page.title=Иди на прву страницу
+first_page.label=Иди на прву страницу
+first_page_label=Иди на прву страницу
+last_page.title=Иди на последњу страницу
+last_page.label=Иди на последњу страницу
+last_page_label=Иди на последњу страницу
+page_rotate_cw.title=Ротирај у смеру казаљке на сату
+page_rotate_cw.label=Ротирај у смеру казаљке на сату
+page_rotate_cw_label=Ротирај у смеру казаљке на сату
+page_rotate_ccw.title=Ротирај у смеру супротном од казаљке на сату
+page_rotate_ccw.label=Ротирај у смеру супротном од казаљке на сату
+page_rotate_ccw_label=Ротирај у смеру супротном од казаљке на сату
+
+cursor_text_select_tool.title=Омогући алат за селектовање текста
+cursor_text_select_tool_label=Алат за селектовање текста
+cursor_hand_tool.title=Омогући алат за померање
+cursor_hand_tool_label=Алат за померање
+
+scroll_vertical.title=Користи вертикално скроловање
+scroll_vertical_label=Вертикално скроловање
+scroll_horizontal.title=Користи хоризонтално скроловање
+scroll_horizontal_label=Хоризонтално скроловање
+scroll_wrapped.title=Користи скроловање по омоту
+scroll_wrapped_label=Скроловање по омоту
+
+spread_none.title=Немој спајати ширења страница
+spread_none_label=Без распростирања
+spread_odd.title=Споји ширења страница које почињу непарним бројем
+spread_odd_label=Непарна распростирања
+spread_even.title=Споји ширења страница које почињу парним бројем
+spread_even_label=Парна распростирања
+
+# Document properties dialog box
+document_properties.title=Параметри документа…
+document_properties_label=Параметри документа…
+document_properties_file_name=Име датотеке:
+document_properties_file_size=Величина датотеке:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Наслов:
+document_properties_author=Аутор:
+document_properties_subject=Тема:
+document_properties_keywords=Кључне речи:
+document_properties_creation_date=Датум креирања:
+document_properties_modification_date=Датум модификације:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Стваралац:
+document_properties_producer=PDF произвођач:
+document_properties_version=PDF верзија:
+document_properties_page_count=Број страница:
+document_properties_page_size=Величина странице:
+document_properties_page_size_unit_inches=ин
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=усправно
+document_properties_page_size_orientation_landscape=водоравно
+document_properties_page_size_name_a3=А3
+document_properties_page_size_name_a4=А4
+document_properties_page_size_name_letter=Слово
+document_properties_page_size_name_legal=Права
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Брз веб приказ:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Не
+document_properties_close=Затвори
+
+print_progress_message=Припремам документ за штампање…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Откажи
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Прикажи додатну палету
+toggle_sidebar_notification.title=Прикажи додатну траку (докуменат садржи оквире/прилоге)
+toggle_sidebar_label=Прикажи додатну палету
+document_outline.title=Прикажи контуру документа (дупли клик за проширење/скупљање елемената)
+document_outline_label=Контура документа
+attachments.title=Прикажи прилоге
+attachments_label=Прилози
+thumbs.title=Прикажи сличице
+thumbs_label=Сличице
+findbar.title=Пронађи у документу
+findbar_label=Пронађи
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Страница {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Сличица од странице {{page}}
+
+# Find panel button title and messages
+find_input.title=Пронађи
+find_input.placeholder=Пронађи у документу…
+find_previous.title=Пронађи претходну појаву фразе
+find_previous_label=Претходна
+find_next.title=Пронађи следећу појаву фразе
+find_next_label=Следећа
+find_highlight=Истакнути све
+find_match_case_label=Подударања
+find_entire_word_label=Целе речи
+find_reached_top=Достигнут врх документа, наставио са дна
+find_reached_bottom=Достигнуто дно документа, наставио са врха
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} од {{total}} одговара
+find_match_count[two]={{current}} од {{total}} одговара
+find_match_count[few]={{current}} од {{total}} одговара
+find_match_count[many]={{current}} од {{total}} одговара
+find_match_count[other]={{current}} од {{total}} одговара
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Више од {{limit}} одговара
+find_match_count_limit[one]=Више од {{limit}} одговара
+find_match_count_limit[two]=Више од {{limit}} одговара
+find_match_count_limit[few]=Више од {{limit}} одговара
+find_match_count_limit[many]=Више од {{limit}} одговара
+find_match_count_limit[other]=Више од {{limit}} одговара
+find_not_found=Фраза није пронађена
+
+# Error panel labels
+error_more_info=Више информација
+error_less_info=Мање информација
+error_close=Затвори
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Порука: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Датотека: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Линија: {{line}}
+rendering_error=Дошло је до грешке приликом рендеровања ове странице.
+
+# Predefined zoom values
+page_scale_width=Ширина странице
+page_scale_fit=Прилагоди страницу
+page_scale_auto=Аутоматско увеличавање
+page_scale_actual=Стварна величина
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Грешка
+loading_error=Дошло је до грешке приликом учитавања PDF-а.
+invalid_file_error=PDF датотека је оштећена или је неисправна.
+missing_file_error=PDF датотека није пронађена.
+unexpected_response_error=Неочекиван одговор од сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} коментар]
+password_label=Унесите лозинку да бисте отворили овај PDF докуменат.
+password_invalid=Неисправна лозинка. Покушајте поново.
+password_ok=У реду
+password_cancel=Откажи
+
+printing_not_supported=Упозорење: Штампање није у потпуности подржано у овом прегледачу.
+printing_not_ready=Упозорење: PDF није у потпуности учитан за штампу.
+web_fonts_disabled=Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове.
+document_colors_not_allowed=PDF документи не могу да користе сопствене боје: “Дозволи страницама да изаберу своје боје” је деактивирано у прегледачу.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sv-SE/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sv-SE/viewer.properties
index 3d2f0cf438c23e3c9e6d36c023791fe95d5d8506..5e28d59ba1e8b002d2423e8e438c621bbdec26ef 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sv-SE/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/sv-SE/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Föregående sida
-previous_label=Föregående
-next.title=Nästa sida
-next_label=Nästa
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Sida
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=av {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} av {{pagesCount}})
-
-zoom_out.title=Zooma ut
-zoom_out_label=Zooma ut
-zoom_in.title=Zooma in
-zoom_in_label=Zooma in
-zoom.title=Zoom
-presentation_mode.title=Byt till presentationsläge
-presentation_mode_label=Presentationsläge
-open_file.title=Öppna fil
-open_file_label=Öppna
-print.title=Skriv ut
-print_label=Skriv ut
-download.title=Hämta
-download_label=Hämta
-bookmark.title=Aktuell vy (kopiera eller öppna i nytt fönster)
-bookmark_label=Aktuell vy
-
-# Secondary toolbar and context menu
-tools.title=Verktyg
-tools_label=Verktyg
-first_page.title=Gå till första sidan
-first_page.label=Gå till första sidan
-first_page_label=Gå till första sidan
-last_page.title=Gå till sista sidan
-last_page.label=Gå till sista sidan
-last_page_label=Gå till sista sidan
-page_rotate_cw.title=Rotera medurs
-page_rotate_cw.label=Rotera medurs
-page_rotate_cw_label=Rotera medurs
-page_rotate_ccw.title=Rotera moturs
-page_rotate_ccw.label=Rotera moturs
-page_rotate_ccw_label=Rotera moturs
-
-cursor_text_select_tool.title=Aktivera textmarkeringsverktyg
-cursor_text_select_tool_label=Textmarkeringsverktyg
-cursor_hand_tool.title=Aktivera handverktyg
-cursor_hand_tool_label=Handverktyg
-
-scroll_vertical.title=Använd vertikal rullning
-scroll_vertical_label=Vertikal rullning
-scroll_horizontal.title=Använd horisontell rullning
-scroll_horizontal_label=Horisontell rullning
-scroll_wrapped.title=Använd överlappande rullning
-scroll_wrapped_label=Överlappande rullning
-
-spread_none.title=Visa enkelsidor
-spread_none_label=Enkelsidor
-spread_odd.title=Visa uppslag med olika sidnummer till vänster
-spread_odd_label=Uppslag med framsida
-spread_even.title=Visa uppslag med lika sidnummer till vänster
-spread_even_label=Uppslag utan framsida
-
-# Document properties dialog box
-document_properties.title=Dokumentegenskaper…
-document_properties_label=Dokumentegenskaper…
-document_properties_file_name=Filnamn:
-document_properties_file_size=Filstorlek:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} kB ({{size_b}} byte)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} byte)
-document_properties_title=Titel:
-document_properties_author=Författare:
-document_properties_subject=Ämne:
-document_properties_keywords=Nyckelord:
-document_properties_creation_date=Skapades:
-document_properties_modification_date=Ändrades:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Skapare:
-document_properties_producer=PDF-producent:
-document_properties_version=PDF-version:
-document_properties_page_count=Sidantal:
-document_properties_page_size=Pappersstorlek:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=porträtt
-document_properties_page_size_orientation_landscape=landskap
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Snabb webbvisning:
-document_properties_linearized_yes=Ja
-document_properties_linearized_no=Nej
-document_properties_close=Stäng
-
-print_progress_message=Förbereder sidor för utskrift…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Avbryt
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Visa/dölj sidofält
-toggle_sidebar_notification.title=Visa/dölj sidofält (dokument innehåller översikt/bilagor)
-toggle_sidebar_label=Visa/dölj sidofält
-document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt)
-document_outline_label=Dokumentöversikt
-attachments.title=Visa Bilagor
-attachments_label=Bilagor
-thumbs.title=Visa miniatyrer
-thumbs_label=Miniatyrer
-findbar.title=Sök i dokument
-findbar_label=Sök
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Sida {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Sida {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Miniatyr av sida {{page}}
-
-# Find panel button title and messages
-find_input.title=Sök
-find_input.placeholder=Sök i dokument…
-find_previous.title=Hitta föregående förekomst av frasen
-find_previous_label=Föregående
-find_next.title=Hitta nästa förekomst av frasen
-find_next_label=Nästa
-find_highlight=Markera alla
-find_match_case_label=Matcha versal/gemen
-find_entire_word_label=Hela ord
-find_reached_top=Nådde början av dokumentet, började från slutet
-find_reached_bottom=Nådde slutet på dokumentet, började från början
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} av {{total}} träff
-find_match_count[two]={{current}} av {{total}} träffar
-find_match_count[few]={{current}} av {{total}} träffar
-find_match_count[many]={{current}} av {{total}} träffar
-find_match_count[other]={{current}} av {{total}} träffar
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Mer än {{limit}} träffar
-find_match_count_limit[one]=Mer än {{limit}} träff
-find_match_count_limit[two]=Mer än {{limit}} träffar
-find_match_count_limit[few]=Mer än {{limit}} träffar
-find_match_count_limit[many]=Mer än {{limit}} träffar
-find_match_count_limit[other]=Mer än {{limit}} träffar
-find_not_found=Frasen hittades inte
-
-# Error panel labels
-error_more_info=Mer information
-error_less_info=Mindre information
-error_close=Stäng
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Meddelande: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fil: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rad: {{line}}
-rendering_error=Ett fel uppstod vid visning av sidan.
-
-# Predefined zoom values
-page_scale_width=Sidbredd
-page_scale_fit=Anpassa sida
-page_scale_auto=Automatisk zoom
-page_scale_actual=Verklig storlek
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Fel
-loading_error=Ett fel uppstod vid laddning av PDF-filen.
-invalid_file_error=Ogiltig eller korrupt PDF-fil.
-missing_file_error=Saknad PDF-fil.
-unexpected_response_error=Oväntat svar från servern.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}} {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}}-annotering]
-password_label=Skriv in lösenordet för att öppna PDF-filen.
-password_invalid=Ogiltigt lösenord. Försök igen.
-password_ok=OK
-password_cancel=Avbryt
-
-printing_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren.
-printing_not_ready=Varning: PDF:en är inte klar för utskrift.
-web_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt.
-document_colors_not_allowed=PDF-dokument tillåts inte använda egna färger: “Låt sidor använda egna färger” är inaktiverat i webbläsaren.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Föregående sida
+previous_label=Föregående
+next.title=Nästa sida
+next_label=Nästa
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sida
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zooma ut
+zoom_out_label=Zooma ut
+zoom_in.title=Zooma in
+zoom_in_label=Zooma in
+zoom.title=Zoom
+presentation_mode.title=Byt till presentationsläge
+presentation_mode_label=Presentationsläge
+open_file.title=Öppna fil
+open_file_label=Öppna
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Hämta
+download_label=Hämta
+bookmark.title=Aktuell vy (kopiera eller öppna i nytt fönster)
+bookmark_label=Aktuell vy
+
+# Secondary toolbar and context menu
+tools.title=Verktyg
+tools_label=Verktyg
+first_page.title=Gå till första sidan
+first_page.label=Gå till första sidan
+first_page_label=Gå till första sidan
+last_page.title=Gå till sista sidan
+last_page.label=Gå till sista sidan
+last_page_label=Gå till sista sidan
+page_rotate_cw.title=Rotera medurs
+page_rotate_cw.label=Rotera medurs
+page_rotate_cw_label=Rotera medurs
+page_rotate_ccw.title=Rotera moturs
+page_rotate_ccw.label=Rotera moturs
+page_rotate_ccw_label=Rotera moturs
+
+cursor_text_select_tool.title=Aktivera textmarkeringsverktyg
+cursor_text_select_tool_label=Textmarkeringsverktyg
+cursor_hand_tool.title=Aktivera handverktyg
+cursor_hand_tool_label=Handverktyg
+
+scroll_vertical.title=Använd vertikal rullning
+scroll_vertical_label=Vertikal rullning
+scroll_horizontal.title=Använd horisontell rullning
+scroll_horizontal_label=Horisontell rullning
+scroll_wrapped.title=Använd överlappande rullning
+scroll_wrapped_label=Överlappande rullning
+
+spread_none.title=Visa enkelsidor
+spread_none_label=Enkelsidor
+spread_odd.title=Visa uppslag med olika sidnummer till vänster
+spread_odd_label=Uppslag med framsida
+spread_even.title=Visa uppslag med lika sidnummer till vänster
+spread_even_label=Uppslag utan framsida
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaper…
+document_properties_label=Dokumentegenskaper…
+document_properties_file_name=Filnamn:
+document_properties_file_size=Filstorlek:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Titel:
+document_properties_author=Författare:
+document_properties_subject=Ämne:
+document_properties_keywords=Nyckelord:
+document_properties_creation_date=Skapades:
+document_properties_modification_date=Ändrades:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Skapare:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-version:
+document_properties_page_count=Sidantal:
+document_properties_page_size=Pappersstorlek:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=porträtt
+document_properties_page_size_orientation_landscape=landskap
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Snabb webbvisning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nej
+document_properties_close=Stäng
+
+print_progress_message=Förbereder sidor för utskrift…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Visa/dölj sidofält
+toggle_sidebar_notification.title=Visa/dölj sidofält (dokument innehåller översikt/bilagor)
+toggle_sidebar_label=Visa/dölj sidofält
+document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt)
+document_outline_label=Dokumentöversikt
+attachments.title=Visa Bilagor
+attachments_label=Bilagor
+thumbs.title=Visa miniatyrer
+thumbs_label=Miniatyrer
+findbar.title=Sök i dokument
+findbar_label=Sök
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Sida {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sida {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyr av sida {{page}}
+
+# Find panel button title and messages
+find_input.title=Sök
+find_input.placeholder=Sök i dokument…
+find_previous.title=Hitta föregående förekomst av frasen
+find_previous_label=Föregående
+find_next.title=Hitta nästa förekomst av frasen
+find_next_label=Nästa
+find_highlight=Markera alla
+find_match_case_label=Matcha versal/gemen
+find_entire_word_label=Hela ord
+find_reached_top=Nådde början av dokumentet, började från slutet
+find_reached_bottom=Nådde slutet på dokumentet, började från början
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} träff
+find_match_count[two]={{current}} av {{total}} träffar
+find_match_count[few]={{current}} av {{total}} träffar
+find_match_count[many]={{current}} av {{total}} träffar
+find_match_count[other]={{current}} av {{total}} träffar
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mer än {{limit}} träffar
+find_match_count_limit[one]=Mer än {{limit}} träff
+find_match_count_limit[two]=Mer än {{limit}} träffar
+find_match_count_limit[few]=Mer än {{limit}} träffar
+find_match_count_limit[many]=Mer än {{limit}} träffar
+find_match_count_limit[other]=Mer än {{limit}} träffar
+find_not_found=Frasen hittades inte
+
+# Error panel labels
+error_more_info=Mer information
+error_less_info=Mindre information
+error_close=Stäng
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Meddelande: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rad: {{line}}
+rendering_error=Ett fel uppstod vid visning av sidan.
+
+# Predefined zoom values
+page_scale_width=Sidbredd
+page_scale_fit=Anpassa sida
+page_scale_auto=Automatisk zoom
+page_scale_actual=Verklig storlek
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fel
+loading_error=Ett fel uppstod vid laddning av PDF-filen.
+invalid_file_error=Ogiltig eller korrupt PDF-fil.
+missing_file_error=Saknad PDF-fil.
+unexpected_response_error=Oväntat svar från servern.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotering]
+password_label=Skriv in lösenordet för att öppna PDF-filen.
+password_invalid=Ogiltigt lösenord. Försök igen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren.
+printing_not_ready=Varning: PDF:en är inte klar för utskrift.
+web_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt.
+document_colors_not_allowed=PDF-dokument tillåts inte använda egna färger: “Låt sidor använda egna färger” är inaktiverat i webbläsaren.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ta/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ta/viewer.properties
index 19a8de432a6f77074ba214f8e8e708826636a189..75d5240d37816657710386ab093192a1aeb62aeb 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ta/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ta/viewer.properties
@@ -1,201 +1,201 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=முந்தைய பக்கம்
-previous_label=முந்தையது
-next.title=அடுத்த பக்கம்
-next_label=அடுத்து
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=பக்கம்
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} இல்
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages={{pagesCount}}) இல் ({{pageNumber}}
-
-zoom_out.title=சிறிதாக்கு
-zoom_out_label=சிறிதாக்கு
-zoom_in.title=பெரிதாக்கு
-zoom_in_label=பெரிதாக்கு
-zoom.title=பெரிதாக்கு
-presentation_mode.title=விளக்ககாட்சி பயன்முறைக்கு மாறு
-presentation_mode_label=விளக்ககாட்சி பயன்முறை
-open_file.title=கோப்பினை திற
-open_file_label=திற
-print.title=அச்சிடு
-print_label=அச்சிடு
-download.title=பதிவிறக்கு
-download_label=பதிவிறக்கு
-bookmark.title=தற்போதைய காட்சி (புதிய சாளரத்திற்கு நகலெடு அல்லது புதிய சாளரத்தில் திற)
-bookmark_label=தற்போதைய காட்சி
-
-# Secondary toolbar and context menu
-tools.title=கருவிகள்
-tools_label=கருவிகள்
-first_page.title=முதல் பக்கத்திற்கு செல்லவும்
-first_page.label=முதல் பக்கத்திற்கு செல்லவும்
-first_page_label=முதல் பக்கத்திற்கு செல்லவும்
-last_page.title=கடைசி பக்கத்திற்கு செல்லவும்
-last_page.label=கடைசி பக்கத்திற்கு செல்லவும்
-last_page_label=கடைசி பக்கத்திற்கு செல்லவும்
-page_rotate_cw.title=வலஞ்சுழியாக சுழற்று
-page_rotate_cw.label=வலஞ்சுழியாக சுழற்று
-page_rotate_cw_label=வலஞ்சுழியாக சுழற்று
-page_rotate_ccw.title=இடஞ்சுழியாக சுழற்று
-page_rotate_ccw.label=இடஞ்சுழியாக சுழற்று
-page_rotate_ccw_label=இடஞ்சுழியாக சுழற்று
-
-cursor_text_select_tool.title=உரைத் தெரிவு கருவியைச் செயல்படுத்து
-cursor_text_select_tool_label=உரைத் தெரிவு கருவி
-cursor_hand_tool.title=கைக் கருவிக்ச் செயற்படுத்து
-cursor_hand_tool_label=கைக்குருவி
-
-# Document properties dialog box
-document_properties.title=ஆவண பண்புகள்...
-document_properties_label=ஆவண பண்புகள்...
-document_properties_file_name=கோப்பு பெயர்:
-document_properties_file_size=கோப்பின் அளவு:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} கிபை ({{size_b}} பைட்டுகள்)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} மெபை ({{size_b}} பைட்டுகள்)
-document_properties_title=தலைப்பு:
-document_properties_author=எழுதியவர்
-document_properties_subject=பொருள்:
-document_properties_keywords=முக்கிய வார்த்தைகள்:
-document_properties_creation_date=படைத்த தேதி :
-document_properties_modification_date=திருத்திய தேதி:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=உருவாக்குபவர்:
-document_properties_producer=பிடிஎஃப் தயாரிப்பாளர்:
-document_properties_version=PDF பதிப்பு:
-document_properties_page_count=பக்க எண்ணிக்கை:
-document_properties_page_size=பக்க அளவு:
-document_properties_page_size_unit_inches=இதில்
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=நிலைபதிப்பு
-document_properties_page_size_orientation_landscape=நிலைபரப்பு
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=கடிதம்
-document_properties_page_size_name_legal=சட்டபூர்வ
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-document_properties_close=மூடுக
-
-print_progress_message=அச்சிடுவதற்கான ஆவணம் தயாராகிறது...
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=ரத்து
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=பக்கப் பட்டியை நிலைமாற்று
-toggle_sidebar_notification.title=பக்கப்பட்டையை நிலைமாற்று (வெளிக்கோடு/இணைப்புகளை ஆவணம் கொண்டுள்ளது)
-toggle_sidebar_label=பக்கப் பட்டியை நிலைமாற்று
-document_outline.title=ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்)
-document_outline_label=ஆவண வெளிவரை
-attachments.title=இணைப்புகளை காண்பி
-attachments_label=இணைப்புகள்
-thumbs.title=சிறுபடங்களைக் காண்பி
-thumbs_label=சிறுபடங்கள்
-findbar.title=ஆவணத்தில் கண்டறி
-findbar_label=தேடு
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=பக்கம் {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=பக்கத்தின் சிறுபடம் {{page}}
-
-# Find panel button title and messages
-find_input.title=கண்டுபிடி
-find_input.placeholder=ஆவணத்தில் கண்டறி…
-find_previous.title=இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு
-find_previous_label=முந்தையது
-find_next.title=இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு
-find_next_label=அடுத்து
-find_highlight=அனைத்தையும் தனிப்படுத்து
-find_match_case_label=பேரெழுத்தாக்கத்தை உணர்
-find_reached_top=ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது
-find_reached_bottom=ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது
-find_not_found=சொற்றொடர் காணவில்லை
-
-# Error panel labels
-error_more_info=கூடுதல் தகவல்
-error_less_info=குறைந்த தகவல்
-error_close=மூடுக
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=செய்தி: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=ஸ்டேக்: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=கோப்பு: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=வரி: {{line}}
-rendering_error=இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது.
-
-# Predefined zoom values
-page_scale_width=பக்க அகலம்
-page_scale_fit=பக்கப் பொருத்தம்
-page_scale_auto=தானியக்க பெரிதாக்கல்
-page_scale_actual=உண்மையான அளவு
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=பிழை
-loading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது.
-invalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு.
-missing_file_error=PDF கோப்பு காணவில்லை.
-unexpected_response_error=சேவகன் பதில் எதிர்பாரதது.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} விளக்கம்]
-password_label=இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும்.
-password_invalid=செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க.
-password_ok=சரி
-password_cancel=ரத்து
-
-printing_not_supported=எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை.
-printing_not_ready=எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை.
-web_fonts_disabled=வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை.
-document_colors_not_allowed=PDF ஆவணங்களுக்குச் சொந்த நிறங்களைப் பயன்படுத்த அனுமதியில்லை: உலாவியில் "பக்கங்கள் தங்கள் சொந்த நிறங்களைத் தேர்வு செய்துகொள்ள அனுமதி" என்னும் விருப்பம் முடக்கப்பட்டுள்ளது.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=முந்தைய பக்கம்
+previous_label=முந்தையது
+next.title=அடுத்த பக்கம்
+next_label=அடுத்து
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=பக்கம்
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} இல்
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}) இல் ({{pageNumber}}
+
+zoom_out.title=சிறிதாக்கு
+zoom_out_label=சிறிதாக்கு
+zoom_in.title=பெரிதாக்கு
+zoom_in_label=பெரிதாக்கு
+zoom.title=பெரிதாக்கு
+presentation_mode.title=விளக்ககாட்சி பயன்முறைக்கு மாறு
+presentation_mode_label=விளக்ககாட்சி பயன்முறை
+open_file.title=கோப்பினை திற
+open_file_label=திற
+print.title=அச்சிடு
+print_label=அச்சிடு
+download.title=பதிவிறக்கு
+download_label=பதிவிறக்கு
+bookmark.title=தற்போதைய காட்சி (புதிய சாளரத்திற்கு நகலெடு அல்லது புதிய சாளரத்தில் திற)
+bookmark_label=தற்போதைய காட்சி
+
+# Secondary toolbar and context menu
+tools.title=கருவிகள்
+tools_label=கருவிகள்
+first_page.title=முதல் பக்கத்திற்கு செல்லவும்
+first_page.label=முதல் பக்கத்திற்கு செல்லவும்
+first_page_label=முதல் பக்கத்திற்கு செல்லவும்
+last_page.title=கடைசி பக்கத்திற்கு செல்லவும்
+last_page.label=கடைசி பக்கத்திற்கு செல்லவும்
+last_page_label=கடைசி பக்கத்திற்கு செல்லவும்
+page_rotate_cw.title=வலஞ்சுழியாக சுழற்று
+page_rotate_cw.label=வலஞ்சுழியாக சுழற்று
+page_rotate_cw_label=வலஞ்சுழியாக சுழற்று
+page_rotate_ccw.title=இடஞ்சுழியாக சுழற்று
+page_rotate_ccw.label=இடஞ்சுழியாக சுழற்று
+page_rotate_ccw_label=இடஞ்சுழியாக சுழற்று
+
+cursor_text_select_tool.title=உரைத் தெரிவு கருவியைச் செயல்படுத்து
+cursor_text_select_tool_label=உரைத் தெரிவு கருவி
+cursor_hand_tool.title=கைக் கருவிக்ச் செயற்படுத்து
+cursor_hand_tool_label=கைக்குருவி
+
+# Document properties dialog box
+document_properties.title=ஆவண பண்புகள்...
+document_properties_label=ஆவண பண்புகள்...
+document_properties_file_name=கோப்பு பெயர்:
+document_properties_file_size=கோப்பின் அளவு:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} கிபை ({{size_b}} பைட்டுகள்)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} மெபை ({{size_b}} பைட்டுகள்)
+document_properties_title=தலைப்பு:
+document_properties_author=எழுதியவர்
+document_properties_subject=பொருள்:
+document_properties_keywords=முக்கிய வார்த்தைகள்:
+document_properties_creation_date=படைத்த தேதி :
+document_properties_modification_date=திருத்திய தேதி:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=உருவாக்குபவர்:
+document_properties_producer=பிடிஎஃப் தயாரிப்பாளர்:
+document_properties_version=PDF பதிப்பு:
+document_properties_page_count=பக்க எண்ணிக்கை:
+document_properties_page_size=பக்க அளவு:
+document_properties_page_size_unit_inches=இதில்
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=நிலைபதிப்பு
+document_properties_page_size_orientation_landscape=நிலைபரப்பு
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=கடிதம்
+document_properties_page_size_name_legal=சட்டபூர்வ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_close=மூடுக
+
+print_progress_message=அச்சிடுவதற்கான ஆவணம் தயாராகிறது...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ரத்து
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=பக்கப் பட்டியை நிலைமாற்று
+toggle_sidebar_notification.title=பக்கப்பட்டையை நிலைமாற்று (வெளிக்கோடு/இணைப்புகளை ஆவணம் கொண்டுள்ளது)
+toggle_sidebar_label=பக்கப் பட்டியை நிலைமாற்று
+document_outline.title=ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்)
+document_outline_label=ஆவண வெளிவரை
+attachments.title=இணைப்புகளை காண்பி
+attachments_label=இணைப்புகள்
+thumbs.title=சிறுபடங்களைக் காண்பி
+thumbs_label=சிறுபடங்கள்
+findbar.title=ஆவணத்தில் கண்டறி
+findbar_label=தேடு
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=பக்கம் {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=பக்கத்தின் சிறுபடம் {{page}}
+
+# Find panel button title and messages
+find_input.title=கண்டுபிடி
+find_input.placeholder=ஆவணத்தில் கண்டறி…
+find_previous.title=இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு
+find_previous_label=முந்தையது
+find_next.title=இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு
+find_next_label=அடுத்து
+find_highlight=அனைத்தையும் தனிப்படுத்து
+find_match_case_label=பேரெழுத்தாக்கத்தை உணர்
+find_reached_top=ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது
+find_reached_bottom=ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது
+find_not_found=சொற்றொடர் காணவில்லை
+
+# Error panel labels
+error_more_info=கூடுதல் தகவல்
+error_less_info=குறைந்த தகவல்
+error_close=மூடுக
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=செய்தி: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ஸ்டேக்: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=கோப்பு: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=வரி: {{line}}
+rendering_error=இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது.
+
+# Predefined zoom values
+page_scale_width=பக்க அகலம்
+page_scale_fit=பக்கப் பொருத்தம்
+page_scale_auto=தானியக்க பெரிதாக்கல்
+page_scale_actual=உண்மையான அளவு
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=பிழை
+loading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது.
+invalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு.
+missing_file_error=PDF கோப்பு காணவில்லை.
+unexpected_response_error=சேவகன் பதில் எதிர்பாரதது.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} விளக்கம்]
+password_label=இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும்.
+password_invalid=செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க.
+password_ok=சரி
+password_cancel=ரத்து
+
+printing_not_supported=எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை.
+printing_not_ready=எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை.
+web_fonts_disabled=வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை.
+document_colors_not_allowed=PDF ஆவணங்களுக்குச் சொந்த நிறங்களைப் பயன்படுத்த அனுமதியில்லை: உலாவியில் "பக்கங்கள் தங்கள் சொந்த நிறங்களைத் தேர்வு செய்துகொள்ள அனுமதி" என்னும் விருப்பம் முடக்கப்பட்டுள்ளது.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/te/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/te/viewer.properties
index 56f954d43c49d490c993a0ead1de74988debf3f1..5fba42a37a4dbdf9111182f3a18ed6eeb77fa683 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/te/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/te/viewer.properties
@@ -1,222 +1,222 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=మునుపటి పేజీ
-previous_label=క్రితం
-next.title=తరువాత పేజీ
-next_label=తరువాత
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=పేజీ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=మొత్తం {{pagesCount}} లో
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=(మొత్తం {{pagesCount}} లో {{pageNumber}}వది)
-
-zoom_out.title=జూమ్ తగ్గించు
-zoom_out_label=జూమ్ తగ్గించు
-zoom_in.title=జూమ్ చేయి
-zoom_in_label=జూమ్ చేయి
-zoom.title=జూమ్
-presentation_mode.title=ప్రదర్శనా రీతికి మారు
-presentation_mode_label=ప్రదర్శనా రీతి
-open_file.title=ఫైల్ తెరువు
-open_file_label=తెరువు
-print.title=ముద్రించు
-print_label=ముద్రించు
-download.title=దింపుకోళ్ళు
-download_label=దింపుకోళ్ళు
-bookmark.title=ప్రస్తుత దర్శనం (కాపీ చేయి లేదా కొత్త విండోలో తెరువు)
-bookmark_label=ప్రస్తుత దర్శనం
-
-# Secondary toolbar and context menu
-tools.title=పనిముట్లు
-tools_label=పనిముట్లు
-first_page.title=మొదటి పేజీకి వెళ్ళు
-first_page.label=మొదటి పేజీకి వెళ్ళు
-first_page_label=మొదటి పేజీకి వెళ్ళు
-last_page.title=చివరి పేజీకి వెళ్ళు
-last_page.label=చివరి పేజీకి వెళ్ళు
-last_page_label=చివరి పేజీకి వెళ్ళు
-page_rotate_cw.title=సవ్యదిశలో తిప్పు
-page_rotate_cw.label=సవ్యదిశలో తిప్పు
-page_rotate_cw_label=సవ్యదిశలో తిప్పు
-page_rotate_ccw.title=అపసవ్యదిశలో తిప్పు
-page_rotate_ccw.label=అపసవ్యదిశలో తిప్పు
-page_rotate_ccw_label=అపసవ్యదిశలో తిప్పు
-
-cursor_text_select_tool.title=టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి
-cursor_text_select_tool_label=టెక్స్ట్ ఎంపిక సాధనం
-cursor_hand_tool.title=చేతి సాధనం చేతనించు
-cursor_hand_tool_label=చేతి సాధనం
-
-scroll_vertical_label=నిలువు స్క్రోలింగు
-
-
-# Document properties dialog box
-document_properties.title=పత్రము లక్షణాలు...
-document_properties_label=పత్రము లక్షణాలు...
-document_properties_file_name=దస్త్రం పేరు:
-document_properties_file_size=దస్త్రం పరిమాణం:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=శీర్షిక:
-document_properties_author=మూలకర్త:
-document_properties_subject=విషయం:
-document_properties_keywords=కీ పదాలు:
-document_properties_creation_date=సృష్టించిన తేదీ:
-document_properties_modification_date=సవరించిన తేదీ:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=సృష్టికర్త:
-document_properties_producer=PDF ఉత్పాదకి:
-document_properties_version=PDF వర్షన్:
-document_properties_page_count=పేజీల సంఖ్య:
-document_properties_page_size=కాగితం పరిమాణం:
-document_properties_page_size_unit_inches=లో
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=నిలువుచిత్రం
-document_properties_page_size_orientation_landscape=అడ్డచిత్రం
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=లేఖ
-document_properties_page_size_name_legal=చట్టపరమైన
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized_yes=అవును
-document_properties_linearized_no=కాదు
-document_properties_close=మూసివేయి
-
-print_progress_message=ముద్రించడానికి పత్రము సిద్ధమవుతున్నది…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=రద్దుచేయి
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=పక్కపట్టీ మార్చు
-toggle_sidebar_label=పక్కపట్టీ మార్చు
-document_outline.title=పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు)
-document_outline_label=పత్రము అవుట్లైన్
-attachments.title=అనుబంధాలు చూపు
-attachments_label=అనుబంధాలు
-thumbs.title=థంబ్నైల్స్ చూపు
-thumbs_label=థంబ్నైల్స్
-findbar.title=పత్రములో కనుగొనుము
-findbar_label=కనుగొను
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=పేజీ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} పేజీ నఖచిత్రం
-
-# Find panel button title and messages
-find_input.title=కనుగొను
-find_input.placeholder=పత్రములో కనుగొను…
-find_previous.title=పదం యొక్క ముందు సంభవాన్ని కనుగొను
-find_previous_label=మునుపటి
-find_next.title=పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను
-find_next_label=తరువాత
-find_highlight=అన్నిటిని ఉద్దీపనం చేయుము
-find_match_case_label=అక్షరముల తేడాతో పోల్చు
-find_entire_word_label=పూర్తి పదాలు
-find_reached_top=పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి
-find_reached_bottom=పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_not_found=పదబంధం కనబడలేదు
-
-# Error panel labels
-error_more_info=మరింత సమాచారం
-error_less_info=తక్కువ సమాచారం
-error_close=మూసివేయి
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=సందేశం: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=స్టాక్: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ఫైలు: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=వరుస: {{line}}
-rendering_error=పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది.
-
-# Predefined zoom values
-page_scale_width=పేజీ వెడల్పు
-page_scale_fit=పేజీ అమర్పు
-page_scale_auto=స్వయంచాలక జూమ్
-page_scale_actual=యథార్ధ పరిమాణం
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=దోషం
-loading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది.
-invalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు.
-missing_file_error=దొరకని PDF ఫైలు.
-unexpected_response_error=అనుకోని సర్వర్ స్పందన.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} టీకా]
-password_label=ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము.
-password_invalid=సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి.
-password_ok=సరే
-password_cancel=రద్దుచేయి
-
-printing_not_supported=హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు.
-printing_not_ready=హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు.
-web_fonts_disabled=వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది.
-document_colors_not_allowed=PDF పత్రాలు వాటి స్వంత రంగులను ఉపయోగించుకొనుటకు అనుమతించబడవు: విహరణి నందు “పేజీలను వాటి స్వంత రంగులను ఎంచుకొనుటకు అనుమతించు” అచేతనం చేయబడివుంది.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=మునుపటి పేజీ
+previous_label=క్రితం
+next.title=తరువాత పేజీ
+next_label=తరువాత
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=పేజీ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=మొత్తం {{pagesCount}} లో
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(మొత్తం {{pagesCount}} లో {{pageNumber}}వది)
+
+zoom_out.title=జూమ్ తగ్గించు
+zoom_out_label=జూమ్ తగ్గించు
+zoom_in.title=జూమ్ చేయి
+zoom_in_label=జూమ్ చేయి
+zoom.title=జూమ్
+presentation_mode.title=ప్రదర్శనా రీతికి మారు
+presentation_mode_label=ప్రదర్శనా రీతి
+open_file.title=ఫైల్ తెరువు
+open_file_label=తెరువు
+print.title=ముద్రించు
+print_label=ముద్రించు
+download.title=దింపుకోళ్ళు
+download_label=దింపుకోళ్ళు
+bookmark.title=ప్రస్తుత దర్శనం (కాపీ చేయి లేదా కొత్త విండోలో తెరువు)
+bookmark_label=ప్రస్తుత దర్శనం
+
+# Secondary toolbar and context menu
+tools.title=పనిముట్లు
+tools_label=పనిముట్లు
+first_page.title=మొదటి పేజీకి వెళ్ళు
+first_page.label=మొదటి పేజీకి వెళ్ళు
+first_page_label=మొదటి పేజీకి వెళ్ళు
+last_page.title=చివరి పేజీకి వెళ్ళు
+last_page.label=చివరి పేజీకి వెళ్ళు
+last_page_label=చివరి పేజీకి వెళ్ళు
+page_rotate_cw.title=సవ్యదిశలో తిప్పు
+page_rotate_cw.label=సవ్యదిశలో తిప్పు
+page_rotate_cw_label=సవ్యదిశలో తిప్పు
+page_rotate_ccw.title=అపసవ్యదిశలో తిప్పు
+page_rotate_ccw.label=అపసవ్యదిశలో తిప్పు
+page_rotate_ccw_label=అపసవ్యదిశలో తిప్పు
+
+cursor_text_select_tool.title=టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి
+cursor_text_select_tool_label=టెక్స్ట్ ఎంపిక సాధనం
+cursor_hand_tool.title=చేతి సాధనం చేతనించు
+cursor_hand_tool_label=చేతి సాధనం
+
+scroll_vertical_label=నిలువు స్క్రోలింగు
+
+
+# Document properties dialog box
+document_properties.title=పత్రము లక్షణాలు...
+document_properties_label=పత్రము లక్షణాలు...
+document_properties_file_name=దస్త్రం పేరు:
+document_properties_file_size=దస్త్రం పరిమాణం:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=శీర్షిక:
+document_properties_author=మూలకర్త:
+document_properties_subject=విషయం:
+document_properties_keywords=కీ పదాలు:
+document_properties_creation_date=సృష్టించిన తేదీ:
+document_properties_modification_date=సవరించిన తేదీ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=సృష్టికర్త:
+document_properties_producer=PDF ఉత్పాదకి:
+document_properties_version=PDF వర్షన్:
+document_properties_page_count=పేజీల సంఖ్య:
+document_properties_page_size=కాగితం పరిమాణం:
+document_properties_page_size_unit_inches=లో
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=నిలువుచిత్రం
+document_properties_page_size_orientation_landscape=అడ్డచిత్రం
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=లేఖ
+document_properties_page_size_name_legal=చట్టపరమైన
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=అవును
+document_properties_linearized_no=కాదు
+document_properties_close=మూసివేయి
+
+print_progress_message=ముద్రించడానికి పత్రము సిద్ధమవుతున్నది…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=రద్దుచేయి
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=పక్కపట్టీ మార్చు
+toggle_sidebar_label=పక్కపట్టీ మార్చు
+document_outline.title=పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు)
+document_outline_label=పత్రము అవుట్లైన్
+attachments.title=అనుబంధాలు చూపు
+attachments_label=అనుబంధాలు
+thumbs.title=థంబ్నైల్స్ చూపు
+thumbs_label=థంబ్నైల్స్
+findbar.title=పత్రములో కనుగొనుము
+findbar_label=కనుగొను
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=పేజీ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} పేజీ నఖచిత్రం
+
+# Find panel button title and messages
+find_input.title=కనుగొను
+find_input.placeholder=పత్రములో కనుగొను…
+find_previous.title=పదం యొక్క ముందు సంభవాన్ని కనుగొను
+find_previous_label=మునుపటి
+find_next.title=పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను
+find_next_label=తరువాత
+find_highlight=అన్నిటిని ఉద్దీపనం చేయుము
+find_match_case_label=అక్షరముల తేడాతో పోల్చు
+find_entire_word_label=పూర్తి పదాలు
+find_reached_top=పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి
+find_reached_bottom=పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_not_found=పదబంధం కనబడలేదు
+
+# Error panel labels
+error_more_info=మరింత సమాచారం
+error_less_info=తక్కువ సమాచారం
+error_close=మూసివేయి
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=సందేశం: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=స్టాక్: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ఫైలు: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=వరుస: {{line}}
+rendering_error=పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది.
+
+# Predefined zoom values
+page_scale_width=పేజీ వెడల్పు
+page_scale_fit=పేజీ అమర్పు
+page_scale_auto=స్వయంచాలక జూమ్
+page_scale_actual=యథార్ధ పరిమాణం
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=దోషం
+loading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది.
+invalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు.
+missing_file_error=దొరకని PDF ఫైలు.
+unexpected_response_error=అనుకోని సర్వర్ స్పందన.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} టీకా]
+password_label=ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము.
+password_invalid=సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి.
+password_ok=సరే
+password_cancel=రద్దుచేయి
+
+printing_not_supported=హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు.
+printing_not_ready=హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు.
+web_fonts_disabled=వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది.
+document_colors_not_allowed=PDF పత్రాలు వాటి స్వంత రంగులను ఉపయోగించుకొనుటకు అనుమతించబడవు: విహరణి నందు “పేజీలను వాటి స్వంత రంగులను ఎంచుకొనుటకు అనుమతించు” అచేతనం చేయబడివుంది.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/th/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/th/viewer.properties
index b66865fd1a4f4cc840ddd2caa29d10689b88309a..5f825ad21c23a848a57c5c9f352b55cb59cb7607 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/th/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/th/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=หน้าก่อนหน้า
-previous_label=ก่อนหน้า
-next.title=หน้าถัดไป
-next_label=ถัดไป
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=หน้า
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=จาก {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} จาก {{pagesCount}})
-
-zoom_out.title=ซูมออก
-zoom_out_label=ซูมออก
-zoom_in.title=ซูมเข้า
-zoom_in_label=ซูมเข้า
-zoom.title=ซูม
-presentation_mode.title=สลับเป็นโหมดการนำเสนอ
-presentation_mode_label=โหมดการนำเสนอ
-open_file.title=เปิดไฟล์
-open_file_label=เปิด
-print.title=พิมพ์
-print_label=พิมพ์
-download.title=ดาวน์โหลด
-download_label=ดาวน์โหลด
-bookmark.title=มุมมองปัจจุบัน (คัดลอกหรือเปิดในหน้าต่างใหม่)
-bookmark_label=มุมมองปัจจุบัน
-
-# Secondary toolbar and context menu
-tools.title=เครื่องมือ
-tools_label=เครื่องมือ
-first_page.title=ไปยังหน้าแรก
-first_page.label=ไปยังหน้าแรก
-first_page_label=ไปยังหน้าแรก
-last_page.title=ไปยังหน้าสุดท้าย
-last_page.label=ไปยังหน้าสุดท้าย
-last_page_label=ไปยังหน้าสุดท้าย
-page_rotate_cw.title=หมุนตามเข็มนาฬิกา
-page_rotate_cw.label=หมุนตามเข็มนาฬิกา
-page_rotate_cw_label=หมุนตามเข็มนาฬิกา
-page_rotate_ccw.title=หมุนทวนเข็มนาฬิกา
-page_rotate_ccw.label=หมุนทวนเข็มนาฬิกา
-page_rotate_ccw_label=หมุนทวนเข็มนาฬิกา
-
-cursor_text_select_tool.title=เปิดใช้งานเครื่องมือการเลือกข้อความ
-cursor_text_select_tool_label=เครื่องมือการเลือกข้อความ
-cursor_hand_tool.title=เปิดใช้งานเครื่องมือมือ
-cursor_hand_tool_label=เครื่องมือมือ
-
-scroll_vertical.title=ใช้การเลื่อนแนวตั้ง
-scroll_vertical_label=การเลื่อนแนวตั้ง
-scroll_horizontal.title=ใช้การเลื่อนแนวนอน
-scroll_horizontal_label=การเลื่อนแนวนอน
-scroll_wrapped.title=ใช้การเลื่อนแบบคลุม
-scroll_wrapped_label=เลื่อนแบบคลุม
-
-spread_none.title=ไม่ต้องรวมการกระจายหน้า
-spread_none_label=ไม่กระจาย
-spread_odd.title=รวมการกระจายหน้าเริ่มจากหน้าคี่
-spread_odd_label=กระจายอย่างเหลือเศษ
-spread_even.title=รวมการกระจายหน้าเริ่มจากหน้าคู่
-spread_even_label=กระจายอย่างเท่าเทียม
-
-# Document properties dialog box
-document_properties.title=คุณสมบัติเอกสาร…
-document_properties_label=คุณสมบัติเอกสาร…
-document_properties_file_name=ชื่อไฟล์:
-document_properties_file_size=ขนาดไฟล์:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} ไบต์)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} ไบต์)
-document_properties_title=ชื่อเรื่อง:
-document_properties_author=ผู้สร้าง:
-document_properties_subject=ชื่อเรื่อง:
-document_properties_keywords=คำสำคัญ:
-document_properties_creation_date=วันที่สร้าง:
-document_properties_modification_date=วันที่แก้ไข:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=ผู้สร้าง:
-document_properties_producer=ผู้ผลิต PDF:
-document_properties_version=รุ่น PDF:
-document_properties_page_count=จำนวนหน้า:
-document_properties_page_size=ขนาดหน้า:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=แนวตั้ง
-document_properties_page_size_orientation_landscape=แนวนอน
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=จดหมาย
-document_properties_page_size_name_legal=ข้อกฎหมาย
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=มุมมองเว็บแบบรวดเร็ว:
-document_properties_linearized_yes=ใช่
-document_properties_linearized_no=ไม่
-document_properties_close=ปิด
-
-print_progress_message=กำลังเตรียมเอกสารสำหรับการพิมพ์…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=ยกเลิก
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=เปิด/ปิดแถบข้าง
-toggle_sidebar_notification.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ)
-toggle_sidebar_label=เปิด/ปิดแถบข้าง
-document_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด)
-document_outline_label=เค้าร่างเอกสาร
-attachments.title=แสดงไฟล์แนบ
-attachments_label=ไฟล์แนบ
-thumbs.title=แสดงภาพขนาดย่อ
-thumbs_label=ภาพขนาดย่อ
-findbar.title=ค้นหาในเอกสาร
-findbar_label=ค้นหา
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=หน้า {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=หน้า {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=ภาพขนาดย่อของหน้า {{page}}
-
-# Find panel button title and messages
-find_input.title=ค้นหา
-find_input.placeholder=ค้นหาในเอกสาร…
-find_previous.title=หาตำแหน่งก่อนหน้าของวลี
-find_previous_label=ก่อนหน้า
-find_next.title=หาตำแหน่งถัดไปของวลี
-find_next_label=ถัดไป
-find_highlight=เน้นสีทั้งหมด
-find_match_case_label=ตัวพิมพ์ใหญ่เล็กตรงกัน
-find_entire_word_label=ทั้งคำ
-find_reached_top=ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง
-find_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} จาก {{total}} ที่ตรงกัน
-find_match_count[two]={{current}} จาก {{total}} ที่ตรงกัน
-find_match_count[few]={{current}} จาก {{total}} ที่ตรงกัน
-find_match_count[many]={{current}} จาก {{total}} ที่ตรงกัน
-find_match_count[other]={{current}} จาก {{total}} ที่ตรงกัน
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=มากกว่า {{limit}} ที่ตรงกัน
-find_match_count_limit[one]=มากกว่า {{limit}} ที่ตรงกัน
-find_match_count_limit[two]=มากกว่า {{limit}} ที่ตรงกัน
-find_match_count_limit[few]=มากกว่า {{limit}} ที่ตรงกัน
-find_match_count_limit[many]=มากกว่า {{limit}} ที่ตรงกัน
-find_match_count_limit[other]=มากกว่า {{limit}} ที่ตรงกัน
-find_not_found=ไม่พบวลี
-
-# Error panel labels
-error_more_info=ข้อมูลเพิ่มเติม
-error_less_info=ข้อมูลน้อยลง
-error_close=ปิด
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=ข้อความ: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=สแตก: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=ไฟล์: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=บรรทัด: {{line}}
-rendering_error=เกิดข้อผิดพลาดขณะเรนเดอร์หน้า
-
-# Predefined zoom values
-page_scale_width=ความกว้างหน้า
-page_scale_fit=พอดีหน้า
-page_scale_auto=ซูมอัตโนมัติ
-page_scale_actual=ขนาดจริง
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=ข้อผิดพลาด
-loading_error=เกิดข้อผิดพลาดขณะโหลด PDF
-invalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย
-missing_file_error=ไฟล์ PDF หายไป
-unexpected_response_error=การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[คำอธิบายประกอบ {{type}}]
-password_label=ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้
-password_invalid=รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง
-password_ok=ตกลง
-password_cancel=ยกเลิก
-
-printing_not_supported=คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่
-printing_not_ready=คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์
-web_fonts_disabled=แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว
-document_colors_not_allowed=เอกสาร PDF ไม่ได้รับอนุญาตให้ใช้สีของตัวเอง: "อนุญาตให้หน้าเอกสารสามารถเลือกสีของตัวเอง" ถูกปิดใช้งานในเบราว์เซอร์
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=หน้าก่อนหน้า
+previous_label=ก่อนหน้า
+next.title=หน้าถัดไป
+next_label=ถัดไป
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=หน้า
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=จาก {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} จาก {{pagesCount}})
+
+zoom_out.title=ซูมออก
+zoom_out_label=ซูมออก
+zoom_in.title=ซูมเข้า
+zoom_in_label=ซูมเข้า
+zoom.title=ซูม
+presentation_mode.title=สลับเป็นโหมดการนำเสนอ
+presentation_mode_label=โหมดการนำเสนอ
+open_file.title=เปิดไฟล์
+open_file_label=เปิด
+print.title=พิมพ์
+print_label=พิมพ์
+download.title=ดาวน์โหลด
+download_label=ดาวน์โหลด
+bookmark.title=มุมมองปัจจุบัน (คัดลอกหรือเปิดในหน้าต่างใหม่)
+bookmark_label=มุมมองปัจจุบัน
+
+# Secondary toolbar and context menu
+tools.title=เครื่องมือ
+tools_label=เครื่องมือ
+first_page.title=ไปยังหน้าแรก
+first_page.label=ไปยังหน้าแรก
+first_page_label=ไปยังหน้าแรก
+last_page.title=ไปยังหน้าสุดท้าย
+last_page.label=ไปยังหน้าสุดท้าย
+last_page_label=ไปยังหน้าสุดท้าย
+page_rotate_cw.title=หมุนตามเข็มนาฬิกา
+page_rotate_cw.label=หมุนตามเข็มนาฬิกา
+page_rotate_cw_label=หมุนตามเข็มนาฬิกา
+page_rotate_ccw.title=หมุนทวนเข็มนาฬิกา
+page_rotate_ccw.label=หมุนทวนเข็มนาฬิกา
+page_rotate_ccw_label=หมุนทวนเข็มนาฬิกา
+
+cursor_text_select_tool.title=เปิดใช้งานเครื่องมือการเลือกข้อความ
+cursor_text_select_tool_label=เครื่องมือการเลือกข้อความ
+cursor_hand_tool.title=เปิดใช้งานเครื่องมือมือ
+cursor_hand_tool_label=เครื่องมือมือ
+
+scroll_vertical.title=ใช้การเลื่อนแนวตั้ง
+scroll_vertical_label=การเลื่อนแนวตั้ง
+scroll_horizontal.title=ใช้การเลื่อนแนวนอน
+scroll_horizontal_label=การเลื่อนแนวนอน
+scroll_wrapped.title=ใช้การเลื่อนแบบคลุม
+scroll_wrapped_label=เลื่อนแบบคลุม
+
+spread_none.title=ไม่ต้องรวมการกระจายหน้า
+spread_none_label=ไม่กระจาย
+spread_odd.title=รวมการกระจายหน้าเริ่มจากหน้าคี่
+spread_odd_label=กระจายอย่างเหลือเศษ
+spread_even.title=รวมการกระจายหน้าเริ่มจากหน้าคู่
+spread_even_label=กระจายอย่างเท่าเทียม
+
+# Document properties dialog box
+document_properties.title=คุณสมบัติเอกสาร…
+document_properties_label=คุณสมบัติเอกสาร…
+document_properties_file_name=ชื่อไฟล์:
+document_properties_file_size=ขนาดไฟล์:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ไบต์)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ไบต์)
+document_properties_title=ชื่อเรื่อง:
+document_properties_author=ผู้สร้าง:
+document_properties_subject=ชื่อเรื่อง:
+document_properties_keywords=คำสำคัญ:
+document_properties_creation_date=วันที่สร้าง:
+document_properties_modification_date=วันที่แก้ไข:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ผู้สร้าง:
+document_properties_producer=ผู้ผลิต PDF:
+document_properties_version=รุ่น PDF:
+document_properties_page_count=จำนวนหน้า:
+document_properties_page_size=ขนาดหน้า:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=แนวตั้ง
+document_properties_page_size_orientation_landscape=แนวนอน
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=จดหมาย
+document_properties_page_size_name_legal=ข้อกฎหมาย
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=มุมมองเว็บแบบรวดเร็ว:
+document_properties_linearized_yes=ใช่
+document_properties_linearized_no=ไม่
+document_properties_close=ปิด
+
+print_progress_message=กำลังเตรียมเอกสารสำหรับการพิมพ์…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ยกเลิก
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=เปิด/ปิดแถบข้าง
+toggle_sidebar_notification.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ)
+toggle_sidebar_label=เปิด/ปิดแถบข้าง
+document_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด)
+document_outline_label=เค้าร่างเอกสาร
+attachments.title=แสดงไฟล์แนบ
+attachments_label=ไฟล์แนบ
+thumbs.title=แสดงภาพขนาดย่อ
+thumbs_label=ภาพขนาดย่อ
+findbar.title=ค้นหาในเอกสาร
+findbar_label=ค้นหา
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=หน้า {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=หน้า {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ภาพขนาดย่อของหน้า {{page}}
+
+# Find panel button title and messages
+find_input.title=ค้นหา
+find_input.placeholder=ค้นหาในเอกสาร…
+find_previous.title=หาตำแหน่งก่อนหน้าของวลี
+find_previous_label=ก่อนหน้า
+find_next.title=หาตำแหน่งถัดไปของวลี
+find_next_label=ถัดไป
+find_highlight=เน้นสีทั้งหมด
+find_match_case_label=ตัวพิมพ์ใหญ่เล็กตรงกัน
+find_entire_word_label=ทั้งคำ
+find_reached_top=ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง
+find_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[two]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[few]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[many]={{current}} จาก {{total}} ที่ตรงกัน
+find_match_count[other]={{current}} จาก {{total}} ที่ตรงกัน
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[one]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[two]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[few]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[many]=มากกว่า {{limit}} ที่ตรงกัน
+find_match_count_limit[other]=มากกว่า {{limit}} ที่ตรงกัน
+find_not_found=ไม่พบวลี
+
+# Error panel labels
+error_more_info=ข้อมูลเพิ่มเติม
+error_less_info=ข้อมูลน้อยลง
+error_close=ปิด
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ข้อความ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=สแตก: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ไฟล์: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=บรรทัด: {{line}}
+rendering_error=เกิดข้อผิดพลาดขณะเรนเดอร์หน้า
+
+# Predefined zoom values
+page_scale_width=ความกว้างหน้า
+page_scale_fit=พอดีหน้า
+page_scale_auto=ซูมอัตโนมัติ
+page_scale_actual=ขนาดจริง
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ข้อผิดพลาด
+loading_error=เกิดข้อผิดพลาดขณะโหลด PDF
+invalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย
+missing_file_error=ไฟล์ PDF หายไป
+unexpected_response_error=การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[คำอธิบายประกอบ {{type}}]
+password_label=ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้
+password_invalid=รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง
+password_ok=ตกลง
+password_cancel=ยกเลิก
+
+printing_not_supported=คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่
+printing_not_ready=คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์
+web_fonts_disabled=แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว
+document_colors_not_allowed=เอกสาร PDF ไม่ได้รับอนุญาตให้ใช้สีของตัวเอง: "อนุญาตให้หน้าเอกสารสามารถเลือกสีของตัวเอง" ถูกปิดใช้งานในเบราว์เซอร์
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tl/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tl/viewer.properties
index 32b3483402ad31913f2f167f0957c3bafa244db1..41a55955fa02cf0502428534a7fcc434ee13fe16 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tl/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tl/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Naunang Pahina
-previous_label=Nakaraan
-next.title=Sunod na Pahina
-next_label=Sunod
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Pahina
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=ng {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} ng {{pagesCount}})
-
-zoom_out.title=Paliitin
-zoom_out_label=Paliitin
-zoom_in.title=Palakihin
-zoom_in_label=Palakihin
-zoom.title=Mag-zoom
-presentation_mode.title=Switch to Presentation Mode
-presentation_mode_label=Presentation Mode
-open_file.title=Magbukas ng file
-open_file_label=Buksan
-print.title=i-Print
-print_label=i-Print
-download.title=Download
-download_label=Download
-bookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window)
-bookmark_label=Kasalukuyang tingin
-
-# Secondary toolbar and context menu
-tools.title=Mga Kagamitan
-tools_label=Mga Kagamitan
-first_page.title=Pumunta sa Unang Pahina
-first_page.label=Pumunta sa Unang Pahina
-first_page_label=Pumunta sa Unang Pahina
-last_page.title=Pumunta sa Huling Pahina
-last_page.label=Pumunta sa Huling Pahina
-last_page_label=Pumunta sa Huling Pahina
-page_rotate_cw.title=Paikutin ang Clockwise
-page_rotate_cw.label=Paikutin ang Clockwise
-page_rotate_cw_label=Paikutin ang Clockwise
-page_rotate_ccw.title=Paikutin ang Counterclockwise
-page_rotate_ccw.label=Paikutin ang Counterclockwise
-page_rotate_ccw_label=Paikutin ang Counterclockwise
-
-cursor_text_select_tool.title=Enable Text Selection Tool
-cursor_text_select_tool_label=Text Selection Tool
-cursor_hand_tool.title=Enable Hand Tool
-cursor_hand_tool_label=Hand Tool
-
-scroll_vertical.title=Use Vertical Scrolling
-scroll_vertical_label=Vertical Scrolling
-scroll_horizontal.title=Use Horizontal Scrolling
-scroll_horizontal_label=Horizontal Scrolling
-scroll_wrapped.title=Use Wrapped Scrolling
-scroll_wrapped_label=Wrapped Scrolling
-
-spread_none.title=Do not join page spreads
-spread_none_label=No Spreads
-spread_odd.title=Join page spreads starting with odd-numbered pages
-spread_odd_label=Odd Spreads
-spread_even.title=Join page spreads starting with even-numbered pages
-spread_even_label=Even Spreads
-
-# Document properties dialog box
-document_properties.title=Document Properties…
-document_properties_label=Document Properties…
-document_properties_file_name=File name:
-document_properties_file_size=File size:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Pamagat:
-document_properties_author=May Akda:
-document_properties_subject=Subject:
-document_properties_keywords=Mga keyword:
-document_properties_creation_date=Creation Date:
-document_properties_modification_date=Modification Date:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Creator:
-document_properties_producer=PDF Producer:
-document_properties_version=PDF Version:
-document_properties_page_count=Page Count:
-document_properties_page_size=Page Size:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=portrait
-document_properties_page_size_orientation_landscape=landscape
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Fast Web View:
-document_properties_linearized_yes=Oo
-document_properties_linearized_no=Hindi
-document_properties_close=Isara
-
-print_progress_message=Preparing document for printing…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Kanselahin
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Toggle Sidebar
-toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
-toggle_sidebar_label=Toggle Sidebar
-document_outline.title=Show Document Outline (double-click to expand/collapse all items)
-document_outline_label=Document Outline
-attachments.title=Show Attachments
-attachments_label=Attachments
-thumbs.title=Ipakita ang mga Thumbnails
-thumbs_label=Thumbnails
-findbar.title=Find in Document
-findbar_label=Hanapin
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Pahina {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Pahina {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Thumbnail ng Pahina {{page}}
-
-# Find panel button title and messages
-find_input.title=Hanapin
-find_input.placeholder=Find in document…
-find_previous.title=Hanapin ang nakaraang pangyayari ng parirala
-find_previous_label=Nakaraang
-find_next.title=Hanapin ang susunod na pangyayari ng parirala
-find_next_label=Susunod
-find_highlight=I-highlight lahat
-find_match_case_label=Match case
-find_entire_word_label=Whole words
-find_reached_top=Reached top of document, continued from bottom
-find_reached_bottom=Reached end of document, continued from top
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} of {{total}} match
-find_match_count[two]={{current}} of {{total}} matches
-find_match_count[few]={{current}} of {{total}} matches
-find_match_count[many]={{current}} of {{total}} matches
-find_match_count[other]={{current}} of {{total}} matches
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=More than {{limit}} matches
-find_match_count_limit[one]=More than {{limit}} match
-find_match_count_limit[two]=More than {{limit}} matches
-find_match_count_limit[few]=More than {{limit}} matches
-find_match_count_limit[many]=More than {{limit}} matches
-find_match_count_limit[other]=More than {{limit}} matches
-find_not_found=Hindi nakita ang prasko
-
-# Error panel labels
-error_more_info=Karagdagang Impormasyon
-error_less_info=Mas Kaunting Impormasyon
-error_close=Sarado
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Mensahe: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=File: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Linya: {{line}}
-rendering_error=May naganap na pagkakamali habang pagsasalin sa pahina.
-
-# Predefined zoom values
-page_scale_width=Lapad ng Pahina
-page_scale_fit=ang pahina ay angkop
-page_scale_auto=Automatic Zoom
-page_scale_actual=Totoong sukat
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=May maling nangyari habang kinakarga ang PDF.
-invalid_file_error=Di-wasto o masira ang PDF file.
-missing_file_error=Nawawalang PDF file.
-unexpected_response_error=Hindi inaasahang tugon ng server.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=Ipasok ang password upang buksan ang PDF file na ito.
-password_invalid=Invalid password. Please try again.
-password_ok=OK
-password_cancel=Kanselahin
-
-printing_not_supported=Warning: Printing is not fully supported by this browser.
-printing_not_ready=Warning: The PDF is not fully loaded for printing.
-web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
-document_colors_not_allowed=PDF documents are not allowed to use their own colors: “Allow pages to choose their own colors” is deactivated in the browser.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Naunang Pahina
+previous_label=Nakaraan
+next.title=Sunod na Pahina
+next_label=Sunod
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pahina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ng {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ng {{pagesCount}})
+
+zoom_out.title=Paliitin
+zoom_out_label=Paliitin
+zoom_in.title=Palakihin
+zoom_in_label=Palakihin
+zoom.title=Mag-zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Magbukas ng file
+open_file_label=Buksan
+print.title=i-Print
+print_label=i-Print
+download.title=Download
+download_label=Download
+bookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window)
+bookmark_label=Kasalukuyang tingin
+
+# Secondary toolbar and context menu
+tools.title=Mga Kagamitan
+tools_label=Mga Kagamitan
+first_page.title=Pumunta sa Unang Pahina
+first_page.label=Pumunta sa Unang Pahina
+first_page_label=Pumunta sa Unang Pahina
+last_page.title=Pumunta sa Huling Pahina
+last_page.label=Pumunta sa Huling Pahina
+last_page_label=Pumunta sa Huling Pahina
+page_rotate_cw.title=Paikutin ang Clockwise
+page_rotate_cw.label=Paikutin ang Clockwise
+page_rotate_cw_label=Paikutin ang Clockwise
+page_rotate_ccw.title=Paikutin ang Counterclockwise
+page_rotate_ccw.label=Paikutin ang Counterclockwise
+page_rotate_ccw_label=Paikutin ang Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Pamagat:
+document_properties_author=May Akda:
+document_properties_subject=Subject:
+document_properties_keywords=Mga keyword:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Oo
+document_properties_linearized_no=Hindi
+document_properties_close=Isara
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Kanselahin
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Ipakita ang mga Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Hanapin
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pahina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pahina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail ng Pahina {{page}}
+
+# Find panel button title and messages
+find_input.title=Hanapin
+find_input.placeholder=Find in document…
+find_previous.title=Hanapin ang nakaraang pangyayari ng parirala
+find_previous_label=Nakaraang
+find_next.title=Hanapin ang susunod na pangyayari ng parirala
+find_next_label=Susunod
+find_highlight=I-highlight lahat
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Hindi nakita ang prasko
+
+# Error panel labels
+error_more_info=Karagdagang Impormasyon
+error_less_info=Mas Kaunting Impormasyon
+error_close=Sarado
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensahe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linya: {{line}}
+rendering_error=May naganap na pagkakamali habang pagsasalin sa pahina.
+
+# Predefined zoom values
+page_scale_width=Lapad ng Pahina
+page_scale_fit=ang pahina ay angkop
+page_scale_auto=Automatic Zoom
+page_scale_actual=Totoong sukat
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=May maling nangyari habang kinakarga ang PDF.
+invalid_file_error=Di-wasto o masira ang PDF file.
+missing_file_error=Nawawalang PDF file.
+unexpected_response_error=Hindi inaasahang tugon ng server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Ipasok ang password upang buksan ang PDF file na ito.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Kanselahin
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
+document_colors_not_allowed=PDF documents are not allowed to use their own colors: “Allow pages to choose their own colors” is deactivated in the browser.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tr/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tr/viewer.properties
index f398fc9f5bd7ef5f3ea615578970959928a87657..8f1561291802cfaa4666be857ec328d32c770619 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tr/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/tr/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Önceki sayfa
-previous_label=Önceki
-next.title=Sonraki sayfa
-next_label=Sonraki
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Sayfa
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} / {{pagesCount}})
-
-zoom_out.title=Uzaklaştır
-zoom_out_label=Uzaklaştır
-zoom_in.title=Yaklaştır
-zoom_in_label=Yaklaştır
-zoom.title=Yakınlaştırma
-presentation_mode.title=Sunum moduna geç
-presentation_mode_label=Sunum Modu
-open_file.title=Dosya aç
-open_file_label=Aç
-print.title=Yazdır
-print_label=Yazdır
-download.title=İndir
-download_label=İndir
-bookmark.title=Geçerli görünüm (kopyala veya yeni pencerede aç)
-bookmark_label=Geçerli görünüm
-
-# Secondary toolbar and context menu
-tools.title=Araçlar
-tools_label=Araçlar
-first_page.title=İlk sayfaya git
-first_page.label=İlk sayfaya git
-first_page_label=İlk sayfaya git
-last_page.title=Son sayfaya git
-last_page.label=Son sayfaya git
-last_page_label=Son sayfaya git
-page_rotate_cw.title=Saat yönünde döndür
-page_rotate_cw.label=Saat yönünde döndür
-page_rotate_cw_label=Saat yönünde döndür
-page_rotate_ccw.title=Saat yönünün tersine döndür
-page_rotate_ccw.label=Saat yönünün tersine döndür
-page_rotate_ccw_label=Saat yönünün tersine döndür
-
-cursor_text_select_tool.title=Metin seçme aracını etkinleştir
-cursor_text_select_tool_label=Metin seçme aracı
-cursor_hand_tool.title=El aracını etkinleştir
-cursor_hand_tool_label=El aracı
-
-scroll_vertical.title=Dikey kaydırma kullan
-scroll_vertical_label=Dikey kaydırma
-scroll_horizontal.title=Yatay kaydırma kullan
-scroll_horizontal_label=Yatay kaydırma
-scroll_wrapped.title=Yan yana kaydırmayı kullan
-scroll_wrapped_label=Yan yana kaydırma
-
-spread_none.title=Yan yana sayfaları birleştirme
-spread_none_label=Birleştirme
-spread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir
-spread_odd_label=Tek numaralı
-spread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir
-spread_even_label=Çift numaralı
-
-# Document properties dialog box
-document_properties.title=Belge özellikleri…
-document_properties_label=Belge özellikleri…
-document_properties_file_name=Dosya adı:
-document_properties_file_size=Dosya boyutu:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
-document_properties_title=Başlık:
-document_properties_author=Yazar:
-document_properties_subject=Konu:
-document_properties_keywords=Anahtar kelimeler:
-document_properties_creation_date=Oluturma tarihi:
-document_properties_modification_date=Değiştirme tarihi:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}} {{time}}
-document_properties_creator=Oluşturan:
-document_properties_producer=PDF üreticisi:
-document_properties_version=PDF sürümü:
-document_properties_page_count=Sayfa sayısı:
-document_properties_page_size=Sayfa boyutu:
-document_properties_page_size_unit_inches=inç
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=dikey
-document_properties_page_size_orientation_landscape=yatay
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Hızlı web görünümü:
-document_properties_linearized_yes=Evet
-document_properties_linearized_no=Hayır
-document_properties_close=Kapat
-
-print_progress_message=Belge yazdırılmaya hazırlanıyor…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent=%{{progress}}
-print_progress_close=İptal
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Kenar çubuğunu aç/kapat
-toggle_sidebar_notification.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler içeriyor)
-toggle_sidebar_label=Kenar çubuğunu aç/kapat
-document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın)
-document_outline_label=Belge ana hatları
-attachments.title=Ekleri göster
-attachments_label=Ekler
-thumbs.title=Küçük resimleri göster
-thumbs_label=Küçük resimler
-findbar.title=Belgede bul
-findbar_label=Bul
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Sayfa {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Sayfa {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}}. sayfanın küçük hâli
-
-# Find panel button title and messages
-find_input.title=Bul
-find_input.placeholder=Belgede bul…
-find_previous.title=Önceki eşleşmeyi bul
-find_previous_label=Önceki
-find_next.title=Sonraki eşleşmeyi bul
-find_next_label=Sonraki
-find_highlight=Tümünü vurgula
-find_match_case_label=Büyük-küçük harfe duyarlı
-find_entire_word_label=Tam sözcükler
-find_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi
-find_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} eşleşmeden {{current}}. eşleşme
-find_match_count[two]={{total}} eşleşmeden {{current}}. eşleşme
-find_match_count[few]={{total}} eşleşmeden {{current}}. eşleşme
-find_match_count[many]={{total}} eşleşmeden {{current}}. eşleşme
-find_match_count[other]={{total}} eşleşmeden {{current}}. eşleşme
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]={{limit}} eşleşmeden fazla
-find_match_count_limit[one]={{limit}} eşleşmeden fazla
-find_match_count_limit[two]={{limit}} eşleşmeden fazla
-find_match_count_limit[few]={{limit}} eşleşmeden fazla
-find_match_count_limit[many]={{limit}} eşleşmeden fazla
-find_match_count_limit[other]={{limit}} eşleşmeden fazla
-find_not_found=Eşleşme bulunamadı
-
-# Error panel labels
-error_more_info=Daha fazla bilgi al
-error_less_info=Daha az bilgi
-error_close=Kapat
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js sürüm {{version}} (yapı: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=İleti: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Yığın: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Dosya: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Satır: {{line}}
-rendering_error=Sayfa yorumlanırken bir hata oluştu.
-
-# Predefined zoom values
-page_scale_width=Sayfa genişliği
-page_scale_fit=Sayfayı sığdır
-page_scale_auto=Otomatik yakınlaştır
-page_scale_actual=Gerçek boyut
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent=%{{scale}}
-
-# Loading indicator messages
-loading_error_indicator=Hata
-loading_error=PDF yüklenirken bir hata oluştu.
-invalid_file_error=Geçersiz veya bozulmuş PDF dosyası.
-missing_file_error=PDF dosyası eksik.
-unexpected_response_error=Beklenmeyen sunucu yanıtı.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} işareti]
-password_label=Bu PDF dosyasını açmak için parolasını yazın.
-password_invalid=Geçersiz parola. Lütfen yeniden deneyin.
-password_ok=Tamam
-password_cancel=İptal
-
-printing_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir.
-printing_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil.
-web_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor.
-document_colors_not_allowed=PDF belgelerinin kendi renklerini kullanması için izin verilmiyor: “Sayfalara kendi renklerini seçmesi için izin ver” tarayıcıda etkinleştirilmemiş.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Önceki sayfa
+previous_label=Önceki
+next.title=Sonraki sayfa
+next_label=Sonraki
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sayfa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Uzaklaştır
+zoom_out_label=Uzaklaştır
+zoom_in.title=Yaklaştır
+zoom_in_label=Yaklaştır
+zoom.title=Yakınlaştırma
+presentation_mode.title=Sunum moduna geç
+presentation_mode_label=Sunum Modu
+open_file.title=Dosya aç
+open_file_label=Aç
+print.title=Yazdır
+print_label=Yazdır
+download.title=İndir
+download_label=İndir
+bookmark.title=Geçerli görünüm (kopyala veya yeni pencerede aç)
+bookmark_label=Geçerli görünüm
+
+# Secondary toolbar and context menu
+tools.title=Araçlar
+tools_label=Araçlar
+first_page.title=İlk sayfaya git
+first_page.label=İlk sayfaya git
+first_page_label=İlk sayfaya git
+last_page.title=Son sayfaya git
+last_page.label=Son sayfaya git
+last_page_label=Son sayfaya git
+page_rotate_cw.title=Saat yönünde döndür
+page_rotate_cw.label=Saat yönünde döndür
+page_rotate_cw_label=Saat yönünde döndür
+page_rotate_ccw.title=Saat yönünün tersine döndür
+page_rotate_ccw.label=Saat yönünün tersine döndür
+page_rotate_ccw_label=Saat yönünün tersine döndür
+
+cursor_text_select_tool.title=Metin seçme aracını etkinleştir
+cursor_text_select_tool_label=Metin seçme aracı
+cursor_hand_tool.title=El aracını etkinleştir
+cursor_hand_tool_label=El aracı
+
+scroll_vertical.title=Dikey kaydırma kullan
+scroll_vertical_label=Dikey kaydırma
+scroll_horizontal.title=Yatay kaydırma kullan
+scroll_horizontal_label=Yatay kaydırma
+scroll_wrapped.title=Yan yana kaydırmayı kullan
+scroll_wrapped_label=Yan yana kaydırma
+
+spread_none.title=Yan yana sayfaları birleştirme
+spread_none_label=Birleştirme
+spread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir
+spread_odd_label=Tek numaralı
+spread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir
+spread_even_label=Çift numaralı
+
+# Document properties dialog box
+document_properties.title=Belge özellikleri…
+document_properties_label=Belge özellikleri…
+document_properties_file_name=Dosya adı:
+document_properties_file_size=Dosya boyutu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
+document_properties_title=Başlık:
+document_properties_author=Yazar:
+document_properties_subject=Konu:
+document_properties_keywords=Anahtar kelimeler:
+document_properties_creation_date=Oluturma tarihi:
+document_properties_modification_date=Değiştirme tarihi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Oluşturan:
+document_properties_producer=PDF üreticisi:
+document_properties_version=PDF sürümü:
+document_properties_page_count=Sayfa sayısı:
+document_properties_page_size=Sayfa boyutu:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=dikey
+document_properties_page_size_orientation_landscape=yatay
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hızlı web görünümü:
+document_properties_linearized_yes=Evet
+document_properties_linearized_no=Hayır
+document_properties_close=Kapat
+
+print_progress_message=Belge yazdırılmaya hazırlanıyor…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=%{{progress}}
+print_progress_close=İptal
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Kenar çubuğunu aç/kapat
+toggle_sidebar_notification.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler içeriyor)
+toggle_sidebar_label=Kenar çubuğunu aç/kapat
+document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın)
+document_outline_label=Belge ana hatları
+attachments.title=Ekleri göster
+attachments_label=Ekler
+thumbs.title=Küçük resimleri göster
+thumbs_label=Küçük resimler
+findbar.title=Belgede bul
+findbar_label=Bul
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Sayfa {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sayfa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. sayfanın küçük hâli
+
+# Find panel button title and messages
+find_input.title=Bul
+find_input.placeholder=Belgede bul…
+find_previous.title=Önceki eşleşmeyi bul
+find_previous_label=Önceki
+find_next.title=Sonraki eşleşmeyi bul
+find_next_label=Sonraki
+find_highlight=Tümünü vurgula
+find_match_case_label=Büyük-küçük harfe duyarlı
+find_entire_word_label=Tam sözcükler
+find_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi
+find_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[two]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[few]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[many]={{total}} eşleşmeden {{current}}. eşleşme
+find_match_count[other]={{total}} eşleşmeden {{current}}. eşleşme
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} eşleşmeden fazla
+find_match_count_limit[one]={{limit}} eşleşmeden fazla
+find_match_count_limit[two]={{limit}} eşleşmeden fazla
+find_match_count_limit[few]={{limit}} eşleşmeden fazla
+find_match_count_limit[many]={{limit}} eşleşmeden fazla
+find_match_count_limit[other]={{limit}} eşleşmeden fazla
+find_not_found=Eşleşme bulunamadı
+
+# Error panel labels
+error_more_info=Daha fazla bilgi al
+error_less_info=Daha az bilgi
+error_close=Kapat
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js sürüm {{version}} (yapı: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=İleti: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Yığın: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dosya: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Satır: {{line}}
+rendering_error=Sayfa yorumlanırken bir hata oluştu.
+
+# Predefined zoom values
+page_scale_width=Sayfa genişliği
+page_scale_fit=Sayfayı sığdır
+page_scale_auto=Otomatik yakınlaştır
+page_scale_actual=Gerçek boyut
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent=%{{scale}}
+
+# Loading indicator messages
+loading_error_indicator=Hata
+loading_error=PDF yüklenirken bir hata oluştu.
+invalid_file_error=Geçersiz veya bozulmuş PDF dosyası.
+missing_file_error=PDF dosyası eksik.
+unexpected_response_error=Beklenmeyen sunucu yanıtı.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} işareti]
+password_label=Bu PDF dosyasını açmak için parolasını yazın.
+password_invalid=Geçersiz parola. Lütfen yeniden deneyin.
+password_ok=Tamam
+password_cancel=İptal
+
+printing_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir.
+printing_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil.
+web_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor.
+document_colors_not_allowed=PDF belgelerinin kendi renklerini kullanması için izin verilmiyor: “Sayfalara kendi renklerini seçmesi için izin ver” tarayıcıda etkinleştirilmemiş.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/trs/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/trs/viewer.properties
index 65252f7feaa43fc484eb22d089371807e8c79083..8bf9dd72b952e2c5415119a1b5a29b1a140891f9 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/trs/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/trs/viewer.properties
@@ -1,213 +1,213 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Pajinâ gunâj rukùu
-previous_label=Sa gachin
-next.title=Pajinâ 'na' ñaan
-next_label=Ne' ñaan
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Ñanj
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=si'iaj {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} of {{pagesCount}})
-
-zoom_out.title=Nagi'iaj li'
-zoom_out_label=Nagi'iaj li'
-zoom_in.title=Nagi'iaj niko'
-zoom_in_label=Nagi'iaj niko'
-zoom.title=dàj nìko ma'an
-presentation_mode.title=Naduno' daj ga ma
-presentation_mode_label=Daj gà ma
-open_file.title=Na'nïn' chrû ñanj
-open_file_label=Na'nïn
-print.title=Nari' ña du'ua
-print_label=Nari' ñadu'ua
-download.title=Nadunïnj
-download_label=Nadunïnj
-bookmark.title=Daj hua ma (Guxun' nej na'nïn' riña ventana nakàa)
-bookmark_label=Daj hua ma
-
-# Secondary toolbar and context menu
-tools.title=Rasun
-tools_label=Nej rasùun
-first_page.title=gun' riña pajina asiniin
-first_page.label=Gun' riña pajina asiniin
-first_page_label=Gun' riña pajina asiniin
-last_page.title=Gun' riña pajina rukù ni'in
-last_page.label=Gun' riña pajina rukù ni'inj
-last_page_label=Gun' riña pajina rukù ni'inj
-page_rotate_cw.title=Tanikaj ne' huat
-page_rotate_cw.label=Tanikaj ne' huat
-page_rotate_cw_label=Tanikaj ne' huat
-page_rotate_ccw.title=Tanikaj ne' chînt'
-page_rotate_ccw.label=Tanikaj ne' chint
-page_rotate_ccw_label=Tanikaj ne' chint
-
-cursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto
-cursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto
-cursor_hand_tool.title=Nachrun' nej rasun
-cursor_hand_tool_label=Sa rajsun ro'o'
-
-scroll_vertical.title=Garasun' dukuán runūu
-scroll_vertical_label=Dukuán runūu
-scroll_horizontal.title=Garasun' dukuán nikin' nahui
-scroll_horizontal_label=Dukuán nikin' nahui
-scroll_wrapped.title=Garasun' sa nachree
-scroll_wrapped_label=Sa nachree
-
-spread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin
-spread_none_label=Ni'io daj hua pagina
-spread_odd.title=Nagi'iaj nugua'ant nej pajina
-spread_odd_label=Ni'io' daj hua libro gurin
-spread_even.title=Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi
-spread_even_label=Nahuin nìko nej
-
-# Document properties dialog box
-document_properties.title=Nej sa nikāj ñanj…
-document_properties_label=Nej sa nikāj ñanj…
-document_properties_file_name=Si yugui archîbo:
-document_properties_file_size=Dàj yachìj archîbo:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Si yugui:
-document_properties_author=Sí girirà:
-document_properties_subject=Dugui':
-document_properties_keywords=Nej nuguan' huìi:
-document_properties_creation_date=Gui gurugui' man:
-document_properties_modification_date=Nuguan' nahuin nakà:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Guiri ro'
-document_properties_producer=Sa ri PDF:
-document_properties_version=PDF Version:
-document_properties_page_count=Si Guendâ Pâjina:
-document_properties_page_size=Dàj yachìj pâjina:
-document_properties_page_size_unit_inches=riña
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=nadu'ua
-document_properties_page_size_orientation_landscape=dàj huaj
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Da'ngà'a
-document_properties_page_size_name_legal=Nuguan' a'nï'ïn
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Nanèt chre ni'iajt riña Web:
-document_properties_linearized_yes=Ga'ue
-document_properties_linearized_no=Si ga'ue
-document_properties_close=Narán
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Duyichin'
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Nadunā barrâ nù yi'nïn
-toggle_sidebar_label=Nadunā barrâ nù yi'nïn
-findbar_label=Narì'
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-
-# Find panel button title and messages
-find_input.title=Narì'
-find_previous_label=Sa gachîn
-find_next_label=Ne' ñaan
-find_highlight=Daran' sa ña'an
-find_match_case_label=Match case
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} si'iaj {{total}} guña gè huaj
-find_match_count[two]={{current}} si'iaj {{total}} guña gè huaj
-find_match_count[few]={{current}} si'iaj {{total}} guña gè huaj
-find_match_count[many]={{current}} si'iaj {{total}} guña gè huaj
-find_match_count[other]={{current}} of {{total}} matches
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i
-find_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i
-find_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i
-find_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i
-find_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i
-find_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i
-find_not_found=Nu narì'ij nugua'anj
-
-# Error panel labels
-error_more_info=Doj nuguan' a'min rayi'î nan
-error_less_info=Dòj nuguan' a'min rayi'î nan
-error_close=Narán
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Message: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Naru'ui': {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Archîbo: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Lînia: {{line}}
-
-# Predefined zoom values
-page_scale_actual=Dàj yàchi akuan' nín
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Nitaj si hua hue'ej
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-password_ok=Ga'ue
-password_cancel=Duyichin'
-
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pajinâ gunâj rukùu
+previous_label=Sa gachin
+next.title=Pajinâ 'na' ñaan
+next_label=Ne' ñaan
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Ñanj
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=si'iaj {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Nagi'iaj li'
+zoom_out_label=Nagi'iaj li'
+zoom_in.title=Nagi'iaj niko'
+zoom_in_label=Nagi'iaj niko'
+zoom.title=dàj nìko ma'an
+presentation_mode.title=Naduno' daj ga ma
+presentation_mode_label=Daj gà ma
+open_file.title=Na'nïn' chrû ñanj
+open_file_label=Na'nïn
+print.title=Nari' ña du'ua
+print_label=Nari' ñadu'ua
+download.title=Nadunïnj
+download_label=Nadunïnj
+bookmark.title=Daj hua ma (Guxun' nej na'nïn' riña ventana nakàa)
+bookmark_label=Daj hua ma
+
+# Secondary toolbar and context menu
+tools.title=Rasun
+tools_label=Nej rasùun
+first_page.title=gun' riña pajina asiniin
+first_page.label=Gun' riña pajina asiniin
+first_page_label=Gun' riña pajina asiniin
+last_page.title=Gun' riña pajina rukù ni'in
+last_page.label=Gun' riña pajina rukù ni'inj
+last_page_label=Gun' riña pajina rukù ni'inj
+page_rotate_cw.title=Tanikaj ne' huat
+page_rotate_cw.label=Tanikaj ne' huat
+page_rotate_cw_label=Tanikaj ne' huat
+page_rotate_ccw.title=Tanikaj ne' chînt'
+page_rotate_ccw.label=Tanikaj ne' chint
+page_rotate_ccw_label=Tanikaj ne' chint
+
+cursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto
+cursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto
+cursor_hand_tool.title=Nachrun' nej rasun
+cursor_hand_tool_label=Sa rajsun ro'o'
+
+scroll_vertical.title=Garasun' dukuán runūu
+scroll_vertical_label=Dukuán runūu
+scroll_horizontal.title=Garasun' dukuán nikin' nahui
+scroll_horizontal_label=Dukuán nikin' nahui
+scroll_wrapped.title=Garasun' sa nachree
+scroll_wrapped_label=Sa nachree
+
+spread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin
+spread_none_label=Ni'io daj hua pagina
+spread_odd.title=Nagi'iaj nugua'ant nej pajina
+spread_odd_label=Ni'io' daj hua libro gurin
+spread_even.title=Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi
+spread_even_label=Nahuin nìko nej
+
+# Document properties dialog box
+document_properties.title=Nej sa nikāj ñanj…
+document_properties_label=Nej sa nikāj ñanj…
+document_properties_file_name=Si yugui archîbo:
+document_properties_file_size=Dàj yachìj archîbo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Si yugui:
+document_properties_author=Sí girirà:
+document_properties_subject=Dugui':
+document_properties_keywords=Nej nuguan' huìi:
+document_properties_creation_date=Gui gurugui' man:
+document_properties_modification_date=Nuguan' nahuin nakà:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Guiri ro'
+document_properties_producer=Sa ri PDF:
+document_properties_version=PDF Version:
+document_properties_page_count=Si Guendâ Pâjina:
+document_properties_page_size=Dàj yachìj pâjina:
+document_properties_page_size_unit_inches=riña
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=nadu'ua
+document_properties_page_size_orientation_landscape=dàj huaj
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Da'ngà'a
+document_properties_page_size_name_legal=Nuguan' a'nï'ïn
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Nanèt chre ni'iajt riña Web:
+document_properties_linearized_yes=Ga'ue
+document_properties_linearized_no=Si ga'ue
+document_properties_close=Narán
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Duyichin'
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Nadunā barrâ nù yi'nïn
+toggle_sidebar_label=Nadunā barrâ nù yi'nïn
+findbar_label=Narì'
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=Narì'
+find_previous_label=Sa gachîn
+find_next_label=Ne' ñaan
+find_highlight=Daran' sa ña'an
+find_match_case_label=Match case
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[two]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[few]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[many]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i
+find_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_not_found=Nu narì'ij nugua'anj
+
+# Error panel labels
+error_more_info=Doj nuguan' a'min rayi'î nan
+error_less_info=Dòj nuguan' a'min rayi'î nan
+error_close=Narán
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Naru'ui': {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archîbo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lînia: {{line}}
+
+# Predefined zoom values
+page_scale_actual=Dàj yàchi akuan' nín
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Nitaj si hua hue'ej
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_ok=Ga'ue
+password_cancel=Duyichin'
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uk/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uk/viewer.properties
index 599c8f916d239419bc19295454d3d6d31e4aef5f..461ab85d68c2c178f39bd3ade5f5364135c2fe6a 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uk/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uk/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Попередня сторінка
-previous_label=Попередня
-next.title=Наступна сторінка
-next_label=Наступна
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Сторінка
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=із {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} із {{pagesCount}})
-
-zoom_out.title=Зменшити
-zoom_out_label=Зменшити
-zoom_in.title=Збільшити
-zoom_in_label=Збільшити
-zoom.title=Масштаб
-presentation_mode.title=Перейти в режим презентації
-presentation_mode_label=Режим презентації
-open_file.title=Відкрити файл
-open_file_label=Відкрити
-print.title=Друк
-print_label=Друк
-download.title=Завантажити
-download_label=Завантажити
-bookmark.title=Поточний вигляд (копіювати чи відкрити в новому вікні)
-bookmark_label=Поточний вигляд
-
-# Secondary toolbar and context menu
-tools.title=Інструменти
-tools_label=Інструменти
-first_page.title=На першу сторінку
-first_page.label=На першу сторінку
-first_page_label=На першу сторінку
-last_page.title=На останню сторінку
-last_page.label=На останню сторінку
-last_page_label=На останню сторінку
-page_rotate_cw.title=Повернути за годинниковою стрілкою
-page_rotate_cw.label=Повернути за годинниковою стрілкою
-page_rotate_cw_label=Повернути за годинниковою стрілкою
-page_rotate_ccw.title=Повернути проти годинникової стрілки
-page_rotate_ccw.label=Повернути проти годинникової стрілки
-page_rotate_ccw_label=Повернути проти годинникової стрілки
-
-cursor_text_select_tool.title=Увімкнути інструмент вибору тексту
-cursor_text_select_tool_label=Інструмент вибору тексту
-cursor_hand_tool.title=Увімкнути інструмент «Рука»
-cursor_hand_tool_label=Інструмент «Рука»
-
-scroll_vertical.title=Використовувати вертикальне прокручування
-scroll_vertical_label=Вертикальне прокручування
-scroll_horizontal.title=Використовувати горизонтальне прокручування
-scroll_horizontal_label=Горизонтальне прокручування
-scroll_wrapped.title=Використовувати масштабоване прокручування
-scroll_wrapped_label=Масштабоване прокручування
-
-spread_none.title=Не використовувати розгорнуті сторінки
-spread_none_label=Без розгорнутих сторінок
-spread_odd.title=Розгорнуті сторінки починаються з непарних номерів
-spread_odd_label=Непарні сторінки зліва
-spread_even.title=Розгорнуті сторінки починаються з парних номерів
-spread_even_label=Парні сторінки зліва
-
-# Document properties dialog box
-document_properties.title=Властивості документа…
-document_properties_label=Властивості документа…
-document_properties_file_name=Назва файла:
-document_properties_file_size=Розмір файла:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} КБ ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} МБ ({{size_b}} bytes)
-document_properties_title=Заголовок:
-document_properties_author=Автор:
-document_properties_subject=Тема:
-document_properties_keywords=Ключові слова:
-document_properties_creation_date=Дата створення:
-document_properties_modification_date=Дата зміни:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Створено:
-document_properties_producer=Виробник PDF:
-document_properties_version=Версія PDF:
-document_properties_page_count=Кількість сторінок:
-document_properties_page_size=Розмір сторінки:
-document_properties_page_size_unit_inches=дюймів
-document_properties_page_size_unit_millimeters=мм
-document_properties_page_size_orientation_portrait=книжкова
-document_properties_page_size_orientation_landscape=альбомна
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Швидкий перегляд в Інтернеті:
-document_properties_linearized_yes=Так
-document_properties_linearized_no=Ні
-document_properties_close=Закрити
-
-print_progress_message=Підготовка документу до друку…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Скасувати
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Бічна панель
-toggle_sidebar_notification.title=Перемкнути бічну панель (документ має вміст/вкладення)
-toggle_sidebar_label=Перемкнути бічну панель
-document_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів)
-document_outline_label=Схема документа
-attachments.title=Показати прикріплення
-attachments_label=Прикріплення
-thumbs.title=Показувати ескізи
-thumbs_label=Ескізи
-findbar.title=Знайти в документі
-findbar_label=Пошук
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Сторінка {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Сторінка {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Ескіз сторінки {{page}}
-
-# Find panel button title and messages
-find_input.title=Знайти
-find_input.placeholder=Знайти в документі…
-find_previous.title=Знайти попереднє входження фрази
-find_previous_label=Попереднє
-find_next.title=Знайти наступне входження фрази
-find_next_label=Наступне
-find_highlight=Підсвітити все
-find_match_case_label=З урахуванням регістру
-find_entire_word_label=Цілі слова
-find_reached_top=Досягнуто початку документу, продовжено з кінця
-find_reached_bottom=Досягнуто кінця документу, продовжено з початку
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} збіг із {{total}}
-find_match_count[two]={{current}} збіги з {{total}}
-find_match_count[few]={{current}} збігів із {{total}}
-find_match_count[many]={{current}} збігів із {{total}}
-find_match_count[other]={{current}} збігів із {{total}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Понад {{limit}} збігів
-find_match_count_limit[one]=Більше, ніж {{limit}} збіг
-find_match_count_limit[two]=Більше, ніж {{limit}} збіги
-find_match_count_limit[few]=Більше, ніж {{limit}} збігів
-find_match_count_limit[many]=Понад {{limit}} збігів
-find_match_count_limit[other]=Понад {{limit}} збігів
-find_not_found=Фразу не знайдено
-
-# Error panel labels
-error_more_info=Більше інформації
-error_less_info=Менше інформації
-error_close=Закрити
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Повідомлення: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Стек: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Файл: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Рядок: {{line}}
-rendering_error=Під час виведення сторінки сталася помилка.
-
-# Predefined zoom values
-page_scale_width=За шириною
-page_scale_fit=Умістити
-page_scale_auto=Авто-масштаб
-page_scale_actual=Дійсний розмір
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Помилка
-loading_error=Під час завантаження PDF сталася помилка.
-invalid_file_error=Недійсний або пошкоджений PDF-файл.
-missing_file_error=Відсутній PDF-файл.
-unexpected_response_error=Неочікувана відповідь сервера.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}}-аннотація]
-password_label=Введіть пароль для відкриття цього PDF-файла.
-password_invalid=Невірний пароль. Спробуйте ще.
-password_ok=Гаразд
-password_cancel=Скасувати
-
-printing_not_supported=Попередження: Цей браузер не повністю підтримує друк.
-printing_not_ready=Попередження: PDF не повністю завантажений для друку.
-web_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти.
-document_colors_not_allowed=PDF-документам не дозволено використовувати власні кольори: в браузері вимкнено параметр «Дозволити сторінкам використовувати власні кольори».
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Попередня сторінка
+previous_label=Попередня
+next.title=Наступна сторінка
+next_label=Наступна
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Сторінка
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=із {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} із {{pagesCount}})
+
+zoom_out.title=Зменшити
+zoom_out_label=Зменшити
+zoom_in.title=Збільшити
+zoom_in_label=Збільшити
+zoom.title=Масштаб
+presentation_mode.title=Перейти в режим презентації
+presentation_mode_label=Режим презентації
+open_file.title=Відкрити файл
+open_file_label=Відкрити
+print.title=Друк
+print_label=Друк
+download.title=Завантажити
+download_label=Завантажити
+bookmark.title=Поточний вигляд (копіювати чи відкрити в новому вікні)
+bookmark_label=Поточний вигляд
+
+# Secondary toolbar and context menu
+tools.title=Інструменти
+tools_label=Інструменти
+first_page.title=На першу сторінку
+first_page.label=На першу сторінку
+first_page_label=На першу сторінку
+last_page.title=На останню сторінку
+last_page.label=На останню сторінку
+last_page_label=На останню сторінку
+page_rotate_cw.title=Повернути за годинниковою стрілкою
+page_rotate_cw.label=Повернути за годинниковою стрілкою
+page_rotate_cw_label=Повернути за годинниковою стрілкою
+page_rotate_ccw.title=Повернути проти годинникової стрілки
+page_rotate_ccw.label=Повернути проти годинникової стрілки
+page_rotate_ccw_label=Повернути проти годинникової стрілки
+
+cursor_text_select_tool.title=Увімкнути інструмент вибору тексту
+cursor_text_select_tool_label=Інструмент вибору тексту
+cursor_hand_tool.title=Увімкнути інструмент «Рука»
+cursor_hand_tool_label=Інструмент «Рука»
+
+scroll_vertical.title=Використовувати вертикальне прокручування
+scroll_vertical_label=Вертикальне прокручування
+scroll_horizontal.title=Використовувати горизонтальне прокручування
+scroll_horizontal_label=Горизонтальне прокручування
+scroll_wrapped.title=Використовувати масштабоване прокручування
+scroll_wrapped_label=Масштабоване прокручування
+
+spread_none.title=Не використовувати розгорнуті сторінки
+spread_none_label=Без розгорнутих сторінок
+spread_odd.title=Розгорнуті сторінки починаються з непарних номерів
+spread_odd_label=Непарні сторінки зліва
+spread_even.title=Розгорнуті сторінки починаються з парних номерів
+spread_even_label=Парні сторінки зліва
+
+# Document properties dialog box
+document_properties.title=Властивості документа…
+document_properties_label=Властивості документа…
+document_properties_file_name=Назва файла:
+document_properties_file_size=Розмір файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} bytes)
+document_properties_title=Заголовок:
+document_properties_author=Автор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключові слова:
+document_properties_creation_date=Дата створення:
+document_properties_modification_date=Дата зміни:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Створено:
+document_properties_producer=Виробник PDF:
+document_properties_version=Версія PDF:
+document_properties_page_count=Кількість сторінок:
+document_properties_page_size=Розмір сторінки:
+document_properties_page_size_unit_inches=дюймів
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=книжкова
+document_properties_page_size_orientation_landscape=альбомна
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Швидкий перегляд в Інтернеті:
+document_properties_linearized_yes=Так
+document_properties_linearized_no=Ні
+document_properties_close=Закрити
+
+print_progress_message=Підготовка документу до друку…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Скасувати
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Бічна панель
+toggle_sidebar_notification.title=Перемкнути бічну панель (документ має вміст/вкладення)
+toggle_sidebar_label=Перемкнути бічну панель
+document_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів)
+document_outline_label=Схема документа
+attachments.title=Показати прикріплення
+attachments_label=Прикріплення
+thumbs.title=Показувати ескізи
+thumbs_label=Ескізи
+findbar.title=Знайти в документі
+findbar_label=Пошук
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Сторінка {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Сторінка {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ескіз сторінки {{page}}
+
+# Find panel button title and messages
+find_input.title=Знайти
+find_input.placeholder=Знайти в документі…
+find_previous.title=Знайти попереднє входження фрази
+find_previous_label=Попереднє
+find_next.title=Знайти наступне входження фрази
+find_next_label=Наступне
+find_highlight=Підсвітити все
+find_match_case_label=З урахуванням регістру
+find_entire_word_label=Цілі слова
+find_reached_top=Досягнуто початку документу, продовжено з кінця
+find_reached_bottom=Досягнуто кінця документу, продовжено з початку
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} збіг із {{total}}
+find_match_count[two]={{current}} збіги з {{total}}
+find_match_count[few]={{current}} збігів із {{total}}
+find_match_count[many]={{current}} збігів із {{total}}
+find_match_count[other]={{current}} збігів із {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Понад {{limit}} збігів
+find_match_count_limit[one]=Більше, ніж {{limit}} збіг
+find_match_count_limit[two]=Більше, ніж {{limit}} збіги
+find_match_count_limit[few]=Більше, ніж {{limit}} збігів
+find_match_count_limit[many]=Понад {{limit}} збігів
+find_match_count_limit[other]=Понад {{limit}} збігів
+find_not_found=Фразу не знайдено
+
+# Error panel labels
+error_more_info=Більше інформації
+error_less_info=Менше інформації
+error_close=Закрити
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Повідомлення: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Рядок: {{line}}
+rendering_error=Під час виведення сторінки сталася помилка.
+
+# Predefined zoom values
+page_scale_width=За шириною
+page_scale_fit=Умістити
+page_scale_auto=Авто-масштаб
+page_scale_actual=Дійсний розмір
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Помилка
+loading_error=Під час завантаження PDF сталася помилка.
+invalid_file_error=Недійсний або пошкоджений PDF-файл.
+missing_file_error=Відсутній PDF-файл.
+unexpected_response_error=Неочікувана відповідь сервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-аннотація]
+password_label=Введіть пароль для відкриття цього PDF-файла.
+password_invalid=Невірний пароль. Спробуйте ще.
+password_ok=Гаразд
+password_cancel=Скасувати
+
+printing_not_supported=Попередження: Цей браузер не повністю підтримує друк.
+printing_not_ready=Попередження: PDF не повністю завантажений для друку.
+web_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти.
+document_colors_not_allowed=PDF-документам не дозволено використовувати власні кольори: в браузері вимкнено параметр «Дозволити сторінкам використовувати власні кольори».
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ur/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ur/viewer.properties
index 78e2029d47330dada55d01883fc9e1a1062c2be2..e67866250824bf6edad3791ca33af36773330a6d 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ur/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/ur/viewer.properties
@@ -1,242 +1,242 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=پچھلا صفحہ
-previous_label=پچھلا
-next.title=اگلا صفحہ
-next_label=آگے
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=صفحہ
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages={{pagesCount}} کا
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} کا {{pagesCount}})
-
-zoom_out.title=باہر زوم کریں
-zoom_out_label=باہر زوم کریں
-zoom_in.title=اندر زوم کریں
-zoom_in_label=اندر زوم کریں
-zoom.title=زوم
-presentation_mode.title=پیشکش موڈ میں چلے جائیں
-presentation_mode_label=پیشکش موڈ
-open_file.title=مسل کھولیں
-open_file_label=کھولیں
-print.title=چھاپیں
-print_label=چھاپیں
-download.title=ڈاؤن لوڈ
-download_label=ڈاؤن لوڈ
-bookmark.title=حالیہ نظارہ (نۓ دریچہ میں نقل کریں یا کھولیں)
-bookmark_label=حالیہ نظارہ
-
-# Secondary toolbar and context menu
-tools.title=آلات
-tools_label=آلات
-first_page.title=پہلے صفحہ پر جائیں
-first_page.label=پہلے صفحہ پر جائیں
-first_page_label=پہلے صفحہ پر جائیں
-last_page.title=آخری صفحہ پر جائیں
-last_page.label=آخری صفحہ پر جائیں
-last_page_label=آخری صفحہ پر جائیں
-page_rotate_cw.title=گھڑی وار گھمائیں
-page_rotate_cw.label=گھڑی وار گھمائیں
-page_rotate_cw_label=گھڑی وار گھمائیں
-page_rotate_ccw.title=ضد گھڑی وار گھمائیں
-page_rotate_ccw.label=ضد گھڑی وار گھمائیں
-page_rotate_ccw_label=ضد گھڑی وار گھمائیں
-
-cursor_text_select_tool.title=متن کے انتخاب کے ٹول کو فعال بناے
-cursor_text_select_tool_label=متن کے انتخاب کا آلہ
-cursor_hand_tool.title=ہینڈ ٹول کو فعال بناییں
-cursor_hand_tool_label=ہاتھ کا آلہ
-
-scroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں
-scroll_vertical_label=عمودی اسکرولنگ
-scroll_horizontal.title=افقی سکرولنگ کا استعمال کریں
-scroll_horizontal_label=افقی سکرولنگ
-
-spread_none.title=صفحہ پھیلانے میں شامل نہ ہوں
-spread_none_label=کوئی پھیلاؤ نہیں
-spread_odd_label=تاک پھیلاؤ
-spread_even_label=جفت پھیلاؤ
-
-# Document properties dialog box
-document_properties.title=دستاویز خواص…
-document_properties_label=دستاویز خواص…\u0020
-document_properties_file_name=نام مسل:
-document_properties_file_size=مسل سائز:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=عنوان:
-document_properties_author=تخلیق کار:
-document_properties_subject=موضوع:
-document_properties_keywords=کلیدی الفاظ:
-document_properties_creation_date=تخلیق کی تاریخ:
-document_properties_modification_date=ترمیم کی تاریخ:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}، {{time}}
-document_properties_creator=تخلیق کار:
-document_properties_producer=PDF پیدا کار:
-document_properties_version=PDF ورژن:
-document_properties_page_count=صفحہ شمار:
-document_properties_page_size=صفہ کی لمبائ:
-document_properties_page_size_unit_inches=میں
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=عمودی انداز
-document_properties_page_size_orientation_landscape=افقى انداز
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=خط
-document_properties_page_size_name_legal=قانونی
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}}
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=تیز ویب دیکھیں:
-document_properties_linearized_yes=ہاں
-document_properties_linearized_no=نہیں
-document_properties_close=بند کریں
-
-print_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent=*{{progress}}%*
-print_progress_close=منسوخ کریں
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=سلائیڈ ٹوگل کریں
-toggle_sidebar_label=سلائیڈ ٹوگل کریں
-document_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں)
-document_outline_label=دستاویز آؤٹ لائن
-attachments.title=منسلکات دکھائیں
-attachments_label=منسلکات
-thumbs.title=تھمبنیل دکھائیں
-thumbs_label=مجمل
-findbar.title=دستاویز میں ڈھونڈیں
-findbar_label=ڈھونڈیں
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=صفحہ {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=صفحہ {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=صفحے کا مجمل {{page}}
-
-# Find panel button title and messages
-find_input.title=ڈھونڈیں
-find_input.placeholder=دستاویز… میں ڈھونڈیں
-find_previous.title=فقرے کا پچھلا وقوع ڈھونڈیں
-find_previous_label=پچھلا
-find_next.title=فقرے کا اگلہ وقوع ڈھونڈیں
-find_next_label=آگے
-find_highlight=تمام نمایاں کریں
-find_match_case_label=حروف مشابہ کریں
-find_entire_word_label=تمام الفاظ
-find_reached_top=صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا
-find_reached_bottom=صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{total}} میچ کا {{current}}.
-find_match_count[few]={{total}} میچوں میں سے {{current}}
-find_match_count[many]={{total}} میچوں میں سے {{current}}
-find_match_count[other]={{total}} میچوں میں سے {{current}}
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(total) ]}
-find_match_count_limit[zero]={{limit}} سے زیادہ میچ
-find_match_count_limit[one]={{limit}} سے زیادہ میچ
-find_match_count_limit[two]={{limit}} سے زیادہ میچ
-find_match_count_limit[few]={{limit}} سے زیادہ میچ
-find_match_count_limit[many]={{limit}} سے زیادہ میچ
-find_match_count_limit[other]={{limit}} سے زیادہ میچ
-find_not_found=فقرا نہیں ملا
-
-# Error panel labels
-error_more_info=مزید معلومات
-error_less_info=کم معلومات
-error_close=بند کریں
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=پیغام: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=سٹیک: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=مسل: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=لائن: {{line}}
-rendering_error=صفحہ بناتے ہوئے نقص آ گیا۔
-
-# Predefined zoom values
-page_scale_width=صفحہ چوڑائی
-page_scale_fit=صفحہ فٹنگ
-page_scale_auto=خودکار زوم
-page_scale_actual=اصل سائز
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=نقص
-loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔
-invalid_file_error=ناجائز یا خراب PDF مسل
-missing_file_error=PDF مسل غائب ہے۔
-unexpected_response_error=غیرمتوقع پیش کار جواب
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}.{{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} نوٹ]
-password_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں.
-password_invalid=ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں.
-password_ok=ٹھیک ہے
-password_cancel=منسوخ کریں
-
-printing_not_supported=تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔
-printing_not_ready=تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔
-web_fonts_disabled=ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔
-document_colors_not_allowed=PDF دستاویزات کو اپنے رنگ استعمال کرنے کی اجازت نہیں: 'صفحات کو اپنے رنگ چنیں' کی اِجازت براؤزر میں بے عمل ہے۔
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=پچھلا صفحہ
+previous_label=پچھلا
+next.title=اگلا صفحہ
+next_label=آگے
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=صفحہ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} کا
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} کا {{pagesCount}})
+
+zoom_out.title=باہر زوم کریں
+zoom_out_label=باہر زوم کریں
+zoom_in.title=اندر زوم کریں
+zoom_in_label=اندر زوم کریں
+zoom.title=زوم
+presentation_mode.title=پیشکش موڈ میں چلے جائیں
+presentation_mode_label=پیشکش موڈ
+open_file.title=مسل کھولیں
+open_file_label=کھولیں
+print.title=چھاپیں
+print_label=چھاپیں
+download.title=ڈاؤن لوڈ
+download_label=ڈاؤن لوڈ
+bookmark.title=حالیہ نظارہ (نۓ دریچہ میں نقل کریں یا کھولیں)
+bookmark_label=حالیہ نظارہ
+
+# Secondary toolbar and context menu
+tools.title=آلات
+tools_label=آلات
+first_page.title=پہلے صفحہ پر جائیں
+first_page.label=پہلے صفحہ پر جائیں
+first_page_label=پہلے صفحہ پر جائیں
+last_page.title=آخری صفحہ پر جائیں
+last_page.label=آخری صفحہ پر جائیں
+last_page_label=آخری صفحہ پر جائیں
+page_rotate_cw.title=گھڑی وار گھمائیں
+page_rotate_cw.label=گھڑی وار گھمائیں
+page_rotate_cw_label=گھڑی وار گھمائیں
+page_rotate_ccw.title=ضد گھڑی وار گھمائیں
+page_rotate_ccw.label=ضد گھڑی وار گھمائیں
+page_rotate_ccw_label=ضد گھڑی وار گھمائیں
+
+cursor_text_select_tool.title=متن کے انتخاب کے ٹول کو فعال بناے
+cursor_text_select_tool_label=متن کے انتخاب کا آلہ
+cursor_hand_tool.title=ہینڈ ٹول کو فعال بناییں
+cursor_hand_tool_label=ہاتھ کا آلہ
+
+scroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں
+scroll_vertical_label=عمودی اسکرولنگ
+scroll_horizontal.title=افقی سکرولنگ کا استعمال کریں
+scroll_horizontal_label=افقی سکرولنگ
+
+spread_none.title=صفحہ پھیلانے میں شامل نہ ہوں
+spread_none_label=کوئی پھیلاؤ نہیں
+spread_odd_label=تاک پھیلاؤ
+spread_even_label=جفت پھیلاؤ
+
+# Document properties dialog box
+document_properties.title=دستاویز خواص…
+document_properties_label=دستاویز خواص…\u0020
+document_properties_file_name=نام مسل:
+document_properties_file_size=مسل سائز:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=عنوان:
+document_properties_author=تخلیق کار:
+document_properties_subject=موضوع:
+document_properties_keywords=کلیدی الفاظ:
+document_properties_creation_date=تخلیق کی تاریخ:
+document_properties_modification_date=ترمیم کی تاریخ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=تخلیق کار:
+document_properties_producer=PDF پیدا کار:
+document_properties_version=PDF ورژن:
+document_properties_page_count=صفحہ شمار:
+document_properties_page_size=صفہ کی لمبائ:
+document_properties_page_size_unit_inches=میں
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=عمودی انداز
+document_properties_page_size_orientation_landscape=افقى انداز
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=خط
+document_properties_page_size_name_legal=قانونی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=تیز ویب دیکھیں:
+document_properties_linearized_yes=ہاں
+document_properties_linearized_no=نہیں
+document_properties_close=بند کریں
+
+print_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=*{{progress}}%*
+print_progress_close=منسوخ کریں
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=سلائیڈ ٹوگل کریں
+toggle_sidebar_label=سلائیڈ ٹوگل کریں
+document_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں)
+document_outline_label=دستاویز آؤٹ لائن
+attachments.title=منسلکات دکھائیں
+attachments_label=منسلکات
+thumbs.title=تھمبنیل دکھائیں
+thumbs_label=مجمل
+findbar.title=دستاویز میں ڈھونڈیں
+findbar_label=ڈھونڈیں
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=صفحہ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=صفحہ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=صفحے کا مجمل {{page}}
+
+# Find panel button title and messages
+find_input.title=ڈھونڈیں
+find_input.placeholder=دستاویز… میں ڈھونڈیں
+find_previous.title=فقرے کا پچھلا وقوع ڈھونڈیں
+find_previous_label=پچھلا
+find_next.title=فقرے کا اگلہ وقوع ڈھونڈیں
+find_next_label=آگے
+find_highlight=تمام نمایاں کریں
+find_match_case_label=حروف مشابہ کریں
+find_entire_word_label=تمام الفاظ
+find_reached_top=صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا
+find_reached_bottom=صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} میچ کا {{current}}.
+find_match_count[few]={{total}} میچوں میں سے {{current}}
+find_match_count[many]={{total}} میچوں میں سے {{current}}
+find_match_count[other]={{total}} میچوں میں سے {{current}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(total) ]}
+find_match_count_limit[zero]={{limit}} سے زیادہ میچ
+find_match_count_limit[one]={{limit}} سے زیادہ میچ
+find_match_count_limit[two]={{limit}} سے زیادہ میچ
+find_match_count_limit[few]={{limit}} سے زیادہ میچ
+find_match_count_limit[many]={{limit}} سے زیادہ میچ
+find_match_count_limit[other]={{limit}} سے زیادہ میچ
+find_not_found=فقرا نہیں ملا
+
+# Error panel labels
+error_more_info=مزید معلومات
+error_less_info=کم معلومات
+error_close=بند کریں
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پیغام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=سٹیک: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=مسل: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=لائن: {{line}}
+rendering_error=صفحہ بناتے ہوئے نقص آ گیا۔
+
+# Predefined zoom values
+page_scale_width=صفحہ چوڑائی
+page_scale_fit=صفحہ فٹنگ
+page_scale_auto=خودکار زوم
+page_scale_actual=اصل سائز
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=نقص
+loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔
+invalid_file_error=ناجائز یا خراب PDF مسل
+missing_file_error=PDF مسل غائب ہے۔
+unexpected_response_error=غیرمتوقع پیش کار جواب
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}.{{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} نوٹ]
+password_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں.
+password_invalid=ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں.
+password_ok=ٹھیک ہے
+password_cancel=منسوخ کریں
+
+printing_not_supported=تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔
+printing_not_ready=تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔
+web_fonts_disabled=ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔
+document_colors_not_allowed=PDF دستاویزات کو اپنے رنگ استعمال کرنے کی اجازت نہیں: 'صفحات کو اپنے رنگ چنیں' کی اِجازت براؤزر میں بے عمل ہے۔
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uz/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uz/viewer.properties
index e451c74fff2c81aa08ce1fe4acbebc2f50e67dc0..cb96f3be7ab9623928d829d84c671fa2dd4ab3e4 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uz/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/uz/viewer.properties
@@ -1,169 +1,169 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Oldingi sahifa
-previous_label=Oldingi
-next.title=Keyingi sahifa
-next_label=Keyingi
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/{{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-
-zoom_out.title=Kichiklashtirish
-zoom_out_label=Kichiklashtirish
-zoom_in.title=Kattalashtirish
-zoom_in_label=Kattalashtirish
-zoom.title=Masshtab
-presentation_mode.title=Namoyish usuliga oʻtish
-presentation_mode_label=Namoyish usuli
-open_file.title=Faylni ochish
-open_file_label=Ochish
-print.title=Chop qilish
-print_label=Chop qilish
-download.title=Yuklab olish
-download_label=Yuklab olish
-bookmark.title=Joriy koʻrinish (nusxa oling yoki yangi oynada oching)
-bookmark_label=Joriy koʻrinish
-
-# Secondary toolbar and context menu
-tools.title=Vositalar
-tools_label=Vositalar
-first_page.title=Birinchi sahifaga oʻtish
-first_page.label=Birinchi sahifaga oʻtish
-first_page_label=Birinchi sahifaga oʻtish
-last_page.title=Soʻnggi sahifaga oʻtish
-last_page.label=Soʻnggi sahifaga oʻtish
-last_page_label=Soʻnggi sahifaga oʻtish
-page_rotate_cw.title=Soat yoʻnalishi boʻyicha burish
-page_rotate_cw.label=Soat yoʻnalishi boʻyicha burish
-page_rotate_cw_label=Soat yoʻnalishi boʻyicha burish
-page_rotate_ccw.title=Soat yoʻnalishiga qarshi burish
-page_rotate_ccw.label=Soat yoʻnalishiga qarshi burish
-page_rotate_ccw_label=Soat yoʻnalishiga qarshi burish
-
-
-# Document properties dialog box
-document_properties.title=Hujjat xossalari
-document_properties_label=Hujjat xossalari
-document_properties_file_name=Fayl nomi:
-document_properties_file_size=Fayl hajmi:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
-document_properties_title=Nomi:
-document_properties_author=Muallifi:
-document_properties_subject=Mavzusi:
-document_properties_keywords=Kalit so‘zlar
-document_properties_creation_date=Yaratilgan sanasi:
-document_properties_modification_date=O‘zgartirilgan sanasi
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Yaratuvchi:
-document_properties_producer=PDF ishlab chiqaruvchi:
-document_properties_version=PDF versiyasi:
-document_properties_page_count=Sahifa soni:
-document_properties_close=Yopish
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish
-toggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish
-document_outline_label=Hujjat tuzilishi
-attachments.title=Ilovalarni ko‘rsatish
-attachments_label=Ilovalar
-thumbs.title=Nishonchalarni koʻrsatish
-thumbs_label=Nishoncha
-findbar.title=Hujjat ichidan topish
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title={{page}} sahifa
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas={{page}} sahifa nishonchasi
-
-# Find panel button title and messages
-find_previous.title=Soʻzlardagi oldingi hodisani topish
-find_previous_label=Oldingi
-find_next.title=Iboradagi keyingi hodisani topish
-find_next_label=Keyingi
-find_highlight=Barchasini ajratib koʻrsatish
-find_match_case_label=Katta-kichik harflarni farqlash
-find_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi
-find_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi
-find_not_found=Soʻzlar topilmadi
-
-# Error panel labels
-error_more_info=Koʻproq ma`lumot
-error_less_info=Kamroq ma`lumot
-error_close=Yopish
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Xabar: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Toʻplam: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Fayl: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Satr: {{line}}
-rendering_error=Sahifa renderlanayotganda xato yuz berdi.
-
-# Predefined zoom values
-page_scale_width=Sahifa eni
-page_scale_fit=Sahifani moslashtirish
-page_scale_auto=Avtomatik masshtab
-page_scale_actual=Haqiqiy hajmi
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Xato
-loading_error=PDF yuklanayotganda xato yuz berdi.
-invalid_file_error=Xato yoki buzuq PDF fayli.
-missing_file_error=PDF fayl kerak.
-unexpected_response_error=Kutilmagan server javobi.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Annotation]
-password_label=PDF faylni ochish uchun parolni kiriting.
-password_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring.
-password_ok=OK
-
-printing_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi.
-printing_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi.
-web_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi.
-document_colors_not_allowed=PDF hujjat oʻzining ranglaridan foydalanishga ruxsat bermaydi: 'Sahifalarga oʻzining rangidan foydalanishga ruxsat berish' ushbu brauzerda oʻchirib qoʻyilgan.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Oldingi sahifa
+previous_label=Oldingi
+next.title=Keyingi sahifa
+next_label=Keyingi
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/{{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Kichiklashtirish
+zoom_out_label=Kichiklashtirish
+zoom_in.title=Kattalashtirish
+zoom_in_label=Kattalashtirish
+zoom.title=Masshtab
+presentation_mode.title=Namoyish usuliga oʻtish
+presentation_mode_label=Namoyish usuli
+open_file.title=Faylni ochish
+open_file_label=Ochish
+print.title=Chop qilish
+print_label=Chop qilish
+download.title=Yuklab olish
+download_label=Yuklab olish
+bookmark.title=Joriy koʻrinish (nusxa oling yoki yangi oynada oching)
+bookmark_label=Joriy koʻrinish
+
+# Secondary toolbar and context menu
+tools.title=Vositalar
+tools_label=Vositalar
+first_page.title=Birinchi sahifaga oʻtish
+first_page.label=Birinchi sahifaga oʻtish
+first_page_label=Birinchi sahifaga oʻtish
+last_page.title=Soʻnggi sahifaga oʻtish
+last_page.label=Soʻnggi sahifaga oʻtish
+last_page_label=Soʻnggi sahifaga oʻtish
+page_rotate_cw.title=Soat yoʻnalishi boʻyicha burish
+page_rotate_cw.label=Soat yoʻnalishi boʻyicha burish
+page_rotate_cw_label=Soat yoʻnalishi boʻyicha burish
+page_rotate_ccw.title=Soat yoʻnalishiga qarshi burish
+page_rotate_ccw.label=Soat yoʻnalishiga qarshi burish
+page_rotate_ccw_label=Soat yoʻnalishiga qarshi burish
+
+
+# Document properties dialog box
+document_properties.title=Hujjat xossalari
+document_properties_label=Hujjat xossalari
+document_properties_file_name=Fayl nomi:
+document_properties_file_size=Fayl hajmi:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Nomi:
+document_properties_author=Muallifi:
+document_properties_subject=Mavzusi:
+document_properties_keywords=Kalit so‘zlar
+document_properties_creation_date=Yaratilgan sanasi:
+document_properties_modification_date=O‘zgartirilgan sanasi
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yaratuvchi:
+document_properties_producer=PDF ishlab chiqaruvchi:
+document_properties_version=PDF versiyasi:
+document_properties_page_count=Sahifa soni:
+document_properties_close=Yopish
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish
+toggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish
+document_outline_label=Hujjat tuzilishi
+attachments.title=Ilovalarni ko‘rsatish
+attachments_label=Ilovalar
+thumbs.title=Nishonchalarni koʻrsatish
+thumbs_label=Nishoncha
+findbar.title=Hujjat ichidan topish
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} sahifa
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} sahifa nishonchasi
+
+# Find panel button title and messages
+find_previous.title=Soʻzlardagi oldingi hodisani topish
+find_previous_label=Oldingi
+find_next.title=Iboradagi keyingi hodisani topish
+find_next_label=Keyingi
+find_highlight=Barchasini ajratib koʻrsatish
+find_match_case_label=Katta-kichik harflarni farqlash
+find_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi
+find_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi
+find_not_found=Soʻzlar topilmadi
+
+# Error panel labels
+error_more_info=Koʻproq ma`lumot
+error_less_info=Kamroq ma`lumot
+error_close=Yopish
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Xabar: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Toʻplam: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fayl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Satr: {{line}}
+rendering_error=Sahifa renderlanayotganda xato yuz berdi.
+
+# Predefined zoom values
+page_scale_width=Sahifa eni
+page_scale_fit=Sahifani moslashtirish
+page_scale_auto=Avtomatik masshtab
+page_scale_actual=Haqiqiy hajmi
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Xato
+loading_error=PDF yuklanayotganda xato yuz berdi.
+invalid_file_error=Xato yoki buzuq PDF fayli.
+missing_file_error=PDF fayl kerak.
+unexpected_response_error=Kutilmagan server javobi.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=PDF faylni ochish uchun parolni kiriting.
+password_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring.
+password_ok=OK
+
+printing_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi.
+printing_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi.
+web_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi.
+document_colors_not_allowed=PDF hujjat oʻzining ranglaridan foydalanishga ruxsat bermaydi: 'Sahifalarga oʻzining rangidan foydalanishga ruxsat berish' ushbu brauzerda oʻchirib qoʻyilgan.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/vi/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/vi/viewer.properties
index b8ee16e5c44edef0f86839a261f42e09ed44fb39..6e604fbb6660bd8f7b12fef58a690d54076dd26b 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/vi/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/vi/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Trang trước
-previous_label=Trước
-next.title=Trang Sau
-next_label=Tiếp
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Trang
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=trên {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} trên {{pagesCount}})
-
-zoom_out.title=Thu nhỏ
-zoom_out_label=Thu nhỏ
-zoom_in.title=Phóng to
-zoom_in_label=Phóng to
-zoom.title=Thu phóng
-presentation_mode.title=Chuyển sang chế độ trình chiếu
-presentation_mode_label=Chế độ trình chiếu
-open_file.title=Mở tập tin
-open_file_label=Mở tập tin
-print.title=In
-print_label=In
-download.title=Tải xuống
-download_label=Tải xuống
-bookmark.title=Chế độ xem hiện tại (sao chép hoặc mở trong cửa sổ mới)
-bookmark_label=Chế độ xem hiện tại
-
-# Secondary toolbar and context menu
-tools.title=Công cụ
-tools_label=Công cụ
-first_page.title=Về trang đầu
-first_page.label=Về trang đầu
-first_page_label=Về trang đầu
-last_page.title=Đến trang cuối
-last_page.label=Đến trang cuối
-last_page_label=Đến trang cuối
-page_rotate_cw.title=Xoay theo chiều kim đồng hồ
-page_rotate_cw.label=Xoay theo chiều kim đồng hồ
-page_rotate_cw_label=Xoay theo chiều kim đồng hồ
-page_rotate_ccw.title=Xoay ngược chiều kim đồng hồ
-page_rotate_ccw.label=Xoay ngược chiều kim đồng hồ
-page_rotate_ccw_label=Xoay ngược chiều kim đồng hồ
-
-cursor_text_select_tool.title=Kích hoạt công cụ chọn vùng văn bản
-cursor_text_select_tool_label=Công cụ chọn vùng văn bản
-cursor_hand_tool.title=Kích hoạt công cụ con trỏ
-cursor_hand_tool_label=Công cụ con trỏ
-
-scroll_vertical.title=Sử dụng cuộn dọc
-scroll_vertical_label=Cuộn dọc
-scroll_horizontal.title=Sử dụng cuộn ngang
-scroll_horizontal_label=Cuộn ngang
-scroll_wrapped.title=Sử dụng cuộn ngắt dòng
-scroll_wrapped_label=Cuộn ngắt dòng
-
-spread_none.title=Không nối rộng trang
-spread_none_label=Không có phân cách
-spread_odd.title=Nối trang bài bắt đầu với các trang được đánh số lẻ
-spread_odd_label=Phân cách theo số lẻ
-spread_even.title=Nối trang bài bắt đầu với các trang được đánh số chẵn
-spread_even_label=Phân cách theo số chẵn
-
-# Document properties dialog box
-document_properties.title=Thuộc tính của tài liệu…
-document_properties_label=Thuộc tính của tài liệu…
-document_properties_file_name=Tên tập tin:
-document_properties_file_size=Kích thước:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} byte)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} byte)
-document_properties_title=Tiêu đề:
-document_properties_author=Tác giả:
-document_properties_subject=Chủ đề:
-document_properties_keywords=Từ khóa:
-document_properties_creation_date=Ngày tạo:
-document_properties_modification_date=Ngày sửa đổi:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Người tạo:
-document_properties_producer=Phần mềm tạo PDF:
-document_properties_version=Phiên bản PDF:
-document_properties_page_count=Tổng số trang:
-document_properties_page_size=Kích thước trang:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=khổ dọc
-document_properties_page_size_orientation_landscape=khổ ngang
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Thư
-document_properties_page_size_name_legal=Pháp lý
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=Xem nhanh trên web:
-document_properties_linearized_yes=Có
-document_properties_linearized_no=Không
-document_properties_close=Ðóng
-
-print_progress_message=Chuẩn bị trang để in…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Hủy bỏ
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Bật/Tắt thanh lề
-toggle_sidebar_notification.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm)
-toggle_sidebar_label=Bật/Tắt thanh lề
-document_outline.title=Hiện tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục)
-document_outline_label=Bản phác tài liệu
-attachments.title=Hiện nội dung đính kèm
-attachments_label=Nội dung đính kèm
-thumbs.title=Hiển thị ảnh thu nhỏ
-thumbs_label=Ảnh thu nhỏ
-findbar.title=Tìm trong tài liệu
-findbar_label=Tìm
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=Trang {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Trang {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Ảnh thu nhỏ của trang {{page}}
-
-# Find panel button title and messages
-find_input.title=Tìm
-find_input.placeholder=Tìm trong tài liệu…
-find_previous.title=Tìm cụm từ ở phần trước
-find_previous_label=Trước
-find_next.title=Tìm cụm từ ở phần sau
-find_next_label=Tiếp
-find_highlight=Tô sáng tất cả
-find_match_case_label=Phân biệt hoa, thường
-find_entire_word_label=Toàn bộ từ
-find_reached_top=Đã đến phần đầu tài liệu, quay trở lại từ cuối
-find_reached_bottom=Đã đến phần cuối của tài liệu, quay trở lại từ đầu
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]={{current}} của {{total}} đã trùng
-find_match_count[two]={{current}} của {{total}} đã trùng
-find_match_count[few]={{current}} của {{total}} đã trùng
-find_match_count[many]={{current}} của {{total}} đã trùng
-find_match_count[other]={{current}} của {{total}} đã trùng
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=Nhiều hơn {{limit}} đã trùng
-find_match_count_limit[one]=Nhiều hơn {{limit}} đã trùng
-find_match_count_limit[two]=Nhiều hơn {{limit}} đã trùng
-find_match_count_limit[few]=Nhiều hơn {{limit}} đã trùng
-find_match_count_limit[many]=Nhiều hơn {{limit}} đã trùng
-find_match_count_limit[other]=Nhiều hơn {{limit}} đã trùng
-find_not_found=Không tìm thấy cụm từ này
-
-# Error panel labels
-error_more_info=Thông tin thêm
-error_less_info=Hiển thị ít thông tin hơn
-error_close=Đóng
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Thông điệp: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Stack: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Tập tin: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Dòng: {{line}}
-rendering_error=Lỗi khi hiển thị trang.
-
-# Predefined zoom values
-page_scale_width=Vừa chiều rộng
-page_scale_fit=Vừa chiều cao
-page_scale_auto=Tự động chọn kích thước
-page_scale_actual=Kích thước thực
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Lỗi
-loading_error=Lỗi khi tải tài liệu PDF.
-invalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ.
-missing_file_error=Thiếu tập tin PDF.
-unexpected_response_error=Máy chủ có phản hồi lạ.
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}}, {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Chú thích]
-password_label=Nhập mật khẩu để mở tập tin PDF này.
-password_invalid=Mật khẩu không đúng. Vui lòng thử lại.
-password_ok=OK
-password_cancel=Hủy bỏ
-
-printing_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này.
-printing_not_ready=Cảnh báo: PDF chưa được tải hết để in.
-web_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng.
-document_colors_not_allowed=Tài liệu PDF không được cho phép dùng màu riêng: 'Cho phép trang chọn màu riêng' đã bị tắt trên trình duyệt.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Trang trước
+previous_label=Trước
+next.title=Trang Sau
+next_label=Tiếp
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Trang
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=trên {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} trên {{pagesCount}})
+
+zoom_out.title=Thu nhỏ
+zoom_out_label=Thu nhỏ
+zoom_in.title=Phóng to
+zoom_in_label=Phóng to
+zoom.title=Thu phóng
+presentation_mode.title=Chuyển sang chế độ trình chiếu
+presentation_mode_label=Chế độ trình chiếu
+open_file.title=Mở tập tin
+open_file_label=Mở tập tin
+print.title=In
+print_label=In
+download.title=Tải xuống
+download_label=Tải xuống
+bookmark.title=Chế độ xem hiện tại (sao chép hoặc mở trong cửa sổ mới)
+bookmark_label=Chế độ xem hiện tại
+
+# Secondary toolbar and context menu
+tools.title=Công cụ
+tools_label=Công cụ
+first_page.title=Về trang đầu
+first_page.label=Về trang đầu
+first_page_label=Về trang đầu
+last_page.title=Đến trang cuối
+last_page.label=Đến trang cuối
+last_page_label=Đến trang cuối
+page_rotate_cw.title=Xoay theo chiều kim đồng hồ
+page_rotate_cw.label=Xoay theo chiều kim đồng hồ
+page_rotate_cw_label=Xoay theo chiều kim đồng hồ
+page_rotate_ccw.title=Xoay ngược chiều kim đồng hồ
+page_rotate_ccw.label=Xoay ngược chiều kim đồng hồ
+page_rotate_ccw_label=Xoay ngược chiều kim đồng hồ
+
+cursor_text_select_tool.title=Kích hoạt công cụ chọn vùng văn bản
+cursor_text_select_tool_label=Công cụ chọn vùng văn bản
+cursor_hand_tool.title=Kích hoạt công cụ con trỏ
+cursor_hand_tool_label=Công cụ con trỏ
+
+scroll_vertical.title=Sử dụng cuộn dọc
+scroll_vertical_label=Cuộn dọc
+scroll_horizontal.title=Sử dụng cuộn ngang
+scroll_horizontal_label=Cuộn ngang
+scroll_wrapped.title=Sử dụng cuộn ngắt dòng
+scroll_wrapped_label=Cuộn ngắt dòng
+
+spread_none.title=Không nối rộng trang
+spread_none_label=Không có phân cách
+spread_odd.title=Nối trang bài bắt đầu với các trang được đánh số lẻ
+spread_odd_label=Phân cách theo số lẻ
+spread_even.title=Nối trang bài bắt đầu với các trang được đánh số chẵn
+spread_even_label=Phân cách theo số chẵn
+
+# Document properties dialog box
+document_properties.title=Thuộc tính của tài liệu…
+document_properties_label=Thuộc tính của tài liệu…
+document_properties_file_name=Tên tập tin:
+document_properties_file_size=Kích thước:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Tiêu đề:
+document_properties_author=Tác giả:
+document_properties_subject=Chủ đề:
+document_properties_keywords=Từ khóa:
+document_properties_creation_date=Ngày tạo:
+document_properties_modification_date=Ngày sửa đổi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Người tạo:
+document_properties_producer=Phần mềm tạo PDF:
+document_properties_version=Phiên bản PDF:
+document_properties_page_count=Tổng số trang:
+document_properties_page_size=Kích thước trang:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=khổ dọc
+document_properties_page_size_orientation_landscape=khổ ngang
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Thư
+document_properties_page_size_name_legal=Pháp lý
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Xem nhanh trên web:
+document_properties_linearized_yes=Có
+document_properties_linearized_no=Không
+document_properties_close=Ðóng
+
+print_progress_message=Chuẩn bị trang để in…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Hủy bỏ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Bật/Tắt thanh lề
+toggle_sidebar_notification.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm)
+toggle_sidebar_label=Bật/Tắt thanh lề
+document_outline.title=Hiện tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục)
+document_outline_label=Bản phác tài liệu
+attachments.title=Hiện nội dung đính kèm
+attachments_label=Nội dung đính kèm
+thumbs.title=Hiển thị ảnh thu nhỏ
+thumbs_label=Ảnh thu nhỏ
+findbar.title=Tìm trong tài liệu
+findbar_label=Tìm
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Trang {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Trang {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ảnh thu nhỏ của trang {{page}}
+
+# Find panel button title and messages
+find_input.title=Tìm
+find_input.placeholder=Tìm trong tài liệu…
+find_previous.title=Tìm cụm từ ở phần trước
+find_previous_label=Trước
+find_next.title=Tìm cụm từ ở phần sau
+find_next_label=Tiếp
+find_highlight=Tô sáng tất cả
+find_match_case_label=Phân biệt hoa, thường
+find_entire_word_label=Toàn bộ từ
+find_reached_top=Đã đến phần đầu tài liệu, quay trở lại từ cuối
+find_reached_bottom=Đã đến phần cuối của tài liệu, quay trở lại từ đầu
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} của {{total}} đã trùng
+find_match_count[two]={{current}} của {{total}} đã trùng
+find_match_count[few]={{current}} của {{total}} đã trùng
+find_match_count[many]={{current}} của {{total}} đã trùng
+find_match_count[other]={{current}} của {{total}} đã trùng
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[one]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[two]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[few]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[many]=Nhiều hơn {{limit}} đã trùng
+find_match_count_limit[other]=Nhiều hơn {{limit}} đã trùng
+find_not_found=Không tìm thấy cụm từ này
+
+# Error panel labels
+error_more_info=Thông tin thêm
+error_less_info=Hiển thị ít thông tin hơn
+error_close=Đóng
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Thông điệp: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tập tin: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Dòng: {{line}}
+rendering_error=Lỗi khi hiển thị trang.
+
+# Predefined zoom values
+page_scale_width=Vừa chiều rộng
+page_scale_fit=Vừa chiều cao
+page_scale_auto=Tự động chọn kích thước
+page_scale_actual=Kích thước thực
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Lỗi
+loading_error=Lỗi khi tải tài liệu PDF.
+invalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ.
+missing_file_error=Thiếu tập tin PDF.
+unexpected_response_error=Máy chủ có phản hồi lạ.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Chú thích]
+password_label=Nhập mật khẩu để mở tập tin PDF này.
+password_invalid=Mật khẩu không đúng. Vui lòng thử lại.
+password_ok=OK
+password_cancel=Hủy bỏ
+
+printing_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này.
+printing_not_ready=Cảnh báo: PDF chưa được tải hết để in.
+web_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng.
+document_colors_not_allowed=Tài liệu PDF không được cho phép dùng màu riêng: 'Cho phép trang chọn màu riêng' đã bị tắt trên trình duyệt.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/wo/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/wo/viewer.properties
index 38c7bc18483e5b2655f1a6f63d17b6317b15a8c9..2fe4356849d13a81f313570f84bac99bd9b54df3 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/wo/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/wo/viewer.properties
@@ -1,124 +1,124 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Xët wi jiitu
-previous_label=Bi jiitu
-next.title=Xët wi ci topp
-next_label=Bi ci topp
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-
-zoom_out.title=Wàññi
-zoom_out_label=Wàññi
-zoom_in.title=Yaatal
-zoom_in_label=Yaatal
-zoom.title=Yambalaŋ
-presentation_mode.title=Wañarñil ci anamu wone
-presentation_mode_label=Anamu Wone
-open_file.title=Ubbi benn dencukaay
-open_file_label=Ubbi
-print.title=Móol
-print_label=Móol
-download.title=Yeb yi
-download_label=Yeb yi
-bookmark.title=Wone bi taxaw (duppi walla ubbi palanteer bu bees)
-bookmark_label=Wone bi feeñ
-
-# Secondary toolbar and context menu
-
-
-# Document properties dialog box
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_title=Bopp:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-thumbs.title=Wone nataal yu ndaw yi
-thumbs_label=Nataal yu ndaw yi
-findbar.title=Gis ci biir jukki bi
-findbar_label=Wut
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Xët {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Wiñet bu xët {{page}}
-
-# Find panel button title and messages
-find_previous.title=Seet beneen kaddu bu ni mel te jiitu
-find_previous_label=Bi jiitu
-find_next.title=Seet beneen kaddu bu ni mel
-find_next_label=Bi ci topp
-find_highlight=Melaxal lépp
-find_match_case_label=Sàmm jëmmalin wi
-find_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf
-find_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte
-find_not_found=Gisiñu kaddu gi
-
-# Error panel labels
-error_more_info=Xibaar yu gën bari
-error_less_info=Xibaar yu gën bari
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Bataaxal: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Juug: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Dencukaay: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Rëdd : {{line}}
-rendering_error=Am njumte bu am bi xët bi di wonewu.
-
-# Predefined zoom values
-page_scale_width=Yaatuwaay bu mët
-page_scale_fit=Xët lëmm
-page_scale_auto=Yambalaŋ ci saa si
-page_scale_actual=Dayo bi am
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-
-# Loading indicator messages
-loading_error_indicator=Njumte
-loading_error=Am na njumte ci yebum dencukaay PDF bi.
-invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[Karmat {{type}}]
-password_ok=OK
-password_cancel=Neenal
-
-printing_not_supported=Artu: Joowkat bii nanguwul lool mool.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Xët wi jiitu
+previous_label=Bi jiitu
+next.title=Xët wi ci topp
+next_label=Bi ci topp
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Wàññi
+zoom_out_label=Wàññi
+zoom_in.title=Yaatal
+zoom_in_label=Yaatal
+zoom.title=Yambalaŋ
+presentation_mode.title=Wañarñil ci anamu wone
+presentation_mode_label=Anamu Wone
+open_file.title=Ubbi benn dencukaay
+open_file_label=Ubbi
+print.title=Móol
+print_label=Móol
+download.title=Yeb yi
+download_label=Yeb yi
+bookmark.title=Wone bi taxaw (duppi walla ubbi palanteer bu bees)
+bookmark_label=Wone bi feeñ
+
+# Secondary toolbar and context menu
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_title=Bopp:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+thumbs.title=Wone nataal yu ndaw yi
+thumbs_label=Nataal yu ndaw yi
+findbar.title=Gis ci biir jukki bi
+findbar_label=Wut
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Xët {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Wiñet bu xët {{page}}
+
+# Find panel button title and messages
+find_previous.title=Seet beneen kaddu bu ni mel te jiitu
+find_previous_label=Bi jiitu
+find_next.title=Seet beneen kaddu bu ni mel
+find_next_label=Bi ci topp
+find_highlight=Melaxal lépp
+find_match_case_label=Sàmm jëmmalin wi
+find_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf
+find_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte
+find_not_found=Gisiñu kaddu gi
+
+# Error panel labels
+error_more_info=Xibaar yu gën bari
+error_less_info=Xibaar yu gën bari
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Bataaxal: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Juug: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dencukaay: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rëdd : {{line}}
+rendering_error=Am njumte bu am bi xët bi di wonewu.
+
+# Predefined zoom values
+page_scale_width=Yaatuwaay bu mët
+page_scale_fit=Xët lëmm
+page_scale_auto=Yambalaŋ ci saa si
+page_scale_actual=Dayo bi am
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+loading_error_indicator=Njumte
+loading_error=Am na njumte ci yebum dencukaay PDF bi.
+invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Karmat {{type}}]
+password_ok=OK
+password_cancel=Neenal
+
+printing_not_supported=Artu: Joowkat bii nanguwul lool mool.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/xh/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/xh/viewer.properties
index 1fa394bbde943201d97cacbda0e1e68cf3ccfa94..f153b3c16659dcef71debeeef5c079d0336afd61 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/xh/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/xh/viewer.properties
@@ -1,184 +1,184 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=Iphepha langaphambili
-previous_label=Okwangaphambili
-next.title=Iphepha elilandelayo
-next_label=Okulandelayo
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=Iphepha
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=kwali- {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} kwali {{pagesCount}})
-
-zoom_out.title=Bhekelisela Kudana
-zoom_out_label=Bhekelisela Kudana
-zoom_in.title=Sondeza Kufuphi
-zoom_in_label=Sondeza Kufuphi
-zoom.title=Yandisa / Nciphisa
-presentation_mode.title=Tshintshela kwimo yonikezelo
-presentation_mode_label=Imo yonikezelo
-open_file.title=Vula Ifayile
-open_file_label=Vula
-print.title=Printa
-print_label=Printa
-download.title=Khuphela
-download_label=Khuphela
-bookmark.title=Imbonakalo ekhoyo (kopa okanye vula kwifestile entsha)
-bookmark_label=Imbonakalo ekhoyo
-
-# Secondary toolbar and context menu
-tools.title=Izixhobo zemiyalelo
-tools_label=Izixhobo zemiyalelo
-first_page.title=Yiya kwiphepha lokuqala
-first_page.label=Yiya kwiphepha lokuqala
-first_page_label=Yiya kwiphepha lokuqala
-last_page.title=Yiya kwiphepha lokugqibela
-last_page.label=Yiya kwiphepha lokugqibela
-last_page_label=Yiya kwiphepha lokugqibela
-page_rotate_cw.title=Jikelisa ngasekunene
-page_rotate_cw.label=Jikelisa ngasekunene
-page_rotate_cw_label=Jikelisa ngasekunene
-page_rotate_ccw.title=Jikelisa ngasekhohlo
-page_rotate_ccw.label=Jikelisa ngasekhohlo
-page_rotate_ccw_label=Jikelisa ngasekhohlo
-
-cursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti
-cursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti
-cursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze
-cursor_hand_tool_label=ISixhobo seSandla
-
-# Document properties dialog box
-document_properties.title=Iipropati zoxwebhu…
-document_properties_label=Iipropati zoxwebhu…
-document_properties_file_name=Igama lefayile:
-document_properties_file_size=Isayizi yefayile:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB (iibhayiti{{size_b}})
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB (iibhayithi{{size_b}})
-document_properties_title=Umxholo:
-document_properties_author=Umbhali:
-document_properties_subject=Umbandela:
-document_properties_keywords=Amagama aphambili:
-document_properties_creation_date=Umhla wokwenziwa kwayo:
-document_properties_modification_date=Umhla wokulungiswa kwayo:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=Umntu oyenzileyo:
-document_properties_producer=Umvelisi we-PDF:
-document_properties_version=Uhlelo lwe-PDF:
-document_properties_page_count=Inani lamaphepha:
-document_properties_close=Vala
-
-print_progress_message=Ilungisa uxwebhu ukuze iprinte…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=Rhoxisa
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=Togola ngebha eseCaleni
-toggle_sidebar_notification.title=ISidebar yeQhosha (uxwebhu lunolwandlalo/iziqhotyoshelwa)
-toggle_sidebar_label=Togola ngebha eseCaleni
-document_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto)
-document_outline_label=Isishwankathelo soxwebhu
-attachments.title=Bonisa iziqhotyoshelwa
-attachments_label=Iziqhoboshelo
-thumbs.title=Bonisa ukrobiso kumfanekiso
-thumbs_label=Ukrobiso kumfanekiso
-findbar.title=Fumana kuXwebhu
-findbar_label=Fumana
-
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=Iphepha {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}}
-
-# Find panel button title and messages
-find_input.title=Fumana
-find_input.placeholder=Fumana kuXwebhu…
-find_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama
-find_previous_label=Okwangaphambili
-find_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama
-find_next_label=Okulandelayo
-find_highlight=Qaqambisa konke
-find_match_case_label=Tshatisa ngobukhulu bukanobumba
-find_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi
-find_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu
-find_not_found=Ibinzana alifunyenwanga
-
-# Error panel labels
-error_more_info=Inkcazelo Engakumbi
-error_less_info=Inkcazelo Encinane
-error_close=Vala
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=I-PDF.js v{{version}} (yakha: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=Umyalezo: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=Imfumba: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=Ifayile: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=Umgca: {{line}}
-rendering_error=Imposiso yenzekile xa bekunikezelwa iphepha.
-
-# Predefined zoom values
-page_scale_width=Ububanzi bephepha
-page_scale_fit=Ukulinganiswa kwephepha
-page_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo
-page_scale_actual=Ubungakanani bokwenene
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=Imposiso
-loading_error=Imposiso yenzekile xa kulayishwa i-PDF.
-invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo.
-missing_file_error=Ifayile ye-PDF edukileyo.
-unexpected_response_error=Impendulo yeseva engalindelekanga.
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} Ubhalo-nqaku]
-password_label=Faka ipasiwedi ukuze uvule le fayile yePDF.
-password_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona.
-password_ok=KULUNGILE
-password_cancel=Rhoxisa
-
-printing_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza.
-printing_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta.
-web_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo.
-document_colors_not_allowed=Amaxwebhu ePDF akavumelekanga ukuba asebenzise imibala yawo: 'Ukuvumela amaphepha ukuba asebenzise eyawo imibala' kuvaliwe ukuba kungasebenzi kwibhrawuza.
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Iphepha langaphambili
+previous_label=Okwangaphambili
+next.title=Iphepha elilandelayo
+next_label=Okulandelayo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Iphepha
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=kwali- {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} kwali {{pagesCount}})
+
+zoom_out.title=Bhekelisela Kudana
+zoom_out_label=Bhekelisela Kudana
+zoom_in.title=Sondeza Kufuphi
+zoom_in_label=Sondeza Kufuphi
+zoom.title=Yandisa / Nciphisa
+presentation_mode.title=Tshintshela kwimo yonikezelo
+presentation_mode_label=Imo yonikezelo
+open_file.title=Vula Ifayile
+open_file_label=Vula
+print.title=Printa
+print_label=Printa
+download.title=Khuphela
+download_label=Khuphela
+bookmark.title=Imbonakalo ekhoyo (kopa okanye vula kwifestile entsha)
+bookmark_label=Imbonakalo ekhoyo
+
+# Secondary toolbar and context menu
+tools.title=Izixhobo zemiyalelo
+tools_label=Izixhobo zemiyalelo
+first_page.title=Yiya kwiphepha lokuqala
+first_page.label=Yiya kwiphepha lokuqala
+first_page_label=Yiya kwiphepha lokuqala
+last_page.title=Yiya kwiphepha lokugqibela
+last_page.label=Yiya kwiphepha lokugqibela
+last_page_label=Yiya kwiphepha lokugqibela
+page_rotate_cw.title=Jikelisa ngasekunene
+page_rotate_cw.label=Jikelisa ngasekunene
+page_rotate_cw_label=Jikelisa ngasekunene
+page_rotate_ccw.title=Jikelisa ngasekhohlo
+page_rotate_ccw.label=Jikelisa ngasekhohlo
+page_rotate_ccw_label=Jikelisa ngasekhohlo
+
+cursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti
+cursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti
+cursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze
+cursor_hand_tool_label=ISixhobo seSandla
+
+# Document properties dialog box
+document_properties.title=Iipropati zoxwebhu…
+document_properties_label=Iipropati zoxwebhu…
+document_properties_file_name=Igama lefayile:
+document_properties_file_size=Isayizi yefayile:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB (iibhayiti{{size_b}})
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB (iibhayithi{{size_b}})
+document_properties_title=Umxholo:
+document_properties_author=Umbhali:
+document_properties_subject=Umbandela:
+document_properties_keywords=Amagama aphambili:
+document_properties_creation_date=Umhla wokwenziwa kwayo:
+document_properties_modification_date=Umhla wokulungiswa kwayo:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Umntu oyenzileyo:
+document_properties_producer=Umvelisi we-PDF:
+document_properties_version=Uhlelo lwe-PDF:
+document_properties_page_count=Inani lamaphepha:
+document_properties_close=Vala
+
+print_progress_message=Ilungisa uxwebhu ukuze iprinte…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Rhoxisa
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Togola ngebha eseCaleni
+toggle_sidebar_notification.title=ISidebar yeQhosha (uxwebhu lunolwandlalo/iziqhotyoshelwa)
+toggle_sidebar_label=Togola ngebha eseCaleni
+document_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto)
+document_outline_label=Isishwankathelo soxwebhu
+attachments.title=Bonisa iziqhotyoshelwa
+attachments_label=Iziqhoboshelo
+thumbs.title=Bonisa ukrobiso kumfanekiso
+thumbs_label=Ukrobiso kumfanekiso
+findbar.title=Fumana kuXwebhu
+findbar_label=Fumana
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Iphepha {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}}
+
+# Find panel button title and messages
+find_input.title=Fumana
+find_input.placeholder=Fumana kuXwebhu…
+find_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama
+find_previous_label=Okwangaphambili
+find_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama
+find_next_label=Okulandelayo
+find_highlight=Qaqambisa konke
+find_match_case_label=Tshatisa ngobukhulu bukanobumba
+find_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi
+find_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu
+find_not_found=Ibinzana alifunyenwanga
+
+# Error panel labels
+error_more_info=Inkcazelo Engakumbi
+error_less_info=Inkcazelo Encinane
+error_close=Vala
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=I-PDF.js v{{version}} (yakha: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Umyalezo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Imfumba: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ifayile: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Umgca: {{line}}
+rendering_error=Imposiso yenzekile xa bekunikezelwa iphepha.
+
+# Predefined zoom values
+page_scale_width=Ububanzi bephepha
+page_scale_fit=Ukulinganiswa kwephepha
+page_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo
+page_scale_actual=Ubungakanani bokwenene
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Imposiso
+loading_error=Imposiso yenzekile xa kulayishwa i-PDF.
+invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo.
+missing_file_error=Ifayile ye-PDF edukileyo.
+unexpected_response_error=Impendulo yeseva engalindelekanga.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ubhalo-nqaku]
+password_label=Faka ipasiwedi ukuze uvule le fayile yePDF.
+password_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona.
+password_ok=KULUNGILE
+password_cancel=Rhoxisa
+
+printing_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza.
+printing_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta.
+web_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo.
+document_colors_not_allowed=Amaxwebhu ePDF akavumelekanga ukuba asebenzise imibala yawo: 'Ukuvumela amaphepha ukuba asebenzise eyawo imibala' kuvaliwe ukuba kungasebenzi kwibhrawuza.
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-CN/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-CN/viewer.properties
index 2dc609bfb1b4d6e52620e6123fc04cbf65659f39..43dffa4ff734e72284ce0fdfe8ee26d16b455a14 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-CN/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-CN/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=上一页
-previous_label=上一页
-next.title=下一页
-next_label=下一页
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=页面
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=/ {{pagesCount}}
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=({{pageNumber}} / {{pagesCount}})
-
-zoom_out.title=缩小
-zoom_out_label=缩小
-zoom_in.title=放大
-zoom_in_label=放大
-zoom.title=缩放
-presentation_mode.title=切换到演示模式
-presentation_mode_label=演示模式
-open_file.title=打开文件
-open_file_label=打开
-print.title=打印
-print_label=打印
-download.title=下载
-download_label=下载
-bookmark.title=当前在看的内容(复制或在新窗口中打开)
-bookmark_label=当前在看
-
-# Secondary toolbar and context menu
-tools.title=工具
-tools_label=工具
-first_page.title=转到第一页
-first_page.label=转到第一页
-first_page_label=转到第一页
-last_page.title=转到最后一页
-last_page.label=转到最后一页
-last_page_label=转到最后一页
-page_rotate_cw.title=顺时针旋转
-page_rotate_cw.label=顺时针旋转
-page_rotate_cw_label=顺时针旋转
-page_rotate_ccw.title=逆时针旋转
-page_rotate_ccw.label=逆时针旋转
-page_rotate_ccw_label=逆时针旋转
-
-cursor_text_select_tool.title=启用文本选择工具
-cursor_text_select_tool_label=文本选择工具
-cursor_hand_tool.title=启用手形工具
-cursor_hand_tool_label=手形工具
-
-scroll_vertical.title=使用垂直滚动
-scroll_vertical_label=垂直滚动
-scroll_horizontal.title=使用水平滚动
-scroll_horizontal_label=水平滚动
-scroll_wrapped.title=使用平铺滚动
-scroll_wrapped_label=平铺滚动
-
-spread_none.title=不加入衔接页
-spread_none_label=单页视图
-spread_odd.title=加入衔接页使奇数页作为起始页
-spread_odd_label=双页视图
-spread_even.title=加入衔接页使偶数页作为起始页
-spread_even_label=书籍视图
-
-# Document properties dialog box
-document_properties.title=文档属性…
-document_properties_label=文档属性…
-document_properties_file_name=文件名:
-document_properties_file_size=文件大小:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB ({{size_b}} 字节)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB ({{size_b}} 字节)
-document_properties_title=标题:
-document_properties_author=作者:
-document_properties_subject=主题:
-document_properties_keywords=关键词:
-document_properties_creation_date=创建日期:
-document_properties_modification_date=修改日期:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}}, {{time}}
-document_properties_creator=创建者:
-document_properties_producer=PDF 生成器:
-document_properties_version=PDF 版本:
-document_properties_page_count=页数:
-document_properties_page_size=页面大小:
-document_properties_page_size_unit_inches=英寸
-document_properties_page_size_unit_millimeters=毫米
-document_properties_page_size_orientation_portrait=纵向
-document_properties_page_size_orientation_landscape=横向
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=文本
-document_properties_page_size_name_legal=法律
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=快速 Web 视图:
-document_properties_linearized_yes=是
-document_properties_linearized_no=否
-document_properties_close=关闭
-
-print_progress_message=正在准备打印文档…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=取消
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=切换侧栏
-toggle_sidebar_notification.title=切换侧栏(文档所含的大纲/附件)
-toggle_sidebar_label=切换侧栏
-document_outline.title=显示文档大纲(双击展开/折叠所有项)
-document_outline_label=文档大纲
-attachments.title=显示附件
-attachments_label=附件
-thumbs.title=显示缩略图
-thumbs_label=缩略图
-findbar.title=在文档中查找
-findbar_label=查找
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=页码 {{page}}
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=页码 {{page}}
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=页面 {{page}} 的缩略图
-
-# Find panel button title and messages
-find_input.title=查找
-find_input.placeholder=在文档中查找…
-find_previous.title=查找词语上一次出现的位置
-find_previous_label=上一页
-find_next.title=查找词语后一次出现的位置
-find_next_label=下一页
-find_highlight=全部高亮显示
-find_match_case_label=区分大小写
-find_entire_word_label=字词匹配
-find_reached_top=到达文档开头,从末尾继续
-find_reached_bottom=到达文档末尾,从开头继续
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=第 {{current}} 项,共匹配 {{total}} 项
-find_match_count[two]=第 {{current}} 项,共匹配 {{total}} 项
-find_match_count[few]=第 {{current}} 项,共匹配 {{total}} 项
-find_match_count[many]=第 {{current}} 项,共匹配 {{total}} 项
-find_match_count[other]=第 {{current}} 项,共匹配 {{total}} 项
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=超过 {{limit}} 项匹配
-find_match_count_limit[one]=超过 {{limit}} 项匹配
-find_match_count_limit[two]=超过 {{limit}} 项匹配
-find_match_count_limit[few]=超过 {{limit}} 项匹配
-find_match_count_limit[many]=超过 {{limit}} 项匹配
-find_match_count_limit[other]=超过 {{limit}} 项匹配
-find_not_found=找不到指定词语
-
-# Error panel labels
-error_more_info=更多信息
-error_less_info=更少信息
-error_close=关闭
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=信息:{{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=堆栈:{{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=文件:{{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=行号:{{line}}
-rendering_error=渲染页面时发生错误。
-
-# Predefined zoom values
-page_scale_width=适合页宽
-page_scale_fit=适合页面
-page_scale_auto=自动缩放
-page_scale_actual=实际大小
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=错误
-loading_error=载入 PDF 时发生错误。
-invalid_file_error=无效或损坏的 PDF 文件。
-missing_file_error=缺少 PDF 文件。
-unexpected_response_error=意外的服务器响应。
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}},{{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} 注释]
-password_label=输入密码以打开此 PDF 文件。
-password_invalid=密码无效。请重试。
-password_ok=确定
-password_cancel=取消
-
-printing_not_supported=警告:此浏览器尚未完整支持打印功能。
-printing_not_ready=警告:此 PDF 未完成载入,无法打印。
-web_fonts_disabled=Web 字体已被禁用:无法使用嵌入的 PDF 字体。
-document_colors_not_allowed=PDF 文档无法使用自己的颜色:浏览器中“允许页面选择自己的颜色”的选项未被勾选。
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=上一页
+previous_label=上一页
+next.title=下一页
+next_label=下一页
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=页面
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=缩小
+zoom_out_label=缩小
+zoom_in.title=放大
+zoom_in_label=放大
+zoom.title=缩放
+presentation_mode.title=切换到演示模式
+presentation_mode_label=演示模式
+open_file.title=打开文件
+open_file_label=打开
+print.title=打印
+print_label=打印
+download.title=下载
+download_label=下载
+bookmark.title=当前在看的内容(复制或在新窗口中打开)
+bookmark_label=当前在看
+
+# Secondary toolbar and context menu
+tools.title=工具
+tools_label=工具
+first_page.title=转到第一页
+first_page.label=转到第一页
+first_page_label=转到第一页
+last_page.title=转到最后一页
+last_page.label=转到最后一页
+last_page_label=转到最后一页
+page_rotate_cw.title=顺时针旋转
+page_rotate_cw.label=顺时针旋转
+page_rotate_cw_label=顺时针旋转
+page_rotate_ccw.title=逆时针旋转
+page_rotate_ccw.label=逆时针旋转
+page_rotate_ccw_label=逆时针旋转
+
+cursor_text_select_tool.title=启用文本选择工具
+cursor_text_select_tool_label=文本选择工具
+cursor_hand_tool.title=启用手形工具
+cursor_hand_tool_label=手形工具
+
+scroll_vertical.title=使用垂直滚动
+scroll_vertical_label=垂直滚动
+scroll_horizontal.title=使用水平滚动
+scroll_horizontal_label=水平滚动
+scroll_wrapped.title=使用平铺滚动
+scroll_wrapped_label=平铺滚动
+
+spread_none.title=不加入衔接页
+spread_none_label=单页视图
+spread_odd.title=加入衔接页使奇数页作为起始页
+spread_odd_label=双页视图
+spread_even.title=加入衔接页使偶数页作为起始页
+spread_even_label=书籍视图
+
+# Document properties dialog box
+document_properties.title=文档属性…
+document_properties_label=文档属性…
+document_properties_file_name=文件名:
+document_properties_file_size=文件大小:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} 字节)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} 字节)
+document_properties_title=标题:
+document_properties_author=作者:
+document_properties_subject=主题:
+document_properties_keywords=关键词:
+document_properties_creation_date=创建日期:
+document_properties_modification_date=修改日期:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=创建者:
+document_properties_producer=PDF 生成器:
+document_properties_version=PDF 版本:
+document_properties_page_count=页数:
+document_properties_page_size=页面大小:
+document_properties_page_size_unit_inches=英寸
+document_properties_page_size_unit_millimeters=毫米
+document_properties_page_size_orientation_portrait=纵向
+document_properties_page_size_orientation_landscape=横向
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=文本
+document_properties_page_size_name_legal=法律
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=快速 Web 视图:
+document_properties_linearized_yes=是
+document_properties_linearized_no=否
+document_properties_close=关闭
+
+print_progress_message=正在准备打印文档…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=取消
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=切换侧栏
+toggle_sidebar_notification.title=切换侧栏(文档所含的大纲/附件)
+toggle_sidebar_label=切换侧栏
+document_outline.title=显示文档大纲(双击展开/折叠所有项)
+document_outline_label=文档大纲
+attachments.title=显示附件
+attachments_label=附件
+thumbs.title=显示缩略图
+thumbs_label=缩略图
+findbar.title=在文档中查找
+findbar_label=查找
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=页码 {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=页码 {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=页面 {{page}} 的缩略图
+
+# Find panel button title and messages
+find_input.title=查找
+find_input.placeholder=在文档中查找…
+find_previous.title=查找词语上一次出现的位置
+find_previous_label=上一页
+find_next.title=查找词语后一次出现的位置
+find_next_label=下一页
+find_highlight=全部高亮显示
+find_match_case_label=区分大小写
+find_entire_word_label=字词匹配
+find_reached_top=到达文档开头,从末尾继续
+find_reached_bottom=到达文档末尾,从开头继续
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[two]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[few]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[many]=第 {{current}} 项,共匹配 {{total}} 项
+find_match_count[other]=第 {{current}} 项,共匹配 {{total}} 项
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=超过 {{limit}} 项匹配
+find_match_count_limit[one]=超过 {{limit}} 项匹配
+find_match_count_limit[two]=超过 {{limit}} 项匹配
+find_match_count_limit[few]=超过 {{limit}} 项匹配
+find_match_count_limit[many]=超过 {{limit}} 项匹配
+find_match_count_limit[other]=超过 {{limit}} 项匹配
+find_not_found=找不到指定词语
+
+# Error panel labels
+error_more_info=更多信息
+error_less_info=更少信息
+error_close=关闭
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=信息:{{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=堆栈:{{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=文件:{{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行号:{{line}}
+rendering_error=渲染页面时发生错误。
+
+# Predefined zoom values
+page_scale_width=适合页宽
+page_scale_fit=适合页面
+page_scale_auto=自动缩放
+page_scale_actual=实际大小
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=错误
+loading_error=载入 PDF 时发生错误。
+invalid_file_error=无效或损坏的 PDF 文件。
+missing_file_error=缺少 PDF 文件。
+unexpected_response_error=意外的服务器响应。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}},{{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 注释]
+password_label=输入密码以打开此 PDF 文件。
+password_invalid=密码无效。请重试。
+password_ok=确定
+password_cancel=取消
+
+printing_not_supported=警告:此浏览器尚未完整支持打印功能。
+printing_not_ready=警告:此 PDF 未完成载入,无法打印。
+web_fonts_disabled=Web 字体已被禁用:无法使用嵌入的 PDF 字体。
+document_colors_not_allowed=PDF 文档无法使用自己的颜色:浏览器中“允许页面选择自己的颜色”的选项未被勾选。
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-TW/viewer.properties b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-TW/viewer.properties
index 29ff043bf815609293653daa20c68b39e7f354f9..6a8faedacd9bc29c826087aa02e7f65d9be3014d 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-TW/viewer.properties
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/locale/zh-TW/viewer.properties
@@ -1,248 +1,248 @@
-# Copyright 2012 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.
-
-# Main toolbar buttons (tooltips and alt text for images)
-previous.title=上一頁
-previous_label=上一頁
-next.title=下一頁
-next_label=下一頁
-
-# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
-page.title=第
-# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
-# representing the total number of pages in the document.
-of_pages=頁,共 {{pagesCount}} 頁
-# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
-# will be replaced by a number representing the currently visible page,
-# respectively a number representing the total number of pages in the document.
-page_of_pages=(第 {{pageNumber}} 頁,共 {{pagesCount}} 頁)
-
-zoom_out.title=縮小
-zoom_out_label=縮小
-zoom_in.title=放大
-zoom_in_label=放大
-zoom.title=縮放
-presentation_mode.title=切換至簡報模式
-presentation_mode_label=簡報模式
-open_file.title=開啟檔案
-open_file_label=開啟
-print.title=列印
-print_label=列印
-download.title=下載
-download_label=下載
-bookmark.title=目前檢視的內容(複製或開啟於新視窗)
-bookmark_label=目前檢視
-
-# Secondary toolbar and context menu
-tools.title=工具
-tools_label=工具
-first_page.title=跳到第一頁
-first_page.label=跳到第一頁
-first_page_label=跳到第一頁
-last_page.title=跳到最後一頁
-last_page.label=跳到最後一頁
-last_page_label=跳到最後一頁
-page_rotate_cw.title=順時針旋轉
-page_rotate_cw.label=順時針旋轉
-page_rotate_cw_label=順時針旋轉
-page_rotate_ccw.title=逆時針旋轉
-page_rotate_ccw.label=逆時針旋轉
-page_rotate_ccw_label=逆時針旋轉
-
-cursor_text_select_tool.title=開啟文字選擇工具
-cursor_text_select_tool_label=文字選擇工具
-cursor_hand_tool.title=開啟頁面移動工具
-cursor_hand_tool_label=頁面移動工具
-
-scroll_vertical.title=使用垂直捲動版面
-scroll_vertical_label=垂直捲動
-scroll_horizontal.title=使用水平捲動版面
-scroll_horizontal_label=水平捲動
-scroll_wrapped.title=使用多頁捲動版面
-scroll_wrapped_label=多頁捲動
-
-spread_none.title=不要進行跨頁顯示
-spread_none_label=不跨頁
-spread_odd.title=從奇數頁開始跨頁
-spread_odd_label=奇數跨頁
-spread_even.title=從偶數頁開始跨頁
-spread_even_label=偶數跨頁
-
-# Document properties dialog box
-document_properties.title=文件內容…
-document_properties_label=文件內容…
-document_properties_file_name=檔案名稱:
-document_properties_file_size=檔案大小:
-# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in kilobytes, respectively in bytes.
-document_properties_kb={{size_kb}} KB({{size_b}} 位元組)
-# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
-# will be replaced by the PDF file size in megabytes, respectively in bytes.
-document_properties_mb={{size_mb}} MB({{size_b}} 位元組)
-document_properties_title=標題:
-document_properties_author=作者:
-document_properties_subject=主旨:
-document_properties_keywords=關鍵字:
-document_properties_creation_date=建立日期:
-document_properties_modification_date=修改日期:
-# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
-# will be replaced by the creation/modification date, and time, of the PDF file.
-document_properties_date_string={{date}} {{time}}
-document_properties_creator=建立者:
-document_properties_producer=PDF 產生器:
-document_properties_version=PDF 版本:
-document_properties_page_count=頁數:
-document_properties_page_size=頁面大小:
-document_properties_page_size_unit_inches=in
-document_properties_page_size_unit_millimeters=mm
-document_properties_page_size_orientation_portrait=垂直
-document_properties_page_size_orientation_landscape=水平
-document_properties_page_size_name_a3=A3
-document_properties_page_size_name_a4=A4
-document_properties_page_size_name_letter=Letter
-document_properties_page_size_name_legal=Legal
-# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
-# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement and orientation, of the (current) page.
-document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
-# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
-# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
-# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
-document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
-# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
-# the document; usually called "Fast Web View" in English locales of Adobe software.
-document_properties_linearized=快速 Web 檢視:
-document_properties_linearized_yes=是
-document_properties_linearized_no=否
-document_properties_close=關閉
-
-print_progress_message=正在準備列印文件…
-# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
-# a numerical per cent value.
-print_progress_percent={{progress}}%
-print_progress_close=取消
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_sidebar.title=切換側邊欄
-toggle_sidebar_notification.title=切換側邊攔(文件包含大綱或附件)
-toggle_sidebar_label=切換側邊欄
-document_outline.title=顯示文件大綱(雙擊展開/摺疊所有項目)
-document_outline_label=文件大綱
-attachments.title=顯示附件
-attachments_label=附件
-thumbs.title=顯示縮圖
-thumbs_label=縮圖
-findbar.title=在文件中尋找
-findbar_label=尋找
-
-# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
-page_canvas=第 {{page}} 頁
-# Thumbnails panel item (tooltip and alt text for images)
-# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
-# number.
-thumb_page_title=第 {{page}} 頁
-# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
-# number.
-thumb_page_canvas=頁 {{page}} 的縮圖
-
-# Find panel button title and messages
-find_input.title=尋找
-find_input.placeholder=在文件中搜尋…
-find_previous.title=尋找文字前次出現的位置
-find_previous_label=上一個
-find_next.title=尋找文字下次出現的位置
-find_next_label=下一個
-find_highlight=全部強調標示
-find_match_case_label=區分大小寫
-find_entire_word_label=符合整個字
-find_reached_top=已搜尋至文件頂端,自底端繼續搜尋
-find_reached_bottom=已搜尋至文件底端,自頂端繼續搜尋
-# LOCALIZATION NOTE (find_match_count): The supported plural forms are
-# [one|two|few|many|other], with [other] as the default value.
-# "{{current}}" and "{{total}}" will be replaced by a number representing the
-# index of the currently active find result, respectively a number representing
-# the total number of matches in the document.
-find_match_count={[ plural(total) ]}
-find_match_count[one]=第 {{current}} 筆,共找到 {{total}} 筆
-find_match_count[two]=第 {{current}} 筆,共找到 {{total}} 筆
-find_match_count[few]=第 {{current}} 筆,共找到 {{total}} 筆
-find_match_count[many]=第 {{current}} 筆,共找到 {{total}} 筆
-find_match_count[other]=第 {{current}} 筆,共找到 {{total}} 筆
-# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
-# [zero|one|two|few|many|other], with [other] as the default value.
-# "{{limit}}" will be replaced by a numerical value.
-find_match_count_limit={[ plural(limit) ]}
-find_match_count_limit[zero]=找到超過 {{limit}} 筆
-find_match_count_limit[one]=找到超過 {{limit}} 筆
-find_match_count_limit[two]=找到超過 {{limit}} 筆
-find_match_count_limit[few]=找到超過 {{limit}} 筆
-find_match_count_limit[many]=找到超過 {{limit}} 筆
-find_match_count_limit[other]=找到超過 {{limit}} 筆
-find_not_found=找不到指定文字
-
-# Error panel labels
-error_more_info=更多資訊
-error_less_info=更少資訊
-error_close=關閉
-# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
-# replaced by the PDF.JS version and build ID.
-error_version_info=PDF.js v{{version}} (build: {{build}})
-# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
-# english string describing the error.
-error_message=訊息: {{message}}
-# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
-# trace.
-error_stack=堆疊: {{stack}}
-# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
-error_file=檔案: {{file}}
-# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
-error_line=行: {{line}}
-rendering_error=描繪頁面時發生錯誤。
-
-# Predefined zoom values
-page_scale_width=頁面寬度
-page_scale_fit=縮放至頁面大小
-page_scale_auto=自動縮放
-page_scale_actual=實際大小
-# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
-# numerical scale value.
-page_scale_percent={{scale}}%
-
-# Loading indicator messages
-loading_error_indicator=錯誤
-loading_error=載入 PDF 時發生錯誤。
-invalid_file_error=無效或毀損的 PDF 檔案。
-missing_file_error=找不到 PDF 檔案。
-unexpected_response_error=伺服器回應未預期的內容。
-
-# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
-# replaced by the modification date, and time, of the annotation.
-annotation_date_string={{date}} {{time}}
-
-# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
-# "{{type}}" will be replaced with an annotation type from a list defined in
-# the PDF spec (32000-1:2008 Table 169 – Annotation types).
-# Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type.alt=[{{type}} 註解]
-password_label=請輸入用來開啟此 PDF 檔案的密碼。
-password_invalid=密碼不正確,請再試一次。
-password_ok=確定
-password_cancel=取消
-
-printing_not_supported=警告: 此瀏覽器未完整支援列印功能。
-printing_not_ready=警告: 此 PDF 未完成下載以供列印。
-web_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。
-document_colors_not_allowed=瀏覽器的「優先使用網頁指定的色彩」未被勾選,PDF 文件無法使用自己的色彩。
+# Copyright 2012 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.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=上一頁
+previous_label=上一頁
+next.title=下一頁
+next_label=下一頁
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=第
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=頁,共 {{pagesCount}} 頁
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(第 {{pageNumber}} 頁,共 {{pagesCount}} 頁)
+
+zoom_out.title=縮小
+zoom_out_label=縮小
+zoom_in.title=放大
+zoom_in_label=放大
+zoom.title=縮放
+presentation_mode.title=切換至簡報模式
+presentation_mode_label=簡報模式
+open_file.title=開啟檔案
+open_file_label=開啟
+print.title=列印
+print_label=列印
+download.title=下載
+download_label=下載
+bookmark.title=目前檢視的內容(複製或開啟於新視窗)
+bookmark_label=目前檢視
+
+# Secondary toolbar and context menu
+tools.title=工具
+tools_label=工具
+first_page.title=跳到第一頁
+first_page.label=跳到第一頁
+first_page_label=跳到第一頁
+last_page.title=跳到最後一頁
+last_page.label=跳到最後一頁
+last_page_label=跳到最後一頁
+page_rotate_cw.title=順時針旋轉
+page_rotate_cw.label=順時針旋轉
+page_rotate_cw_label=順時針旋轉
+page_rotate_ccw.title=逆時針旋轉
+page_rotate_ccw.label=逆時針旋轉
+page_rotate_ccw_label=逆時針旋轉
+
+cursor_text_select_tool.title=開啟文字選擇工具
+cursor_text_select_tool_label=文字選擇工具
+cursor_hand_tool.title=開啟頁面移動工具
+cursor_hand_tool_label=頁面移動工具
+
+scroll_vertical.title=使用垂直捲動版面
+scroll_vertical_label=垂直捲動
+scroll_horizontal.title=使用水平捲動版面
+scroll_horizontal_label=水平捲動
+scroll_wrapped.title=使用多頁捲動版面
+scroll_wrapped_label=多頁捲動
+
+spread_none.title=不要進行跨頁顯示
+spread_none_label=不跨頁
+spread_odd.title=從奇數頁開始跨頁
+spread_odd_label=奇數跨頁
+spread_even.title=從偶數頁開始跨頁
+spread_even_label=偶數跨頁
+
+# Document properties dialog box
+document_properties.title=文件內容…
+document_properties_label=文件內容…
+document_properties_file_name=檔案名稱:
+document_properties_file_size=檔案大小:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB({{size_b}} 位元組)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB({{size_b}} 位元組)
+document_properties_title=標題:
+document_properties_author=作者:
+document_properties_subject=主旨:
+document_properties_keywords=關鍵字:
+document_properties_creation_date=建立日期:
+document_properties_modification_date=修改日期:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=建立者:
+document_properties_producer=PDF 產生器:
+document_properties_version=PDF 版本:
+document_properties_page_count=頁數:
+document_properties_page_size=頁面大小:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=垂直
+document_properties_page_size_orientation_landscape=水平
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=快速 Web 檢視:
+document_properties_linearized_yes=是
+document_properties_linearized_no=否
+document_properties_close=關閉
+
+print_progress_message=正在準備列印文件…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=取消
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=切換側邊欄
+toggle_sidebar_notification.title=切換側邊攔(文件包含大綱或附件)
+toggle_sidebar_label=切換側邊欄
+document_outline.title=顯示文件大綱(雙擊展開/摺疊所有項目)
+document_outline_label=文件大綱
+attachments.title=顯示附件
+attachments_label=附件
+thumbs.title=顯示縮圖
+thumbs_label=縮圖
+findbar.title=在文件中尋找
+findbar_label=尋找
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=第 {{page}} 頁
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=第 {{page}} 頁
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=頁 {{page}} 的縮圖
+
+# Find panel button title and messages
+find_input.title=尋找
+find_input.placeholder=在文件中搜尋…
+find_previous.title=尋找文字前次出現的位置
+find_previous_label=上一個
+find_next.title=尋找文字下次出現的位置
+find_next_label=下一個
+find_highlight=全部強調標示
+find_match_case_label=區分大小寫
+find_entire_word_label=符合整個字
+find_reached_top=已搜尋至文件頂端,自底端繼續搜尋
+find_reached_bottom=已搜尋至文件底端,自頂端繼續搜尋
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[two]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[few]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[many]=第 {{current}} 筆,共找到 {{total}} 筆
+find_match_count[other]=第 {{current}} 筆,共找到 {{total}} 筆
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=找到超過 {{limit}} 筆
+find_match_count_limit[one]=找到超過 {{limit}} 筆
+find_match_count_limit[two]=找到超過 {{limit}} 筆
+find_match_count_limit[few]=找到超過 {{limit}} 筆
+find_match_count_limit[many]=找到超過 {{limit}} 筆
+find_match_count_limit[other]=找到超過 {{limit}} 筆
+find_not_found=找不到指定文字
+
+# Error panel labels
+error_more_info=更多資訊
+error_less_info=更少資訊
+error_close=關閉
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=訊息: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=堆疊: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=檔案: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行: {{line}}
+rendering_error=描繪頁面時發生錯誤。
+
+# Predefined zoom values
+page_scale_width=頁面寬度
+page_scale_fit=縮放至頁面大小
+page_scale_auto=自動縮放
+page_scale_actual=實際大小
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=錯誤
+loading_error=載入 PDF 時發生錯誤。
+invalid_file_error=無效或毀損的 PDF 檔案。
+missing_file_error=找不到 PDF 檔案。
+unexpected_response_error=伺服器回應未預期的內容。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 註解]
+password_label=請輸入用來開啟此 PDF 檔案的密碼。
+password_invalid=密碼不正確,請再試一次。
+password_ok=確定
+password_cancel=取消
+
+printing_not_supported=警告: 此瀏覽器未完整支援列印功能。
+printing_not_ready=警告: 此 PDF 未完成下載以供列印。
+web_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。
+document_colors_not_allowed=瀏覽器的「優先使用網頁指定的色彩」未被勾選,PDF 文件無法使用自己的色彩。
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.css b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.css
index 595660ad3c57b40ab67d07882a0a68bae8c60ac4..2203489621639bb22f2b844af6445409fc92c858 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.css
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.css
@@ -1,2409 +1,2409 @@
-/* Copyright 2014 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.
- */
-
-.textLayer {
- position: absolute;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- overflow: hidden;
- opacity: 0.2;
- line-height: 1.0;
-}
-
-.textLayer > span {
- color: transparent;
- position: absolute;
- white-space: pre;
- cursor: text;
- transform-origin: 0% 0%;
-}
-
-.textLayer .highlight {
- margin: -1px;
- padding: 1px;
- background-color: rgba(180, 0, 170, 1);
- border-radius: 4px;
-}
-
-.textLayer .highlight.begin {
- border-radius: 4px 0px 0px 4px;
-}
-
-.textLayer .highlight.end {
- border-radius: 0px 4px 4px 0px;
-}
-
-.textLayer .highlight.middle {
- border-radius: 0px;
-}
-
-.textLayer .highlight.selected {
- background-color: rgba(0, 100, 0, 1);
-}
-
-.textLayer ::-moz-selection {
- background: rgba(0, 0, 255, 1);
-}
-
-.textLayer ::selection {
- background: rgba(0, 0, 255, 1);
-}
-
-.textLayer .endOfContent {
- display: block;
- position: absolute;
- left: 0px;
- top: 100%;
- right: 0px;
- bottom: 0px;
- z-index: -1;
- cursor: default;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.textLayer .endOfContent.active {
- top: 0px;
-}
-
-
-.annotationLayer section {
- position: absolute;
-}
-
-.annotationLayer .linkAnnotation > a,
-.annotationLayer .buttonWidgetAnnotation.pushButton > a {
- position: absolute;
- font-size: 1em;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-
-.annotationLayer .linkAnnotation > a:hover,
-.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {
- opacity: 0.2;
- background: rgba(255, 255, 0, 1);
- box-shadow: 0px 2px 10px rgba(255, 255, 0, 1);
-}
-
-.annotationLayer .textAnnotation img {
- position: absolute;
- cursor: pointer;
-}
-
-.annotationLayer .textWidgetAnnotation input,
-.annotationLayer .textWidgetAnnotation textarea,
-.annotationLayer .choiceWidgetAnnotation select,
-.annotationLayer .buttonWidgetAnnotation.checkBox input,
-.annotationLayer .buttonWidgetAnnotation.radioButton input {
- background-color: rgba(0, 54, 255, 0.13);
- border: 1px solid transparent;
- box-sizing: border-box;
- font-size: 9px;
- height: 100%;
- margin: 0;
- padding: 0 3px;
- vertical-align: top;
- width: 100%;
-}
-
-.annotationLayer .choiceWidgetAnnotation select option {
- padding: 0;
-}
-
-.annotationLayer .buttonWidgetAnnotation.radioButton input {
- border-radius: 50%;
-}
-
-.annotationLayer .textWidgetAnnotation textarea {
- font: message-box;
- font-size: 9px;
- resize: none;
-}
-
-.annotationLayer .textWidgetAnnotation input[disabled],
-.annotationLayer .textWidgetAnnotation textarea[disabled],
-.annotationLayer .choiceWidgetAnnotation select[disabled],
-.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],
-.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] {
- background: none;
- border: 1px solid transparent;
- cursor: not-allowed;
-}
-
-.annotationLayer .textWidgetAnnotation input:hover,
-.annotationLayer .textWidgetAnnotation textarea:hover,
-.annotationLayer .choiceWidgetAnnotation select:hover,
-.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,
-.annotationLayer .buttonWidgetAnnotation.radioButton input:hover {
- border: 1px solid rgba(0, 0, 0, 1);
-}
-
-.annotationLayer .textWidgetAnnotation input:focus,
-.annotationLayer .textWidgetAnnotation textarea:focus,
-.annotationLayer .choiceWidgetAnnotation select:focus {
- background: none;
- border: 1px solid transparent;
-}
-
-.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,
-.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,
-.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
- background-color: rgba(0, 0, 0, 1);
- content: '';
- display: block;
- position: absolute;
-}
-
-.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,
-.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
- height: 80%;
- left: 45%;
- width: 1px;
-}
-
-.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {
- transform: rotate(45deg);
-}
-
-.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
- transform: rotate(-45deg);
-}
-
-.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
- border-radius: 50%;
- height: 50%;
- left: 30%;
- top: 20%;
- width: 50%;
-}
-
-.annotationLayer .textWidgetAnnotation input.comb {
- font-family: monospace;
- padding-left: 2px;
- padding-right: 0;
-}
-
-.annotationLayer .textWidgetAnnotation input.comb:focus {
- /*
- * Letter spacing is placed on the right side of each character. Hence, the
- * letter spacing of the last character may be placed outside the visible
- * area, causing horizontal scrolling. We avoid this by extending the width
- * when the element has focus and revert this when it loses focus.
- */
- width: 115%;
-}
-
-.annotationLayer .buttonWidgetAnnotation.checkBox input,
-.annotationLayer .buttonWidgetAnnotation.radioButton input {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- padding: 0;
-}
-
-.annotationLayer .popupWrapper {
- position: absolute;
- width: 20em;
-}
-
-.annotationLayer .popup {
- position: absolute;
- z-index: 200;
- max-width: 20em;
- background-color: rgba(255, 255, 153, 1);
- box-shadow: 0px 2px 5px rgba(136, 136, 136, 1);
- border-radius: 2px;
- padding: 6px;
- margin-left: 5px;
- cursor: pointer;
- font: message-box;
- font-size: 9px;
- word-wrap: break-word;
-}
-
-.annotationLayer .popup > * {
- font-size: 9px;
-}
-
-.annotationLayer .popup h1 {
- display: inline-block;
-}
-
-.annotationLayer .popup span {
- display: inline-block;
- margin-left: 5px;
-}
-
-.annotationLayer .popup p {
- border-top: 1px solid rgba(51, 51, 51, 1);
- margin-top: 2px;
- padding-top: 2px;
-}
-
-.annotationLayer .highlightAnnotation,
-.annotationLayer .underlineAnnotation,
-.annotationLayer .squigglyAnnotation,
-.annotationLayer .strikeoutAnnotation,
-.annotationLayer .freeTextAnnotation,
-.annotationLayer .lineAnnotation svg line,
-.annotationLayer .squareAnnotation svg rect,
-.annotationLayer .circleAnnotation svg ellipse,
-.annotationLayer .polylineAnnotation svg polyline,
-.annotationLayer .polygonAnnotation svg polygon,
-.annotationLayer .caretAnnotation,
-.annotationLayer .inkAnnotation svg polyline,
-.annotationLayer .stampAnnotation,
-.annotationLayer .fileAttachmentAnnotation {
- cursor: pointer;
-}
-
-.pdfViewer .canvasWrapper {
- overflow: hidden;
-}
-
-.pdfViewer .page {
- direction: ltr;
- width: 816px;
- height: 1056px;
- margin: 1px auto -8px auto;
- position: relative;
- overflow: visible;
- border: 9px solid transparent;
- background-clip: content-box;
- -o-border-image: url(images/shadow.png) 9 9 repeat;
- border-image: url(images/shadow.png) 9 9 repeat;
- background-color: rgba(255, 255, 255, 1);
-}
-
-.pdfViewer.removePageBorders .page {
- margin: 0px auto 10px auto;
- border: none;
-}
-
-.pdfViewer.singlePageView {
- display: inline-block;
-}
-
-.pdfViewer.singlePageView .page {
- margin: 0;
- border: none;
-}
-
-.pdfViewer.scrollHorizontal, .pdfViewer.scrollWrapped, .spread {
- margin-left: 3.5px;
- margin-right: 3.5px;
- text-align: center;
-}
-
-.pdfViewer.scrollHorizontal, .spread {
- white-space: nowrap;
-}
-
-.pdfViewer.removePageBorders,
-.pdfViewer.scrollHorizontal .spread,
-.pdfViewer.scrollWrapped .spread {
- margin-left: 0;
- margin-right: 0;
-}
-
-.spread .page,
-.pdfViewer.scrollHorizontal .page,
-.pdfViewer.scrollWrapped .page,
-.pdfViewer.scrollHorizontal .spread,
-.pdfViewer.scrollWrapped .spread {
- display: inline-block;
- vertical-align: middle;
-}
-
-.spread .page,
-.pdfViewer.scrollHorizontal .page,
-.pdfViewer.scrollWrapped .page {
- margin-left: -3.5px;
- margin-right: -3.5px;
-}
-
-.pdfViewer.removePageBorders .spread .page,
-.pdfViewer.removePageBorders.scrollHorizontal .page,
-.pdfViewer.removePageBorders.scrollWrapped .page {
- margin-left: 5px;
- margin-right: 5px;
-}
-
-.pdfViewer .page canvas {
- margin: 0;
- display: block;
-}
-
-.pdfViewer .page canvas[hidden] {
- display: none;
-}
-
-.pdfViewer .page .loadingIcon {
- position: absolute;
- display: block;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- background: url('images/loading-icon.gif') center no-repeat;
-}
-
-.pdfPresentationMode .pdfViewer {
- margin-left: 0;
- margin-right: 0;
-}
-
-.pdfPresentationMode .pdfViewer .page,
-.pdfPresentationMode .pdfViewer .spread {
- display: block;
-}
-
-.pdfPresentationMode .pdfViewer .page,
-.pdfPresentationMode .pdfViewer.removePageBorders .page {
- margin-left: auto;
- margin-right: auto;
-}
-
-.pdfPresentationMode:-ms-fullscreen .pdfViewer .page {
- margin-bottom: 100% !important;
-}
-
-.pdfPresentationMode:-webkit-full-screen .pdfViewer .page {
- margin-bottom: 100%;
- border: 0;
-}
-
-.pdfPresentationMode:-moz-full-screen .pdfViewer .page {
- margin-bottom: 100%;
- border: 0;
-}
-
-.pdfPresentationMode:fullscreen .pdfViewer .page {
- margin-bottom: 100%;
- border: 0;
-}
-
-:root {
- --sidebar-width: 200px;
- --sidebar-transition-duration: 200ms;
- --sidebar-transition-timing-function: ease;
-}
-
-* {
- padding: 0;
- margin: 0;
-}
-
-html {
- height: 100%;
- width: 100%;
- /* Font size is needed to make the activity bar the correct size. */
- font-size: 10px;
-}
-
-body {
- height: 100%;
- width: 100%;
- background-color: rgba(64, 64, 64, 1);
- background-image: url(images/texture.png);
-}
-
-body,
-input,
-button,
-select {
- font: message-box;
- outline: none;
-}
-
-.hidden {
- display: none !important;
-}
-[hidden] {
- display: none !important;
-}
-
-.pdfViewer.enablePermissions .textLayer > span {
- -webkit-user-select: none !important;
- -moz-user-select: none !important;
- -ms-user-select: none !important;
- user-select: none !important;
- cursor: not-allowed;
-}
-
-#viewerContainer.pdfPresentationMode:-ms-fullscreen {
- top: 0px !important;
- overflow: hidden !important;
-}
-
-#viewerContainer.pdfPresentationMode:-ms-fullscreen::-ms-backdrop {
- background-color: rgba(0, 0, 0, 1);
-}
-
-#viewerContainer.pdfPresentationMode:-webkit-full-screen {
- top: 0px;
- border-top: 2px solid rgba(0, 0, 0, 0);
- background-color: rgba(0, 0, 0, 1);
- width: 100%;
- height: 100%;
- overflow: hidden;
- cursor: none;
- -webkit-user-select: none;
- user-select: none;
-}
-
-#viewerContainer.pdfPresentationMode:-moz-full-screen {
- top: 0px;
- border-top: 2px solid rgba(0, 0, 0, 0);
- background-color: rgba(0, 0, 0, 1);
- width: 100%;
- height: 100%;
- overflow: hidden;
- cursor: none;
- -moz-user-select: none;
- user-select: none;
-}
-
-#viewerContainer.pdfPresentationMode:-ms-fullscreen {
- top: 0px;
- border-top: 2px solid rgba(0, 0, 0, 0);
- background-color: rgba(0, 0, 0, 1);
- width: 100%;
- height: 100%;
- overflow: hidden;
- cursor: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-#viewerContainer.pdfPresentationMode:fullscreen {
- top: 0px;
- border-top: 2px solid rgba(0, 0, 0, 0);
- background-color: rgba(0, 0, 0, 1);
- width: 100%;
- height: 100%;
- overflow: hidden;
- cursor: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.pdfPresentationMode:-webkit-full-screen a:not(.internalLink) {
- display: none;
-}
-
-.pdfPresentationMode:-moz-full-screen a:not(.internalLink) {
- display: none;
-}
-
-.pdfPresentationMode:-ms-fullscreen a:not(.internalLink) {
- display: none;
-}
-
-.pdfPresentationMode:fullscreen a:not(.internalLink) {
- display: none;
-}
-
-.pdfPresentationMode:-webkit-full-screen .textLayer > span {
- cursor: none;
-}
-
-.pdfPresentationMode:-moz-full-screen .textLayer > span {
- cursor: none;
-}
-
-.pdfPresentationMode:-ms-fullscreen .textLayer > span {
- cursor: none;
-}
-
-.pdfPresentationMode:fullscreen .textLayer > span {
- cursor: none;
-}
-
-.pdfPresentationMode.pdfPresentationModeControls > *,
-.pdfPresentationMode.pdfPresentationModeControls .textLayer > span {
- cursor: default;
-}
-
-#outerContainer {
- width: 100%;
- height: 100%;
- position: relative;
-}
-
-#sidebarContainer {
- position: absolute;
- top: 32px;
- bottom: 0;
- width: 200px;
- width: var(--sidebar-width);
- visibility: hidden;
- z-index: 100;
- border-top: 1px solid rgba(51, 51, 51, 1);
- transition-duration: 200ms;
- transition-duration: var(--sidebar-transition-duration);
- transition-timing-function: ease;
- transition-timing-function: var(--sidebar-transition-timing-function);
-}
-html[dir='ltr'] #sidebarContainer {
- transition-property: left;
- left: -200px;
- left: calc(0px - var(--sidebar-width));
-}
-html[dir='rtl'] #sidebarContainer {
- transition-property: right;
- right: -200px;
- right: calc(0px - var(--sidebar-width));
-}
-
-.loadingInProgress #sidebarContainer {
- top: 36px;
-}
-
-#outerContainer.sidebarResizing #sidebarContainer {
- /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
- transition-duration: 0s;
- /* Prevent e.g. the thumbnails being selected when the sidebar is resized. */
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-#outerContainer.sidebarMoving #sidebarContainer,
-#outerContainer.sidebarOpen #sidebarContainer {
- visibility: visible;
-}
-html[dir='ltr'] #outerContainer.sidebarOpen #sidebarContainer {
- left: 0px;
-}
-html[dir='rtl'] #outerContainer.sidebarOpen #sidebarContainer {
- right: 0px;
-}
-
-#mainContainer {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- min-width: 320px;
-}
-
-#sidebarContent {
- top: 32px;
- bottom: 0;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- position: absolute;
- width: 100%;
- background-color: rgba(0, 0, 0, 0.1);
-}
-html[dir='ltr'] #sidebarContent {
- left: 0;
- box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25);
-}
-html[dir='rtl'] #sidebarContent {
- right: 0;
- box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25);
-}
-
-#viewerContainer {
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- position: absolute;
- top: 32px;
- right: 0;
- bottom: 0;
- left: 0;
- outline: none;
-}
-#viewerContainer:not(.pdfPresentationMode) {
- transition-duration: 200ms;
- transition-duration: var(--sidebar-transition-duration);
- transition-timing-function: ease;
- transition-timing-function: var(--sidebar-transition-timing-function);
-}
-html[dir='ltr'] #viewerContainer {
- box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.05);
-}
-html[dir='rtl'] #viewerContainer {
- box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.05);
-}
-
-#outerContainer.sidebarResizing #viewerContainer {
- /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
- transition-duration: 0s;
-}
-
-html[dir='ltr'] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {
- transition-property: left;
- left: 200px;
- left: var(--sidebar-width);
-}
-html[dir='rtl'] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {
- transition-property: right;
- right: 200px;
- right: var(--sidebar-width);
-}
-
-.toolbar {
- position: relative;
- left: 0;
- right: 0;
- z-index: 9999;
- cursor: default;
-}
-
-#toolbarContainer {
- width: 100%;
-}
-
-#toolbarSidebar {
- width: 100%;
- height: 32px;
- background-color: rgba(66, 66, 66, 1); /* fallback */
- background-image: url(images/texture.png),
- linear-gradient(rgba(77, 77, 77, 0.99), rgba(64, 64, 64, 0.95));
-}
-html[dir='ltr'] #toolbarSidebar {
- box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25),
- inset 0 -1px 0 rgba(255, 255, 255, 0.05),
- 0 1px 0 rgba(0, 0, 0, 0.15),
- 0 0 1px rgba(0, 0, 0, 0.1);
-}
-html[dir='rtl'] #toolbarSidebar {
- box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25),
- inset 0 1px 0 rgba(255, 255, 255, 0.05),
- 0 1px 0 rgba(0, 0, 0, 0.15),
- 0 0 1px rgba(0, 0, 0, 0.1);
-}
-
-#sidebarResizer {
- position: absolute;
- top: 0;
- bottom: 0;
- width: 6px;
- z-index: 200;
- cursor: ew-resize;
-}
-html[dir='ltr'] #sidebarResizer {
- right: -6px;
-}
-html[dir='rtl'] #sidebarResizer {
- left: -6px;
-}
-
-#toolbarContainer, .findbar, .secondaryToolbar {
- position: relative;
- height: 32px;
- background-color: rgba(71, 71, 71, 1); /* fallback */
- background-image: url(images/texture.png),
- linear-gradient(rgba(82, 82, 82, 0.99), rgba(69, 69, 69, 0.95));
-}
-html[dir='ltr'] #toolbarContainer, .findbar, .secondaryToolbar {
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15),
- inset 0 -1px 0 rgba(255, 255, 255, 0.05),
- 0 1px 0 rgba(0, 0, 0, 0.15),
- 0 1px 1px rgba(0, 0, 0, 0.1);
-}
-html[dir='rtl'] #toolbarContainer, .findbar, .secondaryToolbar {
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15),
- inset 0 -1px 0 rgba(255, 255, 255, 0.05),
- 0 1px 0 rgba(0, 0, 0, 0.15),
- 0 1px 1px rgba(0, 0, 0, 0.1);
-}
-
-#toolbarViewer {
- height: 32px;
-}
-
-#loadingBar {
- position: relative;
- width: 100%;
- height: 4px;
- background-color: rgba(51, 51, 51, 1);
- border-bottom: 1px solid rgba(51, 51, 51, 1);
-}
-
-#loadingBar .progress {
- position: absolute;
- top: 0;
- left: 0;
- width: 0%;
- height: 100%;
- background-color: rgba(221, 221, 221, 1);
- overflow: hidden;
- transition: width 200ms;
-}
-
-@-webkit-keyframes progressIndeterminate {
- 0% { left: -142px; }
- 100% { left: 0; }
-}
-
-@keyframes progressIndeterminate {
- 0% { left: -142px; }
- 100% { left: 0; }
-}
-
-#loadingBar .progress.indeterminate {
- background-color: rgba(153, 153, 153, 1);
- transition: none;
-}
-
-#loadingBar .progress.indeterminate .glimmer {
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- width: calc(100% + 150px);
- background: repeating-linear-gradient(135deg,
- rgba(187, 187, 187, 1) 0, rgba(153, 153, 153, 1) 5px,
- rgba(153, 153, 153, 1) 45px, rgba(221, 221, 221, 1) 55px,
- rgba(221, 221, 221, 1) 95px, rgba(187, 187, 187, 1) 100px);
- -webkit-animation: progressIndeterminate 950ms linear infinite;
- animation: progressIndeterminate 950ms linear infinite;
-}
-
-.findbar, .secondaryToolbar {
- top: 32px;
- position: absolute;
- z-index: 10000;
- height: auto;
- min-width: 16px;
- padding: 0px 6px 0px 6px;
- margin: 4px 2px 4px 2px;
- color: rgba(217, 217, 217, 1);
- font-size: 12px;
- line-height: 14px;
- text-align: left;
- cursor: default;
-}
-
-.findbar {
- min-width: 300px;
-}
-.findbar > div {
- height: 32px;
-}
-.findbar.wrapContainers > div {
- clear: both;
-}
-.findbar.wrapContainers > div#findbarMessageContainer {
- height: auto;
-}
-html[dir='ltr'] .findbar {
- left: 68px;
-}
-html[dir='rtl'] .findbar {
- right: 68px;
-}
-
-.findbar label {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-#findInput {
- width: 200px;
-}
-#findInput::-webkit-input-placeholder {
- color: rgba(191, 191, 191, 1);
-}
-#findInput::-moz-placeholder {
- font-style: italic;
-}
-#findInput:-ms-input-placeholder {
- font-style: italic;
-}
-#findInput::-ms-input-placeholder {
- font-style: italic;
-}
-#findInput::placeholder {
- font-style: italic;
-}
-#findInput[data-status="pending"] {
- background-image: url(images/loading-small.png);
- background-repeat: no-repeat;
- background-position: right;
-}
-html[dir='rtl'] #findInput[data-status="pending"] {
- background-position: left;
-}
-
-.secondaryToolbar {
- padding: 6px;
- height: auto;
- z-index: 30000;
-}
-html[dir='ltr'] .secondaryToolbar {
- right: 4px;
-}
-html[dir='rtl'] .secondaryToolbar {
- left: 4px;
-}
-
-#secondaryToolbarButtonContainer {
- max-width: 200px;
- max-height: 400px;
- overflow-y: auto;
- -webkit-overflow-scrolling: touch;
- margin-bottom: -4px;
-}
-
-#secondaryToolbarButtonContainer.hiddenScrollModeButtons > .scrollModeButtons,
-#secondaryToolbarButtonContainer.hiddenSpreadModeButtons > .spreadModeButtons {
- display: none !important;
-}
-
-.doorHanger,
-.doorHangerRight {
- border: 1px solid rgba(0, 0, 0, 0.5);
- border-radius: 2px;
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
-}
-.doorHanger:after, .doorHanger:before,
-.doorHangerRight:after, .doorHangerRight:before {
- bottom: 100%;
- border: solid rgba(0, 0, 0, 0);
- content: " ";
- height: 0;
- width: 0;
- position: absolute;
- pointer-events: none;
-}
-.doorHanger:after,
-.doorHangerRight:after {
- border-bottom-color: rgba(82, 82, 82, 0.99);
- border-width: 8px;
-}
-.doorHanger:before,
-.doorHangerRight:before {
- border-bottom-color: rgba(0, 0, 0, 0.5);
- border-width: 9px;
-}
-
-html[dir='ltr'] .doorHanger:after,
-html[dir='rtl'] .doorHangerRight:after {
- left: 13px;
- margin-left: -8px;
-}
-
-html[dir='ltr'] .doorHanger:before,
-html[dir='rtl'] .doorHangerRight:before {
- left: 13px;
- margin-left: -9px;
-}
-
-html[dir='rtl'] .doorHanger:after,
-html[dir='ltr'] .doorHangerRight:after {
- right: 13px;
- margin-right: -8px;
-}
-
-html[dir='rtl'] .doorHanger:before,
-html[dir='ltr'] .doorHangerRight:before {
- right: 13px;
- margin-right: -9px;
-}
-
-#findResultsCount {
- background-color: rgba(217, 217, 217, 1);
- color: rgba(82, 82, 82, 1);
- text-align: center;
- padding: 3px 4px;
-}
-
-#findMsg {
- font-style: italic;
- color: rgba(166, 183, 208, 1);
-}
-#findMsg:empty {
- display: none;
-}
-
-#findInput.notFound {
- background-color: rgba(255, 102, 102, 1);
-}
-
-#toolbarViewerMiddle {
- position: absolute;
- left: 50%;
- transform: translateX(-50%);
-}
-
-html[dir='ltr'] #toolbarViewerLeft,
-html[dir='rtl'] #toolbarViewerRight {
- float: left;
-}
-html[dir='ltr'] #toolbarViewerRight,
-html[dir='rtl'] #toolbarViewerLeft {
- float: right;
-}
-html[dir='ltr'] #toolbarViewerLeft > *,
-html[dir='ltr'] #toolbarViewerMiddle > *,
-html[dir='ltr'] #toolbarViewerRight > *,
-html[dir='ltr'] .findbar * {
- position: relative;
- float: left;
-}
-html[dir='rtl'] #toolbarViewerLeft > *,
-html[dir='rtl'] #toolbarViewerMiddle > *,
-html[dir='rtl'] #toolbarViewerRight > *,
-html[dir='rtl'] .findbar * {
- position: relative;
- float: right;
-}
-
-html[dir='ltr'] .splitToolbarButton {
- margin: 3px 2px 4px 0;
- display: inline-block;
-}
-html[dir='rtl'] .splitToolbarButton {
- margin: 3px 0 4px 2px;
- display: inline-block;
-}
-html[dir='ltr'] .splitToolbarButton > .toolbarButton {
- border-radius: 0;
- float: left;
-}
-html[dir='rtl'] .splitToolbarButton > .toolbarButton {
- border-radius: 0;
- float: right;
-}
-
-.toolbarButton,
-.secondaryToolbarButton,
-.overlayButton {
- border: 0 none;
- background: none;
- width: 32px;
- height: 25px;
-}
-
-.toolbarButton > span {
- display: inline-block;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-
-.toolbarButton[disabled],
-.secondaryToolbarButton[disabled],
-.overlayButton[disabled] {
- opacity: .5;
-}
-
-.splitToolbarButton.toggled .toolbarButton {
- margin: 0;
-}
-
-.splitToolbarButton:hover > .toolbarButton,
-.splitToolbarButton:focus > .toolbarButton,
-.splitToolbarButton.toggled > .toolbarButton,
-.toolbarButton.textButton {
- background-color: rgba(0, 0, 0, 0.12);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.35);
- border-color: rgba(0, 0, 0, 0.32) rgba(0, 0, 0, 0.38) rgba(0, 0, 0, 0.42);
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
- 0 0 1px rgba(255, 255, 255, 0.15) inset,
- 0 1px 0 rgba(255, 255, 255, 0.05);
-}
-.splitToolbarButton > .toolbarButton:hover,
-.splitToolbarButton > .toolbarButton:focus,
-.dropdownToolbarButton:hover,
-.overlayButton:hover,
-.overlayButton:focus,
-.toolbarButton.textButton:hover,
-.toolbarButton.textButton:focus {
- background-color: rgba(0,0,0,0.2);
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
- 0 0 1px rgba(255, 255, 255, 0.15) inset,
- 0 0 1px rgba(0, 0, 0, 0.05);
- z-index: 199;
-}
-.dropdownToolbarButton:hover {
- background-color: rgba(0, 0, 0, 0.26);
-}
-.splitToolbarButton > .toolbarButton {
- position: relative;
-}
-html[dir='ltr'] .splitToolbarButton > .toolbarButton:first-child,
-html[dir='rtl'] .splitToolbarButton > .toolbarButton:last-child {
- position: relative;
- margin: 0;
- margin-right: -1px;
- border-top-left-radius: 2px;
- border-bottom-left-radius: 2px;
- border-right-color: rgba(0, 0, 0, 0);
-}
-html[dir='ltr'] .splitToolbarButton > .toolbarButton:last-child,
-html[dir='rtl'] .splitToolbarButton > .toolbarButton:first-child {
- position: relative;
- margin: 0;
- margin-left: -1px;
- border-top-right-radius: 2px;
- border-bottom-right-radius: 2px;
- border-left-color: rgba(0, 0, 0, 0);
-}
-.splitToolbarButtonSeparator {
- padding: 8px 0;
- width: 1px;
- background-color: rgba(0, 0, 0, 0.5);
- z-index: 99;
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
- display: inline-block;
- margin: 5px 0;
-}
-html[dir='ltr'] .splitToolbarButtonSeparator {
- float: left;
-}
-html[dir='rtl'] .splitToolbarButtonSeparator {
- float: right;
-}
-.splitToolbarButton:hover > .splitToolbarButtonSeparator,
-.splitToolbarButton.toggled > .splitToolbarButtonSeparator {
- padding: 12px 0;
- margin: 1px 0;
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.03);
-}
-
-.toolbarButton,
-.dropdownToolbarButton,
-.secondaryToolbarButton,
-.overlayButton {
- min-width: 16px;
- padding: 2px 6px 0;
- border: 1px solid rgba(0, 0, 0, 0);
- border-radius: 2px;
- color: rgba(255, 255, 255, 0.8);
- font-size: 12px;
- line-height: 14px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- /* Opera does not support user-select, use <... unselectable="on"> instead */
- cursor: default;
-}
-
-html[dir='ltr'] .toolbarButton,
-html[dir='ltr'] .overlayButton,
-html[dir='ltr'] .dropdownToolbarButton {
- margin: 3px 2px 4px 0;
-}
-html[dir='rtl'] .toolbarButton,
-html[dir='rtl'] .overlayButton,
-html[dir='rtl'] .dropdownToolbarButton {
- margin: 3px 0 4px 2px;
-}
-
-.toolbarButton:hover,
-.toolbarButton:focus,
-.dropdownToolbarButton,
-.overlayButton,
-.secondaryToolbarButton:hover,
-.secondaryToolbarButton:focus {
- background-color: rgba(0, 0, 0, 0.12);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.35);
- border-color: rgba(0, 0, 0, 0.32) rgba(0, 0, 0, 0.38) rgba(0, 0, 0, 0.42);
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
- 0 0 1px rgba(255, 255, 255, 0.15) inset,
- 0 1px 0 rgba(255, 255, 255, 0.05);
-}
-
-.toolbarButton:hover:active,
-.overlayButton:hover:active,
-.dropdownToolbarButton:hover:active,
-.secondaryToolbarButton:hover:active {
- background-color: rgba(0, 0, 0, 0.2);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- border-color: rgba(0, 0, 0, 0.35) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.45);
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) inset,
- 0 0 1px rgba(0, 0, 0, 0.2) inset,
- 0 1px 0 rgba(255, 255, 255, 0.05);
-}
-
-.toolbarButton.toggled,
-.splitToolbarButton.toggled > .toolbarButton.toggled,
-.secondaryToolbarButton.toggled {
- background-color: rgba(0, 0, 0, 0.3);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.45) rgba(0, 0, 0, 0.5);
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) inset,
- 0 0 1px rgba(0, 0, 0, 0.2) inset,
- 0 1px 0 rgba(255, 255, 255, 0.05);
-}
-
-.toolbarButton.toggled:hover:active,
-.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active,
-.secondaryToolbarButton.toggled:hover:active {
- background-color: rgba(0, 0, 0, 0.4);
- border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.5) rgba(0, 0, 0, 0.55);
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset,
- 0 0 1px rgba(0, 0, 0, 0.3) inset,
- 0 1px 0 rgba(255, 255, 255, 0.05);
-}
-
-.dropdownToolbarButton {
- width: 140px;
- padding: 0;
- overflow: hidden;
-}
-.dropdownToolbarButton::after {
- position: absolute;
- display: inline-block;
- top: 4px;
- content: url(images/toolbarButton-menuArrows.png);
-}
-html[dir='ltr'] .dropdownToolbarButton::after {
- right: 8px;
-}
-html[dir='rtl'] .dropdownToolbarButton::after {
- left: 8px;
-}
-
-.dropdownToolbarButton > select {
- width: 162px;
- height: 23px;
- font-size: 12px;
- color: rgba(242, 242, 242, 1);
- margin: 0;
- padding: 3px 2px 2px;
- border: none;
- background: rgba(0,0,0,0); /* Opera does not support 'transparent' background */
-}
-
-.dropdownToolbarButton > select > option {
- background: rgba(61, 61, 61, 1);
-}
-
-#customScaleOption {
- display: none;
-}
-
-#pageWidthOption {
- border-bottom: 1px rgba(255, 255, 255, 0.5) solid;
-}
-
-html[dir='ltr'] .splitToolbarButton:first-child,
-html[dir='ltr'] .toolbarButton:first-child,
-html[dir='rtl'] .splitToolbarButton:last-child,
-html[dir='rtl'] .toolbarButton:last-child {
- margin-left: 4px;
-}
-html[dir='ltr'] .splitToolbarButton:last-child,
-html[dir='ltr'] .toolbarButton:last-child,
-html[dir='rtl'] .splitToolbarButton:first-child,
-html[dir='rtl'] .toolbarButton:first-child {
- margin-right: 4px;
-}
-
-.toolbarButtonSpacer {
- width: 30px;
- display: inline-block;
- height: 1px;
-}
-
-html[dir='ltr'] #findPrevious {
- margin-left: 3px;
-}
-html[dir='ltr'] #findNext {
- margin-right: 3px;
-}
-
-html[dir='rtl'] #findPrevious {
- margin-right: 3px;
-}
-html[dir='rtl'] #findNext {
- margin-left: 3px;
-}
-
-.toolbarButton::before,
-.secondaryToolbarButton::before {
- /* All matching images have a size of 16x16
- * All relevant containers have a size of 32x25 */
- position: absolute;
- display: inline-block;
- top: 4px;
- left: 7px;
-}
-
-html[dir="ltr"] .secondaryToolbarButton::before {
- left: 4px;
-}
-html[dir="rtl"] .secondaryToolbarButton::before {
- right: 4px;
-}
-
-.toolbarButton#sidebarToggle::before {
- content: url(images/toolbarButton-sidebarToggle.png);
-}
-html[dir='rtl'] .toolbarButton#sidebarToggle::before {
- transform: scaleX(-1);
-}
-
-.toolbarButton#secondaryToolbarToggle::before {
- content: url(images/toolbarButton-secondaryToolbarToggle.png);
-}
-html[dir='rtl'] .toolbarButton#secondaryToolbarToggle::before {
- transform: scaleX(-1);
-}
-
-.toolbarButton.findPrevious::before {
- content: url(images/findbarButton-previous.png);
-}
-html[dir='rtl'] .toolbarButton.findPrevious::before {
- transform: scaleX(-1);
-}
-
-.toolbarButton.findNext::before {
- content: url(images/findbarButton-next.png);
-}
-html[dir='rtl'] .toolbarButton.findNext::before {
- transform: scaleX(-1);
-}
-
-.toolbarButton.pageUp::before {
- content: url(images/toolbarButton-pageUp.png);
-}
-html[dir='rtl'] .toolbarButton.pageUp::before {
- transform: scaleX(-1);
-}
-
-.toolbarButton.pageDown::before {
- content: url(images/toolbarButton-pageDown.png);
-}
-html[dir='rtl'] .toolbarButton.pageDown::before {
- transform: scaleX(-1);
-}
-
-.toolbarButton.zoomOut::before {
- content: url(images/toolbarButton-zoomOut.png);
-}
-
-.toolbarButton.zoomIn::before {
- content: url(images/toolbarButton-zoomIn.png);
-}
-
-.toolbarButton.presentationMode::before,
-.secondaryToolbarButton.presentationMode::before {
- content: url(images/toolbarButton-presentationMode.png);
-}
-
-.toolbarButton.print::before,
-.secondaryToolbarButton.print::before {
- content: url(images/toolbarButton-print.png);
-}
-
-.toolbarButton.openFile::before,
-.secondaryToolbarButton.openFile::before {
- content: url(images/toolbarButton-openFile.png);
-}
-
-.toolbarButton.download::before,
-.secondaryToolbarButton.download::before {
- content: url(images/toolbarButton-download.png);
-}
-
-.toolbarButton.bookmark,
-.secondaryToolbarButton.bookmark {
- box-sizing: border-box;
- outline: none;
- padding-top: 4px;
- text-decoration: none;
-}
-.secondaryToolbarButton.bookmark {
- padding-top: 5px;
-}
-
-.bookmark[href='#'] {
- opacity: .5;
- pointer-events: none;
-}
-
-.toolbarButton.bookmark::before,
-.secondaryToolbarButton.bookmark::before {
- content: url(images/toolbarButton-bookmark.png);
-}
-
-#viewThumbnail.toolbarButton::before {
- content: url(images/toolbarButton-viewThumbnail.png);
-}
-
-#viewOutline.toolbarButton::before {
- content: url(images/toolbarButton-viewOutline.png);
-}
-html[dir="rtl"] #viewOutline.toolbarButton::before {
- transform: scaleX(-1);
-}
-
-#viewAttachments.toolbarButton::before {
- content: url(images/toolbarButton-viewAttachments.png);
-}
-
-#viewFind.toolbarButton::before {
- content: url(images/toolbarButton-search.png);
-}
-
-.toolbarButton.pdfSidebarNotification::after {
- position: absolute;
- display: inline-block;
- top: 1px;
- /* Create a filled circle, with a diameter of 9 pixels, using only CSS: */
- content: '';
- background-color: rgba(112, 219, 85, 1);
- height: 9px;
- width: 9px;
- border-radius: 50%;
-}
-html[dir='ltr'] .toolbarButton.pdfSidebarNotification::after {
- left: 17px;
-}
-html[dir='rtl'] .toolbarButton.pdfSidebarNotification::after {
- right: 17px;
-}
-
-.secondaryToolbarButton {
- position: relative;
- margin: 0 0 4px 0;
- padding: 3px 0 1px 0;
- height: auto;
- min-height: 25px;
- width: auto;
- min-width: 100%;
- white-space: normal;
-}
-html[dir="ltr"] .secondaryToolbarButton {
- padding-left: 24px;
- text-align: left;
-}
-html[dir="rtl"] .secondaryToolbarButton {
- padding-right: 24px;
- text-align: right;
-}
-html[dir="ltr"] .secondaryToolbarButton.bookmark {
- padding-left: 27px;
-}
-html[dir="rtl"] .secondaryToolbarButton.bookmark {
- padding-right: 27px;
-}
-
-html[dir="ltr"] .secondaryToolbarButton > span {
- padding-right: 4px;
-}
-html[dir="rtl"] .secondaryToolbarButton > span {
- padding-left: 4px;
-}
-
-.secondaryToolbarButton.firstPage::before {
- content: url(images/secondaryToolbarButton-firstPage.png);
-}
-
-.secondaryToolbarButton.lastPage::before {
- content: url(images/secondaryToolbarButton-lastPage.png);
-}
-
-.secondaryToolbarButton.rotateCcw::before {
- content: url(images/secondaryToolbarButton-rotateCcw.png);
-}
-
-.secondaryToolbarButton.rotateCw::before {
- content: url(images/secondaryToolbarButton-rotateCw.png);
-}
-
-.secondaryToolbarButton.selectTool::before {
- content: url(images/secondaryToolbarButton-selectTool.png);
-}
-
-.secondaryToolbarButton.handTool::before {
- content: url(images/secondaryToolbarButton-handTool.png);
-}
-
-.secondaryToolbarButton.scrollVertical::before {
- content: url(images/secondaryToolbarButton-scrollVertical.png);
-}
-
-.secondaryToolbarButton.scrollHorizontal::before {
- content: url(images/secondaryToolbarButton-scrollHorizontal.png);
-}
-
-.secondaryToolbarButton.scrollWrapped::before {
- content: url(images/secondaryToolbarButton-scrollWrapped.png);
-}
-
-.secondaryToolbarButton.spreadNone::before {
- content: url(images/secondaryToolbarButton-spreadNone.png);
-}
-
-.secondaryToolbarButton.spreadOdd::before {
- content: url(images/secondaryToolbarButton-spreadOdd.png);
-}
-
-.secondaryToolbarButton.spreadEven::before {
- content: url(images/secondaryToolbarButton-spreadEven.png);
-}
-
-.secondaryToolbarButton.documentProperties::before {
- content: url(images/secondaryToolbarButton-documentProperties.png);
-}
-
-.verticalToolbarSeparator {
- display: block;
- padding: 8px 0;
- margin: 8px 4px;
- width: 1px;
- background-color: rgba(0, 0, 0, 0.5);
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
-}
-html[dir='ltr'] .verticalToolbarSeparator {
- margin-left: 2px;
-}
-html[dir='rtl'] .verticalToolbarSeparator {
- margin-right: 2px;
-}
-
-.horizontalToolbarSeparator {
- display: block;
- margin: 0 0 4px 0;
- height: 1px;
- width: 100%;
- background-color: rgba(0, 0, 0, 0.5);
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
-}
-
-.toolbarField {
- padding: 3px 6px;
- margin: 4px 0 4px 0;
- border-radius: 2px;
- background-color: rgba(255, 255, 255, 0.09);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- background-clip: padding-box;
- border-width: 1px;
- border-style: solid;
- border-color: rgba(0, 0, 0, 0.32) rgba(0, 0, 0, 0.38) rgba(0, 0, 0, 0.42);
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05) inset,
- 0 1px 0 rgba(255, 255, 255, 0.05);
- color: rgba(242, 242, 242, 1);
- font-size: 12px;
- line-height: 14px;
- outline-style: none;
-}
-
-.toolbarField[type=checkbox] {
- display: inline-block;
- margin: 8px 0px;
-}
-
-.toolbarField.pageNumber {
- -moz-appearance: textfield; /* hides the spinner in moz */
- min-width: 16px;
- text-align: right;
- width: 40px;
-}
-
-.toolbarField.pageNumber.visiblePageIsLoading {
- background-image: url(images/loading-small.png);
- background-repeat: no-repeat;
- background-position: 1px;
-}
-
-.toolbarField.pageNumber::-webkit-inner-spin-button,
-.toolbarField.pageNumber::-webkit-outer-spin-button {
- -webkit-appearance: none;
- margin: 0;
-}
-
-.toolbarField:hover {
- background-color: rgba(255, 255, 255, 0.11);
- border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.43) rgba(0, 0, 0, 0.45);
-}
-
-.toolbarField:focus {
- background-color: rgba(255, 255, 255, 0.15);
- border-color: rgba(77, 184, 255, 0.8) rgba(77, 184, 255, 0.85) rgba(77, 184, 255, 0.9);
-}
-
-.toolbarLabel {
- min-width: 16px;
- padding: 3px 6px 3px 2px;
- margin: 4px 2px 4px 0;
- border: 1px solid rgba(0, 0, 0, 0);
- border-radius: 2px;
- color: rgba(217, 217, 217, 1);
- font-size: 12px;
- line-height: 14px;
- text-align: left;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- cursor: default;
-}
-
-#thumbnailView {
- position: absolute;
- width: calc(100% - 60px);
- top: 0;
- bottom: 0;
- padding: 10px 30px 0;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
-}
-
-#thumbnailView > a:active,
-#thumbnailView > a:focus {
- outline: 0;
-}
-
-.thumbnail {
- margin: 0 10px 5px 10px;
-}
-html[dir='ltr'] .thumbnail {
- float: left;
-}
-html[dir='rtl'] .thumbnail {
- float: right;
-}
-
-#thumbnailView > a:last-of-type > .thumbnail {
- margin-bottom: 10px;
-}
-
-#thumbnailView > a:last-of-type > .thumbnail:not([data-loaded]) {
- margin-bottom: 9px;
-}
-
-.thumbnail:not([data-loaded]) {
- border: 1px dashed rgba(255, 255, 255, 0.5);
- margin: -1px 9px 4px 9px;
-}
-
-.thumbnailImage {
- border: 1px solid rgba(0, 0, 0, 0);
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3);
- opacity: 0.8;
- z-index: 99;
- background-color: rgba(255, 255, 255, 1);
- background-clip: content-box;
-}
-
-.thumbnailSelectionRing {
- border-radius: 2px;
- padding: 7px;
-}
-
-a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,
-.thumbnail:hover > .thumbnailSelectionRing > .thumbnailImage {
- opacity: .9;
-}
-
-a:focus > .thumbnail > .thumbnailSelectionRing,
-.thumbnail:hover > .thumbnailSelectionRing {
- background-color: rgba(255, 255, 255, 0.15);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- background-clip: padding-box;
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
- 0 0 1px rgba(255, 255, 255, 0.2) inset,
- 0 0 1px rgba(0, 0, 0, 0.2);
- color: rgba(255, 255, 255, 0.9);
-}
-
-.thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage {
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
- opacity: 1;
-}
-
-.thumbnail.selected > .thumbnailSelectionRing {
- background-color: rgba(255, 255, 255, 0.3);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- background-clip: padding-box;
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
- 0 0 1px rgba(255, 255, 255, 0.1) inset,
- 0 0 1px rgba(0, 0, 0, 0.2);
- color: rgba(255, 255, 255,1);
-}
-
-#outlineView,
-#attachmentsView {
- position: absolute;
- width: calc(100% - 8px);
- top: 0;
- bottom: 0;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-#outlineView {
- padding: 4px 4px 0;
-}
-#attachmentsView {
- padding: 3px 4px 0;
-}
-
-html[dir='ltr'] .outlineWithDeepNesting > .outlineItem,
-html[dir='ltr'] .outlineItem > .outlineItems {
- margin-left: 20px;
-}
-
-html[dir='rtl'] .outlineWithDeepNesting > .outlineItem,
-html[dir='rtl'] .outlineItem > .outlineItems {
- margin-right: 20px;
-}
-
-.outlineItem > a,
-.attachmentsItem > button {
- text-decoration: none;
- display: inline-block;
- min-width: 95%;
- min-width: calc(100% - 4px); /* Subtract the right padding (left, in RTL mode)
- of the container. */
- height: auto;
- margin-bottom: 1px;
- border-radius: 2px;
- color: rgba(255, 255, 255, 0.8);
- font-size: 13px;
- line-height: 15px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- white-space: normal;
-}
-
-.attachmentsItem > button {
- border: 0 none;
- background: none;
- cursor: pointer;
- width: 100%;
-}
-
-html[dir='ltr'] .outlineItem > a {
- padding: 2px 0 5px 4px;
-}
-html[dir='ltr'] .attachmentsItem > button {
- padding: 2px 0 3px 7px;
- text-align: left;
-}
-
-html[dir='rtl'] .outlineItem > a {
- padding: 2px 4px 5px 0;
-}
-html[dir='rtl'] .attachmentsItem > button {
- padding: 2px 7px 3px 0;
- text-align: right;
-}
-
-.outlineItemToggler {
- position: relative;
- height: 0;
- width: 0;
- color: rgba(255, 255, 255, 0.5);
-}
-.outlineItemToggler::before {
- content: url(images/treeitem-expanded.png);
- display: inline-block;
- position: absolute;
-}
-.outlineItemToggler.outlineItemsHidden::before {
- content: url(images/treeitem-collapsed.png);
-}
-html[dir='rtl'] .outlineItemToggler.outlineItemsHidden::before {
- transform: scaleX(-1);
-}
-.outlineItemToggler.outlineItemsHidden ~ .outlineItems {
- display: none;
-}
-html[dir='ltr'] .outlineItemToggler {
- float: left;
-}
-html[dir='rtl'] .outlineItemToggler {
- float: right;
-}
-html[dir='ltr'] .outlineItemToggler::before {
- right: 4px;
-}
-html[dir='rtl'] .outlineItemToggler::before {
- left: 4px;
-}
-
-.outlineItemToggler:hover,
-.outlineItemToggler:hover + a,
-.outlineItemToggler:hover ~ .outlineItems,
-.outlineItem > a:hover,
-.attachmentsItem > button:hover {
- background-color: rgba(255, 255, 255, 0.02);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- background-clip: padding-box;
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
- 0 0 1px rgba(255, 255, 255, 0.2) inset,
- 0 0 1px rgba(0, 0, 0, 0.2);
- border-radius: 2px;
- color: rgba(255, 255, 255, 0.9);
-}
-
-.outlineItem.selected {
- background-color: rgba(255, 255, 255, 0.08);
- background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
- background-clip: padding-box;
- box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
- 0 0 1px rgba(255, 255, 255, 0.1) inset,
- 0 0 1px rgba(0, 0, 0, 0.2);
- color: rgba(255, 255, 255, 1);
-}
-
-.noResults {
- font-size: 12px;
- color: rgba(255, 255, 255, 0.8);
- font-style: italic;
- cursor: default;
-}
-
-/* TODO: file FF bug to support ::-moz-selection:window-inactive
- so we can override the opaque grey background when the window is inactive;
- see https://bugzilla.mozilla.org/show_bug.cgi?id=706209 */
-::-moz-selection {
- background: rgba(0, 0, 255, 0.3);
-}
-::selection {
- background: rgba(0, 0, 255, 0.3);
-}
-
-#errorWrapper {
- background: none repeat scroll 0 0 rgba(255, 85, 85, 1);
- color: rgba(255, 255, 255, 1);
- left: 0;
- position: absolute;
- right: 0;
- z-index: 1000;
- padding: 3px;
- font-size: 0.8em;
-}
-.loadingInProgress #errorWrapper {
- top: 37px;
-}
-
-#errorMessageLeft {
- float: left;
-}
-
-#errorMessageRight {
- float: right;
-}
-
-#errorMoreInfo {
- background-color: rgba(255, 255, 255, 1);
- color: rgba(0, 0, 0, 1);
- padding: 3px;
- margin: 3px;
- width: 98%;
-}
-
-.overlayButton {
- width: auto;
- margin: 3px 4px 2px 4px !important;
- padding: 2px 6px 3px 6px;
-}
-
-#overlayContainer {
- display: table;
- position: absolute;
- width: 100%;
- height: 100%;
- background-color: rgba(0, 0, 0, 0.2);
- z-index: 40000;
-}
-#overlayContainer > * {
- overflow: auto;
- -webkit-overflow-scrolling: touch;
-}
-
-#overlayContainer > .container {
- display: table-cell;
- vertical-align: middle;
- text-align: center;
-}
-
-#overlayContainer > .container > .dialog {
- display: inline-block;
- padding: 15px;
- border-spacing: 4px;
- color: rgba(217, 217, 217, 1);
- font-size: 12px;
- line-height: 14px;
- background-color: rgba(71, 71, 71, 1); /* fallback */
- background-image: url(images/texture.png),
- linear-gradient(rgba(82, 82, 82,0.99), rgba(69, 69, 69, 0.95));
- border: 1px solid rgba(0, 0, 0, 0.5);
- border-radius: 4px;
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
-}
-
-.dialog > .row {
- display: table-row;
-}
-
-.dialog > .row > * {
- display: table-cell;
-}
-
-.dialog .toolbarField {
- margin: 5px 0;
-}
-
-.dialog .separator {
- display: block;
- margin: 4px 0 4px 0;
- height: 1px;
- width: 100%;
- background-color: rgba(0, 0, 0, 0.5);
- box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
-}
-
-.dialog .buttonRow {
- text-align: center;
- vertical-align: middle;
-}
-
-.dialog :link {
- color: rgba(255, 255, 255, 1);
-}
-
-#passwordOverlay > .dialog {
- text-align: center;
-}
-#passwordOverlay .toolbarField {
- width: 200px;
-}
-
-#documentPropertiesOverlay > .dialog {
- text-align: left;
-}
-#documentPropertiesOverlay .row > * {
- min-width: 100px;
-}
-html[dir='ltr'] #documentPropertiesOverlay .row > * {
- text-align: left;
-}
-html[dir='rtl'] #documentPropertiesOverlay .row > * {
- text-align: right;
-}
-#documentPropertiesOverlay .row > span {
- width: 125px;
- word-wrap: break-word;
-}
-#documentPropertiesOverlay .row > p {
- max-width: 225px;
- word-wrap: break-word;
-}
-#documentPropertiesOverlay .buttonRow {
- margin-top: 10px;
-}
-
-.clearBoth {
- clear: both;
-}
-
-.fileInput {
- background: rgba(255, 255, 255, 1);
- color: rgba(0, 0, 0, 1);
- margin-top: 5px;
- visibility: hidden;
- position: fixed;
- right: 0;
- top: 0;
-}
-
-#PDFBug {
- background: none repeat scroll 0 0 rgba(255, 255, 255, 1);
- border: 1px solid rgba(102, 102, 102, 1);
- position: fixed;
- top: 32px;
- right: 0;
- bottom: 0;
- font-size: 10px;
- padding: 0;
- width: 300px;
-}
-#PDFBug .controls {
- background: rgba(238, 238, 238, 1);
- border-bottom: 1px solid rgba(102, 102, 102, 1);
- padding: 3px;
-}
-#PDFBug .panels {
- bottom: 0;
- left: 0;
- overflow: auto;
- -webkit-overflow-scrolling: touch;
- position: absolute;
- right: 0;
- top: 27px;
-}
-#PDFBug .panels > div {
- padding: 5px;
-}
-#PDFBug button.active {
- font-weight: bold;
-}
-.debuggerShowText {
- background: none repeat scroll 0 0 rgba(255, 255, 0, 1);
- color: rgba(0, 0, 255, 1);
-}
-.debuggerHideText:hover {
- background: none repeat scroll 0 0 rgba(255, 255, 0, 1);
-}
-#PDFBug .stats {
- font-family: courier;
- font-size: 10px;
- white-space: pre;
-}
-#PDFBug .stats .title {
- font-weight: bold;
-}
-#PDFBug table {
- font-size: 10px;
-}
-
-#viewer.textLayer-visible .textLayer {
- opacity: 1.0;
-}
-
-#viewer.textLayer-visible .canvasWrapper {
- background-color: rgba(128, 255, 128, 1);
-}
-
-#viewer.textLayer-visible .canvasWrapper canvas {
- mix-blend-mode: screen;
-}
-
-#viewer.textLayer-visible .textLayer > span {
- background-color: rgba(255, 255, 0, 0.1);
- color: rgba(0, 0, 0, 1);
- border: solid 1px rgba(255, 0, 0, 0.5);
- box-sizing: border-box;
-}
-
-#viewer.textLayer-hover .textLayer > span:hover {
- background-color: rgba(255, 255, 255, 1);
- color: rgba(0, 0, 0, 1);
-}
-
-#viewer.textLayer-shadow .textLayer > span {
- background-color: rgba(255, 255, 255, 0.6);
- color: rgba(0, 0, 0, 1);
-}
-
-.grab-to-pan-grab {
- cursor: url("images/grab.cur"), move !important;
- cursor: -webkit-grab !important;
- cursor: grab !important;
-}
-.grab-to-pan-grab *:not(input):not(textarea):not(button):not(select):not(:link) {
- cursor: inherit !important;
-}
-.grab-to-pan-grab:active,
-.grab-to-pan-grabbing {
- cursor: url("images/grabbing.cur"), move !important;
- cursor: -webkit-grabbing !important;
- cursor: grabbing !important;
- position: fixed;
- background: rgba(0, 0, 0, 0);
- display: block;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- overflow: hidden;
- z-index: 50000; /* should be higher than anything else in PDF.js! */
-}
-
-@page {
- margin: 0;
-}
-
-#printContainer {
- display: none;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio: 1.1), screen and (min-resolution: 1.1dppx) {
- /* Rules for Retina screens */
- .toolbarButton::before {
- transform: scale(0.5);
- top: -5px;
- }
-
- .secondaryToolbarButton::before {
- transform: scale(0.5);
- top: -4px;
- }
-
- html[dir='ltr'] .toolbarButton::before,
- html[dir='rtl'] .toolbarButton::before {
- left: -1px;
- }
-
- html[dir='ltr'] .secondaryToolbarButton::before {
- left: -2px;
- }
- html[dir='rtl'] .secondaryToolbarButton::before {
- left: 186px;
- }
-
- .toolbarField.pageNumber.visiblePageIsLoading,
- #findInput[data-status="pending"] {
- background-image: url(images/loading-small@2x.png);
- background-size: 16px 17px;
- }
-
- .dropdownToolbarButton::after {
- transform: scale(0.5);
- top: -5px;
- content: url(images/toolbarButton-menuArrows@2x.png);
- }
- html[dir='ltr'] .dropdownToolbarButton::after {
- right: 4px;
- }
- html[dir='rtl'] .dropdownToolbarButton::after {
- left: 4px;
- }
-
- .toolbarButton#sidebarToggle::before {
- content: url(images/toolbarButton-sidebarToggle@2x.png);
- }
- html[dir='rtl'] .toolbarButton#sidebarToggle::before {
- transform: scale(-0.5, 0.5);
- }
-
- .toolbarButton#secondaryToolbarToggle::before {
- content: url(images/toolbarButton-secondaryToolbarToggle@2x.png);
- }
- html[dir='rtl'] .toolbarButton#secondaryToolbarToggle::before {
- transform: scale(-0.5, 0.5);
- }
-
- .toolbarButton.findPrevious::before {
- content: url(images/findbarButton-previous@2x.png);
- }
- html[dir='rtl'] .toolbarButton.findPrevious::before {
- transform: scale(-0.5, 0.5);
- }
-
- .toolbarButton.findNext::before {
- content: url(images/findbarButton-next@2x.png);
- }
- html[dir='rtl'] .toolbarButton.findNext::before {
- transform: scale(-0.5, 0.5);
- }
-
- .toolbarButton.pageUp::before {
- content: url(images/toolbarButton-pageUp@2x.png);
- }
- html[dir='rtl'] .toolbarButton.pageUp::before {
- transform: scale(-0.5, 0.5);
- }
-
- .toolbarButton.pageDown::before {
- content: url(images/toolbarButton-pageDown@2x.png);
- }
- html[dir='rtl'] .toolbarButton.pageDown::before {
- transform: scale(-0.5, 0.5);
- }
-
- .toolbarButton.zoomIn::before {
- content: url(images/toolbarButton-zoomIn@2x.png);
- }
-
- .toolbarButton.zoomOut::before {
- content: url(images/toolbarButton-zoomOut@2x.png);
- }
-
- .toolbarButton.presentationMode::before,
- .secondaryToolbarButton.presentationMode::before {
- content: url(images/toolbarButton-presentationMode@2x.png);
- }
-
- .toolbarButton.print::before,
- .secondaryToolbarButton.print::before {
- content: url(images/toolbarButton-print@2x.png);
- }
-
- .toolbarButton.openFile::before,
- .secondaryToolbarButton.openFile::before {
- content: url(images/toolbarButton-openFile@2x.png);
- }
-
- .toolbarButton.download::before,
- .secondaryToolbarButton.download::before {
- content: url(images/toolbarButton-download@2x.png);
- }
-
- .toolbarButton.bookmark::before,
- .secondaryToolbarButton.bookmark::before {
- content: url(images/toolbarButton-bookmark@2x.png);
- }
-
- #viewThumbnail.toolbarButton::before {
- content: url(images/toolbarButton-viewThumbnail@2x.png);
- }
-
- #viewOutline.toolbarButton::before {
- content: url(images/toolbarButton-viewOutline@2x.png);
- }
- html[dir="rtl"] #viewOutline.toolbarButton::before {
- transform: scale(-0.5, 0.5);
- }
-
- #viewAttachments.toolbarButton::before {
- content: url(images/toolbarButton-viewAttachments@2x.png);
- }
-
- #viewFind.toolbarButton::before {
- content: url(images/toolbarButton-search@2x.png);
- }
-
- .secondaryToolbarButton.firstPage::before {
- content: url(images/secondaryToolbarButton-firstPage@2x.png);
- }
-
- .secondaryToolbarButton.lastPage::before {
- content: url(images/secondaryToolbarButton-lastPage@2x.png);
- }
-
- .secondaryToolbarButton.rotateCcw::before {
- content: url(images/secondaryToolbarButton-rotateCcw@2x.png);
- }
-
- .secondaryToolbarButton.rotateCw::before {
- content: url(images/secondaryToolbarButton-rotateCw@2x.png);
- }
-
- .secondaryToolbarButton.selectTool::before {
- content: url(images/secondaryToolbarButton-selectTool@2x.png);
- }
-
- .secondaryToolbarButton.handTool::before {
- content: url(images/secondaryToolbarButton-handTool@2x.png);
- }
-
- .secondaryToolbarButton.scrollVertical::before {
- content: url(images/secondaryToolbarButton-scrollVertical@2x.png);
- }
-
- .secondaryToolbarButton.scrollHorizontal::before {
- content: url(images/secondaryToolbarButton-scrollHorizontal@2x.png);
- }
-
- .secondaryToolbarButton.scrollWrapped::before {
- content: url(images/secondaryToolbarButton-scrollWrapped@2x.png);
- }
-
- .secondaryToolbarButton.spreadNone::before {
- content: url(images/secondaryToolbarButton-spreadNone@2x.png);
- }
-
- .secondaryToolbarButton.spreadOdd::before {
- content: url(images/secondaryToolbarButton-spreadOdd@2x.png);
- }
-
- .secondaryToolbarButton.spreadEven::before {
- content: url(images/secondaryToolbarButton-spreadEven@2x.png);
- }
-
- .secondaryToolbarButton.documentProperties::before {
- content: url(images/secondaryToolbarButton-documentProperties@2x.png);
- }
-
- .outlineItemToggler::before {
- transform: scale(0.5);
- top: -1px;
- content: url(images/treeitem-expanded@2x.png);
- }
- .outlineItemToggler.outlineItemsHidden::before {
- content: url(images/treeitem-collapsed@2x.png);
- }
- html[dir='rtl'] .outlineItemToggler.outlineItemsHidden::before {
- transform: scale(-0.5, 0.5);
- }
- html[dir='ltr'] .outlineItemToggler::before {
- right: 0;
- }
- html[dir='rtl'] .outlineItemToggler::before {
- left: 0;
- }
-}
-
-@media print {
- /* General rules for printing. */
- body {
- background: rgba(0, 0, 0, 0) none;
- }
-
- /* Rules for browsers that don't support mozPrintCallback. */
- #sidebarContainer, #secondaryToolbar, .toolbar, #loadingBox, #errorWrapper, .textLayer {
- display: none;
- }
- #viewerContainer {
- overflow: visible;
- }
-
- #mainContainer, #viewerContainer, .page, .page canvas {
- position: static;
- padding: 0;
- margin: 0;
- }
-
- .page {
- float: left;
- display: none;
- border: none;
- box-shadow: none;
- background-clip: content-box;
- background-color: rgba(255, 255, 255, 1);
- }
-
- .page[data-loaded] {
- display: block;
- }
-
- .fileInput {
- display: none;
- }
-
- /* Rules for browsers that support PDF.js printing */
- body[data-pdfjsprinting] #outerContainer {
- display: none;
- }
- body[data-pdfjsprinting] #printContainer {
- display: block;
- }
- #printContainer {
- height: 100%;
- }
- /* wrapper around (scaled) print canvas elements */
- #printContainer > div {
- position: relative;
- top: 0;
- left: 0;
- width: 1px;
- height: 1px;
- overflow: visible;
- page-break-after: always;
- page-break-inside: avoid;
- }
- #printContainer canvas,
- #printContainer img {
- display: block;
- }
-}
-
-.visibleLargeView,
-.visibleMediumView,
-.visibleSmallView {
- display: none;
-}
-
-@media all and (max-width: 900px) {
- #toolbarViewerMiddle {
- display: table;
- margin: auto;
- left: auto;
- position: inherit;
- transform: none;
- }
-}
-
-@media all and (max-width: 840px) {
- #sidebarContent {
- background-color: rgba(0, 0, 0, 0.7);
- }
-
- html[dir='ltr'] #outerContainer.sidebarOpen #viewerContainer {
- left: 0px !important;
- }
- html[dir='rtl'] #outerContainer.sidebarOpen #viewerContainer {
- right: 0px !important;
- }
-
- #outerContainer .hiddenLargeView,
- #outerContainer .hiddenMediumView {
- display: inherit;
- }
- #outerContainer .visibleLargeView,
- #outerContainer .visibleMediumView {
- display: none;
- }
-}
-
-@media all and (max-width: 770px) {
- #outerContainer .hiddenLargeView {
- display: none;
- }
- #outerContainer .visibleLargeView {
- display: inherit;
- }
-}
-
-@media all and (max-width: 700px) {
- #outerContainer .hiddenMediumView {
- display: none;
- }
- #outerContainer .visibleMediumView {
- display: inherit;
- }
-}
-
-@media all and (max-width: 640px) {
- .hiddenSmallView, .hiddenSmallView * {
- display: none;
- }
- .visibleSmallView {
- display: inherit;
- }
- .toolbarButtonSpacer {
- width: 0;
- }
- html[dir='ltr'] .findbar {
- left: 38px;
- }
- html[dir='rtl'] .findbar {
- right: 38px;
- }
-}
-
-@media all and (max-width: 535px) {
- #scaleSelectContainer {
- display: none;
- }
-}
+/* Copyright 2014 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.
+ */
+
+.textLayer {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+ opacity: 0.2;
+ line-height: 1.0;
+}
+
+.textLayer > span {
+ color: transparent;
+ position: absolute;
+ white-space: pre;
+ cursor: text;
+ transform-origin: 0% 0%;
+}
+
+.textLayer .highlight {
+ margin: -1px;
+ padding: 1px;
+ background-color: rgba(180, 0, 170, 1);
+ border-radius: 4px;
+}
+
+.textLayer .highlight.begin {
+ border-radius: 4px 0px 0px 4px;
+}
+
+.textLayer .highlight.end {
+ border-radius: 0px 4px 4px 0px;
+}
+
+.textLayer .highlight.middle {
+ border-radius: 0px;
+}
+
+.textLayer .highlight.selected {
+ background-color: rgba(0, 100, 0, 1);
+}
+
+.textLayer ::-moz-selection {
+ background: rgba(0, 0, 255, 1);
+}
+
+.textLayer ::selection {
+ background: rgba(0, 0, 255, 1);
+}
+
+.textLayer .endOfContent {
+ display: block;
+ position: absolute;
+ left: 0px;
+ top: 100%;
+ right: 0px;
+ bottom: 0px;
+ z-index: -1;
+ cursor: default;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.textLayer .endOfContent.active {
+ top: 0px;
+}
+
+
+.annotationLayer section {
+ position: absolute;
+}
+
+.annotationLayer .linkAnnotation > a,
+.annotationLayer .buttonWidgetAnnotation.pushButton > a {
+ position: absolute;
+ font-size: 1em;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.annotationLayer .linkAnnotation > a:hover,
+.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {
+ opacity: 0.2;
+ background: rgba(255, 255, 0, 1);
+ box-shadow: 0px 2px 10px rgba(255, 255, 0, 1);
+}
+
+.annotationLayer .textAnnotation img {
+ position: absolute;
+ cursor: pointer;
+}
+
+.annotationLayer .textWidgetAnnotation input,
+.annotationLayer .textWidgetAnnotation textarea,
+.annotationLayer .choiceWidgetAnnotation select,
+.annotationLayer .buttonWidgetAnnotation.checkBox input,
+.annotationLayer .buttonWidgetAnnotation.radioButton input {
+ background-color: rgba(0, 54, 255, 0.13);
+ border: 1px solid transparent;
+ box-sizing: border-box;
+ font-size: 9px;
+ height: 100%;
+ margin: 0;
+ padding: 0 3px;
+ vertical-align: top;
+ width: 100%;
+}
+
+.annotationLayer .choiceWidgetAnnotation select option {
+ padding: 0;
+}
+
+.annotationLayer .buttonWidgetAnnotation.radioButton input {
+ border-radius: 50%;
+}
+
+.annotationLayer .textWidgetAnnotation textarea {
+ font: message-box;
+ font-size: 9px;
+ resize: none;
+}
+
+.annotationLayer .textWidgetAnnotation input[disabled],
+.annotationLayer .textWidgetAnnotation textarea[disabled],
+.annotationLayer .choiceWidgetAnnotation select[disabled],
+.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],
+.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] {
+ background: none;
+ border: 1px solid transparent;
+ cursor: not-allowed;
+}
+
+.annotationLayer .textWidgetAnnotation input:hover,
+.annotationLayer .textWidgetAnnotation textarea:hover,
+.annotationLayer .choiceWidgetAnnotation select:hover,
+.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,
+.annotationLayer .buttonWidgetAnnotation.radioButton input:hover {
+ border: 1px solid rgba(0, 0, 0, 1);
+}
+
+.annotationLayer .textWidgetAnnotation input:focus,
+.annotationLayer .textWidgetAnnotation textarea:focus,
+.annotationLayer .choiceWidgetAnnotation select:focus {
+ background: none;
+ border: 1px solid transparent;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,
+.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
+ background-color: rgba(0, 0, 0, 1);
+ content: '';
+ display: block;
+ position: absolute;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
+ height: 80%;
+ left: 45%;
+ width: 1px;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {
+ transform: rotate(45deg);
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
+ transform: rotate(-45deg);
+}
+
+.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
+ border-radius: 50%;
+ height: 50%;
+ left: 30%;
+ top: 20%;
+ width: 50%;
+}
+
+.annotationLayer .textWidgetAnnotation input.comb {
+ font-family: monospace;
+ padding-left: 2px;
+ padding-right: 0;
+}
+
+.annotationLayer .textWidgetAnnotation input.comb:focus {
+ /*
+ * Letter spacing is placed on the right side of each character. Hence, the
+ * letter spacing of the last character may be placed outside the visible
+ * area, causing horizontal scrolling. We avoid this by extending the width
+ * when the element has focus and revert this when it loses focus.
+ */
+ width: 115%;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input,
+.annotationLayer .buttonWidgetAnnotation.radioButton input {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ padding: 0;
+}
+
+.annotationLayer .popupWrapper {
+ position: absolute;
+ width: 20em;
+}
+
+.annotationLayer .popup {
+ position: absolute;
+ z-index: 200;
+ max-width: 20em;
+ background-color: rgba(255, 255, 153, 1);
+ box-shadow: 0px 2px 5px rgba(136, 136, 136, 1);
+ border-radius: 2px;
+ padding: 6px;
+ margin-left: 5px;
+ cursor: pointer;
+ font: message-box;
+ font-size: 9px;
+ word-wrap: break-word;
+}
+
+.annotationLayer .popup > * {
+ font-size: 9px;
+}
+
+.annotationLayer .popup h1 {
+ display: inline-block;
+}
+
+.annotationLayer .popup span {
+ display: inline-block;
+ margin-left: 5px;
+}
+
+.annotationLayer .popup p {
+ border-top: 1px solid rgba(51, 51, 51, 1);
+ margin-top: 2px;
+ padding-top: 2px;
+}
+
+.annotationLayer .highlightAnnotation,
+.annotationLayer .underlineAnnotation,
+.annotationLayer .squigglyAnnotation,
+.annotationLayer .strikeoutAnnotation,
+.annotationLayer .freeTextAnnotation,
+.annotationLayer .lineAnnotation svg line,
+.annotationLayer .squareAnnotation svg rect,
+.annotationLayer .circleAnnotation svg ellipse,
+.annotationLayer .polylineAnnotation svg polyline,
+.annotationLayer .polygonAnnotation svg polygon,
+.annotationLayer .caretAnnotation,
+.annotationLayer .inkAnnotation svg polyline,
+.annotationLayer .stampAnnotation,
+.annotationLayer .fileAttachmentAnnotation {
+ cursor: pointer;
+}
+
+.pdfViewer .canvasWrapper {
+ overflow: hidden;
+}
+
+.pdfViewer .page {
+ direction: ltr;
+ width: 816px;
+ height: 1056px;
+ margin: 1px auto -8px auto;
+ position: relative;
+ overflow: visible;
+ border: 9px solid transparent;
+ background-clip: content-box;
+ -o-border-image: url(images/shadow.png) 9 9 repeat;
+ border-image: url(images/shadow.png) 9 9 repeat;
+ background-color: rgba(255, 255, 255, 1);
+}
+
+.pdfViewer.removePageBorders .page {
+ margin: 0px auto 10px auto;
+ border: none;
+}
+
+.pdfViewer.singlePageView {
+ display: inline-block;
+}
+
+.pdfViewer.singlePageView .page {
+ margin: 0;
+ border: none;
+}
+
+.pdfViewer.scrollHorizontal, .pdfViewer.scrollWrapped, .spread {
+ margin-left: 3.5px;
+ margin-right: 3.5px;
+ text-align: center;
+}
+
+.pdfViewer.scrollHorizontal, .spread {
+ white-space: nowrap;
+}
+
+.pdfViewer.removePageBorders,
+.pdfViewer.scrollHorizontal .spread,
+.pdfViewer.scrollWrapped .spread {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.spread .page,
+.pdfViewer.scrollHorizontal .page,
+.pdfViewer.scrollWrapped .page,
+.pdfViewer.scrollHorizontal .spread,
+.pdfViewer.scrollWrapped .spread {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.spread .page,
+.pdfViewer.scrollHorizontal .page,
+.pdfViewer.scrollWrapped .page {
+ margin-left: -3.5px;
+ margin-right: -3.5px;
+}
+
+.pdfViewer.removePageBorders .spread .page,
+.pdfViewer.removePageBorders.scrollHorizontal .page,
+.pdfViewer.removePageBorders.scrollWrapped .page {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+.pdfViewer .page canvas {
+ margin: 0;
+ display: block;
+}
+
+.pdfViewer .page canvas[hidden] {
+ display: none;
+}
+
+.pdfViewer .page .loadingIcon {
+ position: absolute;
+ display: block;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ background: url('images/loading-icon.gif') center no-repeat;
+}
+
+.pdfPresentationMode .pdfViewer {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.pdfPresentationMode .pdfViewer .page,
+.pdfPresentationMode .pdfViewer .spread {
+ display: block;
+}
+
+.pdfPresentationMode .pdfViewer .page,
+.pdfPresentationMode .pdfViewer.removePageBorders .page {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.pdfPresentationMode:-ms-fullscreen .pdfViewer .page {
+ margin-bottom: 100% !important;
+}
+
+.pdfPresentationMode:-webkit-full-screen .pdfViewer .page {
+ margin-bottom: 100%;
+ border: 0;
+}
+
+.pdfPresentationMode:-moz-full-screen .pdfViewer .page {
+ margin-bottom: 100%;
+ border: 0;
+}
+
+.pdfPresentationMode:fullscreen .pdfViewer .page {
+ margin-bottom: 100%;
+ border: 0;
+}
+
+:root {
+ --sidebar-width: 200px;
+ --sidebar-transition-duration: 200ms;
+ --sidebar-transition-timing-function: ease;
+}
+
+* {
+ padding: 0;
+ margin: 0;
+}
+
+html {
+ height: 100%;
+ width: 100%;
+ /* Font size is needed to make the activity bar the correct size. */
+ font-size: 10px;
+}
+
+body {
+ height: 100%;
+ width: 100%;
+ background-color: rgba(64, 64, 64, 1);
+ background-image: url(images/texture.png);
+}
+
+body,
+input,
+button,
+select {
+ font: message-box;
+ outline: none;
+}
+
+.hidden {
+ display: none !important;
+}
+[hidden] {
+ display: none !important;
+}
+
+.pdfViewer.enablePermissions .textLayer > span {
+ -webkit-user-select: none !important;
+ -moz-user-select: none !important;
+ -ms-user-select: none !important;
+ user-select: none !important;
+ cursor: not-allowed;
+}
+
+#viewerContainer.pdfPresentationMode:-ms-fullscreen {
+ top: 0px !important;
+ overflow: hidden !important;
+}
+
+#viewerContainer.pdfPresentationMode:-ms-fullscreen::-ms-backdrop {
+ background-color: rgba(0, 0, 0, 1);
+}
+
+#viewerContainer.pdfPresentationMode:-webkit-full-screen {
+ top: 0px;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+#viewerContainer.pdfPresentationMode:-moz-full-screen {
+ top: 0px;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+#viewerContainer.pdfPresentationMode:-ms-fullscreen {
+ top: 0px;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#viewerContainer.pdfPresentationMode:fullscreen {
+ top: 0px;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.pdfPresentationMode:-webkit-full-screen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:-moz-full-screen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:-ms-fullscreen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:fullscreen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:-webkit-full-screen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode:-moz-full-screen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode:-ms-fullscreen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode:fullscreen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode.pdfPresentationModeControls > *,
+.pdfPresentationMode.pdfPresentationModeControls .textLayer > span {
+ cursor: default;
+}
+
+#outerContainer {
+ width: 100%;
+ height: 100%;
+ position: relative;
+}
+
+#sidebarContainer {
+ position: absolute;
+ top: 32px;
+ bottom: 0;
+ width: 200px;
+ width: var(--sidebar-width);
+ visibility: hidden;
+ z-index: 100;
+ border-top: 1px solid rgba(51, 51, 51, 1);
+ transition-duration: 200ms;
+ transition-duration: var(--sidebar-transition-duration);
+ transition-timing-function: ease;
+ transition-timing-function: var(--sidebar-transition-timing-function);
+}
+html[dir='ltr'] #sidebarContainer {
+ transition-property: left;
+ left: -200px;
+ left: calc(0px - var(--sidebar-width));
+}
+html[dir='rtl'] #sidebarContainer {
+ transition-property: right;
+ right: -200px;
+ right: calc(0px - var(--sidebar-width));
+}
+
+.loadingInProgress #sidebarContainer {
+ top: 36px;
+}
+
+#outerContainer.sidebarResizing #sidebarContainer {
+ /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
+ transition-duration: 0s;
+ /* Prevent e.g. the thumbnails being selected when the sidebar is resized. */
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#outerContainer.sidebarMoving #sidebarContainer,
+#outerContainer.sidebarOpen #sidebarContainer {
+ visibility: visible;
+}
+html[dir='ltr'] #outerContainer.sidebarOpen #sidebarContainer {
+ left: 0px;
+}
+html[dir='rtl'] #outerContainer.sidebarOpen #sidebarContainer {
+ right: 0px;
+}
+
+#mainContainer {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ min-width: 320px;
+}
+
+#sidebarContent {
+ top: 32px;
+ bottom: 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: absolute;
+ width: 100%;
+ background-color: rgba(0, 0, 0, 0.1);
+}
+html[dir='ltr'] #sidebarContent {
+ left: 0;
+ box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25);
+}
+html[dir='rtl'] #sidebarContent {
+ right: 0;
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25);
+}
+
+#viewerContainer {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: absolute;
+ top: 32px;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ outline: none;
+}
+#viewerContainer:not(.pdfPresentationMode) {
+ transition-duration: 200ms;
+ transition-duration: var(--sidebar-transition-duration);
+ transition-timing-function: ease;
+ transition-timing-function: var(--sidebar-transition-timing-function);
+}
+html[dir='ltr'] #viewerContainer {
+ box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.05);
+}
+html[dir='rtl'] #viewerContainer {
+ box-shadow: inset -1px 0 0 rgba(255, 255, 255, 0.05);
+}
+
+#outerContainer.sidebarResizing #viewerContainer {
+ /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
+ transition-duration: 0s;
+}
+
+html[dir='ltr'] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {
+ transition-property: left;
+ left: 200px;
+ left: var(--sidebar-width);
+}
+html[dir='rtl'] #outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) {
+ transition-property: right;
+ right: 200px;
+ right: var(--sidebar-width);
+}
+
+.toolbar {
+ position: relative;
+ left: 0;
+ right: 0;
+ z-index: 9999;
+ cursor: default;
+}
+
+#toolbarContainer {
+ width: 100%;
+}
+
+#toolbarSidebar {
+ width: 100%;
+ height: 32px;
+ background-color: rgba(66, 66, 66, 1); /* fallback */
+ background-image: url(images/texture.png),
+ linear-gradient(rgba(77, 77, 77, 0.99), rgba(64, 64, 64, 0.95));
+}
+html[dir='ltr'] #toolbarSidebar {
+ box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25),
+ inset 0 -1px 0 rgba(255, 255, 255, 0.05),
+ 0 1px 0 rgba(0, 0, 0, 0.15),
+ 0 0 1px rgba(0, 0, 0, 0.1);
+}
+html[dir='rtl'] #toolbarSidebar {
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25),
+ inset 0 1px 0 rgba(255, 255, 255, 0.05),
+ 0 1px 0 rgba(0, 0, 0, 0.15),
+ 0 0 1px rgba(0, 0, 0, 0.1);
+}
+
+#sidebarResizer {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ width: 6px;
+ z-index: 200;
+ cursor: ew-resize;
+}
+html[dir='ltr'] #sidebarResizer {
+ right: -6px;
+}
+html[dir='rtl'] #sidebarResizer {
+ left: -6px;
+}
+
+#toolbarContainer, .findbar, .secondaryToolbar {
+ position: relative;
+ height: 32px;
+ background-color: rgba(71, 71, 71, 1); /* fallback */
+ background-image: url(images/texture.png),
+ linear-gradient(rgba(82, 82, 82, 0.99), rgba(69, 69, 69, 0.95));
+}
+html[dir='ltr'] #toolbarContainer, .findbar, .secondaryToolbar {
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15),
+ inset 0 -1px 0 rgba(255, 255, 255, 0.05),
+ 0 1px 0 rgba(0, 0, 0, 0.15),
+ 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+html[dir='rtl'] #toolbarContainer, .findbar, .secondaryToolbar {
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.15),
+ inset 0 -1px 0 rgba(255, 255, 255, 0.05),
+ 0 1px 0 rgba(0, 0, 0, 0.15),
+ 0 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+#toolbarViewer {
+ height: 32px;
+}
+
+#loadingBar {
+ position: relative;
+ width: 100%;
+ height: 4px;
+ background-color: rgba(51, 51, 51, 1);
+ border-bottom: 1px solid rgba(51, 51, 51, 1);
+}
+
+#loadingBar .progress {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 0%;
+ height: 100%;
+ background-color: rgba(221, 221, 221, 1);
+ overflow: hidden;
+ transition: width 200ms;
+}
+
+@-webkit-keyframes progressIndeterminate {
+ 0% { left: -142px; }
+ 100% { left: 0; }
+}
+
+@keyframes progressIndeterminate {
+ 0% { left: -142px; }
+ 100% { left: 0; }
+}
+
+#loadingBar .progress.indeterminate {
+ background-color: rgba(153, 153, 153, 1);
+ transition: none;
+}
+
+#loadingBar .progress.indeterminate .glimmer {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: calc(100% + 150px);
+ background: repeating-linear-gradient(135deg,
+ rgba(187, 187, 187, 1) 0, rgba(153, 153, 153, 1) 5px,
+ rgba(153, 153, 153, 1) 45px, rgba(221, 221, 221, 1) 55px,
+ rgba(221, 221, 221, 1) 95px, rgba(187, 187, 187, 1) 100px);
+ -webkit-animation: progressIndeterminate 950ms linear infinite;
+ animation: progressIndeterminate 950ms linear infinite;
+}
+
+.findbar, .secondaryToolbar {
+ top: 32px;
+ position: absolute;
+ z-index: 10000;
+ height: auto;
+ min-width: 16px;
+ padding: 0px 6px 0px 6px;
+ margin: 4px 2px 4px 2px;
+ color: rgba(217, 217, 217, 1);
+ font-size: 12px;
+ line-height: 14px;
+ text-align: left;
+ cursor: default;
+}
+
+.findbar {
+ min-width: 300px;
+}
+.findbar > div {
+ height: 32px;
+}
+.findbar.wrapContainers > div {
+ clear: both;
+}
+.findbar.wrapContainers > div#findbarMessageContainer {
+ height: auto;
+}
+html[dir='ltr'] .findbar {
+ left: 68px;
+}
+html[dir='rtl'] .findbar {
+ right: 68px;
+}
+
+.findbar label {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#findInput {
+ width: 200px;
+}
+#findInput::-webkit-input-placeholder {
+ color: rgba(191, 191, 191, 1);
+}
+#findInput::-moz-placeholder {
+ font-style: italic;
+}
+#findInput:-ms-input-placeholder {
+ font-style: italic;
+}
+#findInput::-ms-input-placeholder {
+ font-style: italic;
+}
+#findInput::placeholder {
+ font-style: italic;
+}
+#findInput[data-status="pending"] {
+ background-image: url(images/loading-small.png);
+ background-repeat: no-repeat;
+ background-position: right;
+}
+html[dir='rtl'] #findInput[data-status="pending"] {
+ background-position: left;
+}
+
+.secondaryToolbar {
+ padding: 6px;
+ height: auto;
+ z-index: 30000;
+}
+html[dir='ltr'] .secondaryToolbar {
+ right: 4px;
+}
+html[dir='rtl'] .secondaryToolbar {
+ left: 4px;
+}
+
+#secondaryToolbarButtonContainer {
+ max-width: 200px;
+ max-height: 400px;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ margin-bottom: -4px;
+}
+
+#secondaryToolbarButtonContainer.hiddenScrollModeButtons > .scrollModeButtons,
+#secondaryToolbarButtonContainer.hiddenSpreadModeButtons > .spreadModeButtons {
+ display: none !important;
+}
+
+.doorHanger,
+.doorHangerRight {
+ border: 1px solid rgba(0, 0, 0, 0.5);
+ border-radius: 2px;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
+}
+.doorHanger:after, .doorHanger:before,
+.doorHangerRight:after, .doorHangerRight:before {
+ bottom: 100%;
+ border: solid rgba(0, 0, 0, 0);
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+}
+.doorHanger:after,
+.doorHangerRight:after {
+ border-bottom-color: rgba(82, 82, 82, 0.99);
+ border-width: 8px;
+}
+.doorHanger:before,
+.doorHangerRight:before {
+ border-bottom-color: rgba(0, 0, 0, 0.5);
+ border-width: 9px;
+}
+
+html[dir='ltr'] .doorHanger:after,
+html[dir='rtl'] .doorHangerRight:after {
+ left: 13px;
+ margin-left: -8px;
+}
+
+html[dir='ltr'] .doorHanger:before,
+html[dir='rtl'] .doorHangerRight:before {
+ left: 13px;
+ margin-left: -9px;
+}
+
+html[dir='rtl'] .doorHanger:after,
+html[dir='ltr'] .doorHangerRight:after {
+ right: 13px;
+ margin-right: -8px;
+}
+
+html[dir='rtl'] .doorHanger:before,
+html[dir='ltr'] .doorHangerRight:before {
+ right: 13px;
+ margin-right: -9px;
+}
+
+#findResultsCount {
+ background-color: rgba(217, 217, 217, 1);
+ color: rgba(82, 82, 82, 1);
+ text-align: center;
+ padding: 3px 4px;
+}
+
+#findMsg {
+ font-style: italic;
+ color: rgba(166, 183, 208, 1);
+}
+#findMsg:empty {
+ display: none;
+}
+
+#findInput.notFound {
+ background-color: rgba(255, 102, 102, 1);
+}
+
+#toolbarViewerMiddle {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+html[dir='ltr'] #toolbarViewerLeft,
+html[dir='rtl'] #toolbarViewerRight {
+ float: left;
+}
+html[dir='ltr'] #toolbarViewerRight,
+html[dir='rtl'] #toolbarViewerLeft {
+ float: right;
+}
+html[dir='ltr'] #toolbarViewerLeft > *,
+html[dir='ltr'] #toolbarViewerMiddle > *,
+html[dir='ltr'] #toolbarViewerRight > *,
+html[dir='ltr'] .findbar * {
+ position: relative;
+ float: left;
+}
+html[dir='rtl'] #toolbarViewerLeft > *,
+html[dir='rtl'] #toolbarViewerMiddle > *,
+html[dir='rtl'] #toolbarViewerRight > *,
+html[dir='rtl'] .findbar * {
+ position: relative;
+ float: right;
+}
+
+html[dir='ltr'] .splitToolbarButton {
+ margin: 3px 2px 4px 0;
+ display: inline-block;
+}
+html[dir='rtl'] .splitToolbarButton {
+ margin: 3px 0 4px 2px;
+ display: inline-block;
+}
+html[dir='ltr'] .splitToolbarButton > .toolbarButton {
+ border-radius: 0;
+ float: left;
+}
+html[dir='rtl'] .splitToolbarButton > .toolbarButton {
+ border-radius: 0;
+ float: right;
+}
+
+.toolbarButton,
+.secondaryToolbarButton,
+.overlayButton {
+ border: 0 none;
+ background: none;
+ width: 32px;
+ height: 25px;
+}
+
+.toolbarButton > span {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+}
+
+.toolbarButton[disabled],
+.secondaryToolbarButton[disabled],
+.overlayButton[disabled] {
+ opacity: .5;
+}
+
+.splitToolbarButton.toggled .toolbarButton {
+ margin: 0;
+}
+
+.splitToolbarButton:hover > .toolbarButton,
+.splitToolbarButton:focus > .toolbarButton,
+.splitToolbarButton.toggled > .toolbarButton,
+.toolbarButton.textButton {
+ background-color: rgba(0, 0, 0, 0.12);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, 0.35);
+ border-color: rgba(0, 0, 0, 0.32) rgba(0, 0, 0, 0.38) rgba(0, 0, 0, 0.42);
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
+ 0 0 1px rgba(255, 255, 255, 0.15) inset,
+ 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+.splitToolbarButton > .toolbarButton:hover,
+.splitToolbarButton > .toolbarButton:focus,
+.dropdownToolbarButton:hover,
+.overlayButton:hover,
+.overlayButton:focus,
+.toolbarButton.textButton:hover,
+.toolbarButton.textButton:focus {
+ background-color: rgba(0,0,0,0.2);
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
+ 0 0 1px rgba(255, 255, 255, 0.15) inset,
+ 0 0 1px rgba(0, 0, 0, 0.05);
+ z-index: 199;
+}
+.dropdownToolbarButton:hover {
+ background-color: rgba(0, 0, 0, 0.26);
+}
+.splitToolbarButton > .toolbarButton {
+ position: relative;
+}
+html[dir='ltr'] .splitToolbarButton > .toolbarButton:first-child,
+html[dir='rtl'] .splitToolbarButton > .toolbarButton:last-child {
+ position: relative;
+ margin: 0;
+ margin-right: -1px;
+ border-top-left-radius: 2px;
+ border-bottom-left-radius: 2px;
+ border-right-color: rgba(0, 0, 0, 0);
+}
+html[dir='ltr'] .splitToolbarButton > .toolbarButton:last-child,
+html[dir='rtl'] .splitToolbarButton > .toolbarButton:first-child {
+ position: relative;
+ margin: 0;
+ margin-left: -1px;
+ border-top-right-radius: 2px;
+ border-bottom-right-radius: 2px;
+ border-left-color: rgba(0, 0, 0, 0);
+}
+.splitToolbarButtonSeparator {
+ padding: 8px 0;
+ width: 1px;
+ background-color: rgba(0, 0, 0, 0.5);
+ z-index: 99;
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
+ display: inline-block;
+ margin: 5px 0;
+}
+html[dir='ltr'] .splitToolbarButtonSeparator {
+ float: left;
+}
+html[dir='rtl'] .splitToolbarButtonSeparator {
+ float: right;
+}
+.splitToolbarButton:hover > .splitToolbarButtonSeparator,
+.splitToolbarButton.toggled > .splitToolbarButtonSeparator {
+ padding: 12px 0;
+ margin: 1px 0;
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.03);
+}
+
+.toolbarButton,
+.dropdownToolbarButton,
+.secondaryToolbarButton,
+.overlayButton {
+ min-width: 16px;
+ padding: 2px 6px 0;
+ border: 1px solid rgba(0, 0, 0, 0);
+ border-radius: 2px;
+ color: rgba(255, 255, 255, 0.8);
+ font-size: 12px;
+ line-height: 14px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ /* Opera does not support user-select, use <... unselectable="on"> instead */
+ cursor: default;
+}
+
+html[dir='ltr'] .toolbarButton,
+html[dir='ltr'] .overlayButton,
+html[dir='ltr'] .dropdownToolbarButton {
+ margin: 3px 2px 4px 0;
+}
+html[dir='rtl'] .toolbarButton,
+html[dir='rtl'] .overlayButton,
+html[dir='rtl'] .dropdownToolbarButton {
+ margin: 3px 0 4px 2px;
+}
+
+.toolbarButton:hover,
+.toolbarButton:focus,
+.dropdownToolbarButton,
+.overlayButton,
+.secondaryToolbarButton:hover,
+.secondaryToolbarButton:focus {
+ background-color: rgba(0, 0, 0, 0.12);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ background-clip: padding-box;
+ border: 1px solid rgba(0, 0, 0, 0.35);
+ border-color: rgba(0, 0, 0, 0.32) rgba(0, 0, 0, 0.38) rgba(0, 0, 0, 0.42);
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
+ 0 0 1px rgba(255, 255, 255, 0.15) inset,
+ 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.toolbarButton:hover:active,
+.overlayButton:hover:active,
+.dropdownToolbarButton:hover:active,
+.secondaryToolbarButton:hover:active {
+ background-color: rgba(0, 0, 0, 0.2);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ border-color: rgba(0, 0, 0, 0.35) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.45);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) inset,
+ 0 0 1px rgba(0, 0, 0, 0.2) inset,
+ 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.toolbarButton.toggled,
+.splitToolbarButton.toggled > .toolbarButton.toggled,
+.secondaryToolbarButton.toggled {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.45) rgba(0, 0, 0, 0.5);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) inset,
+ 0 0 1px rgba(0, 0, 0, 0.2) inset,
+ 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.toolbarButton.toggled:hover:active,
+.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active,
+.secondaryToolbarButton.toggled:hover:active {
+ background-color: rgba(0, 0, 0, 0.4);
+ border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.5) rgba(0, 0, 0, 0.55);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2) inset,
+ 0 0 1px rgba(0, 0, 0, 0.3) inset,
+ 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.dropdownToolbarButton {
+ width: 140px;
+ padding: 0;
+ overflow: hidden;
+}
+.dropdownToolbarButton::after {
+ position: absolute;
+ display: inline-block;
+ top: 4px;
+ content: url(images/toolbarButton-menuArrows.png);
+}
+html[dir='ltr'] .dropdownToolbarButton::after {
+ right: 8px;
+}
+html[dir='rtl'] .dropdownToolbarButton::after {
+ left: 8px;
+}
+
+.dropdownToolbarButton > select {
+ width: 162px;
+ height: 23px;
+ font-size: 12px;
+ color: rgba(242, 242, 242, 1);
+ margin: 0;
+ padding: 3px 2px 2px;
+ border: none;
+ background: rgba(0,0,0,0); /* Opera does not support 'transparent' background */
+}
+
+.dropdownToolbarButton > select > option {
+ background: rgba(61, 61, 61, 1);
+}
+
+#customScaleOption {
+ display: none;
+}
+
+#pageWidthOption {
+ border-bottom: 1px rgba(255, 255, 255, 0.5) solid;
+}
+
+html[dir='ltr'] .splitToolbarButton:first-child,
+html[dir='ltr'] .toolbarButton:first-child,
+html[dir='rtl'] .splitToolbarButton:last-child,
+html[dir='rtl'] .toolbarButton:last-child {
+ margin-left: 4px;
+}
+html[dir='ltr'] .splitToolbarButton:last-child,
+html[dir='ltr'] .toolbarButton:last-child,
+html[dir='rtl'] .splitToolbarButton:first-child,
+html[dir='rtl'] .toolbarButton:first-child {
+ margin-right: 4px;
+}
+
+.toolbarButtonSpacer {
+ width: 30px;
+ display: inline-block;
+ height: 1px;
+}
+
+html[dir='ltr'] #findPrevious {
+ margin-left: 3px;
+}
+html[dir='ltr'] #findNext {
+ margin-right: 3px;
+}
+
+html[dir='rtl'] #findPrevious {
+ margin-right: 3px;
+}
+html[dir='rtl'] #findNext {
+ margin-left: 3px;
+}
+
+.toolbarButton::before,
+.secondaryToolbarButton::before {
+ /* All matching images have a size of 16x16
+ * All relevant containers have a size of 32x25 */
+ position: absolute;
+ display: inline-block;
+ top: 4px;
+ left: 7px;
+}
+
+html[dir="ltr"] .secondaryToolbarButton::before {
+ left: 4px;
+}
+html[dir="rtl"] .secondaryToolbarButton::before {
+ right: 4px;
+}
+
+.toolbarButton#sidebarToggle::before {
+ content: url(images/toolbarButton-sidebarToggle.png);
+}
+html[dir='rtl'] .toolbarButton#sidebarToggle::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton#secondaryToolbarToggle::before {
+ content: url(images/toolbarButton-secondaryToolbarToggle.png);
+}
+html[dir='rtl'] .toolbarButton#secondaryToolbarToggle::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton.findPrevious::before {
+ content: url(images/findbarButton-previous.png);
+}
+html[dir='rtl'] .toolbarButton.findPrevious::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton.findNext::before {
+ content: url(images/findbarButton-next.png);
+}
+html[dir='rtl'] .toolbarButton.findNext::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton.pageUp::before {
+ content: url(images/toolbarButton-pageUp.png);
+}
+html[dir='rtl'] .toolbarButton.pageUp::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton.pageDown::before {
+ content: url(images/toolbarButton-pageDown.png);
+}
+html[dir='rtl'] .toolbarButton.pageDown::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton.zoomOut::before {
+ content: url(images/toolbarButton-zoomOut.png);
+}
+
+.toolbarButton.zoomIn::before {
+ content: url(images/toolbarButton-zoomIn.png);
+}
+
+.toolbarButton.presentationMode::before,
+.secondaryToolbarButton.presentationMode::before {
+ content: url(images/toolbarButton-presentationMode.png);
+}
+
+.toolbarButton.print::before,
+.secondaryToolbarButton.print::before {
+ content: url(images/toolbarButton-print.png);
+}
+
+.toolbarButton.openFile::before,
+.secondaryToolbarButton.openFile::before {
+ content: url(images/toolbarButton-openFile.png);
+}
+
+.toolbarButton.download::before,
+.secondaryToolbarButton.download::before {
+ content: url(images/toolbarButton-download.png);
+}
+
+.toolbarButton.bookmark,
+.secondaryToolbarButton.bookmark {
+ box-sizing: border-box;
+ outline: none;
+ padding-top: 4px;
+ text-decoration: none;
+}
+.secondaryToolbarButton.bookmark {
+ padding-top: 5px;
+}
+
+.bookmark[href='#'] {
+ opacity: .5;
+ pointer-events: none;
+}
+
+.toolbarButton.bookmark::before,
+.secondaryToolbarButton.bookmark::before {
+ content: url(images/toolbarButton-bookmark.png);
+}
+
+#viewThumbnail.toolbarButton::before {
+ content: url(images/toolbarButton-viewThumbnail.png);
+}
+
+#viewOutline.toolbarButton::before {
+ content: url(images/toolbarButton-viewOutline.png);
+}
+html[dir="rtl"] #viewOutline.toolbarButton::before {
+ transform: scaleX(-1);
+}
+
+#viewAttachments.toolbarButton::before {
+ content: url(images/toolbarButton-viewAttachments.png);
+}
+
+#viewFind.toolbarButton::before {
+ content: url(images/toolbarButton-search.png);
+}
+
+.toolbarButton.pdfSidebarNotification::after {
+ position: absolute;
+ display: inline-block;
+ top: 1px;
+ /* Create a filled circle, with a diameter of 9 pixels, using only CSS: */
+ content: '';
+ background-color: rgba(112, 219, 85, 1);
+ height: 9px;
+ width: 9px;
+ border-radius: 50%;
+}
+html[dir='ltr'] .toolbarButton.pdfSidebarNotification::after {
+ left: 17px;
+}
+html[dir='rtl'] .toolbarButton.pdfSidebarNotification::after {
+ right: 17px;
+}
+
+.secondaryToolbarButton {
+ position: relative;
+ margin: 0 0 4px 0;
+ padding: 3px 0 1px 0;
+ height: auto;
+ min-height: 25px;
+ width: auto;
+ min-width: 100%;
+ white-space: normal;
+}
+html[dir="ltr"] .secondaryToolbarButton {
+ padding-left: 24px;
+ text-align: left;
+}
+html[dir="rtl"] .secondaryToolbarButton {
+ padding-right: 24px;
+ text-align: right;
+}
+html[dir="ltr"] .secondaryToolbarButton.bookmark {
+ padding-left: 27px;
+}
+html[dir="rtl"] .secondaryToolbarButton.bookmark {
+ padding-right: 27px;
+}
+
+html[dir="ltr"] .secondaryToolbarButton > span {
+ padding-right: 4px;
+}
+html[dir="rtl"] .secondaryToolbarButton > span {
+ padding-left: 4px;
+}
+
+.secondaryToolbarButton.firstPage::before {
+ content: url(images/secondaryToolbarButton-firstPage.png);
+}
+
+.secondaryToolbarButton.lastPage::before {
+ content: url(images/secondaryToolbarButton-lastPage.png);
+}
+
+.secondaryToolbarButton.rotateCcw::before {
+ content: url(images/secondaryToolbarButton-rotateCcw.png);
+}
+
+.secondaryToolbarButton.rotateCw::before {
+ content: url(images/secondaryToolbarButton-rotateCw.png);
+}
+
+.secondaryToolbarButton.selectTool::before {
+ content: url(images/secondaryToolbarButton-selectTool.png);
+}
+
+.secondaryToolbarButton.handTool::before {
+ content: url(images/secondaryToolbarButton-handTool.png);
+}
+
+.secondaryToolbarButton.scrollVertical::before {
+ content: url(images/secondaryToolbarButton-scrollVertical.png);
+}
+
+.secondaryToolbarButton.scrollHorizontal::before {
+ content: url(images/secondaryToolbarButton-scrollHorizontal.png);
+}
+
+.secondaryToolbarButton.scrollWrapped::before {
+ content: url(images/secondaryToolbarButton-scrollWrapped.png);
+}
+
+.secondaryToolbarButton.spreadNone::before {
+ content: url(images/secondaryToolbarButton-spreadNone.png);
+}
+
+.secondaryToolbarButton.spreadOdd::before {
+ content: url(images/secondaryToolbarButton-spreadOdd.png);
+}
+
+.secondaryToolbarButton.spreadEven::before {
+ content: url(images/secondaryToolbarButton-spreadEven.png);
+}
+
+.secondaryToolbarButton.documentProperties::before {
+ content: url(images/secondaryToolbarButton-documentProperties.png);
+}
+
+.verticalToolbarSeparator {
+ display: block;
+ padding: 8px 0;
+ margin: 8px 4px;
+ width: 1px;
+ background-color: rgba(0, 0, 0, 0.5);
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
+}
+html[dir='ltr'] .verticalToolbarSeparator {
+ margin-left: 2px;
+}
+html[dir='rtl'] .verticalToolbarSeparator {
+ margin-right: 2px;
+}
+
+.horizontalToolbarSeparator {
+ display: block;
+ margin: 0 0 4px 0;
+ height: 1px;
+ width: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
+}
+
+.toolbarField {
+ padding: 3px 6px;
+ margin: 4px 0 4px 0;
+ border-radius: 2px;
+ background-color: rgba(255, 255, 255, 0.09);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ background-clip: padding-box;
+ border-width: 1px;
+ border-style: solid;
+ border-color: rgba(0, 0, 0, 0.32) rgba(0, 0, 0, 0.38) rgba(0, 0, 0, 0.42);
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05) inset,
+ 0 1px 0 rgba(255, 255, 255, 0.05);
+ color: rgba(242, 242, 242, 1);
+ font-size: 12px;
+ line-height: 14px;
+ outline-style: none;
+}
+
+.toolbarField[type=checkbox] {
+ display: inline-block;
+ margin: 8px 0px;
+}
+
+.toolbarField.pageNumber {
+ -moz-appearance: textfield; /* hides the spinner in moz */
+ min-width: 16px;
+ text-align: right;
+ width: 40px;
+}
+
+.toolbarField.pageNumber.visiblePageIsLoading {
+ background-image: url(images/loading-small.png);
+ background-repeat: no-repeat;
+ background-position: 1px;
+}
+
+.toolbarField.pageNumber::-webkit-inner-spin-button,
+.toolbarField.pageNumber::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+.toolbarField:hover {
+ background-color: rgba(255, 255, 255, 0.11);
+ border-color: rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.43) rgba(0, 0, 0, 0.45);
+}
+
+.toolbarField:focus {
+ background-color: rgba(255, 255, 255, 0.15);
+ border-color: rgba(77, 184, 255, 0.8) rgba(77, 184, 255, 0.85) rgba(77, 184, 255, 0.9);
+}
+
+.toolbarLabel {
+ min-width: 16px;
+ padding: 3px 6px 3px 2px;
+ margin: 4px 2px 4px 0;
+ border: 1px solid rgba(0, 0, 0, 0);
+ border-radius: 2px;
+ color: rgba(217, 217, 217, 1);
+ font-size: 12px;
+ line-height: 14px;
+ text-align: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: default;
+}
+
+#thumbnailView {
+ position: absolute;
+ width: calc(100% - 60px);
+ top: 0;
+ bottom: 0;
+ padding: 10px 30px 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+#thumbnailView > a:active,
+#thumbnailView > a:focus {
+ outline: 0;
+}
+
+.thumbnail {
+ margin: 0 10px 5px 10px;
+}
+html[dir='ltr'] .thumbnail {
+ float: left;
+}
+html[dir='rtl'] .thumbnail {
+ float: right;
+}
+
+#thumbnailView > a:last-of-type > .thumbnail {
+ margin-bottom: 10px;
+}
+
+#thumbnailView > a:last-of-type > .thumbnail:not([data-loaded]) {
+ margin-bottom: 9px;
+}
+
+.thumbnail:not([data-loaded]) {
+ border: 1px dashed rgba(255, 255, 255, 0.5);
+ margin: -1px 9px 4px 9px;
+}
+
+.thumbnailImage {
+ border: 1px solid rgba(0, 0, 0, 0);
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3);
+ opacity: 0.8;
+ z-index: 99;
+ background-color: rgba(255, 255, 255, 1);
+ background-clip: content-box;
+}
+
+.thumbnailSelectionRing {
+ border-radius: 2px;
+ padding: 7px;
+}
+
+a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,
+.thumbnail:hover > .thumbnailSelectionRing > .thumbnailImage {
+ opacity: .9;
+}
+
+a:focus > .thumbnail > .thumbnailSelectionRing,
+.thumbnail:hover > .thumbnailSelectionRing {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ background-clip: padding-box;
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
+ 0 0 1px rgba(255, 255, 255, 0.2) inset,
+ 0 0 1px rgba(0, 0, 0, 0.2);
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage {
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
+ opacity: 1;
+}
+
+.thumbnail.selected > .thumbnailSelectionRing {
+ background-color: rgba(255, 255, 255, 0.3);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ background-clip: padding-box;
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
+ 0 0 1px rgba(255, 255, 255, 0.1) inset,
+ 0 0 1px rgba(0, 0, 0, 0.2);
+ color: rgba(255, 255, 255,1);
+}
+
+#outlineView,
+#attachmentsView {
+ position: absolute;
+ width: calc(100% - 8px);
+ top: 0;
+ bottom: 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#outlineView {
+ padding: 4px 4px 0;
+}
+#attachmentsView {
+ padding: 3px 4px 0;
+}
+
+html[dir='ltr'] .outlineWithDeepNesting > .outlineItem,
+html[dir='ltr'] .outlineItem > .outlineItems {
+ margin-left: 20px;
+}
+
+html[dir='rtl'] .outlineWithDeepNesting > .outlineItem,
+html[dir='rtl'] .outlineItem > .outlineItems {
+ margin-right: 20px;
+}
+
+.outlineItem > a,
+.attachmentsItem > button {
+ text-decoration: none;
+ display: inline-block;
+ min-width: 95%;
+ min-width: calc(100% - 4px); /* Subtract the right padding (left, in RTL mode)
+ of the container. */
+ height: auto;
+ margin-bottom: 1px;
+ border-radius: 2px;
+ color: rgba(255, 255, 255, 0.8);
+ font-size: 13px;
+ line-height: 15px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: normal;
+}
+
+.attachmentsItem > button {
+ border: 0 none;
+ background: none;
+ cursor: pointer;
+ width: 100%;
+}
+
+html[dir='ltr'] .outlineItem > a {
+ padding: 2px 0 5px 4px;
+}
+html[dir='ltr'] .attachmentsItem > button {
+ padding: 2px 0 3px 7px;
+ text-align: left;
+}
+
+html[dir='rtl'] .outlineItem > a {
+ padding: 2px 4px 5px 0;
+}
+html[dir='rtl'] .attachmentsItem > button {
+ padding: 2px 7px 3px 0;
+ text-align: right;
+}
+
+.outlineItemToggler {
+ position: relative;
+ height: 0;
+ width: 0;
+ color: rgba(255, 255, 255, 0.5);
+}
+.outlineItemToggler::before {
+ content: url(images/treeitem-expanded.png);
+ display: inline-block;
+ position: absolute;
+}
+.outlineItemToggler.outlineItemsHidden::before {
+ content: url(images/treeitem-collapsed.png);
+}
+html[dir='rtl'] .outlineItemToggler.outlineItemsHidden::before {
+ transform: scaleX(-1);
+}
+.outlineItemToggler.outlineItemsHidden ~ .outlineItems {
+ display: none;
+}
+html[dir='ltr'] .outlineItemToggler {
+ float: left;
+}
+html[dir='rtl'] .outlineItemToggler {
+ float: right;
+}
+html[dir='ltr'] .outlineItemToggler::before {
+ right: 4px;
+}
+html[dir='rtl'] .outlineItemToggler::before {
+ left: 4px;
+}
+
+.outlineItemToggler:hover,
+.outlineItemToggler:hover + a,
+.outlineItemToggler:hover ~ .outlineItems,
+.outlineItem > a:hover,
+.attachmentsItem > button:hover {
+ background-color: rgba(255, 255, 255, 0.02);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ background-clip: padding-box;
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
+ 0 0 1px rgba(255, 255, 255, 0.2) inset,
+ 0 0 1px rgba(0, 0, 0, 0.2);
+ border-radius: 2px;
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.outlineItem.selected {
+ background-color: rgba(255, 255, 255, 0.08);
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
+ background-clip: padding-box;
+ box-shadow: 0 1px 0 rgba(255, 255, 255, 0.05) inset,
+ 0 0 1px rgba(255, 255, 255, 0.1) inset,
+ 0 0 1px rgba(0, 0, 0, 0.2);
+ color: rgba(255, 255, 255, 1);
+}
+
+.noResults {
+ font-size: 12px;
+ color: rgba(255, 255, 255, 0.8);
+ font-style: italic;
+ cursor: default;
+}
+
+/* TODO: file FF bug to support ::-moz-selection:window-inactive
+ so we can override the opaque grey background when the window is inactive;
+ see https://bugzilla.mozilla.org/show_bug.cgi?id=706209 */
+::-moz-selection {
+ background: rgba(0, 0, 255, 0.3);
+}
+::selection {
+ background: rgba(0, 0, 255, 0.3);
+}
+
+#errorWrapper {
+ background: none repeat scroll 0 0 rgba(255, 85, 85, 1);
+ color: rgba(255, 255, 255, 1);
+ left: 0;
+ position: absolute;
+ right: 0;
+ z-index: 1000;
+ padding: 3px;
+ font-size: 0.8em;
+}
+.loadingInProgress #errorWrapper {
+ top: 37px;
+}
+
+#errorMessageLeft {
+ float: left;
+}
+
+#errorMessageRight {
+ float: right;
+}
+
+#errorMoreInfo {
+ background-color: rgba(255, 255, 255, 1);
+ color: rgba(0, 0, 0, 1);
+ padding: 3px;
+ margin: 3px;
+ width: 98%;
+}
+
+.overlayButton {
+ width: auto;
+ margin: 3px 4px 2px 4px !important;
+ padding: 2px 6px 3px 6px;
+}
+
+#overlayContainer {
+ display: table;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.2);
+ z-index: 40000;
+}
+#overlayContainer > * {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+#overlayContainer > .container {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+}
+
+#overlayContainer > .container > .dialog {
+ display: inline-block;
+ padding: 15px;
+ border-spacing: 4px;
+ color: rgba(217, 217, 217, 1);
+ font-size: 12px;
+ line-height: 14px;
+ background-color: rgba(71, 71, 71, 1); /* fallback */
+ background-image: url(images/texture.png),
+ linear-gradient(rgba(82, 82, 82,0.99), rgba(69, 69, 69, 0.95));
+ border: 1px solid rgba(0, 0, 0, 0.5);
+ border-radius: 4px;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
+}
+
+.dialog > .row {
+ display: table-row;
+}
+
+.dialog > .row > * {
+ display: table-cell;
+}
+
+.dialog .toolbarField {
+ margin: 5px 0;
+}
+
+.dialog .separator {
+ display: block;
+ margin: 4px 0 4px 0;
+ height: 1px;
+ width: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08);
+}
+
+.dialog .buttonRow {
+ text-align: center;
+ vertical-align: middle;
+}
+
+.dialog :link {
+ color: rgba(255, 255, 255, 1);
+}
+
+#passwordOverlay > .dialog {
+ text-align: center;
+}
+#passwordOverlay .toolbarField {
+ width: 200px;
+}
+
+#documentPropertiesOverlay > .dialog {
+ text-align: left;
+}
+#documentPropertiesOverlay .row > * {
+ min-width: 100px;
+}
+html[dir='ltr'] #documentPropertiesOverlay .row > * {
+ text-align: left;
+}
+html[dir='rtl'] #documentPropertiesOverlay .row > * {
+ text-align: right;
+}
+#documentPropertiesOverlay .row > span {
+ width: 125px;
+ word-wrap: break-word;
+}
+#documentPropertiesOverlay .row > p {
+ max-width: 225px;
+ word-wrap: break-word;
+}
+#documentPropertiesOverlay .buttonRow {
+ margin-top: 10px;
+}
+
+.clearBoth {
+ clear: both;
+}
+
+.fileInput {
+ background: rgba(255, 255, 255, 1);
+ color: rgba(0, 0, 0, 1);
+ margin-top: 5px;
+ visibility: hidden;
+ position: fixed;
+ right: 0;
+ top: 0;
+}
+
+#PDFBug {
+ background: none repeat scroll 0 0 rgba(255, 255, 255, 1);
+ border: 1px solid rgba(102, 102, 102, 1);
+ position: fixed;
+ top: 32px;
+ right: 0;
+ bottom: 0;
+ font-size: 10px;
+ padding: 0;
+ width: 300px;
+}
+#PDFBug .controls {
+ background: rgba(238, 238, 238, 1);
+ border-bottom: 1px solid rgba(102, 102, 102, 1);
+ padding: 3px;
+}
+#PDFBug .panels {
+ bottom: 0;
+ left: 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: absolute;
+ right: 0;
+ top: 27px;
+}
+#PDFBug .panels > div {
+ padding: 5px;
+}
+#PDFBug button.active {
+ font-weight: bold;
+}
+.debuggerShowText {
+ background: none repeat scroll 0 0 rgba(255, 255, 0, 1);
+ color: rgba(0, 0, 255, 1);
+}
+.debuggerHideText:hover {
+ background: none repeat scroll 0 0 rgba(255, 255, 0, 1);
+}
+#PDFBug .stats {
+ font-family: courier;
+ font-size: 10px;
+ white-space: pre;
+}
+#PDFBug .stats .title {
+ font-weight: bold;
+}
+#PDFBug table {
+ font-size: 10px;
+}
+
+#viewer.textLayer-visible .textLayer {
+ opacity: 1.0;
+}
+
+#viewer.textLayer-visible .canvasWrapper {
+ background-color: rgba(128, 255, 128, 1);
+}
+
+#viewer.textLayer-visible .canvasWrapper canvas {
+ mix-blend-mode: screen;
+}
+
+#viewer.textLayer-visible .textLayer > span {
+ background-color: rgba(255, 255, 0, 0.1);
+ color: rgba(0, 0, 0, 1);
+ border: solid 1px rgba(255, 0, 0, 0.5);
+ box-sizing: border-box;
+}
+
+#viewer.textLayer-hover .textLayer > span:hover {
+ background-color: rgba(255, 255, 255, 1);
+ color: rgba(0, 0, 0, 1);
+}
+
+#viewer.textLayer-shadow .textLayer > span {
+ background-color: rgba(255, 255, 255, 0.6);
+ color: rgba(0, 0, 0, 1);
+}
+
+.grab-to-pan-grab {
+ cursor: url("images/grab.cur"), move !important;
+ cursor: -webkit-grab !important;
+ cursor: grab !important;
+}
+.grab-to-pan-grab *:not(input):not(textarea):not(button):not(select):not(:link) {
+ cursor: inherit !important;
+}
+.grab-to-pan-grab:active,
+.grab-to-pan-grabbing {
+ cursor: url("images/grabbing.cur"), move !important;
+ cursor: -webkit-grabbing !important;
+ cursor: grabbing !important;
+ position: fixed;
+ background: rgba(0, 0, 0, 0);
+ display: block;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+ z-index: 50000; /* should be higher than anything else in PDF.js! */
+}
+
+@page {
+ margin: 0;
+}
+
+#printContainer {
+ display: none;
+}
+
+@media screen and (-webkit-min-device-pixel-ratio: 1.1), screen and (min-resolution: 1.1dppx) {
+ /* Rules for Retina screens */
+ .toolbarButton::before {
+ transform: scale(0.5);
+ top: -5px;
+ }
+
+ .secondaryToolbarButton::before {
+ transform: scale(0.5);
+ top: -4px;
+ }
+
+ html[dir='ltr'] .toolbarButton::before,
+ html[dir='rtl'] .toolbarButton::before {
+ left: -1px;
+ }
+
+ html[dir='ltr'] .secondaryToolbarButton::before {
+ left: -2px;
+ }
+ html[dir='rtl'] .secondaryToolbarButton::before {
+ left: 186px;
+ }
+
+ .toolbarField.pageNumber.visiblePageIsLoading,
+ #findInput[data-status="pending"] {
+ background-image: url(images/loading-small@2x.png);
+ background-size: 16px 17px;
+ }
+
+ .dropdownToolbarButton::after {
+ transform: scale(0.5);
+ top: -5px;
+ content: url(images/toolbarButton-menuArrows@2x.png);
+ }
+ html[dir='ltr'] .dropdownToolbarButton::after {
+ right: 4px;
+ }
+ html[dir='rtl'] .dropdownToolbarButton::after {
+ left: 4px;
+ }
+
+ .toolbarButton#sidebarToggle::before {
+ content: url(images/toolbarButton-sidebarToggle@2x.png);
+ }
+ html[dir='rtl'] .toolbarButton#sidebarToggle::before {
+ transform: scale(-0.5, 0.5);
+ }
+
+ .toolbarButton#secondaryToolbarToggle::before {
+ content: url(images/toolbarButton-secondaryToolbarToggle@2x.png);
+ }
+ html[dir='rtl'] .toolbarButton#secondaryToolbarToggle::before {
+ transform: scale(-0.5, 0.5);
+ }
+
+ .toolbarButton.findPrevious::before {
+ content: url(images/findbarButton-previous@2x.png);
+ }
+ html[dir='rtl'] .toolbarButton.findPrevious::before {
+ transform: scale(-0.5, 0.5);
+ }
+
+ .toolbarButton.findNext::before {
+ content: url(images/findbarButton-next@2x.png);
+ }
+ html[dir='rtl'] .toolbarButton.findNext::before {
+ transform: scale(-0.5, 0.5);
+ }
+
+ .toolbarButton.pageUp::before {
+ content: url(images/toolbarButton-pageUp@2x.png);
+ }
+ html[dir='rtl'] .toolbarButton.pageUp::before {
+ transform: scale(-0.5, 0.5);
+ }
+
+ .toolbarButton.pageDown::before {
+ content: url(images/toolbarButton-pageDown@2x.png);
+ }
+ html[dir='rtl'] .toolbarButton.pageDown::before {
+ transform: scale(-0.5, 0.5);
+ }
+
+ .toolbarButton.zoomIn::before {
+ content: url(images/toolbarButton-zoomIn@2x.png);
+ }
+
+ .toolbarButton.zoomOut::before {
+ content: url(images/toolbarButton-zoomOut@2x.png);
+ }
+
+ .toolbarButton.presentationMode::before,
+ .secondaryToolbarButton.presentationMode::before {
+ content: url(images/toolbarButton-presentationMode@2x.png);
+ }
+
+ .toolbarButton.print::before,
+ .secondaryToolbarButton.print::before {
+ content: url(images/toolbarButton-print@2x.png);
+ }
+
+ .toolbarButton.openFile::before,
+ .secondaryToolbarButton.openFile::before {
+ content: url(images/toolbarButton-openFile@2x.png);
+ }
+
+ .toolbarButton.download::before,
+ .secondaryToolbarButton.download::before {
+ content: url(images/toolbarButton-download@2x.png);
+ }
+
+ .toolbarButton.bookmark::before,
+ .secondaryToolbarButton.bookmark::before {
+ content: url(images/toolbarButton-bookmark@2x.png);
+ }
+
+ #viewThumbnail.toolbarButton::before {
+ content: url(images/toolbarButton-viewThumbnail@2x.png);
+ }
+
+ #viewOutline.toolbarButton::before {
+ content: url(images/toolbarButton-viewOutline@2x.png);
+ }
+ html[dir="rtl"] #viewOutline.toolbarButton::before {
+ transform: scale(-0.5, 0.5);
+ }
+
+ #viewAttachments.toolbarButton::before {
+ content: url(images/toolbarButton-viewAttachments@2x.png);
+ }
+
+ #viewFind.toolbarButton::before {
+ content: url(images/toolbarButton-search@2x.png);
+ }
+
+ .secondaryToolbarButton.firstPage::before {
+ content: url(images/secondaryToolbarButton-firstPage@2x.png);
+ }
+
+ .secondaryToolbarButton.lastPage::before {
+ content: url(images/secondaryToolbarButton-lastPage@2x.png);
+ }
+
+ .secondaryToolbarButton.rotateCcw::before {
+ content: url(images/secondaryToolbarButton-rotateCcw@2x.png);
+ }
+
+ .secondaryToolbarButton.rotateCw::before {
+ content: url(images/secondaryToolbarButton-rotateCw@2x.png);
+ }
+
+ .secondaryToolbarButton.selectTool::before {
+ content: url(images/secondaryToolbarButton-selectTool@2x.png);
+ }
+
+ .secondaryToolbarButton.handTool::before {
+ content: url(images/secondaryToolbarButton-handTool@2x.png);
+ }
+
+ .secondaryToolbarButton.scrollVertical::before {
+ content: url(images/secondaryToolbarButton-scrollVertical@2x.png);
+ }
+
+ .secondaryToolbarButton.scrollHorizontal::before {
+ content: url(images/secondaryToolbarButton-scrollHorizontal@2x.png);
+ }
+
+ .secondaryToolbarButton.scrollWrapped::before {
+ content: url(images/secondaryToolbarButton-scrollWrapped@2x.png);
+ }
+
+ .secondaryToolbarButton.spreadNone::before {
+ content: url(images/secondaryToolbarButton-spreadNone@2x.png);
+ }
+
+ .secondaryToolbarButton.spreadOdd::before {
+ content: url(images/secondaryToolbarButton-spreadOdd@2x.png);
+ }
+
+ .secondaryToolbarButton.spreadEven::before {
+ content: url(images/secondaryToolbarButton-spreadEven@2x.png);
+ }
+
+ .secondaryToolbarButton.documentProperties::before {
+ content: url(images/secondaryToolbarButton-documentProperties@2x.png);
+ }
+
+ .outlineItemToggler::before {
+ transform: scale(0.5);
+ top: -1px;
+ content: url(images/treeitem-expanded@2x.png);
+ }
+ .outlineItemToggler.outlineItemsHidden::before {
+ content: url(images/treeitem-collapsed@2x.png);
+ }
+ html[dir='rtl'] .outlineItemToggler.outlineItemsHidden::before {
+ transform: scale(-0.5, 0.5);
+ }
+ html[dir='ltr'] .outlineItemToggler::before {
+ right: 0;
+ }
+ html[dir='rtl'] .outlineItemToggler::before {
+ left: 0;
+ }
+}
+
+@media print {
+ /* General rules for printing. */
+ body {
+ background: rgba(0, 0, 0, 0) none;
+ }
+
+ /* Rules for browsers that don't support mozPrintCallback. */
+ #sidebarContainer, #secondaryToolbar, .toolbar, #loadingBox, #errorWrapper, .textLayer {
+ display: none;
+ }
+ #viewerContainer {
+ overflow: visible;
+ }
+
+ #mainContainer, #viewerContainer, .page, .page canvas {
+ position: static;
+ padding: 0;
+ margin: 0;
+ }
+
+ .page {
+ float: left;
+ display: none;
+ border: none;
+ box-shadow: none;
+ background-clip: content-box;
+ background-color: rgba(255, 255, 255, 1);
+ }
+
+ .page[data-loaded] {
+ display: block;
+ }
+
+ .fileInput {
+ display: none;
+ }
+
+ /* Rules for browsers that support PDF.js printing */
+ body[data-pdfjsprinting] #outerContainer {
+ display: none;
+ }
+ body[data-pdfjsprinting] #printContainer {
+ display: block;
+ }
+ #printContainer {
+ height: 100%;
+ }
+ /* wrapper around (scaled) print canvas elements */
+ #printContainer > div {
+ position: relative;
+ top: 0;
+ left: 0;
+ width: 1px;
+ height: 1px;
+ overflow: visible;
+ page-break-after: always;
+ page-break-inside: avoid;
+ }
+ #printContainer canvas,
+ #printContainer img {
+ display: block;
+ }
+}
+
+.visibleLargeView,
+.visibleMediumView,
+.visibleSmallView {
+ display: none;
+}
+
+@media all and (max-width: 900px) {
+ #toolbarViewerMiddle {
+ display: table;
+ margin: auto;
+ left: auto;
+ position: inherit;
+ transform: none;
+ }
+}
+
+@media all and (max-width: 840px) {
+ #sidebarContent {
+ background-color: rgba(0, 0, 0, 0.7);
+ }
+
+ html[dir='ltr'] #outerContainer.sidebarOpen #viewerContainer {
+ left: 0px !important;
+ }
+ html[dir='rtl'] #outerContainer.sidebarOpen #viewerContainer {
+ right: 0px !important;
+ }
+
+ #outerContainer .hiddenLargeView,
+ #outerContainer .hiddenMediumView {
+ display: inherit;
+ }
+ #outerContainer .visibleLargeView,
+ #outerContainer .visibleMediumView {
+ display: none;
+ }
+}
+
+@media all and (max-width: 770px) {
+ #outerContainer .hiddenLargeView {
+ display: none;
+ }
+ #outerContainer .visibleLargeView {
+ display: inherit;
+ }
+}
+
+@media all and (max-width: 700px) {
+ #outerContainer .hiddenMediumView {
+ display: none;
+ }
+ #outerContainer .visibleMediumView {
+ display: inherit;
+ }
+}
+
+@media all and (max-width: 640px) {
+ .hiddenSmallView, .hiddenSmallView * {
+ display: none;
+ }
+ .visibleSmallView {
+ display: inherit;
+ }
+ .toolbarButtonSpacer {
+ width: 0;
+ }
+ html[dir='ltr'] .findbar {
+ left: 38px;
+ }
+ html[dir='rtl'] .findbar {
+ right: 38px;
+ }
+}
+
+@media all and (max-width: 535px) {
+ #scaleSelectContainer {
+ display: none;
+ }
+}
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.html b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.html
index 1730b09b752fa1447d001f0134f234ce28eece44..78420f8a231ae7d561b91e27c42983ce696e2403 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.html
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.html
@@ -1,394 +1,394 @@
-
-
-
-
-
-
-
-
- PDF.js viewer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- More Information
-
-
- Less Information
-
-
-
-
- Close
-
-
-
-
-
-
-
-
-
-
-
-
Enter the password to open this PDF file:
-
-
-
-
-
- Cancel
- OK
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Close
-
-
-
-
-
-
- Preparing document for printing…
-
-
-
- Cancel
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+ PDF.js viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ More Information
+
+
+ Less Information
+
+
+
+
+ Close
+
+
+
+
+
+
+
+
+
+
+
+
Enter the password to open this PDF file:
+
+
+
+
+
+ Cancel
+ OK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Close
+
+
+
+
+
+
+ Preparing document for printing…
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
diff --git a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.js b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.js
index 3cf8beed83ec79cf09cf6b970ad6f9bce98a700c..28c3e5ff78e61561cf74343680998ceb63e3e7a9 100644
--- a/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.js
+++ b/themes/hugo-theme-pdf-js/static/js/pdf-js/web/viewer.js
@@ -1,13279 +1,13279 @@
-/**
- * @licstart The following is the entire license notice for the
- * Javascript code in this page
- *
- * Copyright 2020 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
- */
-
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-;
-let pdfjsWebApp, pdfjsWebAppOptions;
-{
- pdfjsWebApp = __webpack_require__(1);
- pdfjsWebAppOptions = __webpack_require__(3);
-}
-;
-{
- __webpack_require__(33);
-}
-;
-{
- __webpack_require__(38);
-}
-
-function getViewerConfiguration() {
- return {
- appContainer: document.body,
- mainContainer: document.getElementById("viewerContainer"),
- viewerContainer: document.getElementById("viewer"),
- eventBus: null,
- toolbar: {
- container: document.getElementById("toolbarViewer"),
- numPages: document.getElementById("numPages"),
- pageNumber: document.getElementById("pageNumber"),
- scaleSelectContainer: document.getElementById("scaleSelectContainer"),
- scaleSelect: document.getElementById("scaleSelect"),
- customScaleOption: document.getElementById("customScaleOption"),
- previous: document.getElementById("previous"),
- next: document.getElementById("next"),
- zoomIn: document.getElementById("zoomIn"),
- zoomOut: document.getElementById("zoomOut"),
- viewFind: document.getElementById("viewFind"),
- openFile: document.getElementById("openFile"),
- print: document.getElementById("print"),
- presentationModeButton: document.getElementById("presentationMode"),
- download: document.getElementById("download"),
- viewBookmark: document.getElementById("viewBookmark")
- },
- secondaryToolbar: {
- toolbar: document.getElementById("secondaryToolbar"),
- toggleButton: document.getElementById("secondaryToolbarToggle"),
- toolbarButtonContainer: document.getElementById("secondaryToolbarButtonContainer"),
- presentationModeButton: document.getElementById("secondaryPresentationMode"),
- openFileButton: document.getElementById("secondaryOpenFile"),
- printButton: document.getElementById("secondaryPrint"),
- downloadButton: document.getElementById("secondaryDownload"),
- viewBookmarkButton: document.getElementById("secondaryViewBookmark"),
- firstPageButton: document.getElementById("firstPage"),
- lastPageButton: document.getElementById("lastPage"),
- pageRotateCwButton: document.getElementById("pageRotateCw"),
- pageRotateCcwButton: document.getElementById("pageRotateCcw"),
- cursorSelectToolButton: document.getElementById("cursorSelectTool"),
- cursorHandToolButton: document.getElementById("cursorHandTool"),
- scrollVerticalButton: document.getElementById("scrollVertical"),
- scrollHorizontalButton: document.getElementById("scrollHorizontal"),
- scrollWrappedButton: document.getElementById("scrollWrapped"),
- spreadNoneButton: document.getElementById("spreadNone"),
- spreadOddButton: document.getElementById("spreadOdd"),
- spreadEvenButton: document.getElementById("spreadEven"),
- documentPropertiesButton: document.getElementById("documentProperties")
- },
- fullscreen: {
- contextFirstPage: document.getElementById("contextFirstPage"),
- contextLastPage: document.getElementById("contextLastPage"),
- contextPageRotateCw: document.getElementById("contextPageRotateCw"),
- contextPageRotateCcw: document.getElementById("contextPageRotateCcw")
- },
- sidebar: {
- outerContainer: document.getElementById("outerContainer"),
- viewerContainer: document.getElementById("viewerContainer"),
- toggleButton: document.getElementById("sidebarToggle"),
- thumbnailButton: document.getElementById("viewThumbnail"),
- outlineButton: document.getElementById("viewOutline"),
- attachmentsButton: document.getElementById("viewAttachments"),
- thumbnailView: document.getElementById("thumbnailView"),
- outlineView: document.getElementById("outlineView"),
- attachmentsView: document.getElementById("attachmentsView")
- },
- sidebarResizer: {
- outerContainer: document.getElementById("outerContainer"),
- resizer: document.getElementById("sidebarResizer")
- },
- findBar: {
- bar: document.getElementById("findbar"),
- toggleButton: document.getElementById("viewFind"),
- findField: document.getElementById("findInput"),
- highlightAllCheckbox: document.getElementById("findHighlightAll"),
- caseSensitiveCheckbox: document.getElementById("findMatchCase"),
- entireWordCheckbox: document.getElementById("findEntireWord"),
- findMsg: document.getElementById("findMsg"),
- findResultsCount: document.getElementById("findResultsCount"),
- findPreviousButton: document.getElementById("findPrevious"),
- findNextButton: document.getElementById("findNext")
- },
- passwordOverlay: {
- overlayName: "passwordOverlay",
- container: document.getElementById("passwordOverlay"),
- label: document.getElementById("passwordText"),
- input: document.getElementById("password"),
- submitButton: document.getElementById("passwordSubmit"),
- cancelButton: document.getElementById("passwordCancel")
- },
- documentProperties: {
- overlayName: "documentPropertiesOverlay",
- container: document.getElementById("documentPropertiesOverlay"),
- closeButton: document.getElementById("documentPropertiesClose"),
- fields: {
- fileName: document.getElementById("fileNameField"),
- fileSize: document.getElementById("fileSizeField"),
- title: document.getElementById("titleField"),
- author: document.getElementById("authorField"),
- subject: document.getElementById("subjectField"),
- keywords: document.getElementById("keywordsField"),
- creationDate: document.getElementById("creationDateField"),
- modificationDate: document.getElementById("modificationDateField"),
- creator: document.getElementById("creatorField"),
- producer: document.getElementById("producerField"),
- version: document.getElementById("versionField"),
- pageCount: document.getElementById("pageCountField"),
- pageSize: document.getElementById("pageSizeField"),
- linearized: document.getElementById("linearizedField")
- }
- },
- errorWrapper: {
- container: document.getElementById("errorWrapper"),
- errorMessage: document.getElementById("errorMessage"),
- closeButton: document.getElementById("errorClose"),
- errorMoreInfo: document.getElementById("errorMoreInfo"),
- moreInfoButton: document.getElementById("errorShowMore"),
- lessInfoButton: document.getElementById("errorShowLess")
- },
- printContainer: document.getElementById("printContainer"),
- openFileInputName: "fileInput",
- debuggerScriptPath: "./debugger.js"
- };
-}
-
-function webViewerLoad() {
- const config = getViewerConfiguration();
- window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication;
- window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions;
- const event = document.createEvent("CustomEvent");
- event.initCustomEvent("webviewerloaded", true, true, {
- source: window
- });
-
- try {
- parent.document.dispatchEvent(event);
- } catch (ex) {
- console.error(`webviewerloaded: ${ex}`);
- document.dispatchEvent(event);
- }
-
- pdfjsWebApp.PDFViewerApplication.run(config);
-}
-
-if (document.readyState === "interactive" || document.readyState === "complete") {
- webViewerLoad();
-} else {
- document.addEventListener("DOMContentLoaded", webViewerLoad, true);
-}
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFPrintServiceFactory = exports.DefaultExternalServices = exports.PDFViewerApplication = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-var _app_options = __webpack_require__(3);
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _pdf_cursor_tools = __webpack_require__(6);
-
-var _pdf_rendering_queue = __webpack_require__(8);
-
-var _pdf_sidebar = __webpack_require__(9);
-
-var _overlay_manager = __webpack_require__(10);
-
-var _password_prompt = __webpack_require__(11);
-
-var _pdf_attachment_viewer = __webpack_require__(12);
-
-var _pdf_document_properties = __webpack_require__(13);
-
-var _pdf_find_bar = __webpack_require__(14);
-
-var _pdf_find_controller = __webpack_require__(15);
-
-var _pdf_history = __webpack_require__(17);
-
-var _pdf_link_service = __webpack_require__(18);
-
-var _pdf_outline_viewer = __webpack_require__(19);
-
-var _pdf_presentation_mode = __webpack_require__(20);
-
-var _pdf_sidebar_resizer = __webpack_require__(21);
-
-var _pdf_thumbnail_viewer = __webpack_require__(22);
-
-var _pdf_viewer = __webpack_require__(24);
-
-var _secondary_toolbar = __webpack_require__(29);
-
-var _toolbar = __webpack_require__(31);
-
-var _view_history = __webpack_require__(32);
-
-const DEFAULT_SCALE_DELTA = 1.1;
-const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
-const FORCE_PAGES_LOADED_TIMEOUT = 10000;
-const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;
-const ENABLE_PERMISSIONS_CLASS = "enablePermissions";
-const ViewOnLoad = {
- UNKNOWN: -1,
- PREVIOUS: 0,
- INITIAL: 1
-};
-
-class DefaultExternalServices {
- constructor() {
- throw new Error("Cannot initialize DefaultExternalServices.");
- }
-
- static updateFindControlState(data) {}
-
- static updateFindMatchesCount(data) {}
-
- static initPassiveLoading(callbacks) {}
-
- static fallback(data, callback) {}
-
- static reportTelemetry(data) {}
-
- static createDownloadManager(options) {
- throw new Error("Not implemented: createDownloadManager");
- }
-
- static createPreferences() {
- throw new Error("Not implemented: createPreferences");
- }
-
- static createL10n(options) {
- throw new Error("Not implemented: createL10n");
- }
-
- static get supportsIntegratedFind() {
- return (0, _pdfjsLib.shadow)(this, "supportsIntegratedFind", false);
- }
-
- static get supportsDocumentFonts() {
- return (0, _pdfjsLib.shadow)(this, "supportsDocumentFonts", true);
- }
-
- static get supportedMouseWheelZoomModifierKeys() {
- return (0, _pdfjsLib.shadow)(this, "supportedMouseWheelZoomModifierKeys", {
- ctrlKey: true,
- metaKey: true
- });
- }
-
- static get isInAutomation() {
- return (0, _pdfjsLib.shadow)(this, "isInAutomation", false);
- }
-
-}
-
-exports.DefaultExternalServices = DefaultExternalServices;
-const PDFViewerApplication = {
- initialBookmark: document.location.hash.substring(1),
- _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(),
- fellback: false,
- appConfig: null,
- pdfDocument: null,
- pdfLoadingTask: null,
- printService: null,
- pdfViewer: null,
- pdfThumbnailViewer: null,
- pdfRenderingQueue: null,
- pdfPresentationMode: null,
- pdfDocumentProperties: null,
- pdfLinkService: null,
- pdfHistory: null,
- pdfSidebar: null,
- pdfSidebarResizer: null,
- pdfOutlineViewer: null,
- pdfAttachmentViewer: null,
- pdfCursorTools: null,
- store: null,
- downloadManager: null,
- overlayManager: null,
- preferences: null,
- toolbar: null,
- secondaryToolbar: null,
- eventBus: null,
- l10n: null,
- isInitialViewSet: false,
- downloadComplete: false,
- isViewerEmbedded: window.parent !== window,
- url: "",
- baseUrl: "",
- externalServices: DefaultExternalServices,
- _boundEvents: {},
- contentDispositionFilename: null,
-
- async initialize(appConfig) {
- this.preferences = this.externalServices.createPreferences();
- this.appConfig = appConfig;
- await this._readPreferences();
- await this._parseHashParameters();
- await this._initializeL10n();
-
- if (this.isViewerEmbedded && _app_options.AppOptions.get("externalLinkTarget") === _pdfjsLib.LinkTarget.NONE) {
- _app_options.AppOptions.set("externalLinkTarget", _pdfjsLib.LinkTarget.TOP);
- }
-
- await this._initializeViewerComponents();
- this.bindEvents();
- this.bindWindowEvents();
- const appContainer = appConfig.appContainer || document.documentElement;
- this.l10n.translate(appContainer).then(() => {
- this.eventBus.dispatch("localized", {
- source: this
- });
- });
-
- this._initializedCapability.resolve();
- },
-
- async _readPreferences() {
- if (_app_options.AppOptions.get("disablePreferences")) {
- return;
- }
-
- try {
- const prefs = await this.preferences.getAll();
-
- for (const name in prefs) {
- _app_options.AppOptions.set(name, prefs[name]);
- }
- } catch (reason) {
- console.error(`_readPreferences: "${reason.message}".`);
- }
- },
-
- async _parseHashParameters() {
- if (!_app_options.AppOptions.get("pdfBugEnabled")) {
- return undefined;
- }
-
- const hash = document.location.hash.substring(1);
-
- if (!hash) {
- return undefined;
- }
-
- const hashParams = (0, _ui_utils.parseQueryString)(hash),
- waitOn = [];
-
- if ("disableworker" in hashParams && hashParams.disableworker === "true") {
- waitOn.push(loadFakeWorker());
- }
-
- if ("disablerange" in hashParams) {
- _app_options.AppOptions.set("disableRange", hashParams.disablerange === "true");
- }
-
- if ("disablestream" in hashParams) {
- _app_options.AppOptions.set("disableStream", hashParams.disablestream === "true");
- }
-
- if ("disableautofetch" in hashParams) {
- _app_options.AppOptions.set("disableAutoFetch", hashParams.disableautofetch === "true");
- }
-
- if ("disablefontface" in hashParams) {
- _app_options.AppOptions.set("disableFontFace", hashParams.disablefontface === "true");
- }
-
- if ("disablehistory" in hashParams) {
- _app_options.AppOptions.set("disableHistory", hashParams.disablehistory === "true");
- }
-
- if ("webgl" in hashParams) {
- _app_options.AppOptions.set("enableWebGL", hashParams.webgl === "true");
- }
-
- if ("verbosity" in hashParams) {
- _app_options.AppOptions.set("verbosity", hashParams.verbosity | 0);
- }
-
- if ("textlayer" in hashParams) {
- switch (hashParams.textlayer) {
- case "off":
- _app_options.AppOptions.set("textLayerMode", _ui_utils.TextLayerMode.DISABLE);
-
- break;
-
- case "visible":
- case "shadow":
- case "hover":
- const viewer = this.appConfig.viewerContainer;
- viewer.classList.add("textLayer-" + hashParams.textlayer);
- break;
- }
- }
-
- if ("pdfbug" in hashParams) {
- _app_options.AppOptions.set("pdfBug", true);
-
- _app_options.AppOptions.set("fontExtraProperties", true);
-
- const enabled = hashParams.pdfbug.split(",");
- waitOn.push(loadAndEnablePDFBug(enabled));
- }
-
- if ("locale" in hashParams) {
- _app_options.AppOptions.set("locale", hashParams.locale);
- }
-
- return Promise.all(waitOn).catch(reason => {
- console.error(`_parseHashParameters: "${reason.message}".`);
- });
- },
-
- async _initializeL10n() {
- this.l10n = this.externalServices.createL10n({
- locale: _app_options.AppOptions.get("locale")
- });
- const dir = await this.l10n.getDirection();
- document.getElementsByTagName("html")[0].dir = dir;
- },
-
- async _initializeViewerComponents() {
- const appConfig = this.appConfig;
- const eventBus = appConfig.eventBus || new _ui_utils.EventBus({
- isInAutomation: this.externalServices.isInAutomation
- });
- this.eventBus = eventBus;
- this.overlayManager = new _overlay_manager.OverlayManager();
- const pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
- pdfRenderingQueue.onIdle = this.cleanup.bind(this);
- this.pdfRenderingQueue = pdfRenderingQueue;
- const pdfLinkService = new _pdf_link_service.PDFLinkService({
- eventBus,
- externalLinkTarget: _app_options.AppOptions.get("externalLinkTarget"),
- externalLinkRel: _app_options.AppOptions.get("externalLinkRel"),
- ignoreDestinationZoom: _app_options.AppOptions.get("ignoreDestinationZoom")
- });
- this.pdfLinkService = pdfLinkService;
- const downloadManager = this.externalServices.createDownloadManager({
- disableCreateObjectURL: _app_options.AppOptions.get("disableCreateObjectURL")
- });
- this.downloadManager = downloadManager;
- const findController = new _pdf_find_controller.PDFFindController({
- linkService: pdfLinkService,
- eventBus
- });
- this.findController = findController;
- const container = appConfig.mainContainer;
- const viewer = appConfig.viewerContainer;
- this.pdfViewer = new _pdf_viewer.PDFViewer({
- container,
- viewer,
- eventBus,
- renderingQueue: pdfRenderingQueue,
- linkService: pdfLinkService,
- downloadManager,
- findController,
- renderer: _app_options.AppOptions.get("renderer"),
- enableWebGL: _app_options.AppOptions.get("enableWebGL"),
- l10n: this.l10n,
- textLayerMode: _app_options.AppOptions.get("textLayerMode"),
- imageResourcesPath: _app_options.AppOptions.get("imageResourcesPath"),
- renderInteractiveForms: _app_options.AppOptions.get("renderInteractiveForms"),
- enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"),
- useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"),
- maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels")
- });
- pdfRenderingQueue.setViewer(this.pdfViewer);
- pdfLinkService.setViewer(this.pdfViewer);
- this.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({
- container: appConfig.sidebar.thumbnailView,
- renderingQueue: pdfRenderingQueue,
- linkService: pdfLinkService,
- l10n: this.l10n
- });
- pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
- this.pdfHistory = new _pdf_history.PDFHistory({
- linkService: pdfLinkService,
- eventBus
- });
- pdfLinkService.setHistory(this.pdfHistory);
-
- if (!this.supportsIntegratedFind) {
- this.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, this.l10n);
- }
-
- this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n);
- this.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({
- container,
- eventBus,
- cursorToolOnLoad: _app_options.AppOptions.get("cursorToolOnLoad")
- });
- this.toolbar = new _toolbar.Toolbar(appConfig.toolbar, eventBus, this.l10n);
- this.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus);
-
- if (this.supportsFullscreen) {
- this.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({
- container,
- pdfViewer: this.pdfViewer,
- eventBus,
- contextMenuItems: appConfig.fullscreen
- });
- }
-
- this.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, this.overlayManager, this.l10n);
- this.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({
- container: appConfig.sidebar.outlineView,
- eventBus,
- linkService: pdfLinkService
- });
- this.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({
- container: appConfig.sidebar.attachmentsView,
- eventBus,
- downloadManager
- });
- this.pdfSidebar = new _pdf_sidebar.PDFSidebar({
- elements: appConfig.sidebar,
- pdfViewer: this.pdfViewer,
- pdfThumbnailViewer: this.pdfThumbnailViewer,
- eventBus,
- l10n: this.l10n
- });
- this.pdfSidebar.onToggled = this.forceRendering.bind(this);
- this.pdfSidebarResizer = new _pdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, this.l10n);
- },
-
- run(config) {
- this.initialize(config).then(webViewerInitialized);
- },
-
- get initialized() {
- return this._initializedCapability.settled;
- },
-
- get initializedPromise() {
- return this._initializedCapability.promise;
- },
-
- zoomIn(ticks) {
- if (this.pdfViewer.isInPresentationMode) {
- return;
- }
-
- let newScale = this.pdfViewer.currentScale;
-
- do {
- newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);
- newScale = Math.ceil(newScale * 10) / 10;
- newScale = Math.min(_ui_utils.MAX_SCALE, newScale);
- } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE);
-
- this.pdfViewer.currentScaleValue = newScale;
- },
-
- zoomOut(ticks) {
- if (this.pdfViewer.isInPresentationMode) {
- return;
- }
-
- let newScale = this.pdfViewer.currentScale;
-
- do {
- newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);
- newScale = Math.floor(newScale * 10) / 10;
- newScale = Math.max(_ui_utils.MIN_SCALE, newScale);
- } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE);
-
- this.pdfViewer.currentScaleValue = newScale;
- },
-
- zoomReset() {
- if (this.pdfViewer.isInPresentationMode) {
- return;
- }
-
- this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
- },
-
- get pagesCount() {
- return this.pdfDocument ? this.pdfDocument.numPages : 0;
- },
-
- get page() {
- return this.pdfViewer.currentPageNumber;
- },
-
- set page(val) {
- this.pdfViewer.currentPageNumber = val;
- },
-
- get printing() {
- return !!this.printService;
- },
-
- get supportsPrinting() {
- return PDFPrintServiceFactory.instance.supportsPrinting;
- },
-
- get supportsFullscreen() {
- let support;
- const doc = document.documentElement;
- support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen || doc.msRequestFullscreen);
-
- if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false || document.msFullscreenEnabled === false) {
- support = false;
- }
-
- return (0, _pdfjsLib.shadow)(this, "supportsFullscreen", support);
- },
-
- get supportsIntegratedFind() {
- return this.externalServices.supportsIntegratedFind;
- },
-
- get supportsDocumentFonts() {
- return this.externalServices.supportsDocumentFonts;
- },
-
- get loadingBar() {
- const bar = new _ui_utils.ProgressBar("#loadingBar");
- return (0, _pdfjsLib.shadow)(this, "loadingBar", bar);
- },
-
- get supportedMouseWheelZoomModifierKeys() {
- return this.externalServices.supportedMouseWheelZoomModifierKeys;
- },
-
- initPassiveLoading() {
- throw new Error("Not implemented: initPassiveLoading");
- },
-
- setTitleUsingUrl(url = "") {
- this.url = url;
- this.baseUrl = url.split("#")[0];
- let title = (0, _ui_utils.getPDFFileNameFromURL)(url, "");
-
- if (!title) {
- try {
- title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url;
- } catch (ex) {
- title = url;
- }
- }
-
- this.setTitle(title);
- },
-
- setTitle(title) {
- if (this.isViewerEmbedded) {
- return;
- }
-
- document.title = title;
- },
-
- async close() {
- const errorWrapper = this.appConfig.errorWrapper.container;
- errorWrapper.setAttribute("hidden", "true");
-
- if (!this.pdfLoadingTask) {
- return undefined;
- }
-
- const promise = this.pdfLoadingTask.destroy();
- this.pdfLoadingTask = null;
-
- if (this.pdfDocument) {
- this.pdfDocument = null;
- this.pdfThumbnailViewer.setDocument(null);
- this.pdfViewer.setDocument(null);
- this.pdfLinkService.setDocument(null);
- this.pdfDocumentProperties.setDocument(null);
- }
-
- webViewerResetPermissions();
- this.store = null;
- this.isInitialViewSet = false;
- this.downloadComplete = false;
- this.url = "";
- this.baseUrl = "";
- this.contentDispositionFilename = null;
- this.pdfSidebar.reset();
- this.pdfOutlineViewer.reset();
- this.pdfAttachmentViewer.reset();
-
- if (this.pdfHistory) {
- this.pdfHistory.reset();
- }
-
- if (this.findBar) {
- this.findBar.reset();
- }
-
- this.toolbar.reset();
- this.secondaryToolbar.reset();
-
- if (typeof PDFBug !== "undefined") {
- PDFBug.cleanup();
- }
-
- return promise;
- },
-
- async open(file, args) {
- if (this.pdfLoadingTask) {
- await this.close();
- }
-
- const workerParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER);
-
- for (const key in workerParameters) {
- _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key];
- }
-
- const parameters = Object.create(null);
-
- if (typeof file === "string") {
- this.setTitleUsingUrl(file);
- parameters.url = file;
- } else if (file && "byteLength" in file) {
- parameters.data = file;
- } else if (file.url && file.originalUrl) {
- this.setTitleUsingUrl(file.originalUrl);
- parameters.url = file.url;
- }
-
- const apiParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.API);
-
- for (const key in apiParameters) {
- let value = apiParameters[key];
-
- if (key === "docBaseUrl" && !value) {}
-
- parameters[key] = value;
- }
-
- if (args) {
- for (const key in args) {
- const value = args[key];
-
- if (key === "length") {
- this.pdfDocumentProperties.setFileSize(value);
- }
-
- parameters[key] = value;
- }
- }
-
- const loadingTask = (0, _pdfjsLib.getDocument)(parameters);
- this.pdfLoadingTask = loadingTask;
-
- loadingTask.onPassword = (updateCallback, reason) => {
- this.pdfLinkService.externalLinkEnabled = false;
- this.passwordPrompt.setUpdateCallback(updateCallback, reason);
- this.passwordPrompt.open();
- };
-
- loadingTask.onProgress = ({
- loaded,
- total
- }) => {
- this.progress(loaded / total);
- };
-
- loadingTask.onUnsupportedFeature = this.fallback.bind(this);
- return loadingTask.promise.then(pdfDocument => {
- this.load(pdfDocument);
- }, exception => {
- if (loadingTask !== this.pdfLoadingTask) {
- return undefined;
- }
-
- const message = exception && exception.message;
- let loadingErrorMessage;
-
- if (exception instanceof _pdfjsLib.InvalidPDFException) {
- loadingErrorMessage = this.l10n.get("invalid_file_error", null, "Invalid or corrupted PDF file.");
- } else if (exception instanceof _pdfjsLib.MissingPDFException) {
- loadingErrorMessage = this.l10n.get("missing_file_error", null, "Missing PDF file.");
- } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) {
- loadingErrorMessage = this.l10n.get("unexpected_response_error", null, "Unexpected server response.");
- } else {
- loadingErrorMessage = this.l10n.get("loading_error", null, "An error occurred while loading the PDF.");
- }
-
- return loadingErrorMessage.then(msg => {
- this.error(msg, {
- message
- });
- throw exception;
- });
- });
- },
-
- download() {
- function downloadByUrl() {
- downloadManager.downloadUrl(url, filename);
- }
-
- const url = this.baseUrl;
- const filename = this.contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url);
- const downloadManager = this.downloadManager;
-
- downloadManager.onerror = err => {
- this.error(`PDF failed to download: ${err}`);
- };
-
- if (!this.pdfDocument || !this.downloadComplete) {
- downloadByUrl();
- return;
- }
-
- this.pdfDocument.getData().then(function (data) {
- const blob = new Blob([data], {
- type: "application/pdf"
- });
- downloadManager.download(blob, url, filename);
- }).catch(downloadByUrl);
- },
-
- fallback(featureId) {
- if (this.fellback) {
- return;
- }
-
- this.fellback = true;
- this.externalServices.fallback({
- featureId,
- url: this.baseUrl
- }, function response(download) {
- if (!download) {
- return;
- }
-
- PDFViewerApplication.download();
- });
- },
-
- error(message, moreInfo) {
- const moreInfoText = [this.l10n.get("error_version_info", {
- version: _pdfjsLib.version || "?",
- build: _pdfjsLib.build || "?"
- }, "PDF.js v{{version}} (build: {{build}})")];
-
- if (moreInfo) {
- moreInfoText.push(this.l10n.get("error_message", {
- message: moreInfo.message
- }, "Message: {{message}}"));
-
- if (moreInfo.stack) {
- moreInfoText.push(this.l10n.get("error_stack", {
- stack: moreInfo.stack
- }, "Stack: {{stack}}"));
- } else {
- if (moreInfo.filename) {
- moreInfoText.push(this.l10n.get("error_file", {
- file: moreInfo.filename
- }, "File: {{file}}"));
- }
-
- if (moreInfo.lineNumber) {
- moreInfoText.push(this.l10n.get("error_line", {
- line: moreInfo.lineNumber
- }, "Line: {{line}}"));
- }
- }
- }
-
- const errorWrapperConfig = this.appConfig.errorWrapper;
- const errorWrapper = errorWrapperConfig.container;
- errorWrapper.removeAttribute("hidden");
- const errorMessage = errorWrapperConfig.errorMessage;
- errorMessage.textContent = message;
- const closeButton = errorWrapperConfig.closeButton;
-
- closeButton.onclick = function () {
- errorWrapper.setAttribute("hidden", "true");
- };
-
- const errorMoreInfo = errorWrapperConfig.errorMoreInfo;
- const moreInfoButton = errorWrapperConfig.moreInfoButton;
- const lessInfoButton = errorWrapperConfig.lessInfoButton;
-
- moreInfoButton.onclick = function () {
- errorMoreInfo.removeAttribute("hidden");
- moreInfoButton.setAttribute("hidden", "true");
- lessInfoButton.removeAttribute("hidden");
- errorMoreInfo.style.height = errorMoreInfo.scrollHeight + "px";
- };
-
- lessInfoButton.onclick = function () {
- errorMoreInfo.setAttribute("hidden", "true");
- moreInfoButton.removeAttribute("hidden");
- lessInfoButton.setAttribute("hidden", "true");
- };
-
- moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
- lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
- closeButton.oncontextmenu = _ui_utils.noContextMenuHandler;
- moreInfoButton.removeAttribute("hidden");
- lessInfoButton.setAttribute("hidden", "true");
- Promise.all(moreInfoText).then(parts => {
- errorMoreInfo.value = parts.join("\n");
- });
- },
-
- progress(level) {
- if (this.downloadComplete) {
- return;
- }
-
- const percent = Math.round(level * 100);
-
- if (percent > this.loadingBar.percent || isNaN(percent)) {
- this.loadingBar.percent = percent;
- const disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get("disableAutoFetch");
-
- if (disableAutoFetch && percent) {
- if (this.disableAutoFetchLoadingBarTimeout) {
- clearTimeout(this.disableAutoFetchLoadingBarTimeout);
- this.disableAutoFetchLoadingBarTimeout = null;
- }
-
- this.loadingBar.show();
- this.disableAutoFetchLoadingBarTimeout = setTimeout(() => {
- this.loadingBar.hide();
- this.disableAutoFetchLoadingBarTimeout = null;
- }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT);
- }
- }
- },
-
- load(pdfDocument) {
- this.pdfDocument = pdfDocument;
- pdfDocument.getDownloadInfo().then(() => {
- this.downloadComplete = true;
- this.loadingBar.hide();
- firstPagePromise.then(() => {
- this.eventBus.dispatch("documentloaded", {
- source: this
- });
- });
- });
- const pageLayoutPromise = pdfDocument.getPageLayout().catch(function () {});
- const pageModePromise = pdfDocument.getPageMode().catch(function () {});
- const openActionPromise = pdfDocument.getOpenAction().catch(function () {});
- this.toolbar.setPagesCount(pdfDocument.numPages, false);
- this.secondaryToolbar.setPagesCount(pdfDocument.numPages);
- let baseDocumentUrl;
- baseDocumentUrl = null;
- this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
- this.pdfDocumentProperties.setDocument(pdfDocument, this.url);
- const pdfViewer = this.pdfViewer;
- pdfViewer.setDocument(pdfDocument);
- const {
- firstPagePromise,
- onePageRendered,
- pagesPromise
- } = pdfViewer;
- const pdfThumbnailViewer = this.pdfThumbnailViewer;
- pdfThumbnailViewer.setDocument(pdfDocument);
- const storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprint)).getMultiple({
- page: null,
- zoom: _ui_utils.DEFAULT_SCALE_VALUE,
- scrollLeft: "0",
- scrollTop: "0",
- rotation: null,
- sidebarView: _pdf_sidebar.SidebarView.UNKNOWN,
- scrollMode: _ui_utils.ScrollMode.UNKNOWN,
- spreadMode: _ui_utils.SpreadMode.UNKNOWN
- }).catch(() => {
- return Object.create(null);
- });
- firstPagePromise.then(pdfPage => {
- this.loadingBar.setWidth(this.appConfig.viewerContainer);
- Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {
- const viewOnLoad = _app_options.AppOptions.get("viewOnLoad");
-
- this._initializePdfHistory({
- fingerprint: pdfDocument.fingerprint,
- viewOnLoad,
- initialDest: openAction && openAction.dest
- });
-
- const initialBookmark = this.initialBookmark;
-
- const zoom = _app_options.AppOptions.get("defaultZoomValue");
-
- let hash = zoom ? `zoom=${zoom}` : null;
- let rotation = null;
-
- let sidebarView = _app_options.AppOptions.get("sidebarViewOnLoad");
-
- let scrollMode = _app_options.AppOptions.get("scrollModeOnLoad");
-
- let spreadMode = _app_options.AppOptions.get("spreadModeOnLoad");
-
- if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) {
- hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;
- rotation = parseInt(stored.rotation, 10);
-
- if (sidebarView === _pdf_sidebar.SidebarView.UNKNOWN) {
- sidebarView = stored.sidebarView | 0;
- }
-
- if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {
- scrollMode = stored.scrollMode | 0;
- }
-
- if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
- spreadMode = stored.spreadMode | 0;
- }
- }
-
- if (pageMode && sidebarView === _pdf_sidebar.SidebarView.UNKNOWN) {
- sidebarView = apiPageModeToSidebarView(pageMode);
- }
-
- if (pageLayout && spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
- spreadMode = apiPageLayoutToSpreadMode(pageLayout);
- }
-
- this.setInitialView(hash, {
- rotation,
- sidebarView,
- scrollMode,
- spreadMode
- });
- this.eventBus.dispatch("documentinit", {
- source: this
- });
-
- if (!this.isViewerEmbedded) {
- pdfViewer.focus();
- }
-
- this._initializePermissions(pdfDocument);
-
- await Promise.race([pagesPromise, new Promise(resolve => {
- setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);
- })]);
-
- if (!initialBookmark && !hash) {
- return;
- }
-
- if (pdfViewer.hasEqualPageSizes) {
- return;
- }
-
- this.initialBookmark = initialBookmark;
- pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;
- this.setInitialView(hash);
- }).catch(() => {
- this.setInitialView();
- }).then(function () {
- pdfViewer.update();
- });
- });
- pagesPromise.then(() => {
- this._initializeAutoPrint(pdfDocument, openActionPromise);
- });
- onePageRendered.then(() => {
- pdfDocument.getOutline().then(outline => {
- this.pdfOutlineViewer.render({
- outline
- });
- });
- pdfDocument.getAttachments().then(attachments => {
- this.pdfAttachmentViewer.render({
- attachments
- });
- });
- });
-
- this._initializePageLabels(pdfDocument);
-
- this._initializeMetadata(pdfDocument);
- },
-
- async _initializeAutoPrint(pdfDocument, openActionPromise) {
- const [openAction, javaScript] = await Promise.all([openActionPromise, pdfDocument.getJavaScript()]);
-
- if (pdfDocument !== this.pdfDocument) {
- return;
- }
-
- let triggerAutoPrint = false;
-
- if (openAction && openAction.action === "Print") {
- triggerAutoPrint = true;
- }
-
- if (javaScript) {
- javaScript.some(js => {
- if (!js) {
- return false;
- }
-
- console.warn("Warning: JavaScript is not supported");
- this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript);
- return true;
- });
-
- if (!triggerAutoPrint) {
- for (const js of javaScript) {
- if (js && _ui_utils.AutoPrintRegExp.test(js)) {
- triggerAutoPrint = true;
- break;
- }
- }
- }
- }
-
- if (!this.supportsPrinting) {
- return;
- }
-
- if (triggerAutoPrint) {
- setTimeout(function () {
- window.print();
- });
- }
- },
-
- async _initializeMetadata(pdfDocument) {
- const {
- info,
- metadata,
- contentDispositionFilename
- } = await pdfDocument.getMetadata();
-
- if (pdfDocument !== this.pdfDocument) {
- return;
- }
-
- this.documentInfo = info;
- this.metadata = metadata;
- this.contentDispositionFilename = contentDispositionFilename;
- console.log(`PDF ${pdfDocument.fingerprint} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "-"}` + `${this.pdfViewer.enableWebGL ? " [WebGL]" : ""})`);
- let pdfTitle;
- const infoTitle = info && info.Title;
-
- if (infoTitle) {
- pdfTitle = infoTitle;
- }
-
- const metadataTitle = metadata && metadata.get("dc:title");
-
- if (metadataTitle) {
- if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) {
- pdfTitle = metadataTitle;
- }
- }
-
- if (pdfTitle) {
- this.setTitle(`${pdfTitle} - ${contentDispositionFilename || document.title}`);
- } else if (contentDispositionFilename) {
- this.setTitle(contentDispositionFilename);
- }
-
- if (info.IsAcroFormPresent) {
- console.warn("Warning: AcroForm/XFA is not supported");
- this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);
- }
-
- let versionId = "other";
- const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"];
-
- if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {
- versionId = `v${info.PDFFormatVersion.replace(".", "_")}`;
- }
-
- let generatorId = "other";
- const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"];
-
- if (info.Producer) {
- const producer = info.Producer.toLowerCase();
- KNOWN_GENERATORS.some(function (generator) {
- if (!producer.includes(generator)) {
- return false;
- }
-
- generatorId = generator.replace(/[ .\-]/g, "_");
- return true;
- });
- }
-
- let formType = null;
-
- if (info.IsAcroFormPresent) {
- formType = info.IsXFAPresent ? "xfa" : "acroform";
- }
-
- this.externalServices.reportTelemetry({
- type: "documentInfo",
- version: versionId,
- generator: generatorId,
- formType
- });
- },
-
- async _initializePageLabels(pdfDocument) {
- const labels = await pdfDocument.getPageLabels();
-
- if (pdfDocument !== this.pdfDocument) {
- return;
- }
-
- if (!labels || _app_options.AppOptions.get("disablePageLabels")) {
- return;
- }
-
- const numLabels = labels.length;
-
- if (numLabels !== this.pagesCount) {
- console.error("The number of Page Labels does not match the number of pages in the document.");
- return;
- }
-
- let i = 0;
-
- while (i < numLabels && labels[i] === (i + 1).toString()) {
- i++;
- }
-
- if (i === numLabels) {
- return;
- }
-
- const {
- pdfViewer,
- pdfThumbnailViewer,
- toolbar
- } = this;
- pdfViewer.setPageLabels(labels);
- pdfThumbnailViewer.setPageLabels(labels);
- toolbar.setPagesCount(numLabels, true);
- toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
- },
-
- _initializePdfHistory({
- fingerprint,
- viewOnLoad,
- initialDest = null
- }) {
- if (this.isViewerEmbedded || _app_options.AppOptions.get("disableHistory")) {
- return;
- }
-
- this.pdfHistory.initialize({
- fingerprint,
- resetHistory: viewOnLoad === ViewOnLoad.INITIAL,
- updateUrl: _app_options.AppOptions.get("historyUpdateUrl")
- });
-
- if (this.pdfHistory.initialBookmark) {
- this.initialBookmark = this.pdfHistory.initialBookmark;
- this.initialRotation = this.pdfHistory.initialRotation;
- }
-
- if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) {
- this.initialBookmark = JSON.stringify(initialDest);
- this.pdfHistory.push({
- explicitDest: initialDest,
- pageNumber: null
- });
- }
- },
-
- async _initializePermissions(pdfDocument) {
- const permissions = await pdfDocument.getPermissions();
-
- if (pdfDocument !== this.pdfDocument) {
- return;
- }
-
- if (!permissions || !_app_options.AppOptions.get("enablePermissions")) {
- return;
- }
-
- if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) {
- this.appConfig.viewerContainer.classList.add(ENABLE_PERMISSIONS_CLASS);
- }
- },
-
- setInitialView(storedHash, {
- rotation,
- sidebarView,
- scrollMode,
- spreadMode
- } = {}) {
- const setRotation = angle => {
- if ((0, _ui_utils.isValidRotation)(angle)) {
- this.pdfViewer.pagesRotation = angle;
- }
- };
-
- const setViewerModes = (scroll, spread) => {
- if ((0, _ui_utils.isValidScrollMode)(scroll)) {
- this.pdfViewer.scrollMode = scroll;
- }
-
- if ((0, _ui_utils.isValidSpreadMode)(spread)) {
- this.pdfViewer.spreadMode = spread;
- }
- };
-
- this.isInitialViewSet = true;
- this.pdfSidebar.setInitialView(sidebarView);
- setViewerModes(scrollMode, spreadMode);
-
- if (this.initialBookmark) {
- setRotation(this.initialRotation);
- delete this.initialRotation;
- this.pdfLinkService.setHash(this.initialBookmark);
- this.initialBookmark = null;
- } else if (storedHash) {
- setRotation(rotation);
- this.pdfLinkService.setHash(storedHash);
- }
-
- this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);
- this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber);
-
- if (!this.pdfViewer.currentScaleValue) {
- this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
- }
- },
-
- cleanup() {
- if (!this.pdfDocument) {
- return;
- }
-
- this.pdfViewer.cleanup();
- this.pdfThumbnailViewer.cleanup();
-
- if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) {
- this.pdfDocument.cleanup();
- }
- },
-
- forceRendering() {
- this.pdfRenderingQueue.printing = this.printing;
- this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible;
- this.pdfRenderingQueue.renderHighestPriority();
- },
-
- beforePrint() {
- if (this.printService) {
- return;
- }
-
- if (!this.supportsPrinting) {
- this.l10n.get("printing_not_supported", null, "Warning: Printing is not fully supported by this browser.").then(printMessage => {
- this.error(printMessage);
- });
- return;
- }
-
- if (!this.pdfViewer.pageViewsReady) {
- this.l10n.get("printing_not_ready", null, "Warning: The PDF is not fully loaded for printing.").then(notReadyMessage => {
- window.alert(notReadyMessage);
- });
- return;
- }
-
- const pagesOverview = this.pdfViewer.getPagesOverview();
- const printContainer = this.appConfig.printContainer;
- const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, this.l10n);
- this.printService = printService;
- this.forceRendering();
- printService.layout();
- this.externalServices.reportTelemetry({
- type: "print"
- });
- },
-
- afterPrint() {
- if (this.printService) {
- this.printService.destroy();
- this.printService = null;
- }
-
- this.forceRendering();
- },
-
- rotatePages(delta) {
- if (!this.pdfDocument) {
- return;
- }
-
- const newRotation = (this.pdfViewer.pagesRotation + 360 + delta) % 360;
- this.pdfViewer.pagesRotation = newRotation;
- },
-
- requestPresentationMode() {
- if (!this.pdfPresentationMode) {
- return;
- }
-
- this.pdfPresentationMode.request();
- },
-
- bindEvents() {
- const {
- eventBus,
- _boundEvents
- } = this;
- _boundEvents.beforePrint = this.beforePrint.bind(this);
- _boundEvents.afterPrint = this.afterPrint.bind(this);
-
- eventBus._on("resize", webViewerResize);
-
- eventBus._on("hashchange", webViewerHashchange);
-
- eventBus._on("beforeprint", _boundEvents.beforePrint);
-
- eventBus._on("afterprint", _boundEvents.afterPrint);
-
- eventBus._on("pagerendered", webViewerPageRendered);
-
- eventBus._on("updateviewarea", webViewerUpdateViewarea);
-
- eventBus._on("pagechanging", webViewerPageChanging);
-
- eventBus._on("scalechanging", webViewerScaleChanging);
-
- eventBus._on("rotationchanging", webViewerRotationChanging);
-
- eventBus._on("sidebarviewchanged", webViewerSidebarViewChanged);
-
- eventBus._on("pagemode", webViewerPageMode);
-
- eventBus._on("namedaction", webViewerNamedAction);
-
- eventBus._on("presentationmodechanged", webViewerPresentationModeChanged);
-
- eventBus._on("presentationmode", webViewerPresentationMode);
-
- eventBus._on("print", webViewerPrint);
-
- eventBus._on("download", webViewerDownload);
-
- eventBus._on("firstpage", webViewerFirstPage);
-
- eventBus._on("lastpage", webViewerLastPage);
-
- eventBus._on("nextpage", webViewerNextPage);
-
- eventBus._on("previouspage", webViewerPreviousPage);
-
- eventBus._on("zoomin", webViewerZoomIn);
-
- eventBus._on("zoomout", webViewerZoomOut);
-
- eventBus._on("zoomreset", webViewerZoomReset);
-
- eventBus._on("pagenumberchanged", webViewerPageNumberChanged);
-
- eventBus._on("scalechanged", webViewerScaleChanged);
-
- eventBus._on("rotatecw", webViewerRotateCw);
-
- eventBus._on("rotateccw", webViewerRotateCcw);
-
- eventBus._on("switchscrollmode", webViewerSwitchScrollMode);
-
- eventBus._on("scrollmodechanged", webViewerScrollModeChanged);
-
- eventBus._on("switchspreadmode", webViewerSwitchSpreadMode);
-
- eventBus._on("spreadmodechanged", webViewerSpreadModeChanged);
-
- eventBus._on("documentproperties", webViewerDocumentProperties);
-
- eventBus._on("find", webViewerFind);
-
- eventBus._on("findfromurlhash", webViewerFindFromUrlHash);
-
- eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount);
-
- eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState);
-
- eventBus._on("fileinputchange", webViewerFileInputChange);
-
- eventBus._on("openfile", webViewerOpenFile);
- },
-
- bindWindowEvents() {
- const {
- eventBus,
- _boundEvents
- } = this;
-
- _boundEvents.windowResize = () => {
- eventBus.dispatch("resize", {
- source: window
- });
- };
-
- _boundEvents.windowHashChange = () => {
- eventBus.dispatch("hashchange", {
- source: window,
- hash: document.location.hash.substring(1)
- });
- };
-
- _boundEvents.windowBeforePrint = () => {
- eventBus.dispatch("beforeprint", {
- source: window
- });
- };
-
- _boundEvents.windowAfterPrint = () => {
- eventBus.dispatch("afterprint", {
- source: window
- });
- };
-
- window.addEventListener("visibilitychange", webViewerVisibilityChange);
- window.addEventListener("wheel", webViewerWheel, {
- passive: false
- });
- window.addEventListener("click", webViewerClick);
- window.addEventListener("keydown", webViewerKeyDown);
- window.addEventListener("resize", _boundEvents.windowResize);
- window.addEventListener("hashchange", _boundEvents.windowHashChange);
- window.addEventListener("beforeprint", _boundEvents.windowBeforePrint);
- window.addEventListener("afterprint", _boundEvents.windowAfterPrint);
- },
-
- unbindEvents() {
- const {
- eventBus,
- _boundEvents
- } = this;
-
- eventBus._off("resize", webViewerResize);
-
- eventBus._off("hashchange", webViewerHashchange);
-
- eventBus._off("beforeprint", _boundEvents.beforePrint);
-
- eventBus._off("afterprint", _boundEvents.afterPrint);
-
- eventBus._off("pagerendered", webViewerPageRendered);
-
- eventBus._off("updateviewarea", webViewerUpdateViewarea);
-
- eventBus._off("pagechanging", webViewerPageChanging);
-
- eventBus._off("scalechanging", webViewerScaleChanging);
-
- eventBus._off("rotationchanging", webViewerRotationChanging);
-
- eventBus._off("sidebarviewchanged", webViewerSidebarViewChanged);
-
- eventBus._off("pagemode", webViewerPageMode);
-
- eventBus._off("namedaction", webViewerNamedAction);
-
- eventBus._off("presentationmodechanged", webViewerPresentationModeChanged);
-
- eventBus._off("presentationmode", webViewerPresentationMode);
-
- eventBus._off("print", webViewerPrint);
-
- eventBus._off("download", webViewerDownload);
-
- eventBus._off("firstpage", webViewerFirstPage);
-
- eventBus._off("lastpage", webViewerLastPage);
-
- eventBus._off("nextpage", webViewerNextPage);
-
- eventBus._off("previouspage", webViewerPreviousPage);
-
- eventBus._off("zoomin", webViewerZoomIn);
-
- eventBus._off("zoomout", webViewerZoomOut);
-
- eventBus._off("zoomreset", webViewerZoomReset);
-
- eventBus._off("pagenumberchanged", webViewerPageNumberChanged);
-
- eventBus._off("scalechanged", webViewerScaleChanged);
-
- eventBus._off("rotatecw", webViewerRotateCw);
-
- eventBus._off("rotateccw", webViewerRotateCcw);
-
- eventBus._off("switchscrollmode", webViewerSwitchScrollMode);
-
- eventBus._off("scrollmodechanged", webViewerScrollModeChanged);
-
- eventBus._off("switchspreadmode", webViewerSwitchSpreadMode);
-
- eventBus._off("spreadmodechanged", webViewerSpreadModeChanged);
-
- eventBus._off("documentproperties", webViewerDocumentProperties);
-
- eventBus._off("find", webViewerFind);
-
- eventBus._off("findfromurlhash", webViewerFindFromUrlHash);
-
- eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount);
-
- eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState);
-
- eventBus._off("fileinputchange", webViewerFileInputChange);
-
- eventBus._off("openfile", webViewerOpenFile);
-
- _boundEvents.beforePrint = null;
- _boundEvents.afterPrint = null;
- },
-
- unbindWindowEvents() {
- const {
- _boundEvents
- } = this;
- window.removeEventListener("visibilitychange", webViewerVisibilityChange);
- window.removeEventListener("wheel", webViewerWheel, {
- passive: false
- });
- window.removeEventListener("click", webViewerClick);
- window.removeEventListener("keydown", webViewerKeyDown);
- window.removeEventListener("resize", _boundEvents.windowResize);
- window.removeEventListener("hashchange", _boundEvents.windowHashChange);
- window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint);
- window.removeEventListener("afterprint", _boundEvents.windowAfterPrint);
- _boundEvents.windowResize = null;
- _boundEvents.windowHashChange = null;
- _boundEvents.windowBeforePrint = null;
- _boundEvents.windowAfterPrint = null;
- }
-
-};
-exports.PDFViewerApplication = PDFViewerApplication;
-let validateFileURL;
-{
- const HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"];
-
- validateFileURL = function (file) {
- if (file === undefined) {
- return;
- }
-
- try {
- const viewerOrigin = new URL(window.location.href).origin || "null";
-
- if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {
- return;
- }
-
- const {
- origin,
- protocol
- } = new URL(file, window.location.href);
-
- if (origin !== viewerOrigin && protocol !== "blob:") {
- throw new Error("file origin does not match viewer's");
- }
- } catch (ex) {
- const message = ex && ex.message;
- PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(loadingErrorMessage => {
- PDFViewerApplication.error(loadingErrorMessage, {
- message
- });
- });
- throw ex;
- }
- };
-}
-
-async function loadFakeWorker() {
- if (!_pdfjsLib.GlobalWorkerOptions.workerSrc) {
- _pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get("workerSrc");
- }
-
- return (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.getWorkerSrc());
-}
-
-function loadAndEnablePDFBug(enabledTabs) {
- const appConfig = PDFViewerApplication.appConfig;
- return (0, _pdfjsLib.loadScript)(appConfig.debuggerScriptPath).then(function () {
- PDFBug.enable(enabledTabs);
- PDFBug.init({
- OPS: _pdfjsLib.OPS
- }, appConfig.mainContainer);
- });
-}
-
-function webViewerInitialized() {
- const appConfig = PDFViewerApplication.appConfig;
- let file;
- const queryString = document.location.search.substring(1);
- const params = (0, _ui_utils.parseQueryString)(queryString);
- file = "file" in params ? params.file : _app_options.AppOptions.get("defaultUrl");
- validateFileURL(file);
- const fileInput = document.createElement("input");
- fileInput.id = appConfig.openFileInputName;
- fileInput.className = "fileInput";
- fileInput.setAttribute("type", "file");
- fileInput.oncontextmenu = _ui_utils.noContextMenuHandler;
- document.body.appendChild(fileInput);
-
- if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
- appConfig.toolbar.openFile.setAttribute("hidden", "true");
- appConfig.secondaryToolbar.openFileButton.setAttribute("hidden", "true");
- } else {
- fileInput.value = null;
- }
-
- fileInput.addEventListener("change", function (evt) {
- const files = evt.target.files;
-
- if (!files || files.length === 0) {
- return;
- }
-
- PDFViewerApplication.eventBus.dispatch("fileinputchange", {
- source: this,
- fileInput: evt.target
- });
- });
- appConfig.mainContainer.addEventListener("dragover", function (evt) {
- evt.preventDefault();
- evt.dataTransfer.dropEffect = "move";
- });
- appConfig.mainContainer.addEventListener("drop", function (evt) {
- evt.preventDefault();
- const files = evt.dataTransfer.files;
-
- if (!files || files.length === 0) {
- return;
- }
-
- PDFViewerApplication.eventBus.dispatch("fileinputchange", {
- source: this,
- fileInput: evt.dataTransfer
- });
- });
-
- if (!PDFViewerApplication.supportsDocumentFonts) {
- _app_options.AppOptions.set("disableFontFace", true);
-
- PDFViewerApplication.l10n.get("web_fonts_disabled", null, "Web fonts are disabled: unable to use embedded PDF fonts.").then(msg => {
- console.warn(msg);
- });
- }
-
- if (!PDFViewerApplication.supportsPrinting) {
- appConfig.toolbar.print.classList.add("hidden");
- appConfig.secondaryToolbar.printButton.classList.add("hidden");
- }
-
- if (!PDFViewerApplication.supportsFullscreen) {
- appConfig.toolbar.presentationModeButton.classList.add("hidden");
- appConfig.secondaryToolbar.presentationModeButton.classList.add("hidden");
- }
-
- if (PDFViewerApplication.supportsIntegratedFind) {
- appConfig.toolbar.viewFind.classList.add("hidden");
- }
-
- appConfig.mainContainer.addEventListener("transitionend", function (evt) {
- if (evt.target === this) {
- PDFViewerApplication.eventBus.dispatch("resize", {
- source: this
- });
- }
- }, true);
-
- try {
- webViewerOpenFileViaURL(file);
- } catch (reason) {
- PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(msg => {
- PDFViewerApplication.error(msg, reason);
- });
- }
-}
-
-let webViewerOpenFileViaURL;
-{
- webViewerOpenFileViaURL = function (file) {
- if (file && file.lastIndexOf("file:", 0) === 0) {
- PDFViewerApplication.setTitleUsingUrl(file);
- const xhr = new XMLHttpRequest();
-
- xhr.onload = function () {
- PDFViewerApplication.open(new Uint8Array(xhr.response));
- };
-
- xhr.open("GET", file);
- xhr.responseType = "arraybuffer";
- xhr.send();
- return;
- }
-
- if (file) {
- PDFViewerApplication.open(file);
- }
- };
-}
-
-function webViewerResetPermissions() {
- const {
- appConfig
- } = PDFViewerApplication;
-
- if (!appConfig) {
- return;
- }
-
- appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS);
-}
-
-function webViewerPageRendered(evt) {
- const pageNumber = evt.pageNumber;
- const pageIndex = pageNumber - 1;
- const pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex);
-
- if (pageNumber === PDFViewerApplication.page) {
- PDFViewerApplication.toolbar.updateLoadingIndicatorState(false);
- }
-
- if (!pageView) {
- return;
- }
-
- if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
- const thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageIndex);
- thumbnailView.setImage(pageView);
- }
-
- if (typeof Stats !== "undefined" && Stats.enabled && pageView.stats) {
- Stats.add(pageNumber, pageView.stats);
- }
-
- if (pageView.error) {
- PDFViewerApplication.l10n.get("rendering_error", null, "An error occurred while rendering the page.").then(msg => {
- PDFViewerApplication.error(msg, pageView.error);
- });
- }
-
- PDFViewerApplication.externalServices.reportTelemetry({
- type: "pageInfo",
- timestamp: evt.timestamp
- });
- PDFViewerApplication.pdfDocument.getStats().then(function (stats) {
- PDFViewerApplication.externalServices.reportTelemetry({
- type: "documentStats",
- stats
- });
- });
-}
-
-function webViewerPageMode({
- mode
-}) {
- let view;
-
- switch (mode) {
- case "thumbs":
- view = _pdf_sidebar.SidebarView.THUMBS;
- break;
-
- case "bookmarks":
- case "outline":
- view = _pdf_sidebar.SidebarView.OUTLINE;
- break;
-
- case "attachments":
- view = _pdf_sidebar.SidebarView.ATTACHMENTS;
- break;
-
- case "none":
- view = _pdf_sidebar.SidebarView.NONE;
- break;
-
- default:
- console.error('Invalid "pagemode" hash parameter: ' + mode);
- return;
- }
-
- PDFViewerApplication.pdfSidebar.switchView(view, true);
-}
-
-function webViewerNamedAction(evt) {
- const action = evt.action;
-
- switch (action) {
- case "GoToPage":
- PDFViewerApplication.appConfig.toolbar.pageNumber.select();
- break;
-
- case "Find":
- if (!PDFViewerApplication.supportsIntegratedFind) {
- PDFViewerApplication.findBar.toggle();
- }
-
- break;
- }
-}
-
-function webViewerPresentationModeChanged({
- active,
- switchInProgress
-}) {
- let state = _ui_utils.PresentationModeState.NORMAL;
-
- if (switchInProgress) {
- state = _ui_utils.PresentationModeState.CHANGING;
- } else if (active) {
- state = _ui_utils.PresentationModeState.FULLSCREEN;
- }
-
- PDFViewerApplication.pdfViewer.presentationModeState = state;
-}
-
-function webViewerSidebarViewChanged(evt) {
- PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible;
- const store = PDFViewerApplication.store;
-
- if (store && PDFViewerApplication.isInitialViewSet) {
- store.set("sidebarView", evt.view).catch(function () {});
- }
-}
-
-function webViewerUpdateViewarea(evt) {
- const location = evt.location,
- store = PDFViewerApplication.store;
-
- if (store && PDFViewerApplication.isInitialViewSet) {
- store.setMultiple({
- page: location.pageNumber,
- zoom: location.scale,
- scrollLeft: location.left,
- scrollTop: location.top,
- rotation: location.rotation
- }).catch(function () {});
- }
-
- const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
- PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href;
- PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;
- const currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);
- const loading = currentPage.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED;
- PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);
-}
-
-function webViewerScrollModeChanged(evt) {
- const store = PDFViewerApplication.store;
-
- if (store && PDFViewerApplication.isInitialViewSet) {
- store.set("scrollMode", evt.mode).catch(function () {});
- }
-}
-
-function webViewerSpreadModeChanged(evt) {
- const store = PDFViewerApplication.store;
-
- if (store && PDFViewerApplication.isInitialViewSet) {
- store.set("spreadMode", evt.mode).catch(function () {});
- }
-}
-
-function webViewerResize() {
- const {
- pdfDocument,
- pdfViewer
- } = PDFViewerApplication;
-
- if (!pdfDocument) {
- return;
- }
-
- const currentScaleValue = pdfViewer.currentScaleValue;
-
- if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") {
- pdfViewer.currentScaleValue = currentScaleValue;
- }
-
- pdfViewer.update();
-}
-
-function webViewerHashchange(evt) {
- const hash = evt.hash;
-
- if (!hash) {
- return;
- }
-
- if (!PDFViewerApplication.isInitialViewSet) {
- PDFViewerApplication.initialBookmark = hash;
- } else if (!PDFViewerApplication.pdfHistory.popStateInProgress) {
- PDFViewerApplication.pdfLinkService.setHash(hash);
- }
-}
-
-let webViewerFileInputChange, webViewerOpenFile;
-{
- webViewerFileInputChange = function (evt) {
- if (PDFViewerApplication.pdfViewer && PDFViewerApplication.pdfViewer.isInPresentationMode) {
- return;
- }
-
- const file = evt.fileInput.files[0];
-
- if (!_app_options.AppOptions.get("disableCreateObjectURL")) {
- let url = URL.createObjectURL(file);
-
- if (file.name) {
- url = {
- url,
- originalUrl: file.name
- };
- }
-
- PDFViewerApplication.open(url);
- } else {
- PDFViewerApplication.setTitleUsingUrl(file.name);
- const fileReader = new FileReader();
-
- fileReader.onload = function webViewerChangeFileReaderOnload(event) {
- const buffer = event.target.result;
- PDFViewerApplication.open(new Uint8Array(buffer));
- };
-
- fileReader.readAsArrayBuffer(file);
- }
-
- const appConfig = PDFViewerApplication.appConfig;
- appConfig.toolbar.viewBookmark.setAttribute("hidden", "true");
- appConfig.secondaryToolbar.viewBookmarkButton.setAttribute("hidden", "true");
- appConfig.toolbar.download.setAttribute("hidden", "true");
- appConfig.secondaryToolbar.downloadButton.setAttribute("hidden", "true");
- };
-
- webViewerOpenFile = function (evt) {
- const openFileInputName = PDFViewerApplication.appConfig.openFileInputName;
- document.getElementById(openFileInputName).click();
- };
-}
-
-function webViewerPresentationMode() {
- PDFViewerApplication.requestPresentationMode();
-}
-
-function webViewerPrint() {
- window.print();
-}
-
-function webViewerDownload() {
- PDFViewerApplication.download();
-}
-
-function webViewerFirstPage() {
- if (PDFViewerApplication.pdfDocument) {
- PDFViewerApplication.page = 1;
- }
-}
-
-function webViewerLastPage() {
- if (PDFViewerApplication.pdfDocument) {
- PDFViewerApplication.page = PDFViewerApplication.pagesCount;
- }
-}
-
-function webViewerNextPage() {
- PDFViewerApplication.page++;
-}
-
-function webViewerPreviousPage() {
- PDFViewerApplication.page--;
-}
-
-function webViewerZoomIn() {
- PDFViewerApplication.zoomIn();
-}
-
-function webViewerZoomOut() {
- PDFViewerApplication.zoomOut();
-}
-
-function webViewerZoomReset() {
- PDFViewerApplication.zoomReset();
-}
-
-function webViewerPageNumberChanged(evt) {
- const pdfViewer = PDFViewerApplication.pdfViewer;
-
- if (evt.value !== "") {
- pdfViewer.currentPageLabel = evt.value;
- }
-
- if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {
- PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
- }
-}
-
-function webViewerScaleChanged(evt) {
- PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;
-}
-
-function webViewerRotateCw() {
- PDFViewerApplication.rotatePages(90);
-}
-
-function webViewerRotateCcw() {
- PDFViewerApplication.rotatePages(-90);
-}
-
-function webViewerSwitchScrollMode(evt) {
- PDFViewerApplication.pdfViewer.scrollMode = evt.mode;
-}
-
-function webViewerSwitchSpreadMode(evt) {
- PDFViewerApplication.pdfViewer.spreadMode = evt.mode;
-}
-
-function webViewerDocumentProperties() {
- PDFViewerApplication.pdfDocumentProperties.open();
-}
-
-function webViewerFind(evt) {
- PDFViewerApplication.findController.executeCommand("find" + evt.type, {
- query: evt.query,
- phraseSearch: evt.phraseSearch,
- caseSensitive: evt.caseSensitive,
- entireWord: evt.entireWord,
- highlightAll: evt.highlightAll,
- findPrevious: evt.findPrevious
- });
-}
-
-function webViewerFindFromUrlHash(evt) {
- PDFViewerApplication.findController.executeCommand("find", {
- query: evt.query,
- phraseSearch: evt.phraseSearch,
- caseSensitive: false,
- entireWord: false,
- highlightAll: true,
- findPrevious: false
- });
-}
-
-function webViewerUpdateFindMatchesCount({
- matchesCount
-}) {
- if (PDFViewerApplication.supportsIntegratedFind) {
- PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);
- } else {
- PDFViewerApplication.findBar.updateResultsCount(matchesCount);
- }
-}
-
-function webViewerUpdateFindControlState({
- state,
- previous,
- matchesCount
-}) {
- if (PDFViewerApplication.supportsIntegratedFind) {
- PDFViewerApplication.externalServices.updateFindControlState({
- result: state,
- findPrevious: previous,
- matchesCount
- });
- } else {
- PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount);
- }
-}
-
-function webViewerScaleChanging(evt) {
- PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale);
- PDFViewerApplication.pdfViewer.update();
-}
-
-function webViewerRotationChanging(evt) {
- PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;
- PDFViewerApplication.forceRendering();
- PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;
-}
-
-function webViewerPageChanging(evt) {
- const page = evt.pageNumber;
- PDFViewerApplication.toolbar.setPageNumber(page, evt.pageLabel || null);
- PDFViewerApplication.secondaryToolbar.setPageNumber(page);
-
- if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
- PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page);
- }
-
- if (typeof Stats !== "undefined" && Stats.enabled) {
- const pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1);
-
- if (pageView && pageView.stats) {
- Stats.add(page, pageView.stats);
- }
- }
-}
-
-function webViewerVisibilityChange(evt) {
- if (document.visibilityState === "visible") {
- setZoomDisabledTimeout();
- }
-}
-
-let zoomDisabledTimeout = null;
-
-function setZoomDisabledTimeout() {
- if (zoomDisabledTimeout) {
- clearTimeout(zoomDisabledTimeout);
- }
-
- zoomDisabledTimeout = setTimeout(function () {
- zoomDisabledTimeout = null;
- }, WHEEL_ZOOM_DISABLED_TIMEOUT);
-}
-
-function webViewerWheel(evt) {
- const {
- pdfViewer,
- supportedMouseWheelZoomModifierKeys
- } = PDFViewerApplication;
-
- if (pdfViewer.isInPresentationMode) {
- return;
- }
-
- if (evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) {
- evt.preventDefault();
-
- if (zoomDisabledTimeout || document.visibilityState === "hidden") {
- return;
- }
-
- const previousScale = pdfViewer.currentScale;
- const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
- const MOUSE_WHEEL_DELTA_PER_PAGE_SCALE = 3.0;
- const ticks = delta * MOUSE_WHEEL_DELTA_PER_PAGE_SCALE;
-
- if (ticks < 0) {
- PDFViewerApplication.zoomOut(-ticks);
- } else {
- PDFViewerApplication.zoomIn(ticks);
- }
-
- const currentScale = pdfViewer.currentScale;
-
- if (previousScale !== currentScale) {
- const scaleCorrectionFactor = currentScale / previousScale - 1;
- const rect = pdfViewer.container.getBoundingClientRect();
- const dx = evt.clientX - rect.left;
- const dy = evt.clientY - rect.top;
- pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor;
- pdfViewer.container.scrollTop += dy * scaleCorrectionFactor;
- }
- } else {
- setZoomDisabledTimeout();
- }
-}
-
-function webViewerClick(evt) {
- if (!PDFViewerApplication.secondaryToolbar.isOpen) {
- return;
- }
-
- const appConfig = PDFViewerApplication.appConfig;
-
- if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) {
- PDFViewerApplication.secondaryToolbar.close();
- }
-}
-
-function webViewerKeyDown(evt) {
- if (PDFViewerApplication.overlayManager.active) {
- return;
- }
-
- let handled = false,
- ensureViewerFocused = false;
- const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);
- const pdfViewer = PDFViewerApplication.pdfViewer;
- const isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode;
-
- if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {
- switch (evt.keyCode) {
- case 70:
- if (!PDFViewerApplication.supportsIntegratedFind) {
- PDFViewerApplication.findBar.open();
- handled = true;
- }
-
- break;
-
- case 71:
- if (!PDFViewerApplication.supportsIntegratedFind) {
- const findState = PDFViewerApplication.findController.state;
-
- if (findState) {
- PDFViewerApplication.findController.executeCommand("findagain", {
- query: findState.query,
- phraseSearch: findState.phraseSearch,
- caseSensitive: findState.caseSensitive,
- entireWord: findState.entireWord,
- highlightAll: findState.highlightAll,
- findPrevious: cmd === 5 || cmd === 12
- });
- }
-
- handled = true;
- }
-
- break;
-
- case 61:
- case 107:
- case 187:
- case 171:
- if (!isViewerInPresentationMode) {
- PDFViewerApplication.zoomIn();
- }
-
- handled = true;
- break;
-
- case 173:
- case 109:
- case 189:
- if (!isViewerInPresentationMode) {
- PDFViewerApplication.zoomOut();
- }
-
- handled = true;
- break;
-
- case 48:
- case 96:
- if (!isViewerInPresentationMode) {
- setTimeout(function () {
- PDFViewerApplication.zoomReset();
- });
- handled = false;
- }
-
- break;
-
- case 38:
- if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
- PDFViewerApplication.page = 1;
- handled = true;
- ensureViewerFocused = true;
- }
-
- break;
-
- case 40:
- if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
- PDFViewerApplication.page = PDFViewerApplication.pagesCount;
- handled = true;
- ensureViewerFocused = true;
- }
-
- break;
- }
- }
-
- const {
- eventBus
- } = PDFViewerApplication;
-
- if (cmd === 1 || cmd === 8) {
- switch (evt.keyCode) {
- case 83:
- eventBus.dispatch("download", {
- source: window
- });
- handled = true;
- break;
-
- case 79:
- {
- eventBus.dispatch("openfile", {
- source: window
- });
- handled = true;
- }
- break;
- }
- }
-
- if (cmd === 3 || cmd === 10) {
- switch (evt.keyCode) {
- case 80:
- PDFViewerApplication.requestPresentationMode();
- handled = true;
- break;
-
- case 71:
- PDFViewerApplication.appConfig.toolbar.pageNumber.select();
- handled = true;
- break;
- }
- }
-
- if (handled) {
- if (ensureViewerFocused && !isViewerInPresentationMode) {
- pdfViewer.focus();
- }
-
- evt.preventDefault();
- return;
- }
-
- const curElement = document.activeElement || document.querySelector(":focus");
- const curElementTagName = curElement && curElement.tagName.toUpperCase();
-
- if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElement && curElement.isContentEditable) {
- if (evt.keyCode !== 27) {
- return;
- }
- }
-
- if (cmd === 0) {
- let turnPage = 0,
- turnOnlyIfPageFit = false;
-
- switch (evt.keyCode) {
- case 38:
- case 33:
- if (pdfViewer.isVerticalScrollbarEnabled) {
- turnOnlyIfPageFit = true;
- }
-
- turnPage = -1;
- break;
-
- case 8:
- if (!isViewerInPresentationMode) {
- turnOnlyIfPageFit = true;
- }
-
- turnPage = -1;
- break;
-
- case 37:
- if (pdfViewer.isHorizontalScrollbarEnabled) {
- turnOnlyIfPageFit = true;
- }
-
- case 75:
- case 80:
- turnPage = -1;
- break;
-
- case 27:
- if (PDFViewerApplication.secondaryToolbar.isOpen) {
- PDFViewerApplication.secondaryToolbar.close();
- handled = true;
- }
-
- if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) {
- PDFViewerApplication.findBar.close();
- handled = true;
- }
-
- break;
-
- case 40:
- case 34:
- if (pdfViewer.isVerticalScrollbarEnabled) {
- turnOnlyIfPageFit = true;
- }
-
- turnPage = 1;
- break;
-
- case 13:
- case 32:
- if (!isViewerInPresentationMode) {
- turnOnlyIfPageFit = true;
- }
-
- turnPage = 1;
- break;
-
- case 39:
- if (pdfViewer.isHorizontalScrollbarEnabled) {
- turnOnlyIfPageFit = true;
- }
-
- case 74:
- case 78:
- turnPage = 1;
- break;
-
- case 36:
- if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
- PDFViewerApplication.page = 1;
- handled = true;
- ensureViewerFocused = true;
- }
-
- break;
-
- case 35:
- if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
- PDFViewerApplication.page = PDFViewerApplication.pagesCount;
- handled = true;
- ensureViewerFocused = true;
- }
-
- break;
-
- case 83:
- PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT);
- break;
-
- case 72:
- PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND);
- break;
-
- case 82:
- PDFViewerApplication.rotatePages(90);
- break;
-
- case 115:
- PDFViewerApplication.pdfSidebar.toggle();
- break;
- }
-
- if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) {
- if (turnPage > 0) {
- if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
- PDFViewerApplication.page++;
- }
- } else {
- if (PDFViewerApplication.page > 1) {
- PDFViewerApplication.page--;
- }
- }
-
- handled = true;
- }
- }
-
- if (cmd === 4) {
- switch (evt.keyCode) {
- case 13:
- case 32:
- if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") {
- break;
- }
-
- if (PDFViewerApplication.page > 1) {
- PDFViewerApplication.page--;
- }
-
- handled = true;
- break;
-
- case 82:
- PDFViewerApplication.rotatePages(-90);
- break;
- }
- }
-
- if (!handled && !isViewerInPresentationMode) {
- if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") {
- ensureViewerFocused = true;
- }
- }
-
- if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {
- pdfViewer.focus();
- }
-
- if (handled) {
- evt.preventDefault();
- }
-}
-
-function apiPageLayoutToSpreadMode(layout) {
- switch (layout) {
- case "SinglePage":
- case "OneColumn":
- return _ui_utils.SpreadMode.NONE;
-
- case "TwoColumnLeft":
- case "TwoPageLeft":
- return _ui_utils.SpreadMode.ODD;
-
- case "TwoColumnRight":
- case "TwoPageRight":
- return _ui_utils.SpreadMode.EVEN;
- }
-
- return _ui_utils.SpreadMode.NONE;
-}
-
-function apiPageModeToSidebarView(mode) {
- switch (mode) {
- case "UseNone":
- return _pdf_sidebar.SidebarView.NONE;
-
- case "UseThumbs":
- return _pdf_sidebar.SidebarView.THUMBS;
-
- case "UseOutlines":
- return _pdf_sidebar.SidebarView.OUTLINE;
-
- case "UseAttachments":
- return _pdf_sidebar.SidebarView.ATTACHMENTS;
-
- case "UseOC":
- }
-
- return _pdf_sidebar.SidebarView.NONE;
-}
-
-const PDFPrintServiceFactory = {
- instance: {
- supportsPrinting: false,
-
- createPrintService() {
- throw new Error("Not implemented: createPrintService");
- }
-
- }
-};
-exports.PDFPrintServiceFactory = PDFPrintServiceFactory;
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.isValidRotation = isValidRotation;
-exports.isValidScrollMode = isValidScrollMode;
-exports.isValidSpreadMode = isValidSpreadMode;
-exports.isPortraitOrientation = isPortraitOrientation;
-exports.clamp = clamp;
-exports.getPDFFileNameFromURL = getPDFFileNameFromURL;
-exports.noContextMenuHandler = noContextMenuHandler;
-exports.parseQueryString = parseQueryString;
-exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements;
-exports.getVisibleElements = getVisibleElements;
-exports.roundToDivide = roundToDivide;
-exports.getPageSizeInches = getPageSizeInches;
-exports.approximateFraction = approximateFraction;
-exports.getOutputScale = getOutputScale;
-exports.scrollIntoView = scrollIntoView;
-exports.watchScroll = watchScroll;
-exports.binarySearchFirstItem = binarySearchFirstItem;
-exports.normalizeWheelEventDelta = normalizeWheelEventDelta;
-exports.waitOnEventOrTimeout = waitOnEventOrTimeout;
-exports.moveToEndOfArray = moveToEndOfArray;
-exports.WaitOnType = exports.animationStarted = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.SpreadMode = exports.ScrollMode = exports.TextLayerMode = exports.RendererType = exports.PresentationModeState = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = exports.AutoPrintRegExp = void 0;
-const CSS_UNITS = 96.0 / 72.0;
-exports.CSS_UNITS = CSS_UNITS;
-const DEFAULT_SCALE_VALUE = "auto";
-exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE;
-const DEFAULT_SCALE = 1.0;
-exports.DEFAULT_SCALE = DEFAULT_SCALE;
-const MIN_SCALE = 0.1;
-exports.MIN_SCALE = MIN_SCALE;
-const MAX_SCALE = 10.0;
-exports.MAX_SCALE = MAX_SCALE;
-const UNKNOWN_SCALE = 0;
-exports.UNKNOWN_SCALE = UNKNOWN_SCALE;
-const MAX_AUTO_SCALE = 1.25;
-exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE;
-const SCROLLBAR_PADDING = 40;
-exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING;
-const VERTICAL_PADDING = 5;
-exports.VERTICAL_PADDING = VERTICAL_PADDING;
-const PresentationModeState = {
- UNKNOWN: 0,
- NORMAL: 1,
- CHANGING: 2,
- FULLSCREEN: 3
-};
-exports.PresentationModeState = PresentationModeState;
-const RendererType = {
- CANVAS: "canvas",
- SVG: "svg"
-};
-exports.RendererType = RendererType;
-const TextLayerMode = {
- DISABLE: 0,
- ENABLE: 1,
- ENABLE_ENHANCE: 2
-};
-exports.TextLayerMode = TextLayerMode;
-const ScrollMode = {
- UNKNOWN: -1,
- VERTICAL: 0,
- HORIZONTAL: 1,
- WRAPPED: 2
-};
-exports.ScrollMode = ScrollMode;
-const SpreadMode = {
- UNKNOWN: -1,
- NONE: 0,
- ODD: 1,
- EVEN: 2
-};
-exports.SpreadMode = SpreadMode;
-const AutoPrintRegExp = /\bprint\s*\(/;
-exports.AutoPrintRegExp = AutoPrintRegExp;
-
-function formatL10nValue(text, args) {
- if (!args) {
- return text;
- }
-
- return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
- return name in args ? args[name] : "{{" + name + "}}";
- });
-}
-
-const NullL10n = {
- async getLanguage() {
- return "en-us";
- },
-
- async getDirection() {
- return "ltr";
- },
-
- async get(property, args, fallback) {
- return formatL10nValue(fallback, args);
- },
-
- async translate(element) {}
-
-};
-exports.NullL10n = NullL10n;
-
-function getOutputScale(ctx) {
- const devicePixelRatio = window.devicePixelRatio || 1;
- const backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
- const pixelRatio = devicePixelRatio / backingStoreRatio;
- return {
- sx: pixelRatio,
- sy: pixelRatio,
- scaled: pixelRatio !== 1
- };
-}
-
-function scrollIntoView(element, spot, skipOverflowHiddenElements = false) {
- let parent = element.offsetParent;
-
- if (!parent) {
- console.error("offsetParent is not set -- cannot scroll");
- return;
- }
-
- let offsetY = element.offsetTop + element.clientTop;
- let offsetX = element.offsetLeft + element.clientLeft;
-
- while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || skipOverflowHiddenElements && getComputedStyle(parent).overflow === "hidden") {
- if (parent.dataset._scaleY) {
- offsetY /= parent.dataset._scaleY;
- offsetX /= parent.dataset._scaleX;
- }
-
- offsetY += parent.offsetTop;
- offsetX += parent.offsetLeft;
- parent = parent.offsetParent;
-
- if (!parent) {
- return;
- }
- }
-
- if (spot) {
- if (spot.top !== undefined) {
- offsetY += spot.top;
- }
-
- if (spot.left !== undefined) {
- offsetX += spot.left;
- parent.scrollLeft = offsetX;
- }
- }
-
- parent.scrollTop = offsetY;
-}
-
-function watchScroll(viewAreaElement, callback) {
- const debounceScroll = function (evt) {
- if (rAF) {
- return;
- }
-
- rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {
- rAF = null;
- const currentX = viewAreaElement.scrollLeft;
- const lastX = state.lastX;
-
- if (currentX !== lastX) {
- state.right = currentX > lastX;
- }
-
- state.lastX = currentX;
- const currentY = viewAreaElement.scrollTop;
- const lastY = state.lastY;
-
- if (currentY !== lastY) {
- state.down = currentY > lastY;
- }
-
- state.lastY = currentY;
- callback(state);
- });
- };
-
- const state = {
- right: true,
- down: true,
- lastX: viewAreaElement.scrollLeft,
- lastY: viewAreaElement.scrollTop,
- _eventHandler: debounceScroll
- };
- let rAF = null;
- viewAreaElement.addEventListener("scroll", debounceScroll, true);
- return state;
-}
-
-function parseQueryString(query) {
- const parts = query.split("&");
- const params = Object.create(null);
-
- for (let i = 0, ii = parts.length; i < ii; ++i) {
- const param = parts[i].split("=");
- const key = param[0].toLowerCase();
- const value = param.length > 1 ? param[1] : null;
- params[decodeURIComponent(key)] = decodeURIComponent(value);
- }
-
- return params;
-}
-
-function binarySearchFirstItem(items, condition) {
- let minIndex = 0;
- let maxIndex = items.length - 1;
-
- if (maxIndex < 0 || !condition(items[maxIndex])) {
- return items.length;
- }
-
- if (condition(items[minIndex])) {
- return minIndex;
- }
-
- while (minIndex < maxIndex) {
- const currentIndex = minIndex + maxIndex >> 1;
- const currentItem = items[currentIndex];
-
- if (condition(currentItem)) {
- maxIndex = currentIndex;
- } else {
- minIndex = currentIndex + 1;
- }
- }
-
- return minIndex;
-}
-
-function approximateFraction(x) {
- if (Math.floor(x) === x) {
- return [x, 1];
- }
-
- const xinv = 1 / x;
- const limit = 8;
-
- if (xinv > limit) {
- return [1, limit];
- } else if (Math.floor(xinv) === xinv) {
- return [1, xinv];
- }
-
- const x_ = x > 1 ? xinv : x;
- let a = 0,
- b = 1,
- c = 1,
- d = 1;
-
- while (true) {
- const p = a + c,
- q = b + d;
-
- if (q > limit) {
- break;
- }
-
- if (x_ <= p / q) {
- c = p;
- d = q;
- } else {
- a = p;
- b = q;
- }
- }
-
- let result;
-
- if (x_ - a / b < c / d - x_) {
- result = x_ === x ? [a, b] : [b, a];
- } else {
- result = x_ === x ? [c, d] : [d, c];
- }
-
- return result;
-}
-
-function roundToDivide(x, div) {
- const r = x % div;
- return r === 0 ? x : Math.round(x - r + div);
-}
-
-function getPageSizeInches({
- view,
- userUnit,
- rotate
-}) {
- const [x1, y1, x2, y2] = view;
- const changeOrientation = rotate % 180 !== 0;
- const width = (x2 - x1) / 72 * userUnit;
- const height = (y2 - y1) / 72 * userUnit;
- return {
- width: changeOrientation ? height : width,
- height: changeOrientation ? width : height
- };
-}
-
-function backtrackBeforeAllVisibleElements(index, views, top) {
- if (index < 2) {
- return index;
- }
-
- let elt = views[index].div;
- let pageTop = elt.offsetTop + elt.clientTop;
-
- if (pageTop >= top) {
- elt = views[index - 1].div;
- pageTop = elt.offsetTop + elt.clientTop;
- }
-
- for (let i = index - 2; i >= 0; --i) {
- elt = views[i].div;
-
- if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {
- break;
- }
-
- index = i;
- }
-
- return index;
-}
-
-function getVisibleElements(scrollEl, views, sortByVisibility = false, horizontal = false) {
- const top = scrollEl.scrollTop,
- bottom = top + scrollEl.clientHeight;
- const left = scrollEl.scrollLeft,
- right = left + scrollEl.clientWidth;
-
- function isElementBottomAfterViewTop(view) {
- const element = view.div;
- const elementBottom = element.offsetTop + element.clientTop + element.clientHeight;
- return elementBottom > top;
- }
-
- function isElementRightAfterViewLeft(view) {
- const element = view.div;
- const elementRight = element.offsetLeft + element.clientLeft + element.clientWidth;
- return elementRight > left;
- }
-
- const visible = [],
- numViews = views.length;
- let firstVisibleElementInd = numViews === 0 ? 0 : binarySearchFirstItem(views, horizontal ? isElementRightAfterViewLeft : isElementBottomAfterViewTop);
-
- if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {
- firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);
- }
-
- let lastEdge = horizontal ? right : -1;
-
- for (let i = firstVisibleElementInd; i < numViews; i++) {
- const view = views[i],
- element = view.div;
- const currentWidth = element.offsetLeft + element.clientLeft;
- const currentHeight = element.offsetTop + element.clientTop;
- const viewWidth = element.clientWidth,
- viewHeight = element.clientHeight;
- const viewRight = currentWidth + viewWidth;
- const viewBottom = currentHeight + viewHeight;
-
- if (lastEdge === -1) {
- if (viewBottom >= bottom) {
- lastEdge = viewBottom;
- }
- } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {
- break;
- }
-
- if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) {
- continue;
- }
-
- const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);
- const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);
- const percent = (viewHeight - hiddenHeight) * (viewWidth - hiddenWidth) * 100 / viewHeight / viewWidth | 0;
- visible.push({
- id: view.id,
- x: currentWidth,
- y: currentHeight,
- view,
- percent
- });
- }
-
- const first = visible[0],
- last = visible[visible.length - 1];
-
- if (sortByVisibility) {
- visible.sort(function (a, b) {
- const pc = a.percent - b.percent;
-
- if (Math.abs(pc) > 0.001) {
- return -pc;
- }
-
- return a.id - b.id;
- });
- }
-
- return {
- first,
- last,
- views: visible
- };
-}
-
-function noContextMenuHandler(evt) {
- evt.preventDefault();
-}
-
-function isDataSchema(url) {
- let i = 0;
- const ii = url.length;
-
- while (i < ii && url[i].trim() === "") {
- i++;
- }
-
- return url.substring(i, i + 5).toLowerCase() === "data:";
-}
-
-function getPDFFileNameFromURL(url, defaultFilename = "document.pdf") {
- if (typeof url !== "string") {
- return defaultFilename;
- }
-
- if (isDataSchema(url)) {
- console.warn("getPDFFileNameFromURL: " + 'ignoring "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 (ex) {}
- }
- }
-
- return suggestedFilename || defaultFilename;
-}
-
-function normalizeWheelEventDelta(evt) {
- let delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);
- const angle = Math.atan2(evt.deltaY, evt.deltaX);
-
- if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {
- delta = -delta;
- }
-
- const MOUSE_DOM_DELTA_PIXEL_MODE = 0;
- const MOUSE_DOM_DELTA_LINE_MODE = 1;
- const MOUSE_PIXELS_PER_LINE = 30;
- const MOUSE_LINES_PER_PAGE = 30;
-
- if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {
- delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;
- } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {
- delta /= MOUSE_LINES_PER_PAGE;
- }
-
- return delta;
-}
-
-function isValidRotation(angle) {
- return Number.isInteger(angle) && angle % 90 === 0;
-}
-
-function isValidScrollMode(mode) {
- return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN;
-}
-
-function isValidSpreadMode(mode) {
- return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN;
-}
-
-function isPortraitOrientation(size) {
- return size.width <= size.height;
-}
-
-const WaitOnType = {
- EVENT: "event",
- TIMEOUT: "timeout"
-};
-exports.WaitOnType = WaitOnType;
-
-function waitOnEventOrTimeout({
- target,
- name,
- delay = 0
-}) {
- return new Promise(function (resolve, reject) {
- if (typeof target !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) {
- throw new Error("waitOnEventOrTimeout - invalid parameters.");
- }
-
- function handler(type) {
- if (target instanceof EventBus) {
- target._off(name, eventHandler);
- } else {
- target.removeEventListener(name, eventHandler);
- }
-
- if (timeout) {
- clearTimeout(timeout);
- }
-
- resolve(type);
- }
-
- const eventHandler = handler.bind(null, WaitOnType.EVENT);
-
- if (target instanceof EventBus) {
- target._on(name, eventHandler);
- } else {
- target.addEventListener(name, eventHandler);
- }
-
- const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);
- const timeout = setTimeout(timeoutHandler, delay);
- });
-}
-
-const animationStarted = new Promise(function (resolve) {
- window.requestAnimationFrame(resolve);
-});
-exports.animationStarted = animationStarted;
-
-function dispatchDOMEvent(eventName, args = null) {
- throw new Error("Not implemented: dispatchDOMEvent");
-}
-
-class EventBus {
- constructor(options) {
- this._listeners = Object.create(null);
- }
-
- on(eventName, listener) {
- this._on(eventName, listener, {
- external: true
- });
- }
-
- off(eventName, listener) {
- this._off(eventName, listener, {
- external: true
- });
- }
-
- dispatch(eventName) {
- const eventListeners = this._listeners[eventName];
-
- if (!eventListeners || eventListeners.length === 0) {
- return;
- }
-
- const args = Array.prototype.slice.call(arguments, 1);
- let externalListeners;
- eventListeners.slice(0).forEach(function ({
- listener,
- external
- }) {
- if (external) {
- if (!externalListeners) {
- externalListeners = [];
- }
-
- externalListeners.push(listener);
- return;
- }
-
- listener.apply(null, args);
- });
-
- if (externalListeners) {
- externalListeners.forEach(function (listener) {
- listener.apply(null, args);
- });
- externalListeners = null;
- }
- }
-
- _on(eventName, listener, options = null) {
- let eventListeners = this._listeners[eventName];
-
- if (!eventListeners) {
- this._listeners[eventName] = eventListeners = [];
- }
-
- eventListeners.push({
- listener,
- external: (options && options.external) === true
- });
- }
-
- _off(eventName, listener, options = null) {
- const eventListeners = this._listeners[eventName];
-
- if (!eventListeners) {
- return;
- }
-
- for (let i = 0, ii = eventListeners.length; i < ii; i++) {
- if (eventListeners[i].listener === listener) {
- eventListeners.splice(i, 1);
- return;
- }
- }
- }
-
-}
-
-exports.EventBus = EventBus;
-
-function clamp(v, min, max) {
- return Math.min(Math.max(v, min), max);
-}
-
-class ProgressBar {
- constructor(id, {
- height,
- width,
- units
- } = {}) {
- this.visible = true;
- this.div = document.querySelector(id + " .progress");
- this.bar = this.div.parentNode;
- this.height = height || 100;
- this.width = width || 100;
- this.units = units || "%";
- this.div.style.height = this.height + this.units;
- this.percent = 0;
- }
-
- _updateBar() {
- if (this._indeterminate) {
- this.div.classList.add("indeterminate");
- this.div.style.width = this.width + this.units;
- return;
- }
-
- this.div.classList.remove("indeterminate");
- const progressSize = this.width * this._percent / 100;
- this.div.style.width = progressSize + this.units;
- }
-
- get percent() {
- return this._percent;
- }
-
- set percent(val) {
- this._indeterminate = isNaN(val);
- this._percent = clamp(val, 0, 100);
-
- this._updateBar();
- }
-
- setWidth(viewer) {
- if (!viewer) {
- return;
- }
-
- const container = viewer.parentNode;
- const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;
-
- if (scrollbarWidth > 0) {
- this.bar.style.width = `calc(100% - ${scrollbarWidth}px)`;
- }
- }
-
- hide() {
- if (!this.visible) {
- return;
- }
-
- this.visible = false;
- this.bar.classList.add("hidden");
- document.body.classList.remove("loadingInProgress");
- }
-
- show() {
- if (this.visible) {
- return;
- }
-
- this.visible = true;
- document.body.classList.add("loadingInProgress");
- this.bar.classList.remove("hidden");
- }
-
-}
-
-exports.ProgressBar = ProgressBar;
-
-function moveToEndOfArray(arr, condition) {
- const moved = [],
- len = arr.length;
- let write = 0;
-
- for (let read = 0; read < len; ++read) {
- if (condition(arr[read])) {
- moved.push(arr[read]);
- } else {
- arr[write] = arr[read];
- ++write;
- }
- }
-
- for (let read = 0; write < len; ++read, ++write) {
- arr[write] = moved[read];
- }
-}
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.OptionKind = exports.AppOptions = void 0;
-
-var _viewer_compatibility = __webpack_require__(4);
-
-const OptionKind = {
- VIEWER: 0x02,
- API: 0x04,
- WORKER: 0x08,
- PREFERENCE: 0x80
-};
-exports.OptionKind = OptionKind;
-const defaultOptions = {
- cursorToolOnLoad: {
- value: 0,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- defaultUrl: {
- value: "compressed.tracemonkey-pldi-09.pdf",
- kind: OptionKind.VIEWER
- },
- defaultZoomValue: {
- value: "",
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- disableCreateObjectURL: {
- value: false,
- compatibility: _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL,
- kind: OptionKind.VIEWER
- },
- disableHistory: {
- value: false,
- kind: OptionKind.VIEWER
- },
- disablePageLabels: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- enablePermissions: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- enablePrintAutoRotate: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- enableWebGL: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- externalLinkRel: {
- value: "noopener noreferrer nofollow",
- kind: OptionKind.VIEWER
- },
- externalLinkTarget: {
- value: 0,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- historyUpdateUrl: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- ignoreDestinationZoom: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- imageResourcesPath: {
- value: "./images/",
- kind: OptionKind.VIEWER
- },
- maxCanvasPixels: {
- value: 16777216,
- compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels,
- kind: OptionKind.VIEWER
- },
- pdfBugEnabled: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- printResolution: {
- value: 150,
- kind: OptionKind.VIEWER
- },
- renderer: {
- value: "canvas",
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- renderInteractiveForms: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- sidebarViewOnLoad: {
- value: -1,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- scrollModeOnLoad: {
- value: -1,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- spreadModeOnLoad: {
- value: -1,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- textLayerMode: {
- value: 1,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- useOnlyCssZoom: {
- value: false,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- viewOnLoad: {
- value: 0,
- kind: OptionKind.VIEWER + OptionKind.PREFERENCE
- },
- cMapPacked: {
- value: true,
- kind: OptionKind.API
- },
- cMapUrl: {
- value: "../web/cmaps/",
- kind: OptionKind.API
- },
- disableAutoFetch: {
- value: false,
- kind: OptionKind.API + OptionKind.PREFERENCE
- },
- disableFontFace: {
- value: false,
- kind: OptionKind.API + OptionKind.PREFERENCE
- },
- disableRange: {
- value: false,
- kind: OptionKind.API + OptionKind.PREFERENCE
- },
- disableStream: {
- value: false,
- kind: OptionKind.API + OptionKind.PREFERENCE
- },
- docBaseUrl: {
- value: "",
- kind: OptionKind.API
- },
- fontExtraProperties: {
- value: false,
- kind: OptionKind.API
- },
- isEvalSupported: {
- value: true,
- kind: OptionKind.API
- },
- maxImageSize: {
- value: -1,
- kind: OptionKind.API
- },
- pdfBug: {
- value: false,
- kind: OptionKind.API
- },
- verbosity: {
- value: 1,
- kind: OptionKind.API
- },
- workerPort: {
- value: null,
- kind: OptionKind.WORKER
- },
- workerSrc: {
- value: "../build/pdf.worker.js",
- kind: OptionKind.WORKER
- }
-};
-{
- defaultOptions.disablePreferences = {
- value: false,
- kind: OptionKind.VIEWER
- };
- defaultOptions.locale = {
- value: typeof navigator !== "undefined" ? navigator.language : "en-US",
- kind: OptionKind.VIEWER
- };
-}
-const userOptions = Object.create(null);
-
-class AppOptions {
- constructor() {
- throw new Error("Cannot initialize AppOptions.");
- }
-
- static get(name) {
- const userOption = userOptions[name];
-
- if (userOption !== undefined) {
- return userOption;
- }
-
- const defaultOption = defaultOptions[name];
-
- if (defaultOption !== undefined) {
- return defaultOption.compatibility || defaultOption.value;
- }
-
- return undefined;
- }
-
- static getAll(kind = null) {
- const options = Object.create(null);
-
- for (const name in defaultOptions) {
- const defaultOption = defaultOptions[name];
-
- if (kind) {
- if ((kind & defaultOption.kind) === 0) {
- continue;
- }
-
- if (kind === OptionKind.PREFERENCE) {
- const value = defaultOption.value,
- valueType = typeof value;
-
- if (valueType === "boolean" || valueType === "string" || valueType === "number" && Number.isInteger(value)) {
- options[name] = value;
- continue;
- }
-
- throw new Error(`Invalid type for preference: ${name}`);
- }
- }
-
- const userOption = userOptions[name];
- options[name] = userOption !== undefined ? userOption : defaultOption.compatibility || defaultOption.value;
- }
-
- return options;
- }
-
- static set(name, value) {
- userOptions[name] = value;
- }
-
- static remove(name) {
- delete userOptions[name];
- }
-
-}
-
-exports.AppOptions = AppOptions;
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.viewerCompatibilityParams = void 0;
-const compatibilityParams = Object.create(null);
-{
- const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
- const platform = typeof navigator !== "undefined" && navigator.platform || "";
- const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
- const isAndroid = /Android/.test(userAgent);
- const isIE = /Trident/.test(userAgent);
- const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
- const isIOSChrome = /CriOS/.test(userAgent);
-
- (function checkOnBlobSupport() {
- if (isIE || isIOSChrome) {
- compatibilityParams.disableCreateObjectURL = true;
- }
- })();
-
- (function checkCanvasSizeLimitation() {
- if (isIOS || isAndroid) {
- compatibilityParams.maxCanvasPixels = 5242880;
- }
- })();
-}
-const viewerCompatibilityParams = Object.freeze(compatibilityParams);
-exports.viewerCompatibilityParams = viewerCompatibilityParams;
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-let pdfjsLib;
-
-if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) {
- pdfjsLib = window["pdfjs-dist/build/pdf"];
-} else {
- pdfjsLib = require("../build/pdf.js");
-}
-
-module.exports = pdfjsLib;
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFCursorTools = exports.CursorTool = void 0;
-
-var _grab_to_pan = __webpack_require__(7);
-
-const CursorTool = {
- SELECT: 0,
- HAND: 1,
- ZOOM: 2
-};
-exports.CursorTool = CursorTool;
-
-class PDFCursorTools {
- constructor({
- container,
- eventBus,
- cursorToolOnLoad = CursorTool.SELECT
- }) {
- this.container = container;
- this.eventBus = eventBus;
- this.active = CursorTool.SELECT;
- this.activeBeforePresentationMode = null;
- this.handTool = new _grab_to_pan.GrabToPan({
- element: this.container
- });
-
- this._addEventListeners();
-
- Promise.resolve().then(() => {
- this.switchTool(cursorToolOnLoad);
- });
- }
-
- get activeTool() {
- return this.active;
- }
-
- switchTool(tool) {
- if (this.activeBeforePresentationMode !== null) {
- return;
- }
-
- if (tool === this.active) {
- return;
- }
-
- const disableActiveTool = () => {
- switch (this.active) {
- case CursorTool.SELECT:
- break;
-
- case CursorTool.HAND:
- this.handTool.deactivate();
- break;
-
- case CursorTool.ZOOM:
- }
- };
-
- switch (tool) {
- case CursorTool.SELECT:
- disableActiveTool();
- break;
-
- case CursorTool.HAND:
- disableActiveTool();
- this.handTool.activate();
- break;
-
- case CursorTool.ZOOM:
- default:
- console.error(`switchTool: "${tool}" is an unsupported value.`);
- return;
- }
-
- this.active = tool;
-
- this._dispatchEvent();
- }
-
- _dispatchEvent() {
- this.eventBus.dispatch("cursortoolchanged", {
- source: this,
- tool: this.active
- });
- }
-
- _addEventListeners() {
- this.eventBus._on("switchcursortool", evt => {
- this.switchTool(evt.tool);
- });
-
- this.eventBus._on("presentationmodechanged", evt => {
- if (evt.switchInProgress) {
- return;
- }
-
- let previouslyActive;
-
- if (evt.active) {
- previouslyActive = this.active;
- this.switchTool(CursorTool.SELECT);
- this.activeBeforePresentationMode = previouslyActive;
- } else {
- previouslyActive = this.activeBeforePresentationMode;
- this.activeBeforePresentationMode = null;
- this.switchTool(previouslyActive);
- }
- });
- }
-
-}
-
-exports.PDFCursorTools = PDFCursorTools;
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.GrabToPan = GrabToPan;
-
-function GrabToPan(options) {
- this.element = options.element;
- this.document = options.element.ownerDocument;
-
- if (typeof options.ignoreTarget === "function") {
- this.ignoreTarget = options.ignoreTarget;
- }
-
- this.onActiveChanged = options.onActiveChanged;
- this.activate = this.activate.bind(this);
- this.deactivate = this.deactivate.bind(this);
- this.toggle = this.toggle.bind(this);
- this._onmousedown = this._onmousedown.bind(this);
- this._onmousemove = this._onmousemove.bind(this);
- this._endPan = this._endPan.bind(this);
- const overlay = this.overlay = document.createElement("div");
- overlay.className = "grab-to-pan-grabbing";
-}
-
-GrabToPan.prototype = {
- CSS_CLASS_GRAB: "grab-to-pan-grab",
- activate: function GrabToPan_activate() {
- if (!this.active) {
- this.active = true;
- this.element.addEventListener("mousedown", this._onmousedown, true);
- this.element.classList.add(this.CSS_CLASS_GRAB);
-
- if (this.onActiveChanged) {
- this.onActiveChanged(true);
- }
- }
- },
- deactivate: function GrabToPan_deactivate() {
- if (this.active) {
- this.active = false;
- this.element.removeEventListener("mousedown", this._onmousedown, true);
-
- this._endPan();
-
- this.element.classList.remove(this.CSS_CLASS_GRAB);
-
- if (this.onActiveChanged) {
- this.onActiveChanged(false);
- }
- }
- },
- toggle: function GrabToPan_toggle() {
- if (this.active) {
- this.deactivate();
- } else {
- this.activate();
- }
- },
- ignoreTarget: function GrabToPan_ignoreTarget(node) {
- return node[matchesSelector]("a[href], a[href] *, input, textarea, button, button *, select, option");
- },
- _onmousedown: function GrabToPan__onmousedown(event) {
- if (event.button !== 0 || this.ignoreTarget(event.target)) {
- return;
- }
-
- if (event.originalTarget) {
- try {
- event.originalTarget.tagName;
- } catch (e) {
- return;
- }
- }
-
- this.scrollLeftStart = this.element.scrollLeft;
- this.scrollTopStart = this.element.scrollTop;
- this.clientXStart = event.clientX;
- this.clientYStart = event.clientY;
- this.document.addEventListener("mousemove", this._onmousemove, true);
- this.document.addEventListener("mouseup", this._endPan, true);
- this.element.addEventListener("scroll", this._endPan, true);
- event.preventDefault();
- event.stopPropagation();
- const focusedElement = document.activeElement;
-
- if (focusedElement && !focusedElement.contains(event.target)) {
- focusedElement.blur();
- }
- },
- _onmousemove: function GrabToPan__onmousemove(event) {
- this.element.removeEventListener("scroll", this._endPan, true);
-
- if (isLeftMouseReleased(event)) {
- this._endPan();
-
- return;
- }
-
- const xDiff = event.clientX - this.clientXStart;
- const yDiff = event.clientY - this.clientYStart;
- const scrollTop = this.scrollTopStart - yDiff;
- const scrollLeft = this.scrollLeftStart - xDiff;
-
- if (this.element.scrollTo) {
- this.element.scrollTo({
- top: scrollTop,
- left: scrollLeft,
- behavior: "instant"
- });
- } else {
- this.element.scrollTop = scrollTop;
- this.element.scrollLeft = scrollLeft;
- }
-
- if (!this.overlay.parentNode) {
- document.body.appendChild(this.overlay);
- }
- },
- _endPan: function GrabToPan__endPan() {
- this.element.removeEventListener("scroll", this._endPan, true);
- this.document.removeEventListener("mousemove", this._onmousemove, true);
- this.document.removeEventListener("mouseup", this._endPan, true);
- this.overlay.remove();
- }
-};
-let matchesSelector;
-["webkitM", "mozM", "msM", "oM", "m"].some(function (prefix) {
- let name = prefix + "atches";
-
- if (name in document.documentElement) {
- matchesSelector = name;
- }
-
- name += "Selector";
-
- if (name in document.documentElement) {
- matchesSelector = name;
- }
-
- return matchesSelector;
-});
-const isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9;
-const chrome = window.chrome;
-const isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app);
-const isSafari6plus = /Apple/.test(navigator.vendor) && /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent);
-
-function isLeftMouseReleased(event) {
- if ("buttons" in event && isNotIEorIsIE10plus) {
- return !(event.buttons & 1);
- }
-
- if (isChrome15OrOpera15plus || isSafari6plus) {
- return event.which === 0;
- }
-
- return false;
-}
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFRenderingQueue = exports.RenderingStates = void 0;
-const CLEANUP_TIMEOUT = 30000;
-const RenderingStates = {
- INITIAL: 0,
- RUNNING: 1,
- PAUSED: 2,
- FINISHED: 3
-};
-exports.RenderingStates = RenderingStates;
-
-class PDFRenderingQueue {
- constructor() {
- this.pdfViewer = null;
- this.pdfThumbnailViewer = null;
- this.onIdle = null;
- this.highestPriorityPage = null;
- this.idleTimeout = null;
- this.printing = false;
- this.isThumbnailViewEnabled = false;
- }
-
- setViewer(pdfViewer) {
- this.pdfViewer = pdfViewer;
- }
-
- setThumbnailViewer(pdfThumbnailViewer) {
- this.pdfThumbnailViewer = pdfThumbnailViewer;
- }
-
- isHighestPriority(view) {
- return this.highestPriorityPage === view.renderingId;
- }
-
- renderHighestPriority(currentlyVisiblePages) {
- if (this.idleTimeout) {
- clearTimeout(this.idleTimeout);
- this.idleTimeout = null;
- }
-
- if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {
- return;
- }
-
- if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {
- if (this.pdfThumbnailViewer.forceRendering()) {
- return;
- }
- }
-
- if (this.printing) {
- return;
- }
-
- if (this.onIdle) {
- this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);
- }
- }
-
- getHighestPriority(visible, views, scrolledDown) {
- const visibleViews = visible.views;
- const numVisible = visibleViews.length;
-
- if (numVisible === 0) {
- return null;
- }
-
- for (let i = 0; i < numVisible; ++i) {
- const view = visibleViews[i].view;
-
- if (!this.isViewFinished(view)) {
- return view;
- }
- }
-
- if (scrolledDown) {
- const nextPageIndex = visible.last.id;
-
- if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {
- return views[nextPageIndex];
- }
- } else {
- const previousPageIndex = visible.first.id - 2;
-
- if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) {
- return views[previousPageIndex];
- }
- }
-
- return null;
- }
-
- isViewFinished(view) {
- return view.renderingState === RenderingStates.FINISHED;
- }
-
- renderView(view) {
- switch (view.renderingState) {
- case RenderingStates.FINISHED:
- return false;
-
- case RenderingStates.PAUSED:
- this.highestPriorityPage = view.renderingId;
- view.resume();
- break;
-
- case RenderingStates.RUNNING:
- this.highestPriorityPage = view.renderingId;
- break;
-
- case RenderingStates.INITIAL:
- this.highestPriorityPage = view.renderingId;
- view.draw().finally(() => {
- this.renderHighestPriority();
- }).catch(reason => {
- console.error(`renderView: "${reason}"`);
- });
- break;
- }
-
- return true;
- }
-
-}
-
-exports.PDFRenderingQueue = PDFRenderingQueue;
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFSidebar = exports.SidebarView = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdf_rendering_queue = __webpack_require__(8);
-
-const UI_NOTIFICATION_CLASS = "pdfSidebarNotification";
-const SidebarView = {
- UNKNOWN: -1,
- NONE: 0,
- THUMBS: 1,
- OUTLINE: 2,
- ATTACHMENTS: 3,
- LAYERS: 4
-};
-exports.SidebarView = SidebarView;
-
-class PDFSidebar {
- constructor({
- elements,
- pdfViewer,
- pdfThumbnailViewer,
- eventBus,
- l10n = _ui_utils.NullL10n,
- disableNotification = false
- }) {
- this.isOpen = false;
- this.active = SidebarView.THUMBS;
- this.isInitialViewSet = false;
- this.onToggled = null;
- this.pdfViewer = pdfViewer;
- this.pdfThumbnailViewer = pdfThumbnailViewer;
- this.outerContainer = elements.outerContainer;
- this.viewerContainer = elements.viewerContainer;
- this.toggleButton = elements.toggleButton;
- this.thumbnailButton = elements.thumbnailButton;
- this.outlineButton = elements.outlineButton;
- this.attachmentsButton = elements.attachmentsButton;
- this.thumbnailView = elements.thumbnailView;
- this.outlineView = elements.outlineView;
- this.attachmentsView = elements.attachmentsView;
- this.eventBus = eventBus;
- this.l10n = l10n;
- this._disableNotification = disableNotification;
-
- this._addEventListeners();
- }
-
- reset() {
- this.isInitialViewSet = false;
-
- this._hideUINotification(null);
-
- this.switchView(SidebarView.THUMBS);
- this.outlineButton.disabled = false;
- this.attachmentsButton.disabled = false;
- }
-
- get visibleView() {
- return this.isOpen ? this.active : SidebarView.NONE;
- }
-
- get isThumbnailViewVisible() {
- return this.isOpen && this.active === SidebarView.THUMBS;
- }
-
- get isOutlineViewVisible() {
- return this.isOpen && this.active === SidebarView.OUTLINE;
- }
-
- get isAttachmentsViewVisible() {
- return this.isOpen && this.active === SidebarView.ATTACHMENTS;
- }
-
- setInitialView(view = SidebarView.NONE) {
- if (this.isInitialViewSet) {
- return;
- }
-
- this.isInitialViewSet = true;
-
- if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) {
- this._dispatchEvent();
-
- return;
- }
-
- if (!this._switchView(view, true)) {
- this._dispatchEvent();
- }
- }
-
- switchView(view, forceOpen = false) {
- this._switchView(view, forceOpen);
- }
-
- _switchView(view, forceOpen = false) {
- const isViewChanged = view !== this.active;
- let shouldForceRendering = false;
-
- switch (view) {
- case SidebarView.NONE:
- if (this.isOpen) {
- this.close();
- return true;
- }
-
- return false;
-
- case SidebarView.THUMBS:
- if (this.isOpen && isViewChanged) {
- shouldForceRendering = true;
- }
-
- break;
-
- case SidebarView.OUTLINE:
- if (this.outlineButton.disabled) {
- return false;
- }
-
- break;
-
- case SidebarView.ATTACHMENTS:
- if (this.attachmentsButton.disabled) {
- return false;
- }
-
- break;
-
- default:
- console.error(`PDFSidebar._switchView: "${view}" is not a valid view.`);
- return false;
- }
-
- this.active = view;
- this.thumbnailButton.classList.toggle("toggled", view === SidebarView.THUMBS);
- this.outlineButton.classList.toggle("toggled", view === SidebarView.OUTLINE);
- this.attachmentsButton.classList.toggle("toggled", view === SidebarView.ATTACHMENTS);
- this.thumbnailView.classList.toggle("hidden", view !== SidebarView.THUMBS);
- this.outlineView.classList.toggle("hidden", view !== SidebarView.OUTLINE);
- this.attachmentsView.classList.toggle("hidden", view !== SidebarView.ATTACHMENTS);
-
- if (forceOpen && !this.isOpen) {
- this.open();
- return true;
- }
-
- if (shouldForceRendering) {
- this._updateThumbnailViewer();
-
- this._forceRendering();
- }
-
- if (isViewChanged) {
- this._dispatchEvent();
- }
-
- this._hideUINotification(this.active);
-
- return isViewChanged;
- }
-
- open() {
- if (this.isOpen) {
- return;
- }
-
- this.isOpen = true;
- this.toggleButton.classList.add("toggled");
- this.outerContainer.classList.add("sidebarMoving", "sidebarOpen");
-
- if (this.active === SidebarView.THUMBS) {
- this._updateThumbnailViewer();
- }
-
- this._forceRendering();
-
- this._dispatchEvent();
-
- this._hideUINotification(this.active);
- }
-
- close() {
- if (!this.isOpen) {
- return;
- }
-
- this.isOpen = false;
- this.toggleButton.classList.remove("toggled");
- this.outerContainer.classList.add("sidebarMoving");
- this.outerContainer.classList.remove("sidebarOpen");
-
- this._forceRendering();
-
- this._dispatchEvent();
- }
-
- toggle() {
- if (this.isOpen) {
- this.close();
- } else {
- this.open();
- }
- }
-
- _dispatchEvent() {
- this.eventBus.dispatch("sidebarviewchanged", {
- source: this,
- view: this.visibleView
- });
- }
-
- _forceRendering() {
- if (this.onToggled) {
- this.onToggled();
- } else {
- this.pdfViewer.forceRendering();
- this.pdfThumbnailViewer.forceRendering();
- }
- }
-
- _updateThumbnailViewer() {
- const {
- pdfViewer,
- pdfThumbnailViewer
- } = this;
- const pagesCount = pdfViewer.pagesCount;
-
- for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) {
- const pageView = pdfViewer.getPageView(pageIndex);
-
- if (pageView && pageView.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) {
- const thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);
- thumbnailView.setImage(pageView);
- }
- }
-
- pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);
- }
-
- _showUINotification(view) {
- if (this._disableNotification) {
- return;
- }
-
- this.l10n.get("toggle_sidebar_notification.title", null, "Toggle Sidebar (document contains outline/attachments)").then(msg => {
- this.toggleButton.title = msg;
- });
-
- if (!this.isOpen) {
- this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);
- } else if (view === this.active) {
- return;
- }
-
- switch (view) {
- case SidebarView.OUTLINE:
- this.outlineButton.classList.add(UI_NOTIFICATION_CLASS);
- break;
-
- case SidebarView.ATTACHMENTS:
- this.attachmentsButton.classList.add(UI_NOTIFICATION_CLASS);
- break;
- }
- }
-
- _hideUINotification(view) {
- if (this._disableNotification) {
- return;
- }
-
- const removeNotification = sidebarView => {
- switch (sidebarView) {
- case SidebarView.OUTLINE:
- this.outlineButton.classList.remove(UI_NOTIFICATION_CLASS);
- break;
-
- case SidebarView.ATTACHMENTS:
- this.attachmentsButton.classList.remove(UI_NOTIFICATION_CLASS);
- break;
- }
- };
-
- if (!this.isOpen && view !== null) {
- return;
- }
-
- this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);
-
- if (view !== null) {
- removeNotification(view);
- return;
- }
-
- for (view in SidebarView) {
- removeNotification(SidebarView[view]);
- }
-
- this.l10n.get("toggle_sidebar.title", null, "Toggle Sidebar").then(msg => {
- this.toggleButton.title = msg;
- });
- }
-
- _addEventListeners() {
- this.viewerContainer.addEventListener("transitionend", evt => {
- if (evt.target === this.viewerContainer) {
- this.outerContainer.classList.remove("sidebarMoving");
- }
- });
- this.toggleButton.addEventListener("click", () => {
- this.toggle();
- });
- this.thumbnailButton.addEventListener("click", () => {
- this.switchView(SidebarView.THUMBS);
- });
- this.outlineButton.addEventListener("click", () => {
- this.switchView(SidebarView.OUTLINE);
- });
- this.outlineButton.addEventListener("dblclick", () => {
- this.eventBus.dispatch("toggleoutlinetree", {
- source: this
- });
- });
- this.attachmentsButton.addEventListener("click", () => {
- this.switchView(SidebarView.ATTACHMENTS);
- });
-
- this.eventBus._on("outlineloaded", evt => {
- const outlineCount = evt.outlineCount;
- this.outlineButton.disabled = !outlineCount;
-
- if (outlineCount) {
- this._showUINotification(SidebarView.OUTLINE);
- } else if (this.active === SidebarView.OUTLINE) {
- this.switchView(SidebarView.THUMBS);
- }
- });
-
- this.eventBus._on("attachmentsloaded", evt => {
- if (evt.attachmentsCount) {
- this.attachmentsButton.disabled = false;
-
- this._showUINotification(SidebarView.ATTACHMENTS);
-
- return;
- }
-
- Promise.resolve().then(() => {
- if (this.attachmentsView.hasChildNodes()) {
- return;
- }
-
- this.attachmentsButton.disabled = true;
-
- if (this.active === SidebarView.ATTACHMENTS) {
- this.switchView(SidebarView.THUMBS);
- }
- });
- });
-
- this.eventBus._on("presentationmodechanged", evt => {
- if (!evt.active && !evt.switchInProgress && this.isThumbnailViewVisible) {
- this._updateThumbnailViewer();
- }
- });
- }
-
-}
-
-exports.PDFSidebar = PDFSidebar;
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.OverlayManager = void 0;
-
-class OverlayManager {
- constructor() {
- this._overlays = {};
- this._active = null;
- this._keyDownBound = this._keyDown.bind(this);
- }
-
- get active() {
- return this._active;
- }
-
- async register(name, element, callerCloseMethod = null, canForceClose = false) {
- let container;
-
- if (!name || !element || !(container = element.parentNode)) {
- throw new Error("Not enough parameters.");
- } else if (this._overlays[name]) {
- throw new Error("The overlay is already registered.");
- }
-
- this._overlays[name] = {
- element,
- container,
- callerCloseMethod,
- canForceClose
- };
- }
-
- async unregister(name) {
- if (!this._overlays[name]) {
- throw new Error("The overlay does not exist.");
- } else if (this._active === name) {
- throw new Error("The overlay cannot be removed while it is active.");
- }
-
- delete this._overlays[name];
- }
-
- async open(name) {
- if (!this._overlays[name]) {
- throw new Error("The overlay does not exist.");
- } else if (this._active) {
- if (this._overlays[name].canForceClose) {
- this._closeThroughCaller();
- } else if (this._active === name) {
- throw new Error("The overlay is already active.");
- } else {
- throw new Error("Another overlay is currently active.");
- }
- }
-
- this._active = name;
-
- this._overlays[this._active].element.classList.remove("hidden");
-
- this._overlays[this._active].container.classList.remove("hidden");
-
- window.addEventListener("keydown", this._keyDownBound);
- }
-
- async close(name) {
- if (!this._overlays[name]) {
- throw new Error("The overlay does not exist.");
- } else if (!this._active) {
- throw new Error("The overlay is currently not active.");
- } else if (this._active !== name) {
- throw new Error("Another overlay is currently active.");
- }
-
- this._overlays[this._active].container.classList.add("hidden");
-
- this._overlays[this._active].element.classList.add("hidden");
-
- this._active = null;
- window.removeEventListener("keydown", this._keyDownBound);
- }
-
- _keyDown(evt) {
- if (this._active && evt.keyCode === 27) {
- this._closeThroughCaller();
-
- evt.preventDefault();
- }
- }
-
- _closeThroughCaller() {
- if (this._overlays[this._active].callerCloseMethod) {
- this._overlays[this._active].callerCloseMethod();
- }
-
- if (this._active) {
- this.close(this._active);
- }
- }
-
-}
-
-exports.OverlayManager = OverlayManager;
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PasswordPrompt = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdfjsLib = __webpack_require__(5);
-
-class PasswordPrompt {
- constructor(options, overlayManager, l10n = _ui_utils.NullL10n) {
- this.overlayName = options.overlayName;
- this.container = options.container;
- this.label = options.label;
- this.input = options.input;
- this.submitButton = options.submitButton;
- this.cancelButton = options.cancelButton;
- this.overlayManager = overlayManager;
- this.l10n = l10n;
- this.updateCallback = null;
- this.reason = null;
- this.submitButton.addEventListener("click", this.verify.bind(this));
- this.cancelButton.addEventListener("click", this.close.bind(this));
- this.input.addEventListener("keydown", e => {
- if (e.keyCode === 13) {
- this.verify();
- }
- });
- this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true);
- }
-
- open() {
- this.overlayManager.open(this.overlayName).then(() => {
- this.input.focus();
- let promptString;
-
- if (this.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) {
- promptString = this.l10n.get("password_invalid", null, "Invalid password. Please try again.");
- } else {
- promptString = this.l10n.get("password_label", null, "Enter the password to open this PDF file.");
- }
-
- promptString.then(msg => {
- this.label.textContent = msg;
- });
- });
- }
-
- close() {
- this.overlayManager.close(this.overlayName).then(() => {
- this.input.value = "";
- });
- }
-
- verify() {
- const password = this.input.value;
-
- if (password && password.length > 0) {
- this.close();
- this.updateCallback(password);
- }
- }
-
- setUpdateCallback(updateCallback, reason) {
- this.updateCallback = updateCallback;
- this.reason = reason;
- }
-
-}
-
-exports.PasswordPrompt = PasswordPrompt;
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFAttachmentViewer = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-class PDFAttachmentViewer {
- constructor({
- container,
- eventBus,
- downloadManager
- }) {
- this.container = container;
- this.eventBus = eventBus;
- this.downloadManager = downloadManager;
- this.reset();
-
- this.eventBus._on("fileattachmentannotation", this._appendAttachment.bind(this));
- }
-
- reset(keepRenderedCapability = false) {
- this.attachments = null;
- this.container.textContent = "";
-
- if (!keepRenderedCapability) {
- this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)();
- }
- }
-
- _dispatchEvent(attachmentsCount) {
- this._renderedCapability.resolve();
-
- this.eventBus.dispatch("attachmentsloaded", {
- source: this,
- attachmentsCount
- });
- }
-
- _bindPdfLink(button, content, filename) {
- let blobUrl;
-
- button.onclick = () => {
- if (!blobUrl) {
- blobUrl = URL.createObjectURL(new Blob([content], {
- type: "application/pdf"
- }));
- }
-
- let viewerUrl;
- viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
-
- try {
- window.open(viewerUrl);
- } catch (ex) {
- console.error(`_bindPdfLink: ${ex}`);
- URL.revokeObjectURL(blobUrl);
- blobUrl = null;
- this.downloadManager.downloadData(content, filename, "application/pdf");
- }
-
- return false;
- };
- }
-
- _bindLink(button, content, filename) {
- button.onclick = () => {
- this.downloadManager.downloadData(content, filename, "");
- return false;
- };
- }
-
- render({
- attachments,
- keepRenderedCapability = false
- }) {
- let attachmentsCount = 0;
-
- if (this.attachments) {
- this.reset(keepRenderedCapability === true);
- }
-
- this.attachments = attachments || null;
-
- if (!attachments) {
- this._dispatchEvent(attachmentsCount);
-
- return;
- }
-
- const names = Object.keys(attachments).sort(function (a, b) {
- return a.toLowerCase().localeCompare(b.toLowerCase());
- });
- attachmentsCount = names.length;
-
- for (let i = 0; i < attachmentsCount; i++) {
- const item = attachments[names[i]];
- const filename = (0, _pdfjsLib.removeNullCharacters)((0, _pdfjsLib.getFilenameFromUrl)(item.filename));
- const div = document.createElement("div");
- div.className = "attachmentsItem";
- const button = document.createElement("button");
- button.textContent = filename;
-
- if (/\.pdf$/i.test(filename) && !this.downloadManager.disableCreateObjectURL) {
- this._bindPdfLink(button, item.content, filename);
- } else {
- this._bindLink(button, item.content, filename);
- }
-
- div.appendChild(button);
- this.container.appendChild(div);
- }
-
- this._dispatchEvent(attachmentsCount);
- }
-
- _appendAttachment({
- id,
- filename,
- content
- }) {
- this._renderedCapability.promise.then(() => {
- let attachments = this.attachments;
-
- if (!attachments) {
- attachments = Object.create(null);
- } else {
- for (const name in attachments) {
- if (id === name) {
- return;
- }
- }
- }
-
- attachments[id] = {
- filename,
- content
- };
- this.render({
- attachments,
- keepRenderedCapability: true
- });
- });
- }
-
-}
-
-exports.PDFAttachmentViewer = PDFAttachmentViewer;
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFDocumentProperties = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _ui_utils = __webpack_require__(2);
-
-const DEFAULT_FIELD_CONTENT = "-";
-const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"];
-const US_PAGE_NAMES = {
- "8.5x11": "Letter",
- "8.5x14": "Legal"
-};
-const METRIC_PAGE_NAMES = {
- "297x420": "A3",
- "210x297": "A4"
-};
-
-function getPageName(size, isPortrait, pageNames) {
- const width = isPortrait ? size.width : size.height;
- const height = isPortrait ? size.height : size.width;
- return pageNames[`${width}x${height}`];
-}
-
-class PDFDocumentProperties {
- constructor({
- overlayName,
- fields,
- container,
- closeButton
- }, overlayManager, eventBus, l10n = _ui_utils.NullL10n) {
- this.overlayName = overlayName;
- this.fields = fields;
- this.container = container;
- this.overlayManager = overlayManager;
- this.l10n = l10n;
-
- this._reset();
-
- closeButton.addEventListener("click", this.close.bind(this));
- this.overlayManager.register(this.overlayName, this.container, this.close.bind(this));
-
- eventBus._on("pagechanging", evt => {
- this._currentPageNumber = evt.pageNumber;
- });
-
- eventBus._on("rotationchanging", evt => {
- this._pagesRotation = evt.pagesRotation;
- });
-
- this._isNonMetricLocale = true;
- l10n.getLanguage().then(locale => {
- this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);
- });
- }
-
- open() {
- const freezeFieldData = data => {
- Object.defineProperty(this, "fieldData", {
- value: Object.freeze(data),
- writable: false,
- enumerable: true,
- configurable: true
- });
- };
-
- Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]).then(() => {
- const currentPageNumber = this._currentPageNumber;
- const pagesRotation = this._pagesRotation;
-
- if (this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === this.fieldData._pagesRotation) {
- this._updateUI();
-
- return;
- }
-
- this.pdfDocument.getMetadata().then(({
- info,
- metadata,
- contentDispositionFilename
- }) => {
- return Promise.all([info, metadata, contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(this.maybeFileSize), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
- return this._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);
- }), this._parseLinearization(info.IsLinearized)]);
- }).then(([info, metadata, fileName, fileSize, creationDate, modDate, pageSize, isLinearized]) => {
- freezeFieldData({
- fileName,
- fileSize,
- title: info.Title,
- author: info.Author,
- subject: info.Subject,
- keywords: info.Keywords,
- creationDate,
- modificationDate: modDate,
- creator: info.Creator,
- producer: info.Producer,
- version: info.PDFFormatVersion,
- pageCount: this.pdfDocument.numPages,
- pageSize,
- linearized: isLinearized,
- _currentPageNumber: currentPageNumber,
- _pagesRotation: pagesRotation
- });
-
- this._updateUI();
-
- return this.pdfDocument.getDownloadInfo();
- }).then(({
- length
- }) => {
- this.maybeFileSize = length;
- return this._parseFileSize(length);
- }).then(fileSize => {
- if (fileSize === this.fieldData.fileSize) {
- return;
- }
-
- const data = Object.assign(Object.create(null), this.fieldData);
- data.fileSize = fileSize;
- freezeFieldData(data);
-
- this._updateUI();
- });
- });
- }
-
- close() {
- this.overlayManager.close(this.overlayName);
- }
-
- setDocument(pdfDocument, url = null) {
- if (this.pdfDocument) {
- this._reset();
-
- this._updateUI(true);
- }
-
- if (!pdfDocument) {
- return;
- }
-
- this.pdfDocument = pdfDocument;
- this.url = url;
-
- this._dataAvailableCapability.resolve();
- }
-
- setFileSize(fileSize) {
- if (Number.isInteger(fileSize) && fileSize > 0) {
- this.maybeFileSize = fileSize;
- }
- }
-
- _reset() {
- this.pdfDocument = null;
- this.url = null;
- this.maybeFileSize = 0;
- delete this.fieldData;
- this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)();
- this._currentPageNumber = 1;
- this._pagesRotation = 0;
- }
-
- _updateUI(reset = false) {
- if (reset || !this.fieldData) {
- for (const id in this.fields) {
- this.fields[id].textContent = DEFAULT_FIELD_CONTENT;
- }
-
- return;
- }
-
- if (this.overlayManager.active !== this.overlayName) {
- return;
- }
-
- for (const id in this.fields) {
- const content = this.fieldData[id];
- this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;
- }
- }
-
- async _parseFileSize(fileSize = 0) {
- const kb = fileSize / 1024;
-
- if (!kb) {
- return undefined;
- } else if (kb < 1024) {
- return this.l10n.get("document_properties_kb", {
- size_kb: (+kb.toPrecision(3)).toLocaleString(),
- size_b: fileSize.toLocaleString()
- }, "{{size_kb}} KB ({{size_b}} bytes)");
- }
-
- return this.l10n.get("document_properties_mb", {
- size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),
- size_b: fileSize.toLocaleString()
- }, "{{size_mb}} MB ({{size_b}} bytes)");
- }
-
- async _parsePageSize(pageSizeInches, pagesRotation) {
- if (!pageSizeInches) {
- return undefined;
- }
-
- if (pagesRotation % 180 !== 0) {
- pageSizeInches = {
- width: pageSizeInches.height,
- height: pageSizeInches.width
- };
- }
-
- const isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches);
- let sizeInches = {
- width: Math.round(pageSizeInches.width * 100) / 100,
- height: Math.round(pageSizeInches.height * 100) / 100
- };
- let sizeMillimeters = {
- width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,
- height: Math.round(pageSizeInches.height * 25.4 * 10) / 10
- };
- let pageName = null;
- let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);
-
- if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {
- const exactMillimeters = {
- width: pageSizeInches.width * 25.4,
- height: pageSizeInches.height * 25.4
- };
- const intMillimeters = {
- width: Math.round(sizeMillimeters.width),
- height: Math.round(sizeMillimeters.height)
- };
-
- if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) {
- rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);
-
- if (rawName) {
- sizeInches = {
- width: Math.round(intMillimeters.width / 25.4 * 100) / 100,
- height: Math.round(intMillimeters.height / 25.4 * 100) / 100
- };
- sizeMillimeters = intMillimeters;
- }
- }
- }
-
- if (rawName) {
- pageName = this.l10n.get("document_properties_page_size_name_" + rawName.toLowerCase(), null, rawName);
- }
-
- return Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get("document_properties_page_size_unit_" + (this._isNonMetricLocale ? "inches" : "millimeters"), null, this._isNonMetricLocale ? "in" : "mm"), pageName, this.l10n.get("document_properties_page_size_orientation_" + (isPortrait ? "portrait" : "landscape"), null, isPortrait ? "portrait" : "landscape")]).then(([{
- width,
- height
- }, unit, name, orientation]) => {
- return this.l10n.get("document_properties_page_size_dimension_" + (name ? "name_" : "") + "string", {
- width: width.toLocaleString(),
- height: height.toLocaleString(),
- unit,
- name,
- orientation
- }, "{{width}} × {{height}} {{unit}} (" + (name ? "{{name}}, " : "") + "{{orientation}})");
- });
- }
-
- async _parseDate(inputDate) {
- const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);
-
- if (!dateObject) {
- return undefined;
- }
-
- return this.l10n.get("document_properties_date_string", {
- date: dateObject.toLocaleDateString(),
- time: dateObject.toLocaleTimeString()
- }, "{{date}}, {{time}}");
- }
-
- _parseLinearization(isLinearized) {
- return this.l10n.get("document_properties_linearized_" + (isLinearized ? "yes" : "no"), null, isLinearized ? "Yes" : "No");
- }
-
-}
-
-exports.PDFDocumentProperties = PDFDocumentProperties;
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFFindBar = void 0;
-
-var _pdf_find_controller = __webpack_require__(15);
-
-var _ui_utils = __webpack_require__(2);
-
-const MATCHES_COUNT_LIMIT = 1000;
-
-class PDFFindBar {
- constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
- this.opened = false;
- this.bar = options.bar || null;
- this.toggleButton = options.toggleButton || null;
- this.findField = options.findField || null;
- this.highlightAll = options.highlightAllCheckbox || null;
- this.caseSensitive = options.caseSensitiveCheckbox || null;
- this.entireWord = options.entireWordCheckbox || null;
- this.findMsg = options.findMsg || null;
- this.findResultsCount = options.findResultsCount || null;
- this.findPreviousButton = options.findPreviousButton || null;
- this.findNextButton = options.findNextButton || null;
- this.eventBus = eventBus;
- this.l10n = l10n;
- this.toggleButton.addEventListener("click", () => {
- this.toggle();
- });
- this.findField.addEventListener("input", () => {
- this.dispatchEvent("");
- });
- this.bar.addEventListener("keydown", e => {
- switch (e.keyCode) {
- case 13:
- if (e.target === this.findField) {
- this.dispatchEvent("again", e.shiftKey);
- }
-
- break;
-
- case 27:
- this.close();
- break;
- }
- });
- this.findPreviousButton.addEventListener("click", () => {
- this.dispatchEvent("again", true);
- });
- this.findNextButton.addEventListener("click", () => {
- this.dispatchEvent("again", false);
- });
- this.highlightAll.addEventListener("click", () => {
- this.dispatchEvent("highlightallchange");
- });
- this.caseSensitive.addEventListener("click", () => {
- this.dispatchEvent("casesensitivitychange");
- });
- this.entireWord.addEventListener("click", () => {
- this.dispatchEvent("entirewordchange");
- });
-
- this.eventBus._on("resize", this._adjustWidth.bind(this));
- }
-
- reset() {
- this.updateUIState();
- }
-
- dispatchEvent(type, findPrev) {
- this.eventBus.dispatch("find", {
- source: this,
- type,
- query: this.findField.value,
- phraseSearch: true,
- caseSensitive: this.caseSensitive.checked,
- entireWord: this.entireWord.checked,
- highlightAll: this.highlightAll.checked,
- findPrevious: findPrev
- });
- }
-
- updateUIState(state, previous, matchesCount) {
- let notFound = false;
- let findMsg = "";
- let status = "";
-
- switch (state) {
- case _pdf_find_controller.FindState.FOUND:
- break;
-
- case _pdf_find_controller.FindState.PENDING:
- status = "pending";
- break;
-
- case _pdf_find_controller.FindState.NOT_FOUND:
- findMsg = this.l10n.get("find_not_found", null, "Phrase not found");
- notFound = true;
- break;
-
- case _pdf_find_controller.FindState.WRAPPED:
- if (previous) {
- findMsg = this.l10n.get("find_reached_top", null, "Reached top of document, continued from bottom");
- } else {
- findMsg = this.l10n.get("find_reached_bottom", null, "Reached end of document, continued from top");
- }
-
- break;
- }
-
- this.findField.classList.toggle("notFound", notFound);
- this.findField.setAttribute("data-status", status);
- Promise.resolve(findMsg).then(msg => {
- this.findMsg.textContent = msg;
-
- this._adjustWidth();
- });
- this.updateResultsCount(matchesCount);
- }
-
- updateResultsCount({
- current = 0,
- total = 0
- } = {}) {
- if (!this.findResultsCount) {
- return;
- }
-
- const limit = MATCHES_COUNT_LIMIT;
- let matchesCountMsg = "";
-
- if (total > 0) {
- if (total > limit) {
- matchesCountMsg = this.l10n.get("find_match_count_limit", {
- limit
- }, "More than {{limit}} match" + (limit !== 1 ? "es" : ""));
- } else {
- matchesCountMsg = this.l10n.get("find_match_count", {
- current,
- total
- }, "{{current}} of {{total}} match" + (total !== 1 ? "es" : ""));
- }
- }
-
- Promise.resolve(matchesCountMsg).then(msg => {
- this.findResultsCount.textContent = msg;
- this.findResultsCount.classList.toggle("hidden", !total);
-
- this._adjustWidth();
- });
- }
-
- open() {
- if (!this.opened) {
- this.opened = true;
- this.toggleButton.classList.add("toggled");
- this.bar.classList.remove("hidden");
- }
-
- this.findField.select();
- this.findField.focus();
-
- this._adjustWidth();
- }
-
- close() {
- if (!this.opened) {
- return;
- }
-
- this.opened = false;
- this.toggleButton.classList.remove("toggled");
- this.bar.classList.add("hidden");
- this.eventBus.dispatch("findbarclose", {
- source: this
- });
- }
-
- toggle() {
- if (this.opened) {
- this.close();
- } else {
- this.open();
- }
- }
-
- _adjustWidth() {
- if (!this.opened) {
- return;
- }
-
- this.bar.classList.remove("wrapContainers");
- const findbarHeight = this.bar.clientHeight;
- const inputContainerHeight = this.bar.firstElementChild.clientHeight;
-
- if (findbarHeight > inputContainerHeight) {
- this.bar.classList.add("wrapContainers");
- }
- }
-
-}
-
-exports.PDFFindBar = PDFFindBar;
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFFindController = exports.FindState = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _pdf_find_utils = __webpack_require__(16);
-
-var _ui_utils = __webpack_require__(2);
-
-const FindState = {
- FOUND: 0,
- NOT_FOUND: 1,
- WRAPPED: 2,
- PENDING: 3
-};
-exports.FindState = FindState;
-const FIND_TIMEOUT = 250;
-const MATCH_SCROLL_OFFSET_TOP = -50;
-const MATCH_SCROLL_OFFSET_LEFT = -400;
-const CHARACTERS_TO_NORMALIZE = {
- "\u2018": "'",
- "\u2019": "'",
- "\u201A": "'",
- "\u201B": "'",
- "\u201C": '"',
- "\u201D": '"',
- "\u201E": '"',
- "\u201F": '"',
- "\u00BC": "1/4",
- "\u00BD": "1/2",
- "\u00BE": "3/4"
-};
-let normalizationRegex = null;
-
-function normalize(text) {
- if (!normalizationRegex) {
- const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join("");
- normalizationRegex = new RegExp(`[${replace}]`, "g");
- }
-
- return text.replace(normalizationRegex, function (ch) {
- return CHARACTERS_TO_NORMALIZE[ch];
- });
-}
-
-class PDFFindController {
- constructor({
- linkService,
- eventBus
- }) {
- this._linkService = linkService;
- this._eventBus = eventBus;
-
- this._reset();
-
- eventBus._on("findbarclose", this._onFindBarClose.bind(this));
- }
-
- get highlightMatches() {
- return this._highlightMatches;
- }
-
- get pageMatches() {
- return this._pageMatches;
- }
-
- get pageMatchesLength() {
- return this._pageMatchesLength;
- }
-
- get selected() {
- return this._selected;
- }
-
- get state() {
- return this._state;
- }
-
- setDocument(pdfDocument) {
- if (this._pdfDocument) {
- this._reset();
- }
-
- if (!pdfDocument) {
- return;
- }
-
- this._pdfDocument = pdfDocument;
-
- this._firstPageCapability.resolve();
- }
-
- executeCommand(cmd, state) {
- if (!state) {
- return;
- }
-
- const pdfDocument = this._pdfDocument;
-
- if (this._state === null || this._shouldDirtyMatch(cmd, state)) {
- this._dirtyMatch = true;
- }
-
- this._state = state;
-
- if (cmd !== "findhighlightallchange") {
- this._updateUIState(FindState.PENDING);
- }
-
- this._firstPageCapability.promise.then(() => {
- if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
- return;
- }
-
- this._extractText();
-
- const findbarClosed = !this._highlightMatches;
- const pendingTimeout = !!this._findTimeout;
-
- if (this._findTimeout) {
- clearTimeout(this._findTimeout);
- this._findTimeout = null;
- }
-
- if (cmd === "find") {
- this._findTimeout = setTimeout(() => {
- this._nextMatch();
-
- this._findTimeout = null;
- }, FIND_TIMEOUT);
- } else if (this._dirtyMatch) {
- this._nextMatch();
- } else if (cmd === "findagain") {
- this._nextMatch();
-
- if (findbarClosed && this._state.highlightAll) {
- this._updateAllPages();
- }
- } else if (cmd === "findhighlightallchange") {
- if (pendingTimeout) {
- this._nextMatch();
- } else {
- this._highlightMatches = true;
- }
-
- this._updateAllPages();
- } else {
- this._nextMatch();
- }
- });
- }
-
- scrollMatchIntoView({
- element = null,
- pageIndex = -1,
- matchIndex = -1
- }) {
- if (!this._scrollMatches || !element) {
- return;
- } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {
- return;
- } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {
- return;
- }
-
- this._scrollMatches = false;
- const spot = {
- top: MATCH_SCROLL_OFFSET_TOP,
- left: MATCH_SCROLL_OFFSET_LEFT
- };
- (0, _ui_utils.scrollIntoView)(element, spot, true);
- }
-
- _reset() {
- this._highlightMatches = false;
- this._scrollMatches = false;
- this._pdfDocument = null;
- this._pageMatches = [];
- this._pageMatchesLength = [];
- this._state = null;
- this._selected = {
- pageIdx: -1,
- matchIdx: -1
- };
- this._offset = {
- pageIdx: null,
- matchIdx: null,
- wrapped: false
- };
- this._extractTextPromises = [];
- this._pageContents = [];
- this._matchesCountTotal = 0;
- this._pagesToSearch = null;
- this._pendingFindMatches = Object.create(null);
- this._resumePageIdx = null;
- this._dirtyMatch = false;
- clearTimeout(this._findTimeout);
- this._findTimeout = null;
- this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
- }
-
- get _query() {
- if (this._state.query !== this._rawQuery) {
- this._rawQuery = this._state.query;
- this._normalizedQuery = normalize(this._state.query);
- }
-
- return this._normalizedQuery;
- }
-
- _shouldDirtyMatch(cmd, state) {
- if (state.query !== this._state.query) {
- return true;
- }
-
- switch (cmd) {
- case "findagain":
- const pageNumber = this._selected.pageIdx + 1;
- const linkService = this._linkService;
-
- if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) {
- return true;
- }
-
- return false;
-
- case "findhighlightallchange":
- return false;
- }
-
- return true;
- }
-
- _prepareMatches(matchesWithLength, matches, matchesLength) {
- function isSubTerm(currentIndex) {
- const currentElem = matchesWithLength[currentIndex];
- const nextElem = matchesWithLength[currentIndex + 1];
-
- if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) {
- currentElem.skipped = true;
- return true;
- }
-
- for (let i = currentIndex - 1; i >= 0; i--) {
- const prevElem = matchesWithLength[i];
-
- if (prevElem.skipped) {
- continue;
- }
-
- if (prevElem.match + prevElem.matchLength < currentElem.match) {
- break;
- }
-
- if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) {
- currentElem.skipped = true;
- return true;
- }
- }
-
- return false;
- }
-
- matchesWithLength.sort(function (a, b) {
- return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match;
- });
-
- for (let i = 0, len = matchesWithLength.length; i < len; i++) {
- if (isSubTerm(i)) {
- continue;
- }
-
- matches.push(matchesWithLength[i].match);
- matchesLength.push(matchesWithLength[i].matchLength);
- }
- }
-
- _isEntireWord(content, startIdx, length) {
- if (startIdx > 0) {
- const first = content.charCodeAt(startIdx);
- const limit = content.charCodeAt(startIdx - 1);
-
- if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) {
- return false;
- }
- }
-
- const endIdx = startIdx + length - 1;
-
- if (endIdx < content.length - 1) {
- const last = content.charCodeAt(endIdx);
- const limit = content.charCodeAt(endIdx + 1);
-
- if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(limit)) {
- return false;
- }
- }
-
- return true;
- }
-
- _calculatePhraseMatch(query, pageIndex, pageContent, entireWord) {
- const matches = [];
- const queryLen = query.length;
- let matchIdx = -queryLen;
-
- while (true) {
- matchIdx = pageContent.indexOf(query, matchIdx + queryLen);
-
- if (matchIdx === -1) {
- break;
- }
-
- if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {
- continue;
- }
-
- matches.push(matchIdx);
- }
-
- this._pageMatches[pageIndex] = matches;
- }
-
- _calculateWordMatch(query, pageIndex, pageContent, entireWord) {
- const matchesWithLength = [];
- const queryArray = query.match(/\S+/g);
-
- for (let i = 0, len = queryArray.length; i < len; i++) {
- const subquery = queryArray[i];
- const subqueryLen = subquery.length;
- let matchIdx = -subqueryLen;
-
- while (true) {
- matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);
-
- if (matchIdx === -1) {
- break;
- }
-
- if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) {
- continue;
- }
-
- matchesWithLength.push({
- match: matchIdx,
- matchLength: subqueryLen,
- skipped: false
- });
- }
- }
-
- this._pageMatchesLength[pageIndex] = [];
- this._pageMatches[pageIndex] = [];
-
- this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], this._pageMatchesLength[pageIndex]);
- }
-
- _calculateMatch(pageIndex) {
- let pageContent = this._pageContents[pageIndex];
- let query = this._query;
- const {
- caseSensitive,
- entireWord,
- phraseSearch
- } = this._state;
-
- if (query.length === 0) {
- return;
- }
-
- if (!caseSensitive) {
- pageContent = pageContent.toLowerCase();
- query = query.toLowerCase();
- }
-
- if (phraseSearch) {
- this._calculatePhraseMatch(query, pageIndex, pageContent, entireWord);
- } else {
- this._calculateWordMatch(query, pageIndex, pageContent, entireWord);
- }
-
- if (this._state.highlightAll) {
- this._updatePage(pageIndex);
- }
-
- if (this._resumePageIdx === pageIndex) {
- this._resumePageIdx = null;
-
- this._nextPageMatch();
- }
-
- const pageMatchesCount = this._pageMatches[pageIndex].length;
-
- if (pageMatchesCount > 0) {
- this._matchesCountTotal += pageMatchesCount;
-
- this._updateUIResultsCount();
- }
- }
-
- _extractText() {
- if (this._extractTextPromises.length > 0) {
- return;
- }
-
- let promise = Promise.resolve();
-
- for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
- const extractTextCapability = (0, _pdfjsLib.createPromiseCapability)();
- this._extractTextPromises[i] = extractTextCapability.promise;
- promise = promise.then(() => {
- return this._pdfDocument.getPage(i + 1).then(pdfPage => {
- return pdfPage.getTextContent({
- normalizeWhitespace: true
- });
- }).then(textContent => {
- const textItems = textContent.items;
- const strBuf = [];
-
- for (let j = 0, jj = textItems.length; j < jj; j++) {
- strBuf.push(textItems[j].str);
- }
-
- this._pageContents[i] = normalize(strBuf.join(""));
- extractTextCapability.resolve(i);
- }, reason => {
- console.error(`Unable to get text content for page ${i + 1}`, reason);
- this._pageContents[i] = "";
- extractTextCapability.resolve(i);
- });
- });
- }
- }
-
- _updatePage(index) {
- if (this._scrollMatches && this._selected.pageIdx === index) {
- this._linkService.page = index + 1;
- }
-
- this._eventBus.dispatch("updatetextlayermatches", {
- source: this,
- pageIndex: index
- });
- }
-
- _updateAllPages() {
- this._eventBus.dispatch("updatetextlayermatches", {
- source: this,
- pageIndex: -1
- });
- }
-
- _nextMatch() {
- const previous = this._state.findPrevious;
- const currentPageIndex = this._linkService.page - 1;
- const numPages = this._linkService.pagesCount;
- this._highlightMatches = true;
-
- if (this._dirtyMatch) {
- this._dirtyMatch = false;
- this._selected.pageIdx = this._selected.matchIdx = -1;
- this._offset.pageIdx = currentPageIndex;
- this._offset.matchIdx = null;
- this._offset.wrapped = false;
- this._resumePageIdx = null;
- this._pageMatches.length = 0;
- this._pageMatchesLength.length = 0;
- this._matchesCountTotal = 0;
-
- this._updateAllPages();
-
- for (let i = 0; i < numPages; i++) {
- if (this._pendingFindMatches[i] === true) {
- continue;
- }
-
- this._pendingFindMatches[i] = true;
-
- this._extractTextPromises[i].then(pageIdx => {
- delete this._pendingFindMatches[pageIdx];
-
- this._calculateMatch(pageIdx);
- });
- }
- }
-
- if (this._query === "") {
- this._updateUIState(FindState.FOUND);
-
- return;
- }
-
- if (this._resumePageIdx) {
- return;
- }
-
- const offset = this._offset;
- this._pagesToSearch = numPages;
-
- if (offset.matchIdx !== null) {
- const numPageMatches = this._pageMatches[offset.pageIdx].length;
-
- if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {
- offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;
-
- this._updateMatch(true);
-
- return;
- }
-
- this._advanceOffsetPage(previous);
- }
-
- this._nextPageMatch();
- }
-
- _matchesReady(matches) {
- const offset = this._offset;
- const numMatches = matches.length;
- const previous = this._state.findPrevious;
-
- if (numMatches) {
- offset.matchIdx = previous ? numMatches - 1 : 0;
-
- this._updateMatch(true);
-
- return true;
- }
-
- this._advanceOffsetPage(previous);
-
- if (offset.wrapped) {
- offset.matchIdx = null;
-
- if (this._pagesToSearch < 0) {
- this._updateMatch(false);
-
- return true;
- }
- }
-
- return false;
- }
-
- _nextPageMatch() {
- if (this._resumePageIdx !== null) {
- console.error("There can only be one pending page.");
- }
-
- let matches = null;
-
- do {
- const pageIdx = this._offset.pageIdx;
- matches = this._pageMatches[pageIdx];
-
- if (!matches) {
- this._resumePageIdx = pageIdx;
- break;
- }
- } while (!this._matchesReady(matches));
- }
-
- _advanceOffsetPage(previous) {
- const offset = this._offset;
- const numPages = this._linkService.pagesCount;
- offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;
- offset.matchIdx = null;
- this._pagesToSearch--;
-
- if (offset.pageIdx >= numPages || offset.pageIdx < 0) {
- offset.pageIdx = previous ? numPages - 1 : 0;
- offset.wrapped = true;
- }
- }
-
- _updateMatch(found = false) {
- let state = FindState.NOT_FOUND;
- const wrapped = this._offset.wrapped;
- this._offset.wrapped = false;
-
- if (found) {
- const previousPage = this._selected.pageIdx;
- this._selected.pageIdx = this._offset.pageIdx;
- this._selected.matchIdx = this._offset.matchIdx;
- state = wrapped ? FindState.WRAPPED : FindState.FOUND;
-
- if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {
- this._updatePage(previousPage);
- }
- }
-
- this._updateUIState(state, this._state.findPrevious);
-
- if (this._selected.pageIdx !== -1) {
- this._scrollMatches = true;
-
- this._updatePage(this._selected.pageIdx);
- }
- }
-
- _onFindBarClose(evt) {
- const pdfDocument = this._pdfDocument;
-
- this._firstPageCapability.promise.then(() => {
- if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
- return;
- }
-
- if (this._findTimeout) {
- clearTimeout(this._findTimeout);
- this._findTimeout = null;
- }
-
- if (this._resumePageIdx) {
- this._resumePageIdx = null;
- this._dirtyMatch = true;
- }
-
- this._updateUIState(FindState.FOUND);
-
- this._highlightMatches = false;
-
- this._updateAllPages();
- });
- }
-
- _requestMatchesCount() {
- const {
- pageIdx,
- matchIdx
- } = this._selected;
- let current = 0,
- total = this._matchesCountTotal;
-
- if (matchIdx !== -1) {
- for (let i = 0; i < pageIdx; i++) {
- current += this._pageMatches[i] && this._pageMatches[i].length || 0;
- }
-
- current += matchIdx + 1;
- }
-
- if (current < 1 || current > total) {
- current = total = 0;
- }
-
- return {
- current,
- total
- };
- }
-
- _updateUIResultsCount() {
- this._eventBus.dispatch("updatefindmatchescount", {
- source: this,
- matchesCount: this._requestMatchesCount()
- });
- }
-
- _updateUIState(state, previous) {
- this._eventBus.dispatch("updatefindcontrolstate", {
- source: this,
- state,
- previous,
- matchesCount: this._requestMatchesCount()
- });
- }
-
-}
-
-exports.PDFFindController = PDFFindController;
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getCharacterType = getCharacterType;
-exports.CharacterType = void 0;
-const CharacterType = {
- SPACE: 0,
- ALPHA_LETTER: 1,
- PUNCT: 2,
- HAN_LETTER: 3,
- KATAKANA_LETTER: 4,
- HIRAGANA_LETTER: 5,
- HALFWIDTH_KATAKANA_LETTER: 6,
- THAI_LETTER: 7
-};
-exports.CharacterType = CharacterType;
-
-function isAlphabeticalScript(charCode) {
- return charCode < 0x2e80;
-}
-
-function isAscii(charCode) {
- return (charCode & 0xff80) === 0;
-}
-
-function isAsciiAlpha(charCode) {
- return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;
-}
-
-function isAsciiDigit(charCode) {
- return charCode >= 0x30 && charCode <= 0x39;
-}
-
-function isAsciiSpace(charCode) {
- return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;
-}
-
-function isHan(charCode) {
- return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;
-}
-
-function isKatakana(charCode) {
- return charCode >= 0x30a0 && charCode <= 0x30ff;
-}
-
-function isHiragana(charCode) {
- return charCode >= 0x3040 && charCode <= 0x309f;
-}
-
-function isHalfwidthKatakana(charCode) {
- return charCode >= 0xff60 && charCode <= 0xff9f;
-}
-
-function isThai(charCode) {
- return (charCode & 0xff80) === 0x0e00;
-}
-
-function getCharacterType(charCode) {
- if (isAlphabeticalScript(charCode)) {
- if (isAscii(charCode)) {
- if (isAsciiSpace(charCode)) {
- return CharacterType.SPACE;
- } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {
- return CharacterType.ALPHA_LETTER;
- }
-
- return CharacterType.PUNCT;
- } else if (isThai(charCode)) {
- return CharacterType.THAI_LETTER;
- } else if (charCode === 0xa0) {
- return CharacterType.SPACE;
- }
-
- return CharacterType.ALPHA_LETTER;
- }
-
- if (isHan(charCode)) {
- return CharacterType.HAN_LETTER;
- } else if (isKatakana(charCode)) {
- return CharacterType.KATAKANA_LETTER;
- } else if (isHiragana(charCode)) {
- return CharacterType.HIRAGANA_LETTER;
- } else if (isHalfwidthKatakana(charCode)) {
- return CharacterType.HALFWIDTH_KATAKANA_LETTER;
- }
-
- return CharacterType.ALPHA_LETTER;
-}
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.isDestHashesEqual = isDestHashesEqual;
-exports.isDestArraysEqual = isDestArraysEqual;
-exports.PDFHistory = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-const HASH_CHANGE_TIMEOUT = 1000;
-const POSITION_UPDATED_THRESHOLD = 50;
-const UPDATE_VIEWAREA_TIMEOUT = 1000;
-
-function getCurrentHash() {
- return document.location.hash;
-}
-
-class PDFHistory {
- constructor({
- linkService,
- eventBus
- }) {
- this.linkService = linkService;
- this.eventBus = eventBus;
- this._initialized = false;
- this._fingerprint = "";
- this.reset();
- this._boundEvents = null;
- this._isViewerInPresentationMode = false;
-
- this.eventBus._on("presentationmodechanged", evt => {
- this._isViewerInPresentationMode = evt.active || evt.switchInProgress;
- });
-
- this.eventBus._on("pagesinit", () => {
- this._isPagesLoaded = false;
-
- const onPagesLoaded = evt => {
- this.eventBus._off("pagesloaded", onPagesLoaded);
-
- this._isPagesLoaded = !!evt.pagesCount;
- };
-
- this.eventBus._on("pagesloaded", onPagesLoaded);
- });
- }
-
- initialize({
- fingerprint,
- resetHistory = false,
- updateUrl = false
- }) {
- if (!fingerprint || typeof fingerprint !== "string") {
- console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
- return;
- }
-
- if (this._initialized) {
- this.reset();
- }
-
- const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint;
- this._fingerprint = fingerprint;
- this._updateUrl = updateUrl === true;
- this._initialized = true;
-
- this._bindEvents();
-
- const state = window.history.state;
- this._popStateInProgress = false;
- this._blockHashChange = 0;
- this._currentHash = getCurrentHash();
- this._numPositionUpdates = 0;
- this._uid = this._maxUid = 0;
- this._destination = null;
- this._position = null;
-
- if (!this._isValidState(state, true) || resetHistory) {
- const {
- hash,
- page,
- rotation
- } = this._parseCurrentHash(true);
-
- if (!hash || reInitialized || resetHistory) {
- this._pushOrReplaceState(null, true);
-
- return;
- }
-
- this._pushOrReplaceState({
- hash,
- page,
- rotation
- }, true);
-
- return;
- }
-
- const destination = state.destination;
-
- this._updateInternalState(destination, state.uid, true);
-
- if (this._uid > this._maxUid) {
- this._maxUid = this._uid;
- }
-
- if (destination.rotation !== undefined) {
- this._initialRotation = destination.rotation;
- }
-
- if (destination.dest) {
- this._initialBookmark = JSON.stringify(destination.dest);
- this._destination.page = null;
- } else if (destination.hash) {
- this._initialBookmark = destination.hash;
- } else if (destination.page) {
- this._initialBookmark = `page=${destination.page}`;
- }
- }
-
- reset() {
- if (this._initialized) {
- this._pageHide();
-
- this._initialized = false;
-
- this._unbindEvents();
- }
-
- if (this._updateViewareaTimeout) {
- clearTimeout(this._updateViewareaTimeout);
- this._updateViewareaTimeout = null;
- }
-
- this._initialBookmark = null;
- this._initialRotation = null;
- }
-
- push({
- namedDest = null,
- explicitDest,
- pageNumber
- }) {
- if (!this._initialized) {
- return;
- }
-
- if (namedDest && typeof namedDest !== "string") {
- console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`);
- return;
- } else if (!Array.isArray(explicitDest)) {
- console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`);
- return;
- } else if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
- if (pageNumber !== null || this._destination) {
- console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`);
- return;
- }
- }
-
- const hash = namedDest || JSON.stringify(explicitDest);
-
- if (!hash) {
- return;
- }
-
- let forceReplace = false;
-
- if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {
- if (this._destination.page) {
- return;
- }
-
- forceReplace = true;
- }
-
- if (this._popStateInProgress && !forceReplace) {
- return;
- }
-
- this._pushOrReplaceState({
- dest: explicitDest,
- hash,
- page: pageNumber,
- rotation: this.linkService.rotation
- }, forceReplace);
-
- if (!this._popStateInProgress) {
- this._popStateInProgress = true;
- Promise.resolve().then(() => {
- this._popStateInProgress = false;
- });
- }
- }
-
- pushCurrentPosition() {
- if (!this._initialized || this._popStateInProgress) {
- return;
- }
-
- this._tryPushCurrentPosition();
- }
-
- back() {
- if (!this._initialized || this._popStateInProgress) {
- return;
- }
-
- const state = window.history.state;
-
- if (this._isValidState(state) && state.uid > 0) {
- window.history.back();
- }
- }
-
- forward() {
- if (!this._initialized || this._popStateInProgress) {
- return;
- }
-
- const state = window.history.state;
-
- if (this._isValidState(state) && state.uid < this._maxUid) {
- window.history.forward();
- }
- }
-
- get popStateInProgress() {
- return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);
- }
-
- get initialBookmark() {
- return this._initialized ? this._initialBookmark : null;
- }
-
- get initialRotation() {
- return this._initialized ? this._initialRotation : null;
- }
-
- _pushOrReplaceState(destination, forceReplace = false) {
- const shouldReplace = forceReplace || !this._destination;
- const newState = {
- fingerprint: this._fingerprint,
- uid: shouldReplace ? this._uid : this._uid + 1,
- destination
- };
-
- this._updateInternalState(destination, newState.uid);
-
- let newUrl;
-
- if (this._updateUrl && destination && destination.hash) {
- const baseUrl = document.location.href.split("#")[0];
-
- if (!baseUrl.startsWith("file://")) {
- newUrl = `${baseUrl}#${destination.hash}`;
- }
- }
-
- if (shouldReplace) {
- window.history.replaceState(newState, "", newUrl);
- } else {
- this._maxUid = this._uid;
- window.history.pushState(newState, "", newUrl);
- }
- }
-
- _tryPushCurrentPosition(temporary = false) {
- if (!this._position) {
- return;
- }
-
- let position = this._position;
-
- if (temporary) {
- position = Object.assign(Object.create(null), this._position);
- position.temporary = true;
- }
-
- if (!this._destination) {
- this._pushOrReplaceState(position);
-
- return;
- }
-
- if (this._destination.temporary) {
- this._pushOrReplaceState(position, true);
-
- return;
- }
-
- if (this._destination.hash === position.hash) {
- return;
- }
-
- if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {
- return;
- }
-
- let forceReplace = false;
-
- if (this._destination.page >= position.first && this._destination.page <= position.page) {
- if (this._destination.dest || !this._destination.first) {
- return;
- }
-
- forceReplace = true;
- }
-
- this._pushOrReplaceState(position, forceReplace);
- }
-
- _isValidState(state, checkReload = false) {
- if (!state) {
- return false;
- }
-
- if (state.fingerprint !== this._fingerprint) {
- if (checkReload) {
- if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) {
- return false;
- }
-
- const [perfEntry] = performance.getEntriesByType("navigation");
-
- if (!perfEntry || perfEntry.type !== "reload") {
- return false;
- }
- } else {
- return false;
- }
- }
-
- if (!Number.isInteger(state.uid) || state.uid < 0) {
- return false;
- }
-
- if (state.destination === null || typeof state.destination !== "object") {
- return false;
- }
-
- return true;
- }
-
- _updateInternalState(destination, uid, removeTemporary = false) {
- if (this._updateViewareaTimeout) {
- clearTimeout(this._updateViewareaTimeout);
- this._updateViewareaTimeout = null;
- }
-
- if (removeTemporary && destination && destination.temporary) {
- delete destination.temporary;
- }
-
- this._destination = destination;
- this._uid = uid;
- this._numPositionUpdates = 0;
- }
-
- _parseCurrentHash(checkNameddest = false) {
- const hash = unescape(getCurrentHash()).substring(1);
- const params = (0, _ui_utils.parseQueryString)(hash);
- const nameddest = params.nameddest || "";
- let page = params.page | 0;
-
- if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) {
- page = null;
- }
-
- return {
- hash,
- page,
- rotation: this.linkService.rotation
- };
- }
-
- _updateViewarea({
- location
- }) {
- if (this._updateViewareaTimeout) {
- clearTimeout(this._updateViewareaTimeout);
- this._updateViewareaTimeout = null;
- }
-
- this._position = {
- hash: this._isViewerInPresentationMode ? `page=${location.pageNumber}` : location.pdfOpenParams.substring(1),
- page: this.linkService.page,
- first: location.pageNumber,
- rotation: location.rotation
- };
-
- if (this._popStateInProgress) {
- return;
- }
-
- if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {
- this._numPositionUpdates++;
- }
-
- if (UPDATE_VIEWAREA_TIMEOUT > 0) {
- this._updateViewareaTimeout = setTimeout(() => {
- if (!this._popStateInProgress) {
- this._tryPushCurrentPosition(true);
- }
-
- this._updateViewareaTimeout = null;
- }, UPDATE_VIEWAREA_TIMEOUT);
- }
- }
-
- _popState({
- state
- }) {
- const newHash = getCurrentHash(),
- hashChanged = this._currentHash !== newHash;
- this._currentHash = newHash;
-
- if (!state) {
- this._uid++;
-
- const {
- hash,
- page,
- rotation
- } = this._parseCurrentHash();
-
- this._pushOrReplaceState({
- hash,
- page,
- rotation
- }, true);
-
- return;
- }
-
- if (!this._isValidState(state)) {
- return;
- }
-
- this._popStateInProgress = true;
-
- if (hashChanged) {
- this._blockHashChange++;
- (0, _ui_utils.waitOnEventOrTimeout)({
- target: window,
- name: "hashchange",
- delay: HASH_CHANGE_TIMEOUT
- }).then(() => {
- this._blockHashChange--;
- });
- }
-
- const destination = state.destination;
-
- this._updateInternalState(destination, state.uid, true);
-
- if (this._uid > this._maxUid) {
- this._maxUid = this._uid;
- }
-
- if ((0, _ui_utils.isValidRotation)(destination.rotation)) {
- this.linkService.rotation = destination.rotation;
- }
-
- if (destination.dest) {
- this.linkService.navigateTo(destination.dest);
- } else if (destination.hash) {
- this.linkService.setHash(destination.hash);
- } else if (destination.page) {
- this.linkService.page = destination.page;
- }
-
- Promise.resolve().then(() => {
- this._popStateInProgress = false;
- });
- }
-
- _pageHide() {
- if (!this._destination || this._destination.temporary) {
- this._tryPushCurrentPosition();
- }
- }
-
- _bindEvents() {
- if (this._boundEvents) {
- return;
- }
-
- this._boundEvents = {
- updateViewarea: this._updateViewarea.bind(this),
- popState: this._popState.bind(this),
- pageHide: this._pageHide.bind(this)
- };
-
- this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea);
-
- window.addEventListener("popstate", this._boundEvents.popState);
- window.addEventListener("pagehide", this._boundEvents.pageHide);
- }
-
- _unbindEvents() {
- if (!this._boundEvents) {
- return;
- }
-
- this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea);
-
- window.removeEventListener("popstate", this._boundEvents.popState);
- window.removeEventListener("pagehide", this._boundEvents.pageHide);
- this._boundEvents = null;
- }
-
-}
-
-exports.PDFHistory = PDFHistory;
-
-function isDestHashesEqual(destHash, pushHash) {
- if (typeof destHash !== "string" || typeof pushHash !== "string") {
- return false;
- }
-
- if (destHash === pushHash) {
- return true;
- }
-
- const {
- nameddest
- } = (0, _ui_utils.parseQueryString)(destHash);
-
- if (nameddest === pushHash) {
- return true;
- }
-
- return false;
-}
-
-function isDestArraysEqual(firstDest, secondDest) {
- function isEntryEqual(first, second) {
- if (typeof first !== typeof second) {
- return false;
- }
-
- if (Array.isArray(first) || Array.isArray(second)) {
- return false;
- }
-
- if (first !== null && typeof first === "object" && second !== null) {
- if (Object.keys(first).length !== Object.keys(second).length) {
- return false;
- }
-
- for (const key in first) {
- if (!isEntryEqual(first[key], second[key])) {
- return false;
- }
- }
-
- return true;
- }
-
- return first === second || Number.isNaN(first) && Number.isNaN(second);
- }
-
- if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {
- return false;
- }
-
- if (firstDest.length !== secondDest.length) {
- return false;
- }
-
- for (let i = 0, ii = firstDest.length; i < ii; i++) {
- if (!isEntryEqual(firstDest[i], secondDest[i])) {
- return false;
- }
- }
-
- return true;
-}
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.SimpleLinkService = exports.PDFLinkService = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-class PDFLinkService {
- constructor({
- eventBus,
- externalLinkTarget = null,
- externalLinkRel = null,
- externalLinkEnabled = true,
- ignoreDestinationZoom = false
- } = {}) {
- this.eventBus = eventBus;
- this.externalLinkTarget = externalLinkTarget;
- this.externalLinkRel = externalLinkRel;
- this.externalLinkEnabled = externalLinkEnabled;
- this._ignoreDestinationZoom = ignoreDestinationZoom;
- this.baseUrl = null;
- this.pdfDocument = null;
- this.pdfViewer = null;
- this.pdfHistory = null;
- this._pagesRefCache = null;
- }
-
- setDocument(pdfDocument, baseUrl = null) {
- this.baseUrl = baseUrl;
- this.pdfDocument = pdfDocument;
- this._pagesRefCache = Object.create(null);
- }
-
- setViewer(pdfViewer) {
- this.pdfViewer = pdfViewer;
- }
-
- setHistory(pdfHistory) {
- this.pdfHistory = pdfHistory;
- }
-
- get pagesCount() {
- return this.pdfDocument ? this.pdfDocument.numPages : 0;
- }
-
- get page() {
- return this.pdfViewer.currentPageNumber;
- }
-
- set page(value) {
- this.pdfViewer.currentPageNumber = value;
- }
-
- get rotation() {
- return this.pdfViewer.pagesRotation;
- }
-
- set rotation(value) {
- this.pdfViewer.pagesRotation = value;
- }
-
- navigateTo(dest) {
- const goToDestination = ({
- namedDest,
- explicitDest
- }) => {
- const destRef = explicitDest[0];
- let pageNumber;
-
- if (destRef instanceof Object) {
- pageNumber = this._cachedPageNumber(destRef);
-
- if (pageNumber === null) {
- this.pdfDocument.getPageIndex(destRef).then(pageIndex => {
- this.cachePageRef(pageIndex + 1, destRef);
- goToDestination({
- namedDest,
- explicitDest
- });
- }).catch(() => {
- console.error(`PDFLinkService.navigateTo: "${destRef}" is not ` + `a valid page reference, for dest="${dest}".`);
- });
- return;
- }
- } else if (Number.isInteger(destRef)) {
- pageNumber = destRef + 1;
- } else {
- console.error(`PDFLinkService.navigateTo: "${destRef}" is not ` + `a valid destination reference, for dest="${dest}".`);
- return;
- }
-
- if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {
- console.error(`PDFLinkService.navigateTo: "${pageNumber}" is not ` + `a valid page number, for dest="${dest}".`);
- return;
- }
-
- if (this.pdfHistory) {
- this.pdfHistory.pushCurrentPosition();
- this.pdfHistory.push({
- namedDest,
- explicitDest,
- pageNumber
- });
- }
-
- this.pdfViewer.scrollPageIntoView({
- pageNumber,
- destArray: explicitDest,
- ignoreDestinationZoom: this._ignoreDestinationZoom
- });
- };
-
- new Promise((resolve, reject) => {
- if (typeof dest === "string") {
- this.pdfDocument.getDestination(dest).then(destArray => {
- resolve({
- namedDest: dest,
- explicitDest: destArray
- });
- });
- return;
- }
-
- resolve({
- namedDest: "",
- explicitDest: dest
- });
- }).then(data => {
- if (!Array.isArray(data.explicitDest)) {
- console.error(`PDFLinkService.navigateTo: "${data.explicitDest}" is` + ` not a valid destination array, for dest="${dest}".`);
- return;
- }
-
- goToDestination(data);
- });
- }
-
- getDestinationHash(dest) {
- if (typeof dest === "string") {
- return this.getAnchorUrl("#" + escape(dest));
- }
-
- if (Array.isArray(dest)) {
- const str = JSON.stringify(dest);
- return this.getAnchorUrl("#" + escape(str));
- }
-
- return this.getAnchorUrl("");
- }
-
- getAnchorUrl(anchor) {
- return (this.baseUrl || "") + anchor;
- }
-
- setHash(hash) {
- let pageNumber, dest;
-
- if (hash.includes("=")) {
- const params = (0, _ui_utils.parseQueryString)(hash);
-
- if ("search" in params) {
- this.eventBus.dispatch("findfromurlhash", {
- source: this,
- query: params.search.replace(/"/g, ""),
- phraseSearch: params.phrase === "true"
- });
- }
-
- if ("page" in params) {
- pageNumber = params.page | 0 || 1;
- }
-
- if ("zoom" in params) {
- const zoomArgs = params.zoom.split(",");
- const zoomArg = zoomArgs[0];
- const zoomArgNumber = parseFloat(zoomArg);
-
- if (!zoomArg.includes("Fit")) {
- dest = [null, {
- name: "XYZ"
- }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];
- } else {
- if (zoomArg === "Fit" || zoomArg === "FitB") {
- dest = [null, {
- name: zoomArg
- }];
- } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") {
- dest = [null, {
- name: zoomArg
- }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];
- } else if (zoomArg === "FitR") {
- if (zoomArgs.length !== 5) {
- console.error('PDFLinkService.setHash: Not enough parameters for "FitR".');
- } else {
- dest = [null, {
- name: zoomArg
- }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];
- }
- } else {
- console.error(`PDFLinkService.setHash: "${zoomArg}" is not ` + "a valid zoom value.");
- }
- }
- }
-
- if (dest) {
- this.pdfViewer.scrollPageIntoView({
- pageNumber: pageNumber || this.page,
- destArray: dest,
- allowNegativeOffset: true
- });
- } else if (pageNumber) {
- this.page = pageNumber;
- }
-
- if ("pagemode" in params) {
- this.eventBus.dispatch("pagemode", {
- source: this,
- mode: params.pagemode
- });
- }
-
- if ("nameddest" in params) {
- this.navigateTo(params.nameddest);
- }
- } else {
- dest = unescape(hash);
-
- try {
- dest = JSON.parse(dest);
-
- if (!Array.isArray(dest)) {
- dest = dest.toString();
- }
- } catch (ex) {}
-
- if (typeof dest === "string" || isValidExplicitDestination(dest)) {
- this.navigateTo(dest);
- return;
- }
-
- console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not ` + "a valid destination.");
- }
- }
-
- executeNamedAction(action) {
- switch (action) {
- case "GoBack":
- if (this.pdfHistory) {
- this.pdfHistory.back();
- }
-
- break;
-
- case "GoForward":
- if (this.pdfHistory) {
- this.pdfHistory.forward();
- }
-
- break;
-
- case "NextPage":
- if (this.page < this.pagesCount) {
- this.page++;
- }
-
- break;
-
- case "PrevPage":
- if (this.page > 1) {
- this.page--;
- }
-
- break;
-
- case "LastPage":
- this.page = this.pagesCount;
- break;
-
- case "FirstPage":
- this.page = 1;
- break;
-
- default:
- break;
- }
-
- this.eventBus.dispatch("namedaction", {
- source: this,
- action
- });
- }
-
- cachePageRef(pageNum, pageRef) {
- if (!pageRef) {
- return;
- }
-
- const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
- this._pagesRefCache[refStr] = pageNum;
- }
-
- _cachedPageNumber(pageRef) {
- const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
- return this._pagesRefCache && this._pagesRefCache[refStr] || null;
- }
-
- isPageVisible(pageNumber) {
- return this.pdfViewer.isPageVisible(pageNumber);
- }
-
-}
-
-exports.PDFLinkService = PDFLinkService;
-
-function isValidExplicitDestination(dest) {
- if (!Array.isArray(dest)) {
- return false;
- }
-
- const destLength = dest.length;
-
- if (destLength < 2) {
- return false;
- }
-
- const page = dest[0];
-
- if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) {
- return false;
- }
-
- const zoom = dest[1];
-
- if (!(typeof zoom === "object" && typeof zoom.name === "string")) {
- return false;
- }
-
- let allowNull = true;
-
- switch (zoom.name) {
- case "XYZ":
- if (destLength !== 5) {
- return false;
- }
-
- break;
-
- case "Fit":
- case "FitB":
- return destLength === 2;
-
- case "FitH":
- case "FitBH":
- case "FitV":
- case "FitBV":
- if (destLength !== 3) {
- return false;
- }
-
- break;
-
- case "FitR":
- if (destLength !== 6) {
- return false;
- }
-
- allowNull = false;
- break;
-
- default:
- return false;
- }
-
- for (let i = 2; i < destLength; i++) {
- const param = dest[i];
-
- if (!(typeof param === "number" || allowNull && param === null)) {
- return false;
- }
- }
-
- return true;
-}
-
-class SimpleLinkService {
- constructor() {
- this.externalLinkTarget = null;
- this.externalLinkRel = null;
- this.externalLinkEnabled = true;
- this._ignoreDestinationZoom = false;
- }
-
- get pagesCount() {
- return 0;
- }
-
- get page() {
- return 0;
- }
-
- set page(value) {}
-
- get rotation() {
- return 0;
- }
-
- set rotation(value) {}
-
- navigateTo(dest) {}
-
- getDestinationHash(dest) {
- return "#";
- }
-
- getAnchorUrl(hash) {
- return "#";
- }
-
- setHash(hash) {}
-
- executeNamedAction(action) {}
-
- cachePageRef(pageNum, pageRef) {}
-
- isPageVisible(pageNumber) {
- return true;
- }
-
-}
-
-exports.SimpleLinkService = SimpleLinkService;
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFOutlineViewer = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-const DEFAULT_TITLE = "\u2013";
-
-class PDFOutlineViewer {
- constructor({
- container,
- linkService,
- eventBus
- }) {
- this.container = container;
- this.linkService = linkService;
- this.eventBus = eventBus;
- this.reset();
-
- eventBus._on("toggleoutlinetree", this.toggleOutlineTree.bind(this));
- }
-
- reset() {
- this.outline = null;
- this.lastToggleIsShow = true;
- this.container.textContent = "";
- this.container.classList.remove("outlineWithDeepNesting");
- }
-
- _dispatchEvent(outlineCount) {
- this.eventBus.dispatch("outlineloaded", {
- source: this,
- outlineCount
- });
- }
-
- _bindLink(element, {
- url,
- newWindow,
- dest
- }) {
- const {
- linkService
- } = this;
-
- if (url) {
- (0, _pdfjsLib.addLinkAttributes)(element, {
- url,
- target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget,
- rel: linkService.externalLinkRel,
- enabled: linkService.externalLinkEnabled
- });
- return;
- }
-
- element.href = linkService.getDestinationHash(dest);
-
- element.onclick = () => {
- if (dest) {
- linkService.navigateTo(dest);
- }
-
- return false;
- };
- }
-
- _setStyles(element, {
- bold,
- italic
- }) {
- if (bold) {
- element.style.fontWeight = "bold";
- }
-
- if (italic) {
- element.style.fontStyle = "italic";
- }
- }
-
- _addToggleButton(div, {
- count,
- items
- }) {
- const toggler = document.createElement("div");
- toggler.className = "outlineItemToggler";
-
- if (count < 0 && Math.abs(count) === items.length) {
- toggler.classList.add("outlineItemsHidden");
- }
-
- toggler.onclick = evt => {
- evt.stopPropagation();
- toggler.classList.toggle("outlineItemsHidden");
-
- if (evt.shiftKey) {
- const shouldShowAll = !toggler.classList.contains("outlineItemsHidden");
-
- this._toggleOutlineItem(div, shouldShowAll);
- }
- };
-
- div.insertBefore(toggler, div.firstChild);
- }
-
- _toggleOutlineItem(root, show = false) {
- this.lastToggleIsShow = show;
-
- for (const toggler of root.querySelectorAll(".outlineItemToggler")) {
- toggler.classList.toggle("outlineItemsHidden", !show);
- }
- }
-
- toggleOutlineTree() {
- if (!this.outline) {
- return;
- }
-
- this._toggleOutlineItem(this.container, !this.lastToggleIsShow);
- }
-
- render({
- outline
- }) {
- let outlineCount = 0;
-
- if (this.outline) {
- this.reset();
- }
-
- this.outline = outline || null;
-
- if (!outline) {
- this._dispatchEvent(outlineCount);
-
- return;
- }
-
- const fragment = document.createDocumentFragment();
- const queue = [{
- parent: fragment,
- items: this.outline
- }];
- let hasAnyNesting = false;
-
- while (queue.length > 0) {
- const levelData = queue.shift();
-
- for (const item of levelData.items) {
- const div = document.createElement("div");
- div.className = "outlineItem";
- const element = document.createElement("a");
-
- this._bindLink(element, item);
-
- this._setStyles(element, item);
-
- element.textContent = (0, _pdfjsLib.removeNullCharacters)(item.title) || DEFAULT_TITLE;
- div.appendChild(element);
-
- if (item.items.length > 0) {
- hasAnyNesting = true;
-
- this._addToggleButton(div, item);
-
- const itemsDiv = document.createElement("div");
- itemsDiv.className = "outlineItems";
- div.appendChild(itemsDiv);
- queue.push({
- parent: itemsDiv,
- items: item.items
- });
- }
-
- levelData.parent.appendChild(div);
- outlineCount++;
- }
- }
-
- if (hasAnyNesting) {
- this.container.classList.add("outlineWithDeepNesting");
- this.lastToggleIsShow = fragment.querySelectorAll(".outlineItemsHidden").length === 0;
- }
-
- this.container.appendChild(fragment);
-
- this._dispatchEvent(outlineCount);
- }
-
-}
-
-exports.PDFOutlineViewer = PDFOutlineViewer;
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFPresentationMode = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-const DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500;
-const DELAY_BEFORE_HIDING_CONTROLS = 3000;
-const ACTIVE_SELECTOR = "pdfPresentationMode";
-const CONTROLS_SELECTOR = "pdfPresentationModeControls";
-const MOUSE_SCROLL_COOLDOWN_TIME = 50;
-const PAGE_SWITCH_THRESHOLD = 0.1;
-const SWIPE_MIN_DISTANCE_THRESHOLD = 50;
-const SWIPE_ANGLE_THRESHOLD = Math.PI / 6;
-
-class PDFPresentationMode {
- constructor({
- container,
- pdfViewer,
- eventBus,
- contextMenuItems = null
- }) {
- this.container = container;
- this.pdfViewer = pdfViewer;
- this.eventBus = eventBus;
- this.active = false;
- this.args = null;
- this.contextMenuOpen = false;
- this.mouseScrollTimeStamp = 0;
- this.mouseScrollDelta = 0;
- this.touchSwipeState = null;
-
- if (contextMenuItems) {
- contextMenuItems.contextFirstPage.addEventListener("click", () => {
- this.contextMenuOpen = false;
- this.eventBus.dispatch("firstpage", {
- source: this
- });
- });
- contextMenuItems.contextLastPage.addEventListener("click", () => {
- this.contextMenuOpen = false;
- this.eventBus.dispatch("lastpage", {
- source: this
- });
- });
- contextMenuItems.contextPageRotateCw.addEventListener("click", () => {
- this.contextMenuOpen = false;
- this.eventBus.dispatch("rotatecw", {
- source: this
- });
- });
- contextMenuItems.contextPageRotateCcw.addEventListener("click", () => {
- this.contextMenuOpen = false;
- this.eventBus.dispatch("rotateccw", {
- source: this
- });
- });
- }
- }
-
- request() {
- if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) {
- return false;
- }
-
- this._addFullscreenChangeListeners();
-
- this._setSwitchInProgress();
-
- this._notifyStateChange();
-
- if (this.container.requestFullscreen) {
- this.container.requestFullscreen();
- } else if (this.container.mozRequestFullScreen) {
- this.container.mozRequestFullScreen();
- } else if (this.container.webkitRequestFullscreen) {
- this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
- } else if (this.container.msRequestFullscreen) {
- this.container.msRequestFullscreen();
- } else {
- return false;
- }
-
- this.args = {
- page: this.pdfViewer.currentPageNumber,
- previousScale: this.pdfViewer.currentScaleValue
- };
- return true;
- }
-
- _mouseWheel(evt) {
- if (!this.active) {
- return;
- }
-
- evt.preventDefault();
- const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
- const currentTime = new Date().getTime();
- const storedTime = this.mouseScrollTimeStamp;
-
- if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
- return;
- }
-
- if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {
- this._resetMouseScrollState();
- }
-
- this.mouseScrollDelta += delta;
-
- if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {
- const totalDelta = this.mouseScrollDelta;
-
- this._resetMouseScrollState();
-
- const success = totalDelta > 0 ? this._goToPreviousPage() : this._goToNextPage();
-
- if (success) {
- this.mouseScrollTimeStamp = currentTime;
- }
- }
- }
-
- get isFullscreen() {
- return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement);
- }
-
- _goToPreviousPage() {
- const page = this.pdfViewer.currentPageNumber;
-
- if (page <= 1) {
- return false;
- }
-
- this.pdfViewer.currentPageNumber = page - 1;
- return true;
- }
-
- _goToNextPage() {
- const page = this.pdfViewer.currentPageNumber;
-
- if (page >= this.pdfViewer.pagesCount) {
- return false;
- }
-
- this.pdfViewer.currentPageNumber = page + 1;
- return true;
- }
-
- _notifyStateChange() {
- this.eventBus.dispatch("presentationmodechanged", {
- source: this,
- active: this.active,
- switchInProgress: !!this.switchInProgress
- });
- }
-
- _setSwitchInProgress() {
- if (this.switchInProgress) {
- clearTimeout(this.switchInProgress);
- }
-
- this.switchInProgress = setTimeout(() => {
- this._removeFullscreenChangeListeners();
-
- delete this.switchInProgress;
-
- this._notifyStateChange();
- }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS);
- }
-
- _resetSwitchInProgress() {
- if (this.switchInProgress) {
- clearTimeout(this.switchInProgress);
- delete this.switchInProgress;
- }
- }
-
- _enter() {
- this.active = true;
-
- this._resetSwitchInProgress();
-
- this._notifyStateChange();
-
- this.container.classList.add(ACTIVE_SELECTOR);
- setTimeout(() => {
- this.pdfViewer.currentPageNumber = this.args.page;
- this.pdfViewer.currentScaleValue = "page-fit";
- }, 0);
-
- this._addWindowListeners();
-
- this._showControls();
-
- this.contextMenuOpen = false;
- this.container.setAttribute("contextmenu", "viewerContextMenu");
- window.getSelection().removeAllRanges();
- }
-
- _exit() {
- const page = this.pdfViewer.currentPageNumber;
- this.container.classList.remove(ACTIVE_SELECTOR);
- setTimeout(() => {
- this.active = false;
-
- this._removeFullscreenChangeListeners();
-
- this._notifyStateChange();
-
- this.pdfViewer.currentScaleValue = this.args.previousScale;
- this.pdfViewer.currentPageNumber = page;
- this.args = null;
- }, 0);
-
- this._removeWindowListeners();
-
- this._hideControls();
-
- this._resetMouseScrollState();
-
- this.container.removeAttribute("contextmenu");
- this.contextMenuOpen = false;
- }
-
- _mouseDown(evt) {
- if (this.contextMenuOpen) {
- this.contextMenuOpen = false;
- evt.preventDefault();
- return;
- }
-
- if (evt.button === 0) {
- const isInternalLink = evt.target.href && evt.target.classList.contains("internalLink");
-
- if (!isInternalLink) {
- evt.preventDefault();
-
- if (evt.shiftKey) {
- this._goToPreviousPage();
- } else {
- this._goToNextPage();
- }
- }
- }
- }
-
- _contextMenu() {
- this.contextMenuOpen = true;
- }
-
- _showControls() {
- if (this.controlsTimeout) {
- clearTimeout(this.controlsTimeout);
- } else {
- this.container.classList.add(CONTROLS_SELECTOR);
- }
-
- this.controlsTimeout = setTimeout(() => {
- this.container.classList.remove(CONTROLS_SELECTOR);
- delete this.controlsTimeout;
- }, DELAY_BEFORE_HIDING_CONTROLS);
- }
-
- _hideControls() {
- if (!this.controlsTimeout) {
- return;
- }
-
- clearTimeout(this.controlsTimeout);
- this.container.classList.remove(CONTROLS_SELECTOR);
- delete this.controlsTimeout;
- }
-
- _resetMouseScrollState() {
- this.mouseScrollTimeStamp = 0;
- this.mouseScrollDelta = 0;
- }
-
- _touchSwipe(evt) {
- if (!this.active) {
- return;
- }
-
- if (evt.touches.length > 1) {
- this.touchSwipeState = null;
- return;
- }
-
- switch (evt.type) {
- case "touchstart":
- this.touchSwipeState = {
- startX: evt.touches[0].pageX,
- startY: evt.touches[0].pageY,
- endX: evt.touches[0].pageX,
- endY: evt.touches[0].pageY
- };
- break;
-
- case "touchmove":
- if (this.touchSwipeState === null) {
- return;
- }
-
- this.touchSwipeState.endX = evt.touches[0].pageX;
- this.touchSwipeState.endY = evt.touches[0].pageY;
- evt.preventDefault();
- break;
-
- case "touchend":
- if (this.touchSwipeState === null) {
- return;
- }
-
- let delta = 0;
- const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;
- const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;
- const absAngle = Math.abs(Math.atan2(dy, dx));
-
- if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) {
- delta = dx;
- } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) {
- delta = dy;
- }
-
- if (delta > 0) {
- this._goToPreviousPage();
- } else if (delta < 0) {
- this._goToNextPage();
- }
-
- break;
- }
- }
-
- _addWindowListeners() {
- this.showControlsBind = this._showControls.bind(this);
- this.mouseDownBind = this._mouseDown.bind(this);
- this.mouseWheelBind = this._mouseWheel.bind(this);
- this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this);
- this.contextMenuBind = this._contextMenu.bind(this);
- this.touchSwipeBind = this._touchSwipe.bind(this);
- window.addEventListener("mousemove", this.showControlsBind);
- window.addEventListener("mousedown", this.mouseDownBind);
- window.addEventListener("wheel", this.mouseWheelBind, {
- passive: false
- });
- window.addEventListener("keydown", this.resetMouseScrollStateBind);
- window.addEventListener("contextmenu", this.contextMenuBind);
- window.addEventListener("touchstart", this.touchSwipeBind);
- window.addEventListener("touchmove", this.touchSwipeBind);
- window.addEventListener("touchend", this.touchSwipeBind);
- }
-
- _removeWindowListeners() {
- window.removeEventListener("mousemove", this.showControlsBind);
- window.removeEventListener("mousedown", this.mouseDownBind);
- window.removeEventListener("wheel", this.mouseWheelBind, {
- passive: false
- });
- window.removeEventListener("keydown", this.resetMouseScrollStateBind);
- window.removeEventListener("contextmenu", this.contextMenuBind);
- window.removeEventListener("touchstart", this.touchSwipeBind);
- window.removeEventListener("touchmove", this.touchSwipeBind);
- window.removeEventListener("touchend", this.touchSwipeBind);
- delete this.showControlsBind;
- delete this.mouseDownBind;
- delete this.mouseWheelBind;
- delete this.resetMouseScrollStateBind;
- delete this.contextMenuBind;
- delete this.touchSwipeBind;
- }
-
- _fullscreenChange() {
- if (this.isFullscreen) {
- this._enter();
- } else {
- this._exit();
- }
- }
-
- _addFullscreenChangeListeners() {
- this.fullscreenChangeBind = this._fullscreenChange.bind(this);
- window.addEventListener("fullscreenchange", this.fullscreenChangeBind);
- window.addEventListener("mozfullscreenchange", this.fullscreenChangeBind);
- window.addEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
- window.addEventListener("MSFullscreenChange", this.fullscreenChangeBind);
- }
-
- _removeFullscreenChangeListeners() {
- window.removeEventListener("fullscreenchange", this.fullscreenChangeBind);
- window.removeEventListener("mozfullscreenchange", this.fullscreenChangeBind);
- window.removeEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
- window.removeEventListener("MSFullscreenChange", this.fullscreenChangeBind);
- delete this.fullscreenChangeBind;
- }
-
-}
-
-exports.PDFPresentationMode = PDFPresentationMode;
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFSidebarResizer = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-const SIDEBAR_WIDTH_VAR = "--sidebar-width";
-const SIDEBAR_MIN_WIDTH = 200;
-const SIDEBAR_RESIZING_CLASS = "sidebarResizing";
-
-class PDFSidebarResizer {
- constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
- this.enabled = false;
- this.isRTL = false;
- this.sidebarOpen = false;
- this.doc = document.documentElement;
- this._width = null;
- this._outerContainerWidth = null;
- this._boundEvents = Object.create(null);
- this.outerContainer = options.outerContainer;
- this.resizer = options.resizer;
- this.eventBus = eventBus;
- this.l10n = l10n;
-
- if (typeof CSS === "undefined" || typeof CSS.supports !== "function" || !CSS.supports(SIDEBAR_WIDTH_VAR, `calc(-1 * ${SIDEBAR_MIN_WIDTH}px)`)) {
- console.warn("PDFSidebarResizer: " + "The browser does not support resizing of the sidebar.");
- return;
- }
-
- this.enabled = true;
- this.resizer.classList.remove("hidden");
- this.l10n.getDirection().then(dir => {
- this.isRTL = dir === "rtl";
- });
-
- this._addEventListeners();
- }
-
- get outerContainerWidth() {
- if (!this._outerContainerWidth) {
- this._outerContainerWidth = this.outerContainer.clientWidth;
- }
-
- return this._outerContainerWidth;
- }
-
- _updateWidth(width = 0) {
- if (!this.enabled) {
- return false;
- }
-
- const newWidth = (0, _ui_utils.clamp)(width, SIDEBAR_MIN_WIDTH, Math.floor(this.outerContainerWidth / 2));
-
- if (newWidth === this._width) {
- return false;
- }
-
- this._width = newWidth;
- this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, `${newWidth}px`);
- return true;
- }
-
- _mouseMove(evt) {
- let width = evt.clientX;
-
- if (this.isRTL) {
- width = this.outerContainerWidth - width;
- }
-
- this._updateWidth(width);
- }
-
- _mouseUp(evt) {
- this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
- this.eventBus.dispatch("resize", {
- source: this
- });
- const _boundEvents = this._boundEvents;
- window.removeEventListener("mousemove", _boundEvents.mouseMove);
- window.removeEventListener("mouseup", _boundEvents.mouseUp);
- }
-
- _addEventListeners() {
- if (!this.enabled) {
- return;
- }
-
- const _boundEvents = this._boundEvents;
- _boundEvents.mouseMove = this._mouseMove.bind(this);
- _boundEvents.mouseUp = this._mouseUp.bind(this);
- this.resizer.addEventListener("mousedown", evt => {
- if (evt.button !== 0) {
- return;
- }
-
- this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
- window.addEventListener("mousemove", _boundEvents.mouseMove);
- window.addEventListener("mouseup", _boundEvents.mouseUp);
- });
-
- this.eventBus._on("sidebarviewchanged", evt => {
- this.sidebarOpen = !!(evt && evt.view);
- });
-
- this.eventBus._on("resize", evt => {
- if (!evt || evt.source !== window) {
- return;
- }
-
- this._outerContainerWidth = null;
-
- if (!this._width) {
- return;
- }
-
- if (!this.sidebarOpen) {
- this._updateWidth(this._width);
-
- return;
- }
-
- this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
-
- const updated = this._updateWidth(this._width);
-
- Promise.resolve().then(() => {
- this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
-
- if (updated) {
- this.eventBus.dispatch("resize", {
- source: this
- });
- }
- });
- });
- }
-
-}
-
-exports.PDFSidebarResizer = PDFSidebarResizer;
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFThumbnailViewer = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdf_thumbnail_view = __webpack_require__(23);
-
-const THUMBNAIL_SCROLL_MARGIN = -19;
-const THUMBNAIL_SELECTED_CLASS = "selected";
-
-class PDFThumbnailViewer {
- constructor({
- container,
- linkService,
- renderingQueue,
- l10n = _ui_utils.NullL10n
- }) {
- this.container = container;
- this.linkService = linkService;
- this.renderingQueue = renderingQueue;
- this.l10n = l10n;
- this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this));
-
- this._resetView();
- }
-
- _scrollUpdated() {
- this.renderingQueue.renderHighestPriority();
- }
-
- getThumbnail(index) {
- return this._thumbnails[index];
- }
-
- _getVisibleThumbs() {
- return (0, _ui_utils.getVisibleElements)(this.container, this._thumbnails);
- }
-
- scrollThumbnailIntoView(pageNumber) {
- if (!this.pdfDocument) {
- return;
- }
-
- const thumbnailView = this._thumbnails[pageNumber - 1];
-
- if (!thumbnailView) {
- console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.');
- return;
- }
-
- if (pageNumber !== this._currentPageNumber) {
- const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];
- prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);
- thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
- }
-
- const visibleThumbs = this._getVisibleThumbs();
-
- const numVisibleThumbs = visibleThumbs.views.length;
-
- if (numVisibleThumbs > 0) {
- const first = visibleThumbs.first.id;
- const last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first;
- let shouldScroll = false;
-
- if (pageNumber <= first || pageNumber >= last) {
- shouldScroll = true;
- } else {
- visibleThumbs.views.some(function (view) {
- if (view.id !== pageNumber) {
- return false;
- }
-
- shouldScroll = view.percent < 100;
- return true;
- });
- }
-
- if (shouldScroll) {
- (0, _ui_utils.scrollIntoView)(thumbnailView.div, {
- top: THUMBNAIL_SCROLL_MARGIN
- });
- }
- }
-
- this._currentPageNumber = pageNumber;
- }
-
- get pagesRotation() {
- return this._pagesRotation;
- }
-
- set pagesRotation(rotation) {
- if (!(0, _ui_utils.isValidRotation)(rotation)) {
- throw new Error("Invalid thumbnails rotation angle.");
- }
-
- if (!this.pdfDocument) {
- return;
- }
-
- if (this._pagesRotation === rotation) {
- return;
- }
-
- this._pagesRotation = rotation;
-
- for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
- this._thumbnails[i].update(rotation);
- }
- }
-
- cleanup() {
- _pdf_thumbnail_view.PDFThumbnailView.cleanup();
- }
-
- _resetView() {
- this._thumbnails = [];
- this._currentPageNumber = 1;
- this._pageLabels = null;
- this._pagesRotation = 0;
- this._pagesRequests = new WeakMap();
- this.container.textContent = "";
- }
-
- setDocument(pdfDocument) {
- if (this.pdfDocument) {
- this._cancelRendering();
-
- this._resetView();
- }
-
- this.pdfDocument = pdfDocument;
-
- if (!pdfDocument) {
- return;
- }
-
- pdfDocument.getPage(1).then(firstPdfPage => {
- const pagesCount = pdfDocument.numPages;
- const viewport = firstPdfPage.getViewport({
- scale: 1
- });
-
- for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
- const thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({
- container: this.container,
- id: pageNum,
- defaultViewport: viewport.clone(),
- linkService: this.linkService,
- renderingQueue: this.renderingQueue,
- disableCanvasToImageConversion: false,
- l10n: this.l10n
- });
-
- this._thumbnails.push(thumbnail);
- }
-
- const firstThumbnailView = this._thumbnails[0];
-
- if (firstThumbnailView) {
- firstThumbnailView.setPdfPage(firstPdfPage);
- }
-
- const thumbnailView = this._thumbnails[this._currentPageNumber - 1];
- thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
- }).catch(reason => {
- console.error("Unable to initialize thumbnail viewer", reason);
- });
- }
-
- _cancelRendering() {
- for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
- if (this._thumbnails[i]) {
- this._thumbnails[i].cancelRendering();
- }
- }
- }
-
- setPageLabels(labels) {
- if (!this.pdfDocument) {
- return;
- }
-
- if (!labels) {
- this._pageLabels = null;
- } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
- this._pageLabels = null;
- console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels.");
- } else {
- this._pageLabels = labels;
- }
-
- for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
- const label = this._pageLabels && this._pageLabels[i];
-
- this._thumbnails[i].setPageLabel(label);
- }
- }
-
- _ensurePdfPageLoaded(thumbView) {
- if (thumbView.pdfPage) {
- return Promise.resolve(thumbView.pdfPage);
- }
-
- if (this._pagesRequests.has(thumbView)) {
- return this._pagesRequests.get(thumbView);
- }
-
- const promise = this.pdfDocument.getPage(thumbView.id).then(pdfPage => {
- if (!thumbView.pdfPage) {
- thumbView.setPdfPage(pdfPage);
- }
-
- this._pagesRequests.delete(thumbView);
-
- return pdfPage;
- }).catch(reason => {
- console.error("Unable to get page for thumb view", reason);
-
- this._pagesRequests.delete(thumbView);
- });
-
- this._pagesRequests.set(thumbView, promise);
-
- return promise;
- }
-
- forceRendering() {
- const visibleThumbs = this._getVisibleThumbs();
-
- const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, this.scroll.down);
-
- if (thumbView) {
- this._ensurePdfPageLoaded(thumbView).then(() => {
- this.renderingQueue.renderView(thumbView);
- });
-
- return true;
- }
-
- return false;
- }
-
-}
-
-exports.PDFThumbnailViewer = PDFThumbnailViewer;
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFThumbnailView = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdf_rendering_queue = __webpack_require__(8);
-
-const MAX_NUM_SCALING_STEPS = 3;
-const THUMBNAIL_CANVAS_BORDER_WIDTH = 1;
-const THUMBNAIL_WIDTH = 98;
-
-const TempImageFactory = function TempImageFactoryClosure() {
- let tempCanvasCache = null;
- return {
- getCanvas(width, height) {
- let tempCanvas = tempCanvasCache;
-
- if (!tempCanvas) {
- tempCanvas = document.createElement("canvas");
- tempCanvasCache = tempCanvas;
- }
-
- tempCanvas.width = width;
- tempCanvas.height = height;
- tempCanvas.mozOpaque = true;
- const ctx = tempCanvas.getContext("2d", {
- alpha: false
- });
- ctx.save();
- ctx.fillStyle = "rgb(255, 255, 255)";
- ctx.fillRect(0, 0, width, height);
- ctx.restore();
- return tempCanvas;
- },
-
- destroyCanvas() {
- const tempCanvas = tempCanvasCache;
-
- if (tempCanvas) {
- tempCanvas.width = 0;
- tempCanvas.height = 0;
- }
-
- tempCanvasCache = null;
- }
-
- };
-}();
-
-class PDFThumbnailView {
- constructor({
- container,
- id,
- defaultViewport,
- linkService,
- renderingQueue,
- disableCanvasToImageConversion = false,
- l10n = _ui_utils.NullL10n
- }) {
- this.id = id;
- this.renderingId = "thumbnail" + id;
- this.pageLabel = null;
- this.pdfPage = null;
- this.rotation = 0;
- this.viewport = defaultViewport;
- this.pdfPageRotate = defaultViewport.rotation;
- this.linkService = linkService;
- this.renderingQueue = renderingQueue;
- this.renderTask = null;
- this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
- this.resume = null;
- this.disableCanvasToImageConversion = disableCanvasToImageConversion;
- this.pageWidth = this.viewport.width;
- this.pageHeight = this.viewport.height;
- this.pageRatio = this.pageWidth / this.pageHeight;
- this.canvasWidth = THUMBNAIL_WIDTH;
- this.canvasHeight = this.canvasWidth / this.pageRatio | 0;
- this.scale = this.canvasWidth / this.pageWidth;
- this.l10n = l10n;
- const anchor = document.createElement("a");
- anchor.href = linkService.getAnchorUrl("#page=" + id);
-
- this._thumbPageTitle.then(msg => {
- anchor.title = msg;
- });
-
- anchor.onclick = function () {
- linkService.page = id;
- return false;
- };
-
- this.anchor = anchor;
- const div = document.createElement("div");
- div.className = "thumbnail";
- div.setAttribute("data-page-number", this.id);
- this.div = div;
- const ring = document.createElement("div");
- ring.className = "thumbnailSelectionRing";
- const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;
- ring.style.width = this.canvasWidth + borderAdjustment + "px";
- ring.style.height = this.canvasHeight + borderAdjustment + "px";
- this.ring = ring;
- div.appendChild(ring);
- anchor.appendChild(div);
- container.appendChild(anchor);
- }
-
- setPdfPage(pdfPage) {
- this.pdfPage = pdfPage;
- this.pdfPageRotate = pdfPage.rotate;
- const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
- this.viewport = pdfPage.getViewport({
- scale: 1,
- rotation: totalRotation
- });
- this.reset();
- }
-
- reset() {
- this.cancelRendering();
- this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
- this.pageWidth = this.viewport.width;
- this.pageHeight = this.viewport.height;
- this.pageRatio = this.pageWidth / this.pageHeight;
- this.canvasHeight = this.canvasWidth / this.pageRatio | 0;
- this.scale = this.canvasWidth / this.pageWidth;
- this.div.removeAttribute("data-loaded");
- const ring = this.ring;
- const childNodes = ring.childNodes;
-
- for (let i = childNodes.length - 1; i >= 0; i--) {
- ring.removeChild(childNodes[i]);
- }
-
- const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;
- ring.style.width = this.canvasWidth + borderAdjustment + "px";
- ring.style.height = this.canvasHeight + borderAdjustment + "px";
-
- if (this.canvas) {
- this.canvas.width = 0;
- this.canvas.height = 0;
- delete this.canvas;
- }
-
- if (this.image) {
- this.image.removeAttribute("src");
- delete this.image;
- }
- }
-
- update(rotation) {
- if (typeof rotation !== "undefined") {
- this.rotation = rotation;
- }
-
- const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
- this.viewport = this.viewport.clone({
- scale: 1,
- rotation: totalRotation
- });
- this.reset();
- }
-
- cancelRendering() {
- if (this.renderTask) {
- this.renderTask.cancel();
- this.renderTask = null;
- }
-
- this.resume = null;
- }
-
- _getPageDrawContext(noCtxScale = false) {
- const canvas = document.createElement("canvas");
- this.canvas = canvas;
- canvas.mozOpaque = true;
- const ctx = canvas.getContext("2d", {
- alpha: false
- });
- const outputScale = (0, _ui_utils.getOutputScale)(ctx);
- canvas.width = this.canvasWidth * outputScale.sx | 0;
- canvas.height = this.canvasHeight * outputScale.sy | 0;
- canvas.style.width = this.canvasWidth + "px";
- canvas.style.height = this.canvasHeight + "px";
-
- if (!noCtxScale && outputScale.scaled) {
- ctx.scale(outputScale.sx, outputScale.sy);
- }
-
- return ctx;
- }
-
- _convertCanvasToImage() {
- if (!this.canvas) {
- return;
- }
-
- if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
- return;
- }
-
- const className = "thumbnailImage";
-
- if (this.disableCanvasToImageConversion) {
- this.canvas.className = className;
-
- this._thumbPageCanvas.then(msg => {
- this.canvas.setAttribute("aria-label", msg);
- });
-
- this.div.setAttribute("data-loaded", true);
- this.ring.appendChild(this.canvas);
- return;
- }
-
- const image = document.createElement("img");
- image.className = className;
-
- this._thumbPageCanvas.then(msg => {
- image.setAttribute("aria-label", msg);
- });
-
- image.style.width = this.canvasWidth + "px";
- image.style.height = this.canvasHeight + "px";
- image.src = this.canvas.toDataURL();
- this.image = image;
- this.div.setAttribute("data-loaded", true);
- this.ring.appendChild(image);
- this.canvas.width = 0;
- this.canvas.height = 0;
- delete this.canvas;
- }
-
- draw() {
- if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
- console.error("Must be in new state before drawing");
- return Promise.resolve(undefined);
- }
-
- const {
- pdfPage
- } = this;
-
- if (!pdfPage) {
- this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
- return Promise.reject(new Error("pdfPage is not loaded"));
- }
-
- this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
- const renderCapability = (0, _pdfjsLib.createPromiseCapability)();
-
- const finishRenderTask = error => {
- if (renderTask === this.renderTask) {
- this.renderTask = null;
- }
-
- if (error instanceof _pdfjsLib.RenderingCancelledException) {
- renderCapability.resolve(undefined);
- return;
- }
-
- this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
-
- this._convertCanvasToImage();
-
- if (!error) {
- renderCapability.resolve(undefined);
- } else {
- renderCapability.reject(error);
- }
- };
-
- const ctx = this._getPageDrawContext();
-
- const drawViewport = this.viewport.clone({
- scale: this.scale
- });
-
- const renderContinueCallback = cont => {
- if (!this.renderingQueue.isHighestPriority(this)) {
- this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;
-
- this.resume = () => {
- this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
- cont();
- };
-
- return;
- }
-
- cont();
- };
-
- const renderContext = {
- canvasContext: ctx,
- viewport: drawViewport
- };
- const renderTask = this.renderTask = pdfPage.render(renderContext);
- renderTask.onContinue = renderContinueCallback;
- renderTask.promise.then(function () {
- finishRenderTask(null);
- }, function (error) {
- finishRenderTask(error);
- });
- return renderCapability.promise;
- }
-
- setImage(pageView) {
- if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
- return;
- }
-
- const img = pageView.canvas;
-
- if (!img) {
- return;
- }
-
- if (!this.pdfPage) {
- this.setPdfPage(pageView.pdfPage);
- }
-
- this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
-
- const ctx = this._getPageDrawContext(true);
-
- const canvas = ctx.canvas;
-
- if (img.width <= 2 * canvas.width) {
- ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);
-
- this._convertCanvasToImage();
-
- return;
- }
-
- let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;
- let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;
- const reducedImage = TempImageFactory.getCanvas(reducedWidth, reducedHeight);
- const reducedImageCtx = reducedImage.getContext("2d");
-
- while (reducedWidth > img.width || reducedHeight > img.height) {
- reducedWidth >>= 1;
- reducedHeight >>= 1;
- }
-
- reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight);
-
- while (reducedWidth > 2 * canvas.width) {
- reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1);
- reducedWidth >>= 1;
- reducedHeight >>= 1;
- }
-
- ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height);
-
- this._convertCanvasToImage();
- }
-
- get _thumbPageTitle() {
- return this.l10n.get("thumb_page_title", {
- page: this.pageLabel !== null ? this.pageLabel : this.id
- }, "Page {{page}}");
- }
-
- get _thumbPageCanvas() {
- return this.l10n.get("thumb_page_canvas", {
- page: this.pageLabel !== null ? this.pageLabel : this.id
- }, "Thumbnail of Page {{page}}");
- }
-
- setPageLabel(label) {
- this.pageLabel = typeof label === "string" ? label : null;
-
- this._thumbPageTitle.then(msg => {
- this.anchor.title = msg;
- });
-
- if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
- return;
- }
-
- this._thumbPageCanvas.then(msg => {
- if (this.image) {
- this.image.setAttribute("aria-label", msg);
- } else if (this.disableCanvasToImageConversion && this.canvas) {
- this.canvas.setAttribute("aria-label", msg);
- }
- });
- }
-
- static cleanup() {
- TempImageFactory.destroyCanvas();
- }
-
-}
-
-exports.PDFThumbnailView = PDFThumbnailView;
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFViewer = void 0;
-
-var _base_viewer = __webpack_require__(25);
-
-var _pdfjsLib = __webpack_require__(5);
-
-class PDFViewer extends _base_viewer.BaseViewer {
- get _viewerElement() {
- return (0, _pdfjsLib.shadow)(this, "_viewerElement", this.viewer);
- }
-
- _scrollIntoView({
- pageDiv,
- pageSpot = null,
- pageNumber = null
- }) {
- if (!pageSpot && !this.isInPresentationMode) {
- const left = pageDiv.offsetLeft + pageDiv.clientLeft;
- const right = left + pageDiv.clientWidth;
- const {
- scrollLeft,
- clientWidth
- } = this.container;
-
- if (this._isScrollModeHorizontal || left < scrollLeft || right > scrollLeft + clientWidth) {
- pageSpot = {
- left: 0,
- top: 0
- };
- }
- }
-
- super._scrollIntoView({
- pageDiv,
- pageSpot,
- pageNumber
- });
- }
-
- _getVisiblePages() {
- if (this.isInPresentationMode) {
- return this._getCurrentVisiblePage();
- }
-
- return super._getVisiblePages();
- }
-
- _updateHelper(visiblePages) {
- if (this.isInPresentationMode) {
- return;
- }
-
- let currentId = this._currentPageNumber;
- let stillFullyVisible = false;
-
- for (const page of visiblePages) {
- if (page.percent < 100) {
- break;
- }
-
- if (page.id === currentId) {
- stillFullyVisible = true;
- break;
- }
- }
-
- if (!stillFullyVisible) {
- currentId = visiblePages[0].id;
- }
-
- this._setCurrentPageNumber(currentId);
- }
-
-}
-
-exports.PDFViewer = PDFViewer;
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.BaseViewer = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdf_rendering_queue = __webpack_require__(8);
-
-var _annotation_layer_builder = __webpack_require__(26);
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _pdf_page_view = __webpack_require__(27);
-
-var _pdf_link_service = __webpack_require__(18);
-
-var _text_layer_builder = __webpack_require__(28);
-
-const DEFAULT_CACHE_SIZE = 10;
-
-function PDFPageViewBuffer(size) {
- const data = [];
-
- this.push = function (view) {
- const i = data.indexOf(view);
-
- if (i >= 0) {
- data.splice(i, 1);
- }
-
- data.push(view);
-
- if (data.length > size) {
- data.shift().destroy();
- }
- };
-
- this.resize = function (newSize, pagesToKeep) {
- size = newSize;
-
- if (pagesToKeep) {
- const pageIdsToKeep = new Set();
-
- for (let i = 0, iMax = pagesToKeep.length; i < iMax; ++i) {
- pageIdsToKeep.add(pagesToKeep[i].id);
- }
-
- (0, _ui_utils.moveToEndOfArray)(data, function (page) {
- return pageIdsToKeep.has(page.id);
- });
- }
-
- while (data.length > size) {
- data.shift().destroy();
- }
- };
-}
-
-function isSameScale(oldScale, newScale) {
- if (newScale === oldScale) {
- return true;
- }
-
- if (Math.abs(newScale - oldScale) < 1e-15) {
- return true;
- }
-
- return false;
-}
-
-class BaseViewer {
- constructor(options) {
- if (this.constructor === BaseViewer) {
- throw new Error("Cannot initialize BaseViewer.");
- }
-
- this._name = this.constructor.name;
- this.container = options.container;
- this.viewer = options.viewer || options.container.firstElementChild;
- this.eventBus = options.eventBus;
- this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
- this.downloadManager = options.downloadManager || null;
- this.findController = options.findController || null;
- this.removePageBorders = options.removePageBorders || false;
- this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
- this.imageResourcesPath = options.imageResourcesPath || "";
- this.renderInteractiveForms = options.renderInteractiveForms || false;
- this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;
- this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
- this.enableWebGL = options.enableWebGL || false;
- this.useOnlyCssZoom = options.useOnlyCssZoom || false;
- this.maxCanvasPixels = options.maxCanvasPixels;
- this.l10n = options.l10n || _ui_utils.NullL10n;
- this.defaultRenderingQueue = !options.renderingQueue;
-
- if (this.defaultRenderingQueue) {
- this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
- this.renderingQueue.setViewer(this);
- } else {
- this.renderingQueue = options.renderingQueue;
- }
-
- this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this));
- this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN;
- this._onBeforeDraw = this._onAfterDraw = null;
-
- this._resetView();
-
- if (this.removePageBorders) {
- this.viewer.classList.add("removePageBorders");
- }
-
- Promise.resolve().then(() => {
- this.eventBus.dispatch("baseviewerinit", {
- source: this
- });
- });
- }
-
- get pagesCount() {
- return this._pages.length;
- }
-
- getPageView(index) {
- return this._pages[index];
- }
-
- get pageViewsReady() {
- if (!this._pagesCapability.settled) {
- return false;
- }
-
- return this._pages.every(function (pageView) {
- return pageView && pageView.pdfPage;
- });
- }
-
- get currentPageNumber() {
- return this._currentPageNumber;
- }
-
- set currentPageNumber(val) {
- if (!Number.isInteger(val)) {
- throw new Error("Invalid page number.");
- }
-
- if (!this.pdfDocument) {
- return;
- }
-
- if (!this._setCurrentPageNumber(val, true)) {
- console.error(`${this._name}.currentPageNumber: "${val}" is not a valid page.`);
- }
- }
-
- _setCurrentPageNumber(val, resetCurrentPageView = false) {
- if (this._currentPageNumber === val) {
- if (resetCurrentPageView) {
- this._resetCurrentPageView();
- }
-
- return true;
- }
-
- if (!(0 < val && val <= this.pagesCount)) {
- return false;
- }
-
- this._currentPageNumber = val;
- this.eventBus.dispatch("pagechanging", {
- source: this,
- pageNumber: val,
- pageLabel: this._pageLabels && this._pageLabels[val - 1]
- });
-
- if (resetCurrentPageView) {
- this._resetCurrentPageView();
- }
-
- return true;
- }
-
- get currentPageLabel() {
- return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
- }
-
- set currentPageLabel(val) {
- if (!this.pdfDocument) {
- return;
- }
-
- let page = val | 0;
-
- if (this._pageLabels) {
- const i = this._pageLabels.indexOf(val);
-
- if (i >= 0) {
- page = i + 1;
- }
- }
-
- if (!this._setCurrentPageNumber(page, true)) {
- console.error(`${this._name}.currentPageLabel: "${val}" is not a valid page.`);
- }
- }
-
- get currentScale() {
- return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;
- }
-
- set currentScale(val) {
- if (isNaN(val)) {
- throw new Error("Invalid numeric scale.");
- }
-
- if (!this.pdfDocument) {
- return;
- }
-
- this._setScale(val, false);
- }
-
- get currentScaleValue() {
- return this._currentScaleValue;
- }
-
- set currentScaleValue(val) {
- if (!this.pdfDocument) {
- return;
- }
-
- this._setScale(val, false);
- }
-
- get pagesRotation() {
- return this._pagesRotation;
- }
-
- set pagesRotation(rotation) {
- if (!(0, _ui_utils.isValidRotation)(rotation)) {
- throw new Error("Invalid pages rotation angle.");
- }
-
- if (!this.pdfDocument) {
- return;
- }
-
- if (this._pagesRotation === rotation) {
- return;
- }
-
- this._pagesRotation = rotation;
- const pageNumber = this._currentPageNumber;
-
- for (let i = 0, ii = this._pages.length; i < ii; i++) {
- const pageView = this._pages[i];
- pageView.update(pageView.scale, rotation);
- }
-
- if (this._currentScaleValue) {
- this._setScale(this._currentScaleValue, true);
- }
-
- this.eventBus.dispatch("rotationchanging", {
- source: this,
- pagesRotation: rotation,
- pageNumber
- });
-
- if (this.defaultRenderingQueue) {
- this.update();
- }
- }
-
- get firstPagePromise() {
- return this.pdfDocument ? this._firstPageCapability.promise : null;
- }
-
- get onePageRendered() {
- return this.pdfDocument ? this._onePageRenderedCapability.promise : null;
- }
-
- get pagesPromise() {
- return this.pdfDocument ? this._pagesCapability.promise : null;
- }
-
- get _viewerElement() {
- throw new Error("Not implemented: _viewerElement");
- }
-
- _onePageRenderedOrForceFetch() {
- if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {
- return Promise.resolve();
- }
-
- return this._onePageRenderedCapability.promise;
- }
-
- setDocument(pdfDocument) {
- if (this.pdfDocument) {
- this._cancelRendering();
-
- this._resetView();
-
- if (this.findController) {
- this.findController.setDocument(null);
- }
- }
-
- this.pdfDocument = pdfDocument;
-
- if (!pdfDocument) {
- return;
- }
-
- const pagesCount = pdfDocument.numPages;
- const firstPagePromise = pdfDocument.getPage(1);
-
- this._pagesCapability.promise.then(() => {
- this.eventBus.dispatch("pagesloaded", {
- source: this,
- pagesCount
- });
- });
-
- this._onBeforeDraw = evt => {
- const pageView = this._pages[evt.pageNumber - 1];
-
- if (!pageView) {
- return;
- }
-
- this._buffer.push(pageView);
- };
-
- this.eventBus._on("pagerender", this._onBeforeDraw);
-
- this._onAfterDraw = evt => {
- if (evt.cssTransform || this._onePageRenderedCapability.settled) {
- return;
- }
-
- this._onePageRenderedCapability.resolve();
-
- this.eventBus._off("pagerendered", this._onAfterDraw);
-
- this._onAfterDraw = null;
- };
-
- this.eventBus._on("pagerendered", this._onAfterDraw);
-
- firstPagePromise.then(firstPdfPage => {
- this._firstPageCapability.resolve(firstPdfPage);
-
- const scale = this.currentScale;
- const viewport = firstPdfPage.getViewport({
- scale: scale * _ui_utils.CSS_UNITS
- });
- const textLayerFactory = this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? this : null;
-
- for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
- const pageView = new _pdf_page_view.PDFPageView({
- container: this._viewerElement,
- eventBus: this.eventBus,
- id: pageNum,
- scale,
- defaultViewport: viewport.clone(),
- renderingQueue: this.renderingQueue,
- textLayerFactory,
- textLayerMode: this.textLayerMode,
- annotationLayerFactory: this,
- imageResourcesPath: this.imageResourcesPath,
- renderInteractiveForms: this.renderInteractiveForms,
- renderer: this.renderer,
- enableWebGL: this.enableWebGL,
- useOnlyCssZoom: this.useOnlyCssZoom,
- maxCanvasPixels: this.maxCanvasPixels,
- l10n: this.l10n
- });
-
- this._pages.push(pageView);
- }
-
- const firstPageView = this._pages[0];
-
- if (firstPageView) {
- firstPageView.setPdfPage(firstPdfPage);
- this.linkService.cachePageRef(1, firstPdfPage.ref);
- }
-
- if (this._spreadMode !== _ui_utils.SpreadMode.NONE) {
- this._updateSpreadMode();
- }
-
- this._onePageRenderedOrForceFetch().then(() => {
- if (this.findController) {
- this.findController.setDocument(pdfDocument);
- }
-
- if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
- this._pagesCapability.resolve();
-
- return;
- }
-
- let getPagesLeft = pagesCount - 1;
-
- if (getPagesLeft <= 0) {
- this._pagesCapability.resolve();
-
- return;
- }
-
- for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {
- pdfDocument.getPage(pageNum).then(pdfPage => {
- const pageView = this._pages[pageNum - 1];
-
- if (!pageView.pdfPage) {
- pageView.setPdfPage(pdfPage);
- }
-
- this.linkService.cachePageRef(pageNum, pdfPage.ref);
-
- if (--getPagesLeft === 0) {
- this._pagesCapability.resolve();
- }
- }, reason => {
- console.error(`Unable to get page ${pageNum} to initialize viewer`, reason);
-
- if (--getPagesLeft === 0) {
- this._pagesCapability.resolve();
- }
- });
- }
- });
-
- this.eventBus.dispatch("pagesinit", {
- source: this
- });
-
- if (this.defaultRenderingQueue) {
- this.update();
- }
- }).catch(reason => {
- console.error("Unable to initialize viewer", reason);
- });
- }
-
- setPageLabels(labels) {
- if (!this.pdfDocument) {
- return;
- }
-
- if (!labels) {
- this._pageLabels = null;
- } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
- this._pageLabels = null;
- console.error(`${this._name}.setPageLabels: Invalid page labels.`);
- } else {
- this._pageLabels = labels;
- }
-
- for (let i = 0, ii = this._pages.length; i < ii; i++) {
- const pageView = this._pages[i];
- const label = this._pageLabels && this._pageLabels[i];
- pageView.setPageLabel(label);
- }
- }
-
- _resetView() {
- this._pages = [];
- this._currentPageNumber = 1;
- this._currentScale = _ui_utils.UNKNOWN_SCALE;
- this._currentScaleValue = null;
- this._pageLabels = null;
- this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
- this._location = null;
- this._pagesRotation = 0;
- this._pagesRequests = new WeakMap();
- this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
- this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)();
- this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)();
- this._scrollMode = _ui_utils.ScrollMode.VERTICAL;
- this._spreadMode = _ui_utils.SpreadMode.NONE;
-
- if (this._onBeforeDraw) {
- this.eventBus._off("pagerender", this._onBeforeDraw);
-
- this._onBeforeDraw = null;
- }
-
- if (this._onAfterDraw) {
- this.eventBus._off("pagerendered", this._onAfterDraw);
-
- this._onAfterDraw = null;
- }
-
- this.viewer.textContent = "";
-
- this._updateScrollMode();
- }
-
- _scrollUpdate() {
- if (this.pagesCount === 0) {
- return;
- }
-
- this.update();
- }
-
- _scrollIntoView({
- pageDiv,
- pageSpot = null,
- pageNumber = null
- }) {
- (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot);
- }
-
- _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {
- this._currentScaleValue = newValue.toString();
-
- if (isSameScale(this._currentScale, newScale)) {
- if (preset) {
- this.eventBus.dispatch("scalechanging", {
- source: this,
- scale: newScale,
- presetValue: newValue
- });
- }
-
- return;
- }
-
- for (let i = 0, ii = this._pages.length; i < ii; i++) {
- this._pages[i].update(newScale);
- }
-
- this._currentScale = newScale;
-
- if (!noScroll) {
- let page = this._currentPageNumber,
- dest;
-
- if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {
- page = this._location.pageNumber;
- dest = [null, {
- name: "XYZ"
- }, this._location.left, this._location.top, null];
- }
-
- this.scrollPageIntoView({
- pageNumber: page,
- destArray: dest,
- allowNegativeOffset: true
- });
- }
-
- this.eventBus.dispatch("scalechanging", {
- source: this,
- scale: newScale,
- presetValue: preset ? newValue : undefined
- });
-
- if (this.defaultRenderingQueue) {
- this.update();
- }
- }
-
- _setScale(value, noScroll = false) {
- let scale = parseFloat(value);
-
- if (scale > 0) {
- this._setScaleUpdatePages(scale, value, noScroll, false);
- } else {
- const currentPage = this._pages[this._currentPageNumber - 1];
-
- if (!currentPage) {
- return;
- }
-
- const noPadding = this.isInPresentationMode || this.removePageBorders;
- let hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING;
- let vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING;
-
- if (!noPadding && this._isScrollModeHorizontal) {
- [hPadding, vPadding] = [vPadding, hPadding];
- }
-
- const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale;
- const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
-
- switch (value) {
- case "page-actual":
- scale = 1;
- break;
-
- case "page-width":
- scale = pageWidthScale;
- break;
-
- case "page-height":
- scale = pageHeightScale;
- break;
-
- case "page-fit":
- scale = Math.min(pageWidthScale, pageHeightScale);
- break;
-
- case "auto":
- const horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);
- scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);
- break;
-
- default:
- console.error(`${this._name}._setScale: "${value}" is an unknown zoom value.`);
- return;
- }
-
- this._setScaleUpdatePages(scale, value, noScroll, true);
- }
- }
-
- _resetCurrentPageView() {
- if (this.isInPresentationMode) {
- this._setScale(this._currentScaleValue, true);
- }
-
- const pageView = this._pages[this._currentPageNumber - 1];
-
- this._scrollIntoView({
- pageDiv: pageView.div
- });
- }
-
- scrollPageIntoView({
- pageNumber,
- destArray = null,
- allowNegativeOffset = false,
- ignoreDestinationZoom = false
- }) {
- if (!this.pdfDocument) {
- return;
- }
-
- const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];
-
- if (!pageView) {
- console.error(`${this._name}.scrollPageIntoView: ` + `"${pageNumber}" is not a valid pageNumber parameter.`);
- return;
- }
-
- if (this.isInPresentationMode || !destArray) {
- this._setCurrentPageNumber(pageNumber, true);
-
- return;
- }
-
- let x = 0,
- y = 0;
- let width = 0,
- height = 0,
- widthScale,
- heightScale;
- const changeOrientation = pageView.rotation % 180 !== 0;
- const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS;
- const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS;
- let scale = 0;
-
- switch (destArray[1].name) {
- case "XYZ":
- x = destArray[2];
- y = destArray[3];
- scale = destArray[4];
- x = x !== null ? x : 0;
- y = y !== null ? y : pageHeight;
- break;
-
- case "Fit":
- case "FitB":
- scale = "page-fit";
- break;
-
- case "FitH":
- case "FitBH":
- y = destArray[2];
- scale = "page-width";
-
- if (y === null && this._location) {
- x = this._location.left;
- y = this._location.top;
- }
-
- break;
-
- case "FitV":
- case "FitBV":
- x = destArray[2];
- width = pageWidth;
- height = pageHeight;
- scale = "page-height";
- break;
-
- case "FitR":
- x = destArray[2];
- y = destArray[3];
- width = destArray[4] - x;
- height = destArray[5] - y;
- const hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;
- const vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;
- widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS;
- heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS;
- scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
- break;
-
- default:
- console.error(`${this._name}.scrollPageIntoView: ` + `"${destArray[1].name}" is not a valid destination type.`);
- return;
- }
-
- if (!ignoreDestinationZoom) {
- if (scale && scale !== this._currentScale) {
- this.currentScaleValue = scale;
- } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {
- this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
- }
- }
-
- if (scale === "page-fit" && !destArray[4]) {
- this._scrollIntoView({
- pageDiv: pageView.div,
- pageNumber
- });
-
- return;
- }
-
- const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];
- let left = Math.min(boundingRect[0][0], boundingRect[1][0]);
- let top = Math.min(boundingRect[0][1], boundingRect[1][1]);
-
- if (!allowNegativeOffset) {
- left = Math.max(left, 0);
- top = Math.max(top, 0);
- }
-
- this._scrollIntoView({
- pageDiv: pageView.div,
- pageSpot: {
- left,
- top
- },
- pageNumber
- });
- }
-
- _updateLocation(firstPage) {
- const currentScale = this._currentScale;
- const currentScaleValue = this._currentScaleValue;
- const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;
- const pageNumber = firstPage.id;
- let pdfOpenParams = "#page=" + pageNumber;
- pdfOpenParams += "&zoom=" + normalizedScaleValue;
- const currentPageView = this._pages[pageNumber - 1];
- const container = this.container;
- const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);
- const intLeft = Math.round(topLeft[0]);
- const intTop = Math.round(topLeft[1]);
- pdfOpenParams += "," + intLeft + "," + intTop;
- this._location = {
- pageNumber,
- scale: normalizedScaleValue,
- top: intTop,
- left: intLeft,
- rotation: this._pagesRotation,
- pdfOpenParams
- };
- }
-
- _updateHelper(visiblePages) {
- throw new Error("Not implemented: _updateHelper");
- }
-
- update() {
- const visible = this._getVisiblePages();
-
- const visiblePages = visible.views,
- numVisiblePages = visiblePages.length;
-
- if (numVisiblePages === 0) {
- return;
- }
-
- const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);
-
- this._buffer.resize(newCacheSize, visiblePages);
-
- this.renderingQueue.renderHighestPriority(visible);
-
- this._updateHelper(visiblePages);
-
- this._updateLocation(visible.first);
-
- this.eventBus.dispatch("updateviewarea", {
- source: this,
- location: this._location
- });
- }
-
- containsElement(element) {
- return this.container.contains(element);
- }
-
- focus() {
- this.container.focus();
- }
-
- get _isScrollModeHorizontal() {
- return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;
- }
-
- get isInPresentationMode() {
- return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
- }
-
- get isChangingPresentationMode() {
- return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;
- }
-
- get isHorizontalScrollbarEnabled() {
- return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;
- }
-
- get isVerticalScrollbarEnabled() {
- return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;
- }
-
- _getCurrentVisiblePage() {
- if (!this.pagesCount) {
- return {
- views: []
- };
- }
-
- const pageView = this._pages[this._currentPageNumber - 1];
- const element = pageView.div;
- const view = {
- id: pageView.id,
- x: element.offsetLeft + element.clientLeft,
- y: element.offsetTop + element.clientTop,
- view: pageView
- };
- return {
- first: view,
- last: view,
- views: [view]
- };
- }
-
- _getVisiblePages() {
- return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true, this._isScrollModeHorizontal);
- }
-
- isPageVisible(pageNumber) {
- if (!this.pdfDocument) {
- return false;
- }
-
- if (pageNumber < 1 || pageNumber > this.pagesCount) {
- console.error(`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.`);
- return false;
- }
-
- return this._getVisiblePages().views.some(function (view) {
- return view.id === pageNumber;
- });
- }
-
- cleanup() {
- for (let i = 0, ii = this._pages.length; i < ii; i++) {
- if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
- this._pages[i].reset();
- }
- }
- }
-
- _cancelRendering() {
- for (let i = 0, ii = this._pages.length; i < ii; i++) {
- if (this._pages[i]) {
- this._pages[i].cancelRendering();
- }
- }
- }
-
- _ensurePdfPageLoaded(pageView) {
- if (pageView.pdfPage) {
- return Promise.resolve(pageView.pdfPage);
- }
-
- if (this._pagesRequests.has(pageView)) {
- return this._pagesRequests.get(pageView);
- }
-
- const promise = this.pdfDocument.getPage(pageView.id).then(pdfPage => {
- if (!pageView.pdfPage) {
- pageView.setPdfPage(pdfPage);
- }
-
- this._pagesRequests.delete(pageView);
-
- return pdfPage;
- }).catch(reason => {
- console.error("Unable to get page for page view", reason);
-
- this._pagesRequests.delete(pageView);
- });
-
- this._pagesRequests.set(pageView, promise);
-
- return promise;
- }
-
- forceRendering(currentlyVisiblePages) {
- const visiblePages = currentlyVisiblePages || this._getVisiblePages();
-
- const scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down;
- const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead);
-
- if (pageView) {
- this._ensurePdfPageLoaded(pageView).then(() => {
- this.renderingQueue.renderView(pageView);
- });
-
- return true;
- }
-
- return false;
- }
-
- createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
- return new _text_layer_builder.TextLayerBuilder({
- textLayerDiv,
- eventBus,
- pageIndex,
- viewport,
- findController: this.isInPresentationMode ? null : this.findController,
- enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection
- });
- }
-
- createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n) {
- return new _annotation_layer_builder.AnnotationLayerBuilder({
- pageDiv,
- pdfPage,
- imageResourcesPath,
- renderInteractiveForms,
- linkService: this.linkService,
- downloadManager: this.downloadManager,
- l10n
- });
- }
-
- get hasEqualPageSizes() {
- const firstPageView = this._pages[0];
-
- for (let i = 1, ii = this._pages.length; i < ii; ++i) {
- const pageView = this._pages[i];
-
- if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {
- return false;
- }
- }
-
- return true;
- }
-
- getPagesOverview() {
- const pagesOverview = this._pages.map(function (pageView) {
- const viewport = pageView.pdfPage.getViewport({
- scale: 1
- });
- return {
- width: viewport.width,
- height: viewport.height,
- rotation: viewport.rotation
- };
- });
-
- if (!this.enablePrintAutoRotate) {
- return pagesOverview;
- }
-
- const isFirstPagePortrait = (0, _ui_utils.isPortraitOrientation)(pagesOverview[0]);
- return pagesOverview.map(function (size) {
- if (isFirstPagePortrait === (0, _ui_utils.isPortraitOrientation)(size)) {
- return size;
- }
-
- return {
- width: size.height,
- height: size.width,
- rotation: (size.rotation + 90) % 360
- };
- });
- }
-
- get scrollMode() {
- return this._scrollMode;
- }
-
- set scrollMode(mode) {
- if (this._scrollMode === mode) {
- return;
- }
-
- if (!(0, _ui_utils.isValidScrollMode)(mode)) {
- throw new Error(`Invalid scroll mode: ${mode}`);
- }
-
- this._scrollMode = mode;
- this.eventBus.dispatch("scrollmodechanged", {
- source: this,
- mode
- });
-
- this._updateScrollMode(this._currentPageNumber);
- }
-
- _updateScrollMode(pageNumber = null) {
- const scrollMode = this._scrollMode,
- viewer = this.viewer;
- viewer.classList.toggle("scrollHorizontal", scrollMode === _ui_utils.ScrollMode.HORIZONTAL);
- viewer.classList.toggle("scrollWrapped", scrollMode === _ui_utils.ScrollMode.WRAPPED);
-
- if (!this.pdfDocument || !pageNumber) {
- return;
- }
-
- if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
- this._setScale(this._currentScaleValue, true);
- }
-
- this._setCurrentPageNumber(pageNumber, true);
-
- this.update();
- }
-
- get spreadMode() {
- return this._spreadMode;
- }
-
- set spreadMode(mode) {
- if (this._spreadMode === mode) {
- return;
- }
-
- if (!(0, _ui_utils.isValidSpreadMode)(mode)) {
- throw new Error(`Invalid spread mode: ${mode}`);
- }
-
- this._spreadMode = mode;
- this.eventBus.dispatch("spreadmodechanged", {
- source: this,
- mode
- });
-
- this._updateSpreadMode(this._currentPageNumber);
- }
-
- _updateSpreadMode(pageNumber = null) {
- if (!this.pdfDocument) {
- return;
- }
-
- const viewer = this.viewer,
- pages = this._pages;
- viewer.textContent = "";
-
- if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
- for (let i = 0, iMax = pages.length; i < iMax; ++i) {
- viewer.appendChild(pages[i].div);
- }
- } else {
- const parity = this._spreadMode - 1;
- let spread = null;
-
- for (let i = 0, iMax = pages.length; i < iMax; ++i) {
- if (spread === null) {
- spread = document.createElement("div");
- spread.className = "spread";
- viewer.appendChild(spread);
- } else if (i % 2 === parity) {
- spread = spread.cloneNode(false);
- viewer.appendChild(spread);
- }
-
- spread.appendChild(pages[i].div);
- }
- }
-
- if (!pageNumber) {
- return;
- }
-
- this._setCurrentPageNumber(pageNumber, true);
-
- this.update();
- }
-
-}
-
-exports.BaseViewer = BaseViewer;
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdf_link_service = __webpack_require__(18);
-
-class AnnotationLayerBuilder {
- constructor({
- pageDiv,
- pdfPage,
- linkService,
- downloadManager,
- imageResourcesPath = "",
- renderInteractiveForms = false,
- l10n = _ui_utils.NullL10n
- }) {
- this.pageDiv = pageDiv;
- this.pdfPage = pdfPage;
- this.linkService = linkService;
- this.downloadManager = downloadManager;
- this.imageResourcesPath = imageResourcesPath;
- this.renderInteractiveForms = renderInteractiveForms;
- this.l10n = l10n;
- this.div = null;
- this._cancelled = false;
- }
-
- render(viewport, intent = "display") {
- this.pdfPage.getAnnotations({
- intent
- }).then(annotations => {
- if (this._cancelled) {
- return;
- }
-
- const parameters = {
- viewport: viewport.clone({
- dontFlip: true
- }),
- div: this.div,
- annotations,
- page: this.pdfPage,
- imageResourcesPath: this.imageResourcesPath,
- renderInteractiveForms: this.renderInteractiveForms,
- linkService: this.linkService,
- downloadManager: this.downloadManager
- };
-
- if (this.div) {
- _pdfjsLib.AnnotationLayer.update(parameters);
- } else {
- if (annotations.length === 0) {
- return;
- }
-
- this.div = document.createElement("div");
- this.div.className = "annotationLayer";
- this.pageDiv.appendChild(this.div);
- parameters.div = this.div;
-
- _pdfjsLib.AnnotationLayer.render(parameters);
-
- this.l10n.translate(this.div);
- }
- });
- }
-
- cancel() {
- this._cancelled = true;
- }
-
- hide() {
- if (!this.div) {
- return;
- }
-
- this.div.setAttribute("hidden", "true");
- }
-
-}
-
-exports.AnnotationLayerBuilder = AnnotationLayerBuilder;
-
-class DefaultAnnotationLayerFactory {
- createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n) {
- return new AnnotationLayerBuilder({
- pageDiv,
- pdfPage,
- imageResourcesPath,
- renderInteractiveForms,
- linkService: new _pdf_link_service.SimpleLinkService(),
- l10n
- });
- }
-
-}
-
-exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory;
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFPageView = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _pdf_rendering_queue = __webpack_require__(8);
-
-var _viewer_compatibility = __webpack_require__(4);
-
-const MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216;
-
-class PDFPageView {
- constructor(options) {
- const container = options.container;
- const defaultViewport = options.defaultViewport;
- this.id = options.id;
- this.renderingId = "page" + this.id;
- this.pdfPage = null;
- this.pageLabel = null;
- this.rotation = 0;
- this.scale = options.scale || _ui_utils.DEFAULT_SCALE;
- this.viewport = defaultViewport;
- this.pdfPageRotate = defaultViewport.rotation;
- this.hasRestrictedScaling = false;
- this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
- this.imageResourcesPath = options.imageResourcesPath || "";
- this.renderInteractiveForms = options.renderInteractiveForms || false;
- this.useOnlyCssZoom = options.useOnlyCssZoom || false;
- this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;
- this.eventBus = options.eventBus;
- this.renderingQueue = options.renderingQueue;
- this.textLayerFactory = options.textLayerFactory;
- this.annotationLayerFactory = options.annotationLayerFactory;
- this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
- this.enableWebGL = options.enableWebGL || false;
- this.l10n = options.l10n || _ui_utils.NullL10n;
- this.paintTask = null;
- this.paintedViewportMap = new WeakMap();
- this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
- this.resume = null;
- this.error = null;
- this.annotationLayer = null;
- this.textLayer = null;
- this.zoomLayer = null;
- const div = document.createElement("div");
- div.className = "page";
- div.style.width = Math.floor(this.viewport.width) + "px";
- div.style.height = Math.floor(this.viewport.height) + "px";
- div.setAttribute("data-page-number", this.id);
- this.div = div;
- container.appendChild(div);
- }
-
- setPdfPage(pdfPage) {
- this.pdfPage = pdfPage;
- this.pdfPageRotate = pdfPage.rotate;
- const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
- this.viewport = pdfPage.getViewport({
- scale: this.scale * _ui_utils.CSS_UNITS,
- rotation: totalRotation
- });
- this.stats = pdfPage.stats;
- this.reset();
- }
-
- destroy() {
- this.reset();
-
- if (this.pdfPage) {
- this.pdfPage.cleanup();
- }
- }
-
- _resetZoomLayer(removeFromDOM = false) {
- if (!this.zoomLayer) {
- return;
- }
-
- const zoomLayerCanvas = this.zoomLayer.firstChild;
- this.paintedViewportMap.delete(zoomLayerCanvas);
- zoomLayerCanvas.width = 0;
- zoomLayerCanvas.height = 0;
-
- if (removeFromDOM) {
- this.zoomLayer.remove();
- }
-
- this.zoomLayer = null;
- }
-
- reset(keepZoomLayer = false, keepAnnotations = false) {
- this.cancelRendering(keepAnnotations);
- this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
- const div = this.div;
- div.style.width = Math.floor(this.viewport.width) + "px";
- div.style.height = Math.floor(this.viewport.height) + "px";
- const childNodes = div.childNodes;
- const currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null;
- const currentAnnotationNode = keepAnnotations && this.annotationLayer && this.annotationLayer.div || null;
-
- for (let i = childNodes.length - 1; i >= 0; i--) {
- const node = childNodes[i];
-
- if (currentZoomLayerNode === node || currentAnnotationNode === node) {
- continue;
- }
-
- div.removeChild(node);
- }
-
- div.removeAttribute("data-loaded");
-
- if (currentAnnotationNode) {
- this.annotationLayer.hide();
- } else if (this.annotationLayer) {
- this.annotationLayer.cancel();
- this.annotationLayer = null;
- }
-
- if (!currentZoomLayerNode) {
- if (this.canvas) {
- this.paintedViewportMap.delete(this.canvas);
- this.canvas.width = 0;
- this.canvas.height = 0;
- delete this.canvas;
- }
-
- this._resetZoomLayer();
- }
-
- if (this.svg) {
- this.paintedViewportMap.delete(this.svg);
- delete this.svg;
- }
-
- this.loadingIconDiv = document.createElement("div");
- this.loadingIconDiv.className = "loadingIcon";
- div.appendChild(this.loadingIconDiv);
- }
-
- update(scale, rotation) {
- this.scale = scale || this.scale;
-
- if (typeof rotation !== "undefined") {
- this.rotation = rotation;
- }
-
- const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
- this.viewport = this.viewport.clone({
- scale: this.scale * _ui_utils.CSS_UNITS,
- rotation: totalRotation
- });
-
- if (this.svg) {
- this.cssTransform(this.svg, true);
- this.eventBus.dispatch("pagerendered", {
- source: this,
- pageNumber: this.id,
- cssTransform: true,
- timestamp: performance.now()
- });
- return;
- }
-
- let isScalingRestricted = false;
-
- if (this.canvas && this.maxCanvasPixels > 0) {
- const outputScale = this.outputScale;
-
- if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) {
- isScalingRestricted = true;
- }
- }
-
- if (this.canvas) {
- if (this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) {
- this.cssTransform(this.canvas, true);
- this.eventBus.dispatch("pagerendered", {
- source: this,
- pageNumber: this.id,
- cssTransform: true,
- timestamp: performance.now()
- });
- return;
- }
-
- if (!this.zoomLayer && !this.canvas.hasAttribute("hidden")) {
- this.zoomLayer = this.canvas.parentNode;
- this.zoomLayer.style.position = "absolute";
- }
- }
-
- if (this.zoomLayer) {
- this.cssTransform(this.zoomLayer.firstChild);
- }
-
- this.reset(true, true);
- }
-
- cancelRendering(keepAnnotations = false) {
- if (this.paintTask) {
- this.paintTask.cancel();
- this.paintTask = null;
- }
-
- this.resume = null;
-
- if (this.textLayer) {
- this.textLayer.cancel();
- this.textLayer = null;
- }
-
- if (!keepAnnotations && this.annotationLayer) {
- this.annotationLayer.cancel();
- this.annotationLayer = null;
- }
- }
-
- cssTransform(target, redrawAnnotations = false) {
- const width = this.viewport.width;
- const height = this.viewport.height;
- const div = this.div;
- target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + "px";
- target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + "px";
- const relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation;
- const absRotation = Math.abs(relativeRotation);
- let scaleX = 1,
- scaleY = 1;
-
- if (absRotation === 90 || absRotation === 270) {
- scaleX = height / width;
- scaleY = width / height;
- }
-
- const cssTransform = "rotate(" + relativeRotation + "deg) " + "scale(" + scaleX + "," + scaleY + ")";
- target.style.transform = cssTransform;
-
- if (this.textLayer) {
- const textLayerViewport = this.textLayer.viewport;
- const textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation;
- const textAbsRotation = Math.abs(textRelativeRotation);
- let scale = width / textLayerViewport.width;
-
- if (textAbsRotation === 90 || textAbsRotation === 270) {
- scale = width / textLayerViewport.height;
- }
-
- const textLayerDiv = this.textLayer.textLayerDiv;
- let transX, transY;
-
- switch (textAbsRotation) {
- case 0:
- transX = transY = 0;
- break;
-
- case 90:
- transX = 0;
- transY = "-" + textLayerDiv.style.height;
- break;
-
- case 180:
- transX = "-" + textLayerDiv.style.width;
- transY = "-" + textLayerDiv.style.height;
- break;
-
- case 270:
- transX = "-" + textLayerDiv.style.width;
- transY = 0;
- break;
-
- default:
- console.error("Bad rotation value.");
- break;
- }
-
- textLayerDiv.style.transform = "rotate(" + textAbsRotation + "deg) " + "scale(" + scale + ", " + scale + ") " + "translate(" + transX + ", " + transY + ")";
- textLayerDiv.style.transformOrigin = "0% 0%";
- }
-
- if (redrawAnnotations && this.annotationLayer) {
- this.annotationLayer.render(this.viewport, "display");
- }
- }
-
- get width() {
- return this.viewport.width;
- }
-
- get height() {
- return this.viewport.height;
- }
-
- getPagePoint(x, y) {
- return this.viewport.convertToPdfPoint(x, y);
- }
-
- draw() {
- if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
- console.error("Must be in new state before drawing");
- this.reset();
- }
-
- const {
- div,
- pdfPage
- } = this;
-
- if (!pdfPage) {
- this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
-
- if (this.loadingIconDiv) {
- div.removeChild(this.loadingIconDiv);
- delete this.loadingIconDiv;
- }
-
- return Promise.reject(new Error("pdfPage is not loaded"));
- }
-
- this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
- const canvasWrapper = document.createElement("div");
- canvasWrapper.style.width = div.style.width;
- canvasWrapper.style.height = div.style.height;
- canvasWrapper.classList.add("canvasWrapper");
-
- if (this.annotationLayer && this.annotationLayer.div) {
- div.insertBefore(canvasWrapper, this.annotationLayer.div);
- } else {
- div.appendChild(canvasWrapper);
- }
-
- let textLayer = null;
-
- if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) {
- const textLayerDiv = document.createElement("div");
- textLayerDiv.className = "textLayer";
- textLayerDiv.style.width = canvasWrapper.style.width;
- textLayerDiv.style.height = canvasWrapper.style.height;
-
- if (this.annotationLayer && this.annotationLayer.div) {
- div.insertBefore(textLayerDiv, this.annotationLayer.div);
- } else {
- div.appendChild(textLayerDiv);
- }
-
- textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE, this.eventBus);
- }
-
- this.textLayer = textLayer;
- let renderContinueCallback = null;
-
- if (this.renderingQueue) {
- renderContinueCallback = cont => {
- if (!this.renderingQueue.isHighestPriority(this)) {
- this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;
-
- this.resume = () => {
- this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
- cont();
- };
-
- return;
- }
-
- cont();
- };
- }
-
- const finishPaintTask = async error => {
- if (paintTask === this.paintTask) {
- this.paintTask = null;
- }
-
- if (error instanceof _pdfjsLib.RenderingCancelledException) {
- this.error = null;
- return;
- }
-
- this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
-
- if (this.loadingIconDiv) {
- div.removeChild(this.loadingIconDiv);
- delete this.loadingIconDiv;
- }
-
- this._resetZoomLayer(true);
-
- this.error = error;
- this.stats = pdfPage.stats;
- this.eventBus.dispatch("pagerendered", {
- source: this,
- pageNumber: this.id,
- cssTransform: false,
- timestamp: performance.now()
- });
-
- if (error) {
- throw error;
- }
- };
-
- const paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper);
- paintTask.onRenderContinue = renderContinueCallback;
- this.paintTask = paintTask;
- const resultPromise = paintTask.promise.then(function () {
- return finishPaintTask(null).then(function () {
- if (textLayer) {
- const readableStream = pdfPage.streamTextContent({
- normalizeWhitespace: true
- });
- textLayer.setTextContentStream(readableStream);
- textLayer.render();
- }
- });
- }, function (reason) {
- return finishPaintTask(reason);
- });
-
- if (this.annotationLayerFactory) {
- if (!this.annotationLayer) {
- this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, this.imageResourcesPath, this.renderInteractiveForms, this.l10n);
- }
-
- this.annotationLayer.render(this.viewport, "display");
- }
-
- div.setAttribute("data-loaded", true);
- this.eventBus.dispatch("pagerender", {
- source: this,
- pageNumber: this.id
- });
- return resultPromise;
- }
-
- paintOnCanvas(canvasWrapper) {
- const renderCapability = (0, _pdfjsLib.createPromiseCapability)();
- const result = {
- promise: renderCapability.promise,
-
- onRenderContinue(cont) {
- cont();
- },
-
- cancel() {
- renderTask.cancel();
- }
-
- };
- const viewport = this.viewport;
- const canvas = document.createElement("canvas");
- this.l10n.get("page_canvas", {
- page: this.id
- }, "Page {{page}}").then(msg => {
- canvas.setAttribute("aria-label", msg);
- });
- canvas.setAttribute("hidden", "hidden");
- let isCanvasHidden = true;
-
- const showCanvas = function () {
- if (isCanvasHidden) {
- canvas.removeAttribute("hidden");
- isCanvasHidden = false;
- }
- };
-
- canvasWrapper.appendChild(canvas);
- this.canvas = canvas;
- canvas.mozOpaque = true;
- const ctx = canvas.getContext("2d", {
- alpha: false
- });
- const outputScale = (0, _ui_utils.getOutputScale)(ctx);
- this.outputScale = outputScale;
-
- if (this.useOnlyCssZoom) {
- const actualSizeViewport = viewport.clone({
- scale: _ui_utils.CSS_UNITS
- });
- outputScale.sx *= actualSizeViewport.width / viewport.width;
- outputScale.sy *= actualSizeViewport.height / viewport.height;
- outputScale.scaled = true;
- }
-
- if (this.maxCanvasPixels > 0) {
- const pixelsInViewport = viewport.width * viewport.height;
- const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);
-
- if (outputScale.sx > maxScale || outputScale.sy > maxScale) {
- outputScale.sx = maxScale;
- outputScale.sy = maxScale;
- outputScale.scaled = true;
- this.hasRestrictedScaling = true;
- } else {
- this.hasRestrictedScaling = false;
- }
- }
-
- const sfx = (0, _ui_utils.approximateFraction)(outputScale.sx);
- const sfy = (0, _ui_utils.approximateFraction)(outputScale.sy);
- canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]);
- canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]);
- canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + "px";
- canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + "px";
- this.paintedViewportMap.set(canvas, viewport);
- const transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];
- const renderContext = {
- canvasContext: ctx,
- transform,
- viewport: this.viewport,
- enableWebGL: this.enableWebGL,
- renderInteractiveForms: this.renderInteractiveForms
- };
- const renderTask = this.pdfPage.render(renderContext);
-
- renderTask.onContinue = function (cont) {
- showCanvas();
-
- if (result.onRenderContinue) {
- result.onRenderContinue(cont);
- } else {
- cont();
- }
- };
-
- renderTask.promise.then(function () {
- showCanvas();
- renderCapability.resolve(undefined);
- }, function (error) {
- showCanvas();
- renderCapability.reject(error);
- });
- return result;
- }
-
- paintOnSvg(wrapper) {
- let cancelled = false;
-
- const ensureNotCancelled = () => {
- if (cancelled) {
- throw new _pdfjsLib.RenderingCancelledException(`Rendering cancelled, page ${this.id}`, "svg");
- }
- };
-
- const pdfPage = this.pdfPage;
- const actualSizeViewport = this.viewport.clone({
- scale: _ui_utils.CSS_UNITS
- });
- const promise = pdfPage.getOperatorList().then(opList => {
- ensureNotCancelled();
- const svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs);
- return svgGfx.getSVG(opList, actualSizeViewport).then(svg => {
- ensureNotCancelled();
- this.svg = svg;
- this.paintedViewportMap.set(svg, actualSizeViewport);
- svg.style.width = wrapper.style.width;
- svg.style.height = wrapper.style.height;
- this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
- wrapper.appendChild(svg);
- });
- });
- return {
- promise,
-
- onRenderContinue(cont) {
- cont();
- },
-
- cancel() {
- cancelled = true;
- }
-
- };
- }
-
- setPageLabel(label) {
- this.pageLabel = typeof label === "string" ? label : null;
-
- if (this.pageLabel !== null) {
- this.div.setAttribute("data-page-label", this.pageLabel);
- } else {
- this.div.removeAttribute("data-page-label");
- }
- }
-
-}
-
-exports.PDFPageView = PDFPageView;
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.DefaultTextLayerFactory = exports.TextLayerBuilder = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-const EXPAND_DIVS_TIMEOUT = 300;
-
-class TextLayerBuilder {
- constructor({
- textLayerDiv,
- eventBus,
- pageIndex,
- viewport,
- findController = null,
- enhanceTextSelection = false
- }) {
- this.textLayerDiv = textLayerDiv;
- this.eventBus = eventBus;
- this.textContent = null;
- this.textContentItemsStr = [];
- this.textContentStream = null;
- this.renderingDone = false;
- this.pageIdx = pageIndex;
- this.pageNumber = this.pageIdx + 1;
- this.matches = [];
- this.viewport = viewport;
- this.textDivs = [];
- this.findController = findController;
- this.textLayerRenderTask = null;
- this.enhanceTextSelection = enhanceTextSelection;
- this._onUpdateTextLayerMatches = null;
-
- this._bindMouse();
- }
-
- _finishRendering() {
- this.renderingDone = true;
-
- if (!this.enhanceTextSelection) {
- const endOfContent = document.createElement("div");
- endOfContent.className = "endOfContent";
- this.textLayerDiv.appendChild(endOfContent);
- }
-
- this.eventBus.dispatch("textlayerrendered", {
- source: this,
- pageNumber: this.pageNumber,
- numTextDivs: this.textDivs.length
- });
- }
-
- render(timeout = 0) {
- if (!(this.textContent || this.textContentStream) || this.renderingDone) {
- return;
- }
-
- this.cancel();
- this.textDivs = [];
- const textLayerFrag = document.createDocumentFragment();
- this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({
- textContent: this.textContent,
- textContentStream: this.textContentStream,
- container: textLayerFrag,
- viewport: this.viewport,
- textDivs: this.textDivs,
- textContentItemsStr: this.textContentItemsStr,
- timeout,
- enhanceTextSelection: this.enhanceTextSelection
- });
- this.textLayerRenderTask.promise.then(() => {
- this.textLayerDiv.appendChild(textLayerFrag);
-
- this._finishRendering();
-
- this._updateMatches();
- }, function (reason) {});
-
- if (!this._onUpdateTextLayerMatches) {
- this._onUpdateTextLayerMatches = evt => {
- if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {
- this._updateMatches();
- }
- };
-
- this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches);
- }
- }
-
- cancel() {
- if (this.textLayerRenderTask) {
- this.textLayerRenderTask.cancel();
- this.textLayerRenderTask = null;
- }
-
- if (this._onUpdateTextLayerMatches) {
- this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches);
-
- this._onUpdateTextLayerMatches = null;
- }
- }
-
- setTextContentStream(readableStream) {
- this.cancel();
- this.textContentStream = readableStream;
- }
-
- setTextContent(textContent) {
- this.cancel();
- this.textContent = textContent;
- }
-
- _convertMatches(matches, matchesLength) {
- if (!matches) {
- return [];
- }
-
- const {
- findController,
- textContentItemsStr
- } = this;
- let i = 0,
- iIndex = 0;
- const end = textContentItemsStr.length - 1;
- const queryLen = findController.state.query.length;
- const result = [];
-
- for (let m = 0, mm = matches.length; m < mm; m++) {
- let matchIdx = matches[m];
-
- while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {
- iIndex += textContentItemsStr[i].length;
- i++;
- }
-
- if (i === textContentItemsStr.length) {
- console.error("Could not find a matching mapping");
- }
-
- const match = {
- begin: {
- divIdx: i,
- offset: matchIdx - iIndex
- }
- };
-
- if (matchesLength) {
- matchIdx += matchesLength[m];
- } else {
- matchIdx += queryLen;
- }
-
- while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {
- iIndex += textContentItemsStr[i].length;
- i++;
- }
-
- match.end = {
- divIdx: i,
- offset: matchIdx - iIndex
- };
- result.push(match);
- }
-
- return result;
- }
-
- _renderMatches(matches) {
- if (matches.length === 0) {
- return;
- }
-
- const {
- findController,
- pageIdx,
- textContentItemsStr,
- textDivs
- } = this;
- const isSelectedPage = pageIdx === findController.selected.pageIdx;
- const selectedMatchIdx = findController.selected.matchIdx;
- const highlightAll = findController.state.highlightAll;
- let prevEnd = null;
- const infinity = {
- divIdx: -1,
- offset: undefined
- };
-
- function beginText(begin, className) {
- const divIdx = begin.divIdx;
- textDivs[divIdx].textContent = "";
- appendTextToDiv(divIdx, 0, begin.offset, className);
- }
-
- function appendTextToDiv(divIdx, fromOffset, toOffset, className) {
- const div = textDivs[divIdx];
- const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);
- const node = document.createTextNode(content);
-
- if (className) {
- const span = document.createElement("span");
- span.className = className;
- span.appendChild(node);
- div.appendChild(span);
- return;
- }
-
- div.appendChild(node);
- }
-
- let i0 = selectedMatchIdx,
- i1 = i0 + 1;
-
- if (highlightAll) {
- i0 = 0;
- i1 = matches.length;
- } else if (!isSelectedPage) {
- return;
- }
-
- for (let i = i0; i < i1; i++) {
- const match = matches[i];
- const begin = match.begin;
- const end = match.end;
- const isSelected = isSelectedPage && i === selectedMatchIdx;
- const highlightSuffix = isSelected ? " selected" : "";
-
- if (isSelected) {
- findController.scrollMatchIntoView({
- element: textDivs[begin.divIdx],
- pageIndex: pageIdx,
- matchIndex: selectedMatchIdx
- });
- }
-
- if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {
- if (prevEnd !== null) {
- appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
- }
-
- beginText(begin);
- } else {
- appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);
- }
-
- if (begin.divIdx === end.divIdx) {
- appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix);
- } else {
- appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix);
-
- for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {
- textDivs[n0].className = "highlight middle" + highlightSuffix;
- }
-
- beginText(end, "highlight end" + highlightSuffix);
- }
-
- prevEnd = end;
- }
-
- if (prevEnd) {
- appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
- }
- }
-
- _updateMatches() {
- if (!this.renderingDone) {
- return;
- }
-
- const {
- findController,
- matches,
- pageIdx,
- textContentItemsStr,
- textDivs
- } = this;
- let clearedUntilDivIdx = -1;
-
- for (let i = 0, ii = matches.length; i < ii; i++) {
- const match = matches[i];
- const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);
-
- for (let n = begin, end = match.end.divIdx; n <= end; n++) {
- const div = textDivs[n];
- div.textContent = textContentItemsStr[n];
- div.className = "";
- }
-
- clearedUntilDivIdx = match.end.divIdx + 1;
- }
-
- if (!findController || !findController.highlightMatches) {
- return;
- }
-
- const pageMatches = findController.pageMatches[pageIdx] || null;
- const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;
- this.matches = this._convertMatches(pageMatches, pageMatchesLength);
-
- this._renderMatches(this.matches);
- }
-
- _bindMouse() {
- const div = this.textLayerDiv;
- let expandDivsTimer = null;
- div.addEventListener("mousedown", evt => {
- if (this.enhanceTextSelection && this.textLayerRenderTask) {
- this.textLayerRenderTask.expandTextDivs(true);
-
- if (expandDivsTimer) {
- clearTimeout(expandDivsTimer);
- expandDivsTimer = null;
- }
-
- return;
- }
-
- const end = div.querySelector(".endOfContent");
-
- if (!end) {
- return;
- }
-
- let adjustTop = evt.target !== div;
- adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none";
-
- if (adjustTop) {
- const divBounds = div.getBoundingClientRect();
- const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);
- end.style.top = (r * 100).toFixed(2) + "%";
- }
-
- end.classList.add("active");
- });
- div.addEventListener("mouseup", () => {
- if (this.enhanceTextSelection && this.textLayerRenderTask) {
- expandDivsTimer = setTimeout(() => {
- if (this.textLayerRenderTask) {
- this.textLayerRenderTask.expandTextDivs(false);
- }
-
- expandDivsTimer = null;
- }, EXPAND_DIVS_TIMEOUT);
- return;
- }
-
- const end = div.querySelector(".endOfContent");
-
- if (!end) {
- return;
- }
-
- end.style.top = "";
- end.classList.remove("active");
- });
- }
-
-}
-
-exports.TextLayerBuilder = TextLayerBuilder;
-
-class DefaultTextLayerFactory {
- createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
- return new TextLayerBuilder({
- textLayerDiv,
- pageIndex,
- viewport,
- enhanceTextSelection,
- eventBus
- });
- }
-
-}
-
-exports.DefaultTextLayerFactory = DefaultTextLayerFactory;
-
-/***/ }),
-/* 29 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.SecondaryToolbar = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-var _pdf_cursor_tools = __webpack_require__(6);
-
-var _pdf_single_page_viewer = __webpack_require__(30);
-
-class SecondaryToolbar {
- constructor(options, mainContainer, eventBus) {
- this.toolbar = options.toolbar;
- this.toggleButton = options.toggleButton;
- this.toolbarButtonContainer = options.toolbarButtonContainer;
- this.buttons = [{
- element: options.presentationModeButton,
- eventName: "presentationmode",
- close: true
- }, {
- element: options.openFileButton,
- eventName: "openfile",
- close: true
- }, {
- element: options.printButton,
- eventName: "print",
- close: true
- }, {
- element: options.downloadButton,
- eventName: "download",
- close: true
- }, {
- element: options.viewBookmarkButton,
- eventName: null,
- close: true
- }, {
- element: options.firstPageButton,
- eventName: "firstpage",
- close: true
- }, {
- element: options.lastPageButton,
- eventName: "lastpage",
- close: true
- }, {
- element: options.pageRotateCwButton,
- eventName: "rotatecw",
- close: false
- }, {
- element: options.pageRotateCcwButton,
- eventName: "rotateccw",
- close: false
- }, {
- element: options.cursorSelectToolButton,
- eventName: "switchcursortool",
- eventDetails: {
- tool: _pdf_cursor_tools.CursorTool.SELECT
- },
- close: true
- }, {
- element: options.cursorHandToolButton,
- eventName: "switchcursortool",
- eventDetails: {
- tool: _pdf_cursor_tools.CursorTool.HAND
- },
- close: true
- }, {
- element: options.scrollVerticalButton,
- eventName: "switchscrollmode",
- eventDetails: {
- mode: _ui_utils.ScrollMode.VERTICAL
- },
- close: true
- }, {
- element: options.scrollHorizontalButton,
- eventName: "switchscrollmode",
- eventDetails: {
- mode: _ui_utils.ScrollMode.HORIZONTAL
- },
- close: true
- }, {
- element: options.scrollWrappedButton,
- eventName: "switchscrollmode",
- eventDetails: {
- mode: _ui_utils.ScrollMode.WRAPPED
- },
- close: true
- }, {
- element: options.spreadNoneButton,
- eventName: "switchspreadmode",
- eventDetails: {
- mode: _ui_utils.SpreadMode.NONE
- },
- close: true
- }, {
- element: options.spreadOddButton,
- eventName: "switchspreadmode",
- eventDetails: {
- mode: _ui_utils.SpreadMode.ODD
- },
- close: true
- }, {
- element: options.spreadEvenButton,
- eventName: "switchspreadmode",
- eventDetails: {
- mode: _ui_utils.SpreadMode.EVEN
- },
- close: true
- }, {
- element: options.documentPropertiesButton,
- eventName: "documentproperties",
- close: true
- }];
- this.items = {
- firstPage: options.firstPageButton,
- lastPage: options.lastPageButton,
- pageRotateCw: options.pageRotateCwButton,
- pageRotateCcw: options.pageRotateCcwButton
- };
- this.mainContainer = mainContainer;
- this.eventBus = eventBus;
- this.opened = false;
- this.containerHeight = null;
- this.previousContainerHeight = null;
- this.reset();
-
- this._bindClickListeners();
-
- this._bindCursorToolsListener(options);
-
- this._bindScrollModeListener(options);
-
- this._bindSpreadModeListener(options);
-
- this.eventBus._on("resize", this._setMaxHeight.bind(this));
-
- this.eventBus._on("baseviewerinit", evt => {
- if (evt.source instanceof _pdf_single_page_viewer.PDFSinglePageViewer) {
- this.toolbarButtonContainer.classList.add("hiddenScrollModeButtons", "hiddenSpreadModeButtons");
- } else {
- this.toolbarButtonContainer.classList.remove("hiddenScrollModeButtons", "hiddenSpreadModeButtons");
- }
- });
- }
-
- get isOpen() {
- return this.opened;
- }
-
- setPageNumber(pageNumber) {
- this.pageNumber = pageNumber;
-
- this._updateUIState();
- }
-
- setPagesCount(pagesCount) {
- this.pagesCount = pagesCount;
-
- this._updateUIState();
- }
-
- reset() {
- this.pageNumber = 0;
- this.pagesCount = 0;
-
- this._updateUIState();
-
- this.eventBus.dispatch("secondarytoolbarreset", {
- source: this
- });
- }
-
- _updateUIState() {
- this.items.firstPage.disabled = this.pageNumber <= 1;
- this.items.lastPage.disabled = this.pageNumber >= this.pagesCount;
- this.items.pageRotateCw.disabled = this.pagesCount === 0;
- this.items.pageRotateCcw.disabled = this.pagesCount === 0;
- }
-
- _bindClickListeners() {
- this.toggleButton.addEventListener("click", this.toggle.bind(this));
-
- for (const {
- element,
- eventName,
- close,
- eventDetails
- } of this.buttons) {
- element.addEventListener("click", evt => {
- if (eventName !== null) {
- const details = {
- source: this
- };
-
- for (const property in eventDetails) {
- details[property] = eventDetails[property];
- }
-
- this.eventBus.dispatch(eventName, details);
- }
-
- if (close) {
- this.close();
- }
- });
- }
- }
-
- _bindCursorToolsListener(buttons) {
- this.eventBus._on("cursortoolchanged", function ({
- tool
- }) {
- buttons.cursorSelectToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.SELECT);
- buttons.cursorHandToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.HAND);
- });
- }
-
- _bindScrollModeListener(buttons) {
- function scrollModeChanged({
- mode
- }) {
- buttons.scrollVerticalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.VERTICAL);
- buttons.scrollHorizontalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.HORIZONTAL);
- buttons.scrollWrappedButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.WRAPPED);
- const isScrollModeHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL;
- buttons.spreadNoneButton.disabled = isScrollModeHorizontal;
- buttons.spreadOddButton.disabled = isScrollModeHorizontal;
- buttons.spreadEvenButton.disabled = isScrollModeHorizontal;
- }
-
- this.eventBus._on("scrollmodechanged", scrollModeChanged);
-
- this.eventBus._on("secondarytoolbarreset", evt => {
- if (evt.source === this) {
- scrollModeChanged({
- mode: _ui_utils.ScrollMode.VERTICAL
- });
- }
- });
- }
-
- _bindSpreadModeListener(buttons) {
- function spreadModeChanged({
- mode
- }) {
- buttons.spreadNoneButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.NONE);
- buttons.spreadOddButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.ODD);
- buttons.spreadEvenButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.EVEN);
- }
-
- this.eventBus._on("spreadmodechanged", spreadModeChanged);
-
- this.eventBus._on("secondarytoolbarreset", evt => {
- if (evt.source === this) {
- spreadModeChanged({
- mode: _ui_utils.SpreadMode.NONE
- });
- }
- });
- }
-
- open() {
- if (this.opened) {
- return;
- }
-
- this.opened = true;
-
- this._setMaxHeight();
-
- this.toggleButton.classList.add("toggled");
- this.toolbar.classList.remove("hidden");
- }
-
- close() {
- if (!this.opened) {
- return;
- }
-
- this.opened = false;
- this.toolbar.classList.add("hidden");
- this.toggleButton.classList.remove("toggled");
- }
-
- toggle() {
- if (this.opened) {
- this.close();
- } else {
- this.open();
- }
- }
-
- _setMaxHeight() {
- if (!this.opened) {
- return;
- }
-
- this.containerHeight = this.mainContainer.clientHeight;
-
- if (this.containerHeight === this.previousContainerHeight) {
- return;
- }
-
- this.toolbarButtonContainer.style.maxHeight = `${this.containerHeight - _ui_utils.SCROLLBAR_PADDING}px`;
- this.previousContainerHeight = this.containerHeight;
- }
-
-}
-
-exports.SecondaryToolbar = SecondaryToolbar;
-
-/***/ }),
-/* 30 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFSinglePageViewer = void 0;
-
-var _base_viewer = __webpack_require__(25);
-
-var _pdfjsLib = __webpack_require__(5);
-
-class PDFSinglePageViewer extends _base_viewer.BaseViewer {
- constructor(options) {
- super(options);
-
- this.eventBus._on("pagesinit", evt => {
- this._ensurePageViewVisible();
- });
- }
-
- get _viewerElement() {
- return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer);
- }
-
- _resetView() {
- super._resetView();
-
- this._previousPageNumber = 1;
- this._shadowViewer = document.createDocumentFragment();
- this._updateScrollDown = null;
- }
-
- _ensurePageViewVisible() {
- const pageView = this._pages[this._currentPageNumber - 1];
- const previousPageView = this._pages[this._previousPageNumber - 1];
- const viewerNodes = this.viewer.childNodes;
-
- switch (viewerNodes.length) {
- case 0:
- this.viewer.appendChild(pageView.div);
- break;
-
- case 1:
- if (viewerNodes[0] !== previousPageView.div) {
- throw new Error("_ensurePageViewVisible: Unexpected previously visible page.");
- }
-
- if (pageView === previousPageView) {
- break;
- }
-
- this._shadowViewer.appendChild(previousPageView.div);
-
- this.viewer.appendChild(pageView.div);
- this.container.scrollTop = 0;
- break;
-
- default:
- throw new Error("_ensurePageViewVisible: Only one page should be visible at a time.");
- }
-
- this._previousPageNumber = this._currentPageNumber;
- }
-
- _scrollUpdate() {
- if (this._updateScrollDown) {
- this._updateScrollDown();
- }
-
- super._scrollUpdate();
- }
-
- _scrollIntoView({
- pageDiv,
- pageSpot = null,
- pageNumber = null
- }) {
- if (pageNumber) {
- this._setCurrentPageNumber(pageNumber);
- }
-
- const scrolledDown = this._currentPageNumber >= this._previousPageNumber;
-
- this._ensurePageViewVisible();
-
- this.update();
-
- super._scrollIntoView({
- pageDiv,
- pageSpot,
- pageNumber
- });
-
- this._updateScrollDown = () => {
- this.scroll.down = scrolledDown;
- this._updateScrollDown = null;
- };
- }
-
- _getVisiblePages() {
- return this._getCurrentVisiblePage();
- }
-
- _updateHelper(visiblePages) {}
-
- get _isScrollModeHorizontal() {
- return (0, _pdfjsLib.shadow)(this, "_isScrollModeHorizontal", false);
- }
-
- _updateScrollMode() {}
-
- _updateSpreadMode() {}
-
-}
-
-exports.PDFSinglePageViewer = PDFSinglePageViewer;
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Toolbar = void 0;
-
-var _ui_utils = __webpack_require__(2);
-
-const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading";
-const SCALE_SELECT_CONTAINER_WIDTH = 140;
-const SCALE_SELECT_WIDTH = 162;
-
-class Toolbar {
- constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
- this.toolbar = options.container;
- this.eventBus = eventBus;
- this.l10n = l10n;
- this.buttons = [{
- element: options.previous,
- eventName: "previouspage"
- }, {
- element: options.next,
- eventName: "nextpage"
- }, {
- element: options.zoomIn,
- eventName: "zoomin"
- }, {
- element: options.zoomOut,
- eventName: "zoomout"
- }, {
- element: options.openFile,
- eventName: "openfile"
- }, {
- element: options.print,
- eventName: "print"
- }, {
- element: options.presentationModeButton,
- eventName: "presentationmode"
- }, {
- element: options.download,
- eventName: "download"
- }, {
- element: options.viewBookmark,
- eventName: null
- }];
- this.items = {
- numPages: options.numPages,
- pageNumber: options.pageNumber,
- scaleSelectContainer: options.scaleSelectContainer,
- scaleSelect: options.scaleSelect,
- customScaleOption: options.customScaleOption,
- previous: options.previous,
- next: options.next,
- zoomIn: options.zoomIn,
- zoomOut: options.zoomOut
- };
- this._wasLocalized = false;
- this.reset();
-
- this._bindListeners();
- }
-
- setPageNumber(pageNumber, pageLabel) {
- this.pageNumber = pageNumber;
- this.pageLabel = pageLabel;
-
- this._updateUIState(false);
- }
-
- setPagesCount(pagesCount, hasPageLabels) {
- this.pagesCount = pagesCount;
- this.hasPageLabels = hasPageLabels;
-
- this._updateUIState(true);
- }
-
- setPageScale(pageScaleValue, pageScale) {
- this.pageScaleValue = (pageScaleValue || pageScale).toString();
- this.pageScale = pageScale;
-
- this._updateUIState(false);
- }
-
- reset() {
- this.pageNumber = 0;
- this.pageLabel = null;
- this.hasPageLabels = false;
- this.pagesCount = 0;
- this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
- this.pageScale = _ui_utils.DEFAULT_SCALE;
-
- this._updateUIState(true);
-
- this.updateLoadingIndicatorState();
- }
-
- _bindListeners() {
- const {
- pageNumber,
- scaleSelect
- } = this.items;
- const self = this;
-
- for (const {
- element,
- eventName
- } of this.buttons) {
- element.addEventListener("click", evt => {
- if (eventName !== null) {
- this.eventBus.dispatch(eventName, {
- source: this
- });
- }
- });
- }
-
- pageNumber.addEventListener("click", function () {
- this.select();
- });
- pageNumber.addEventListener("change", function () {
- self.eventBus.dispatch("pagenumberchanged", {
- source: self,
- value: this.value
- });
- });
- scaleSelect.addEventListener("change", function () {
- if (this.value === "custom") {
- return;
- }
-
- self.eventBus.dispatch("scalechanged", {
- source: self,
- value: this.value
- });
- });
- scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;
-
- this.eventBus._on("localized", () => {
- this._wasLocalized = true;
-
- this._adjustScaleWidth();
-
- this._updateUIState(true);
- });
- }
-
- _updateUIState(resetNumPages = false) {
- if (!this._wasLocalized) {
- return;
- }
-
- const {
- pageNumber,
- pagesCount,
- pageScaleValue,
- pageScale,
- items
- } = this;
-
- if (resetNumPages) {
- if (this.hasPageLabels) {
- items.pageNumber.type = "text";
- } else {
- items.pageNumber.type = "number";
- this.l10n.get("of_pages", {
- pagesCount
- }, "of {{pagesCount}}").then(msg => {
- items.numPages.textContent = msg;
- });
- }
-
- items.pageNumber.max = pagesCount;
- }
-
- if (this.hasPageLabels) {
- items.pageNumber.value = this.pageLabel;
- this.l10n.get("page_of_pages", {
- pageNumber,
- pagesCount
- }, "({{pageNumber}} of {{pagesCount}})").then(msg => {
- items.numPages.textContent = msg;
- });
- } else {
- items.pageNumber.value = pageNumber;
- }
-
- items.previous.disabled = pageNumber <= 1;
- items.next.disabled = pageNumber >= pagesCount;
- items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;
- items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;
- const customScale = Math.round(pageScale * 10000) / 100;
- this.l10n.get("page_scale_percent", {
- scale: customScale
- }, "{{scale}}%").then(msg => {
- let predefinedValueFound = false;
-
- for (const option of items.scaleSelect.options) {
- if (option.value !== pageScaleValue) {
- option.selected = false;
- continue;
- }
-
- option.selected = true;
- predefinedValueFound = true;
- }
-
- if (!predefinedValueFound) {
- items.customScaleOption.textContent = msg;
- items.customScaleOption.selected = true;
- }
- });
- }
-
- updateLoadingIndicatorState(loading = false) {
- const pageNumberInput = this.items.pageNumber;
- pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading);
- }
-
- async _adjustScaleWidth() {
- const {
- items,
- l10n
- } = this;
- const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto", null, "Automatic Zoom"), l10n.get("page_scale_actual", null, "Actual Size"), l10n.get("page_scale_fit", null, "Page Fit"), l10n.get("page_scale_width", null, "Page Width")]);
- let canvas = document.createElement("canvas");
- canvas.mozOpaque = true;
- let ctx = canvas.getContext("2d", {
- alpha: false
- });
- await _ui_utils.animationStarted;
- const {
- fontSize,
- fontFamily
- } = getComputedStyle(items.scaleSelect);
- ctx.font = `${fontSize} ${fontFamily}`;
- let maxWidth = 0;
-
- for (const predefinedValue of await predefinedValuesPromise) {
- const {
- width
- } = ctx.measureText(predefinedValue);
-
- if (width > maxWidth) {
- maxWidth = width;
- }
- }
-
- const overflow = SCALE_SELECT_WIDTH - SCALE_SELECT_CONTAINER_WIDTH;
- maxWidth += 1.5 * overflow;
-
- if (maxWidth > SCALE_SELECT_CONTAINER_WIDTH) {
- items.scaleSelect.style.width = `${maxWidth + overflow}px`;
- items.scaleSelectContainer.style.width = `${maxWidth}px`;
- }
-
- canvas.width = 0;
- canvas.height = 0;
- canvas = ctx = null;
- }
-
-}
-
-exports.Toolbar = Toolbar;
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.ViewHistory = void 0;
-const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;
-
-class ViewHistory {
- constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) {
- this.fingerprint = fingerprint;
- this.cacheSize = cacheSize;
- this._initializedPromise = this._readFromStorage().then(databaseStr => {
- const database = JSON.parse(databaseStr || "{}");
- let index = -1;
-
- if (!Array.isArray(database.files)) {
- database.files = [];
- } else {
- while (database.files.length >= this.cacheSize) {
- database.files.shift();
- }
-
- for (let i = 0, ii = database.files.length; i < ii; i++) {
- const branch = database.files[i];
-
- if (branch.fingerprint === this.fingerprint) {
- index = i;
- break;
- }
- }
- }
-
- if (index === -1) {
- index = database.files.push({
- fingerprint: this.fingerprint
- }) - 1;
- }
-
- this.file = database.files[index];
- this.database = database;
- });
- }
-
- async _writeToStorage() {
- const databaseStr = JSON.stringify(this.database);
- localStorage.setItem("pdfjs.history", databaseStr);
- }
-
- async _readFromStorage() {
- return localStorage.getItem("pdfjs.history");
- }
-
- async set(name, val) {
- await this._initializedPromise;
- this.file[name] = val;
- return this._writeToStorage();
- }
-
- async setMultiple(properties) {
- await this._initializedPromise;
-
- for (const name in properties) {
- this.file[name] = properties[name];
- }
-
- return this._writeToStorage();
- }
-
- async get(name, defaultValue) {
- await this._initializedPromise;
- const val = this.file[name];
- return val !== undefined ? val : defaultValue;
- }
-
- async getMultiple(properties) {
- await this._initializedPromise;
- const values = Object.create(null);
-
- for (const name in properties) {
- const val = this.file[name];
- values[name] = val !== undefined ? val : properties[name];
- }
-
- return values;
- }
-
-}
-
-exports.ViewHistory = ViewHistory;
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.GenericCom = void 0;
-
-var _app = __webpack_require__(1);
-
-var _preferences = __webpack_require__(34);
-
-var _download_manager = __webpack_require__(35);
-
-var _genericl10n = __webpack_require__(36);
-
-;
-const GenericCom = {};
-exports.GenericCom = GenericCom;
-
-class GenericPreferences extends _preferences.BasePreferences {
- async _writeToStorage(prefObj) {
- localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj));
- }
-
- async _readFromStorage(prefObj) {
- return JSON.parse(localStorage.getItem("pdfjs.preferences"));
- }
-
-}
-
-class GenericExternalServices extends _app.DefaultExternalServices {
- static createDownloadManager(options) {
- return new _download_manager.DownloadManager(options);
- }
-
- static createPreferences() {
- return new GenericPreferences();
- }
-
- static createL10n({
- locale = "en-US"
- }) {
- return new _genericl10n.GenericL10n(locale);
- }
-
-}
-
-_app.PDFViewerApplication.externalServices = GenericExternalServices;
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.BasePreferences = void 0;
-
-var _app_options = __webpack_require__(3);
-
-let defaultPreferences = null;
-
-function getDefaultPreferences() {
- if (!defaultPreferences) {
- defaultPreferences = Promise.resolve({
- "cursorToolOnLoad": 0,
- "defaultZoomValue": "",
- "disablePageLabels": false,
- "enablePermissions": false,
- "enablePrintAutoRotate": false,
- "enableWebGL": false,
- "externalLinkTarget": 0,
- "historyUpdateUrl": false,
- "ignoreDestinationZoom": false,
- "pdfBugEnabled": false,
- "renderer": "canvas",
- "renderInteractiveForms": false,
- "sidebarViewOnLoad": -1,
- "scrollModeOnLoad": -1,
- "spreadModeOnLoad": -1,
- "textLayerMode": 1,
- "useOnlyCssZoom": false,
- "viewOnLoad": 0,
- "disableAutoFetch": false,
- "disableFontFace": false,
- "disableRange": false,
- "disableStream": false
- });
- }
-
- return defaultPreferences;
-}
-
-class BasePreferences {
- constructor() {
- if (this.constructor === BasePreferences) {
- throw new Error("Cannot initialize BasePreferences.");
- }
-
- this.prefs = null;
- this._initializedPromise = getDefaultPreferences().then(defaults => {
- Object.defineProperty(this, "defaults", {
- value: Object.freeze(defaults),
- writable: false,
- enumerable: true,
- configurable: false
- });
- this.prefs = Object.assign(Object.create(null), defaults);
- return this._readFromStorage(defaults);
- }).then(prefs => {
- if (!prefs) {
- return;
- }
-
- for (const name in prefs) {
- const defaultValue = this.defaults[name],
- prefValue = prefs[name];
-
- if (defaultValue === undefined || typeof prefValue !== typeof defaultValue) {
- continue;
- }
-
- this.prefs[name] = prefValue;
- }
- });
- }
-
- async _writeToStorage(prefObj) {
- throw new Error("Not implemented: _writeToStorage");
- }
-
- async _readFromStorage(prefObj) {
- throw new Error("Not implemented: _readFromStorage");
- }
-
- async reset() {
- await this._initializedPromise;
- this.prefs = Object.assign(Object.create(null), this.defaults);
- return this._writeToStorage(this.defaults);
- }
-
- async set(name, value) {
- await this._initializedPromise;
- const defaultValue = this.defaults[name];
-
- if (defaultValue === undefined) {
- throw new Error(`Set preference: "${name}" is undefined.`);
- } else if (value === undefined) {
- throw new Error("Set preference: no value is specified.");
- }
-
- const valueType = typeof value;
- const defaultType = typeof defaultValue;
-
- if (valueType !== defaultType) {
- if (valueType === "number" && defaultType === "string") {
- value = value.toString();
- } else {
- throw new Error(`Set preference: "${value}" is a ${valueType}, ` + `expected a ${defaultType}.`);
- }
- } else {
- if (valueType === "number" && !Number.isInteger(value)) {
- throw new Error(`Set preference: "${value}" must be an integer.`);
- }
- }
-
- this.prefs[name] = value;
- return this._writeToStorage(this.prefs);
- }
-
- async get(name) {
- await this._initializedPromise;
- const defaultValue = this.defaults[name];
-
- if (defaultValue === undefined) {
- throw new Error(`Get preference: "${name}" is undefined.`);
- } else {
- const prefValue = this.prefs[name];
-
- if (prefValue !== undefined) {
- return prefValue;
- }
- }
-
- return defaultValue;
- }
-
- async getAll() {
- await this._initializedPromise;
- return Object.assign(Object.create(null), this.defaults, this.prefs);
- }
-
-}
-
-exports.BasePreferences = BasePreferences;
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.DownloadManager = void 0;
-
-var _pdfjsLib = __webpack_require__(5);
-
-var _viewer_compatibility = __webpack_require__(4);
-
-;
-const DISABLE_CREATE_OBJECT_URL = _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL || false;
-
-function download(blobUrl, filename) {
- const a = document.createElement("a");
-
- if (!a.click) {
- throw new Error('DownloadManager: "a.click()" is not supported.');
- }
-
- a.href = blobUrl;
- a.target = "_parent";
-
- if ("download" in a) {
- a.download = filename;
- }
-
- (document.body || document.documentElement).appendChild(a);
- a.click();
- a.remove();
-}
-
-class DownloadManager {
- constructor({
- disableCreateObjectURL = DISABLE_CREATE_OBJECT_URL
- }) {
- this.disableCreateObjectURL = disableCreateObjectURL;
- }
-
- downloadUrl(url, filename) {
- if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, "http://example.com")) {
- return;
- }
-
- download(url + "#pdfjs.action=download", filename);
- }
-
- downloadData(data, filename, contentType) {
- if (navigator.msSaveBlob) {
- navigator.msSaveBlob(new Blob([data], {
- type: contentType
- }), filename);
- return;
- }
-
- const blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, this.disableCreateObjectURL);
- download(blobUrl, filename);
- }
-
- download(blob, url, filename) {
- if (navigator.msSaveBlob) {
- if (!navigator.msSaveBlob(blob, filename)) {
- this.downloadUrl(url, filename);
- }
-
- return;
- }
-
- if (this.disableCreateObjectURL) {
- this.downloadUrl(url, filename);
- return;
- }
-
- const blobUrl = URL.createObjectURL(blob);
- download(blobUrl, filename);
- }
-
-}
-
-exports.DownloadManager = DownloadManager;
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.GenericL10n = void 0;
-
-__webpack_require__(37);
-
-const webL10n = document.webL10n;
-
-class GenericL10n {
- constructor(lang) {
- this._lang = lang;
- this._ready = new Promise((resolve, reject) => {
- webL10n.setLanguage(lang, () => {
- resolve(webL10n);
- });
- });
- }
-
- async getLanguage() {
- const l10n = await this._ready;
- return l10n.getLanguage();
- }
-
- async getDirection() {
- const l10n = await this._ready;
- return l10n.getDirection();
- }
-
- async get(property, args, fallback) {
- const l10n = await this._ready;
- return l10n.get(property, args, fallback);
- }
-
- async translate(element) {
- const l10n = await this._ready;
- return l10n.translate(element);
- }
-
-}
-
-exports.GenericL10n = GenericL10n;
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-document.webL10n = function (window, document, undefined) {
- var gL10nData = {};
- var gTextData = '';
- var gTextProp = 'textContent';
- var gLanguage = '';
- var gMacros = {};
- var gReadyState = 'loading';
- var gAsyncResourceLoading = true;
-
- function getL10nResourceLinks() {
- return document.querySelectorAll('link[type="application/l10n"]');
- }
-
- function getL10nDictionary() {
- var script = document.querySelector('script[type="application/l10n"]');
- return script ? JSON.parse(script.innerHTML) : null;
- }
-
- function getTranslatableChildren(element) {
- return element ? element.querySelectorAll('*[data-l10n-id]') : [];
- }
-
- function getL10nAttributes(element) {
- if (!element) return {};
- var l10nId = element.getAttribute('data-l10n-id');
- var l10nArgs = element.getAttribute('data-l10n-args');
- var args = {};
-
- if (l10nArgs) {
- try {
- args = JSON.parse(l10nArgs);
- } catch (e) {
- console.warn('could not parse arguments for #' + l10nId);
- }
- }
-
- return {
- id: l10nId,
- args: args
- };
- }
-
- function xhrLoadText(url, onSuccess, onFailure) {
- onSuccess = onSuccess || function _onSuccess(data) {};
-
- onFailure = onFailure || function _onFailure() {};
-
- var xhr = new XMLHttpRequest();
- xhr.open('GET', url, gAsyncResourceLoading);
-
- if (xhr.overrideMimeType) {
- xhr.overrideMimeType('text/plain; charset=utf-8');
- }
-
- xhr.onreadystatechange = function () {
- if (xhr.readyState == 4) {
- if (xhr.status == 200 || xhr.status === 0) {
- onSuccess(xhr.responseText);
- } else {
- onFailure();
- }
- }
- };
-
- xhr.onerror = onFailure;
- xhr.ontimeout = onFailure;
-
- try {
- xhr.send(null);
- } catch (e) {
- onFailure();
- }
- }
-
- function parseResource(href, lang, successCallback, failureCallback) {
- var baseURL = href.replace(/[^\/]*$/, '') || './';
-
- function evalString(text) {
- if (text.lastIndexOf('\\') < 0) return text;
- return text.replace(/\\\\/g, '\\').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\t/g, '\t').replace(/\\b/g, '\b').replace(/\\f/g, '\f').replace(/\\{/g, '{').replace(/\\}/g, '}').replace(/\\"/g, '"').replace(/\\'/g, "'");
- }
-
- function parseProperties(text, parsedPropertiesCallback) {
- var dictionary = {};
- var reBlank = /^\s*|\s*$/;
- var reComment = /^\s*#|^\s*$/;
- var reSection = /^\s*\[(.*)\]\s*$/;
- var reImport = /^\s*@import\s+url\((.*)\)\s*$/i;
- var reSplit = /^([^=\s]*)\s*=\s*(.+)$/;
-
- function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {
- var entries = rawText.replace(reBlank, '').split(/[\r\n]+/);
- var currentLang = '*';
- var genericLang = lang.split('-', 1)[0];
- var skipLang = false;
- var match = '';
-
- function nextEntry() {
- while (true) {
- if (!entries.length) {
- parsedRawLinesCallback();
- return;
- }
-
- var line = entries.shift();
- if (reComment.test(line)) continue;
-
- if (extendedSyntax) {
- match = reSection.exec(line);
-
- if (match) {
- currentLang = match[1].toLowerCase();
- skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang;
- continue;
- } else if (skipLang) {
- continue;
- }
-
- match = reImport.exec(line);
-
- if (match) {
- loadImport(baseURL + match[1], nextEntry);
- return;
- }
- }
-
- var tmp = line.match(reSplit);
-
- if (tmp && tmp.length == 3) {
- dictionary[tmp[1]] = evalString(tmp[2]);
- }
- }
- }
-
- nextEntry();
- }
-
- function loadImport(url, callback) {
- xhrLoadText(url, function (content) {
- parseRawLines(content, false, callback);
- }, function () {
- console.warn(url + ' not found.');
- callback();
- });
- }
-
- parseRawLines(text, true, function () {
- parsedPropertiesCallback(dictionary);
- });
- }
-
- xhrLoadText(href, function (response) {
- gTextData += response;
- parseProperties(response, function (data) {
- for (var key in data) {
- var id,
- prop,
- index = key.lastIndexOf('.');
-
- if (index > 0) {
- id = key.substring(0, index);
- prop = key.substring(index + 1);
- } else {
- id = key;
- prop = gTextProp;
- }
-
- if (!gL10nData[id]) {
- gL10nData[id] = {};
- }
-
- gL10nData[id][prop] = data[key];
- }
-
- if (successCallback) {
- successCallback();
- }
- });
- }, failureCallback);
- }
-
- function loadLocale(lang, callback) {
- if (lang) {
- lang = lang.toLowerCase();
- }
-
- callback = callback || function _callback() {};
-
- clear();
- gLanguage = lang;
- var langLinks = getL10nResourceLinks();
- var langCount = langLinks.length;
-
- if (langCount === 0) {
- var dict = getL10nDictionary();
-
- if (dict && dict.locales && dict.default_locale) {
- console.log('using the embedded JSON directory, early way out');
- gL10nData = dict.locales[lang];
-
- if (!gL10nData) {
- var defaultLocale = dict.default_locale.toLowerCase();
-
- for (var anyCaseLang in dict.locales) {
- anyCaseLang = anyCaseLang.toLowerCase();
-
- if (anyCaseLang === lang) {
- gL10nData = dict.locales[lang];
- break;
- } else if (anyCaseLang === defaultLocale) {
- gL10nData = dict.locales[defaultLocale];
- }
- }
- }
-
- callback();
- } else {
- console.log('no resource to load, early way out');
- }
-
- gReadyState = 'complete';
- return;
- }
-
- var onResourceLoaded = null;
- var gResourceCount = 0;
-
- onResourceLoaded = function () {
- gResourceCount++;
-
- if (gResourceCount >= langCount) {
- callback();
- gReadyState = 'complete';
- }
- };
-
- function L10nResourceLink(link) {
- var href = link.href;
-
- this.load = function (lang, callback) {
- parseResource(href, lang, callback, function () {
- console.warn(href + ' not found.');
- console.warn('"' + lang + '" resource not found');
- gLanguage = '';
- callback();
- });
- };
- }
-
- for (var i = 0; i < langCount; i++) {
- var resource = new L10nResourceLink(langLinks[i]);
- resource.load(lang, onResourceLoaded);
- }
- }
-
- function clear() {
- gL10nData = {};
- gTextData = '';
- gLanguage = '';
- }
-
- function getPluralRules(lang) {
- var locales2rules = {
- 'af': 3,
- 'ak': 4,
- 'am': 4,
- 'ar': 1,
- 'asa': 3,
- 'az': 0,
- 'be': 11,
- 'bem': 3,
- 'bez': 3,
- 'bg': 3,
- 'bh': 4,
- 'bm': 0,
- 'bn': 3,
- 'bo': 0,
- 'br': 20,
- 'brx': 3,
- 'bs': 11,
- 'ca': 3,
- 'cgg': 3,
- 'chr': 3,
- 'cs': 12,
- 'cy': 17,
- 'da': 3,
- 'de': 3,
- 'dv': 3,
- 'dz': 0,
- 'ee': 3,
- 'el': 3,
- 'en': 3,
- 'eo': 3,
- 'es': 3,
- 'et': 3,
- 'eu': 3,
- 'fa': 0,
- 'ff': 5,
- 'fi': 3,
- 'fil': 4,
- 'fo': 3,
- 'fr': 5,
- 'fur': 3,
- 'fy': 3,
- 'ga': 8,
- 'gd': 24,
- 'gl': 3,
- 'gsw': 3,
- 'gu': 3,
- 'guw': 4,
- 'gv': 23,
- 'ha': 3,
- 'haw': 3,
- 'he': 2,
- 'hi': 4,
- 'hr': 11,
- 'hu': 0,
- 'id': 0,
- 'ig': 0,
- 'ii': 0,
- 'is': 3,
- 'it': 3,
- 'iu': 7,
- 'ja': 0,
- 'jmc': 3,
- 'jv': 0,
- 'ka': 0,
- 'kab': 5,
- 'kaj': 3,
- 'kcg': 3,
- 'kde': 0,
- 'kea': 0,
- 'kk': 3,
- 'kl': 3,
- 'km': 0,
- 'kn': 0,
- 'ko': 0,
- 'ksb': 3,
- 'ksh': 21,
- 'ku': 3,
- 'kw': 7,
- 'lag': 18,
- 'lb': 3,
- 'lg': 3,
- 'ln': 4,
- 'lo': 0,
- 'lt': 10,
- 'lv': 6,
- 'mas': 3,
- 'mg': 4,
- 'mk': 16,
- 'ml': 3,
- 'mn': 3,
- 'mo': 9,
- 'mr': 3,
- 'ms': 0,
- 'mt': 15,
- 'my': 0,
- 'nah': 3,
- 'naq': 7,
- 'nb': 3,
- 'nd': 3,
- 'ne': 3,
- 'nl': 3,
- 'nn': 3,
- 'no': 3,
- 'nr': 3,
- 'nso': 4,
- 'ny': 3,
- 'nyn': 3,
- 'om': 3,
- 'or': 3,
- 'pa': 3,
- 'pap': 3,
- 'pl': 13,
- 'ps': 3,
- 'pt': 3,
- 'rm': 3,
- 'ro': 9,
- 'rof': 3,
- 'ru': 11,
- 'rwk': 3,
- 'sah': 0,
- 'saq': 3,
- 'se': 7,
- 'seh': 3,
- 'ses': 0,
- 'sg': 0,
- 'sh': 11,
- 'shi': 19,
- 'sk': 12,
- 'sl': 14,
- 'sma': 7,
- 'smi': 7,
- 'smj': 7,
- 'smn': 7,
- 'sms': 7,
- 'sn': 3,
- 'so': 3,
- 'sq': 3,
- 'sr': 11,
- 'ss': 3,
- 'ssy': 3,
- 'st': 3,
- 'sv': 3,
- 'sw': 3,
- 'syr': 3,
- 'ta': 3,
- 'te': 3,
- 'teo': 3,
- 'th': 0,
- 'ti': 4,
- 'tig': 3,
- 'tk': 3,
- 'tl': 4,
- 'tn': 3,
- 'to': 0,
- 'tr': 0,
- 'ts': 3,
- 'tzm': 22,
- 'uk': 11,
- 'ur': 3,
- 've': 3,
- 'vi': 0,
- 'vun': 3,
- 'wa': 4,
- 'wae': 3,
- 'wo': 0,
- 'xh': 3,
- 'xog': 3,
- 'yo': 0,
- 'zh': 0,
- 'zu': 3
- };
-
- function isIn(n, list) {
- return list.indexOf(n) !== -1;
- }
-
- function isBetween(n, start, end) {
- return start <= n && n <= end;
- }
-
- var pluralRules = {
- '0': function (n) {
- return 'other';
- },
- '1': function (n) {
- if (isBetween(n % 100, 3, 10)) return 'few';
- if (n === 0) return 'zero';
- if (isBetween(n % 100, 11, 99)) return 'many';
- if (n == 2) return 'two';
- if (n == 1) return 'one';
- return 'other';
- },
- '2': function (n) {
- if (n !== 0 && n % 10 === 0) return 'many';
- if (n == 2) return 'two';
- if (n == 1) return 'one';
- return 'other';
- },
- '3': function (n) {
- if (n == 1) return 'one';
- return 'other';
- },
- '4': function (n) {
- if (isBetween(n, 0, 1)) return 'one';
- return 'other';
- },
- '5': function (n) {
- if (isBetween(n, 0, 2) && n != 2) return 'one';
- return 'other';
- },
- '6': function (n) {
- if (n === 0) return 'zero';
- if (n % 10 == 1 && n % 100 != 11) return 'one';
- return 'other';
- },
- '7': function (n) {
- if (n == 2) return 'two';
- if (n == 1) return 'one';
- return 'other';
- },
- '8': function (n) {
- if (isBetween(n, 3, 6)) return 'few';
- if (isBetween(n, 7, 10)) return 'many';
- if (n == 2) return 'two';
- if (n == 1) return 'one';
- return 'other';
- },
- '9': function (n) {
- if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few';
- if (n == 1) return 'one';
- return 'other';
- },
- '10': function (n) {
- if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few';
- if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one';
- return 'other';
- },
- '11': function (n) {
- if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';
- if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many';
- if (n % 10 == 1 && n % 100 != 11) return 'one';
- return 'other';
- },
- '12': function (n) {
- if (isBetween(n, 2, 4)) return 'few';
- if (n == 1) return 'one';
- return 'other';
- },
- '13': function (n) {
- if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';
- if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many';
- if (n == 1) return 'one';
- return 'other';
- },
- '14': function (n) {
- if (isBetween(n % 100, 3, 4)) return 'few';
- if (n % 100 == 2) return 'two';
- if (n % 100 == 1) return 'one';
- return 'other';
- },
- '15': function (n) {
- if (n === 0 || isBetween(n % 100, 2, 10)) return 'few';
- if (isBetween(n % 100, 11, 19)) return 'many';
- if (n == 1) return 'one';
- return 'other';
- },
- '16': function (n) {
- if (n % 10 == 1 && n != 11) return 'one';
- return 'other';
- },
- '17': function (n) {
- if (n == 3) return 'few';
- if (n === 0) return 'zero';
- if (n == 6) return 'many';
- if (n == 2) return 'two';
- if (n == 1) return 'one';
- return 'other';
- },
- '18': function (n) {
- if (n === 0) return 'zero';
- if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one';
- return 'other';
- },
- '19': function (n) {
- if (isBetween(n, 2, 10)) return 'few';
- if (isBetween(n, 0, 1)) return 'one';
- return 'other';
- },
- '20': function (n) {
- if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few';
- if (n % 1000000 === 0 && n !== 0) return 'many';
- if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two';
- if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one';
- return 'other';
- },
- '21': function (n) {
- if (n === 0) return 'zero';
- if (n == 1) return 'one';
- return 'other';
- },
- '22': function (n) {
- if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one';
- return 'other';
- },
- '23': function (n) {
- if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one';
- return 'other';
- },
- '24': function (n) {
- if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few';
- if (isIn(n, [2, 12])) return 'two';
- if (isIn(n, [1, 11])) return 'one';
- return 'other';
- }
- };
- var index = locales2rules[lang.replace(/-.*$/, '')];
-
- if (!(index in pluralRules)) {
- console.warn('plural form unknown for [' + lang + ']');
- return function () {
- return 'other';
- };
- }
-
- return pluralRules[index];
- }
-
- gMacros.plural = function (str, param, key, prop) {
- var n = parseFloat(param);
- if (isNaN(n)) return str;
- if (prop != gTextProp) return str;
-
- if (!gMacros._pluralRules) {
- gMacros._pluralRules = getPluralRules(gLanguage);
- }
-
- var index = '[' + gMacros._pluralRules(n) + ']';
-
- if (n === 0 && key + '[zero]' in gL10nData) {
- str = gL10nData[key + '[zero]'][prop];
- } else if (n == 1 && key + '[one]' in gL10nData) {
- str = gL10nData[key + '[one]'][prop];
- } else if (n == 2 && key + '[two]' in gL10nData) {
- str = gL10nData[key + '[two]'][prop];
- } else if (key + index in gL10nData) {
- str = gL10nData[key + index][prop];
- } else if (key + '[other]' in gL10nData) {
- str = gL10nData[key + '[other]'][prop];
- }
-
- return str;
- };
-
- function getL10nData(key, args, fallback) {
- var data = gL10nData[key];
-
- if (!data) {
- console.warn('#' + key + ' is undefined.');
-
- if (!fallback) {
- return null;
- }
-
- data = fallback;
- }
-
- var rv = {};
-
- for (var prop in data) {
- var str = data[prop];
- str = substIndexes(str, args, key, prop);
- str = substArguments(str, args, key);
- rv[prop] = str;
- }
-
- return rv;
- }
-
- function substIndexes(str, args, key, prop) {
- var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/;
- var reMatch = reIndex.exec(str);
- if (!reMatch || !reMatch.length) return str;
- var macroName = reMatch[1];
- var paramName = reMatch[2];
- var param;
-
- if (args && paramName in args) {
- param = args[paramName];
- } else if (paramName in gL10nData) {
- param = gL10nData[paramName];
- }
-
- if (macroName in gMacros) {
- var macro = gMacros[macroName];
- str = macro(str, param, key, prop);
- }
-
- return str;
- }
-
- function substArguments(str, args, key) {
- var reArgs = /\{\{\s*(.+?)\s*\}\}/g;
- return str.replace(reArgs, function (matched_text, arg) {
- if (args && arg in args) {
- return args[arg];
- }
-
- if (arg in gL10nData) {
- return gL10nData[arg];
- }
-
- console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');
- return matched_text;
- });
- }
-
- function translateElement(element) {
- var l10n = getL10nAttributes(element);
- if (!l10n.id) return;
- var data = getL10nData(l10n.id, l10n.args);
-
- if (!data) {
- console.warn('#' + l10n.id + ' is undefined.');
- return;
- }
-
- if (data[gTextProp]) {
- if (getChildElementCount(element) === 0) {
- element[gTextProp] = data[gTextProp];
- } else {
- var children = element.childNodes;
- var found = false;
-
- for (var i = 0, l = children.length; i < l; i++) {
- if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) {
- if (found) {
- children[i].nodeValue = '';
- } else {
- children[i].nodeValue = data[gTextProp];
- found = true;
- }
- }
- }
-
- if (!found) {
- var textNode = document.createTextNode(data[gTextProp]);
- element.insertBefore(textNode, element.firstChild);
- }
- }
-
- delete data[gTextProp];
- }
-
- for (var k in data) {
- element[k] = data[k];
- }
- }
-
- function getChildElementCount(element) {
- if (element.children) {
- return element.children.length;
- }
-
- if (typeof element.childElementCount !== 'undefined') {
- return element.childElementCount;
- }
-
- var count = 0;
-
- for (var i = 0; i < element.childNodes.length; i++) {
- count += element.nodeType === 1 ? 1 : 0;
- }
-
- return count;
- }
-
- function translateFragment(element) {
- element = element || document.documentElement;
- var children = getTranslatableChildren(element);
- var elementCount = children.length;
-
- for (var i = 0; i < elementCount; i++) {
- translateElement(children[i]);
- }
-
- translateElement(element);
- }
-
- return {
- get: function (key, args, fallbackString) {
- var index = key.lastIndexOf('.');
- var prop = gTextProp;
-
- if (index > 0) {
- prop = key.substring(index + 1);
- key = key.substring(0, index);
- }
-
- var fallback;
-
- if (fallbackString) {
- fallback = {};
- fallback[prop] = fallbackString;
- }
-
- var data = getL10nData(key, args, fallback);
-
- if (data && prop in data) {
- return data[prop];
- }
-
- return '{{' + key + '}}';
- },
- getData: function () {
- return gL10nData;
- },
- getText: function () {
- return gTextData;
- },
- getLanguage: function () {
- return gLanguage;
- },
- setLanguage: function (lang, callback) {
- loadLocale(lang, function () {
- if (callback) callback();
- });
- },
- getDirection: function () {
- var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];
- var shortCode = gLanguage.split('-', 1)[0];
- return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr';
- },
- translate: translateFragment,
- getReadyState: function () {
- return gReadyState;
- },
- ready: function (callback) {
- if (!callback) {
- return;
- } else if (gReadyState == 'complete' || gReadyState == 'interactive') {
- window.setTimeout(function () {
- callback();
- });
- } else if (document.addEventListener) {
- document.addEventListener('localized', function once() {
- document.removeEventListener('localized', once);
- callback();
- });
- }
- }
- };
-}(window, document);
-
-/***/ }),
-/* 38 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PDFPrintService = PDFPrintService;
-
-var _ui_utils = __webpack_require__(2);
-
-var _app = __webpack_require__(1);
-
-var _app_options = __webpack_require__(3);
-
-let activeService = null;
-let overlayManager = null;
-
-function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
- const scratchCanvas = activeService.scratchCanvas;
- const PRINT_RESOLUTION = _app_options.AppOptions.get("printResolution") || 150;
- const PRINT_UNITS = PRINT_RESOLUTION / 72.0;
- scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);
- scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);
- const width = Math.floor(size.width * _ui_utils.CSS_UNITS) + "px";
- const height = Math.floor(size.height * _ui_utils.CSS_UNITS) + "px";
- const ctx = scratchCanvas.getContext("2d");
- ctx.save();
- ctx.fillStyle = "rgb(255, 255, 255)";
- ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);
- ctx.restore();
- return pdfDocument.getPage(pageNumber).then(function (pdfPage) {
- const renderContext = {
- canvasContext: ctx,
- transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],
- viewport: pdfPage.getViewport({
- scale: 1,
- rotation: size.rotation
- }),
- intent: "print"
- };
- return pdfPage.render(renderContext).promise;
- }).then(function () {
- return {
- width,
- height
- };
- });
-}
-
-function PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
- this.pdfDocument = pdfDocument;
- this.pagesOverview = pagesOverview;
- this.printContainer = printContainer;
- this.l10n = l10n || _ui_utils.NullL10n;
- this.disableCreateObjectURL = _app_options.AppOptions.get("disableCreateObjectURL");
- this.currentPage = -1;
- this.scratchCanvas = document.createElement("canvas");
-}
-
-PDFPrintService.prototype = {
- layout() {
- this.throwIfInactive();
- const body = document.querySelector("body");
- body.setAttribute("data-pdfjsprinting", true);
- const hasEqualPageSizes = this.pagesOverview.every(function (size) {
- return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height;
- }, this);
-
- if (!hasEqualPageSizes) {
- console.warn("Not all pages have the same size. The printed " + "result may be incorrect!");
- }
-
- this.pageStyleSheet = document.createElement("style");
- const pageSize = this.pagesOverview[0];
- this.pageStyleSheet.textContent = "@supports ((size:A4) and (size:1pt 1pt)) {" + "@page { size: " + pageSize.width + "pt " + pageSize.height + "pt;}" + "}";
- body.appendChild(this.pageStyleSheet);
- },
-
- destroy() {
- if (activeService !== this) {
- return;
- }
-
- this.printContainer.textContent = "";
- const body = document.querySelector("body");
- body.removeAttribute("data-pdfjsprinting");
-
- if (this.pageStyleSheet) {
- this.pageStyleSheet.remove();
- this.pageStyleSheet = null;
- }
-
- this.scratchCanvas.width = this.scratchCanvas.height = 0;
- this.scratchCanvas = null;
- activeService = null;
- ensureOverlay().then(function () {
- if (overlayManager.active !== "printServiceOverlay") {
- return;
- }
-
- overlayManager.close("printServiceOverlay");
- });
- },
-
- renderPages() {
- const pageCount = this.pagesOverview.length;
-
- const renderNextPage = (resolve, reject) => {
- this.throwIfInactive();
-
- if (++this.currentPage >= pageCount) {
- renderProgress(pageCount, pageCount, this.l10n);
- resolve();
- return;
- }
-
- const index = this.currentPage;
- renderProgress(index, pageCount, this.l10n);
- renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index]).then(this.useRenderedPage.bind(this)).then(function () {
- renderNextPage(resolve, reject);
- }, reject);
- };
-
- return new Promise(renderNextPage);
- },
-
- useRenderedPage(printItem) {
- this.throwIfInactive();
- const img = document.createElement("img");
- img.style.width = printItem.width;
- img.style.height = printItem.height;
- const scratchCanvas = this.scratchCanvas;
-
- if ("toBlob" in scratchCanvas && !this.disableCreateObjectURL) {
- scratchCanvas.toBlob(function (blob) {
- img.src = URL.createObjectURL(blob);
- });
- } else {
- img.src = scratchCanvas.toDataURL();
- }
-
- const wrapper = document.createElement("div");
- wrapper.appendChild(img);
- this.printContainer.appendChild(wrapper);
- return new Promise(function (resolve, reject) {
- img.onload = resolve;
- img.onerror = reject;
- });
- },
-
- performPrint() {
- this.throwIfInactive();
- return new Promise(resolve => {
- setTimeout(() => {
- if (!this.active) {
- resolve();
- return;
- }
-
- print.call(window);
- setTimeout(resolve, 20);
- }, 0);
- });
- },
-
- get active() {
- return this === activeService;
- },
-
- throwIfInactive() {
- if (!this.active) {
- throw new Error("This print request was cancelled or completed.");
- }
- }
-
-};
-const print = window.print;
-
-window.print = function () {
- if (activeService) {
- console.warn("Ignored window.print() because of a pending print job.");
- return;
- }
-
- ensureOverlay().then(function () {
- if (activeService) {
- overlayManager.open("printServiceOverlay");
- }
- });
-
- try {
- dispatchEvent("beforeprint");
- } finally {
- if (!activeService) {
- console.error("Expected print service to be initialized.");
- ensureOverlay().then(function () {
- if (overlayManager.active === "printServiceOverlay") {
- overlayManager.close("printServiceOverlay");
- }
- });
- return;
- }
-
- const activeServiceOnEntry = activeService;
- activeService.renderPages().then(function () {
- return activeServiceOnEntry.performPrint();
- }).catch(function () {}).then(function () {
- if (activeServiceOnEntry.active) {
- abort();
- }
- });
- }
-};
-
-function dispatchEvent(eventType) {
- const event = document.createEvent("CustomEvent");
- event.initCustomEvent(eventType, false, false, "custom");
- window.dispatchEvent(event);
-}
-
-function abort() {
- if (activeService) {
- activeService.destroy();
- dispatchEvent("afterprint");
- }
-}
-
-function renderProgress(index, total, l10n) {
- const progressContainer = document.getElementById("printServiceOverlay");
- const progress = Math.round(100 * index / total);
- const progressBar = progressContainer.querySelector("progress");
- const progressPerc = progressContainer.querySelector(".relative-progress");
- progressBar.value = progress;
- l10n.get("print_progress_percent", {
- progress
- }, progress + "%").then(msg => {
- progressPerc.textContent = msg;
- });
-}
-
-window.addEventListener("keydown", function (event) {
- if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {
- window.print();
- event.preventDefault();
-
- if (event.stopImmediatePropagation) {
- event.stopImmediatePropagation();
- } else {
- event.stopPropagation();
- }
- }
-}, true);
-
-if ("onbeforeprint" in window) {
- const stopPropagationIfNeeded = function (event) {
- if (event.detail !== "custom" && event.stopImmediatePropagation) {
- event.stopImmediatePropagation();
- }
- };
-
- window.addEventListener("beforeprint", stopPropagationIfNeeded);
- window.addEventListener("afterprint", stopPropagationIfNeeded);
-}
-
-let overlayPromise;
-
-function ensureOverlay() {
- if (!overlayPromise) {
- overlayManager = _app.PDFViewerApplication.overlayManager;
-
- if (!overlayManager) {
- throw new Error("The overlay manager has not yet been initialized.");
- }
-
- overlayPromise = overlayManager.register("printServiceOverlay", document.getElementById("printServiceOverlay"), abort, true);
- document.getElementById("printCancel").onclick = abort;
- }
-
- return overlayPromise;
-}
-
-_app.PDFPrintServiceFactory.instance = {
- supportsPrinting: true,
-
- createPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
- if (activeService) {
- throw new Error("The print service is created and active.");
- }
-
- activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n);
- return activeService;
- }
-
-};
-
-/***/ })
-/******/ ]);
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2020 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
+ */
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+;
+let pdfjsWebApp, pdfjsWebAppOptions;
+{
+ pdfjsWebApp = __webpack_require__(1);
+ pdfjsWebAppOptions = __webpack_require__(3);
+}
+;
+{
+ __webpack_require__(33);
+}
+;
+{
+ __webpack_require__(38);
+}
+
+function getViewerConfiguration() {
+ return {
+ appContainer: document.body,
+ mainContainer: document.getElementById("viewerContainer"),
+ viewerContainer: document.getElementById("viewer"),
+ eventBus: null,
+ toolbar: {
+ container: document.getElementById("toolbarViewer"),
+ numPages: document.getElementById("numPages"),
+ pageNumber: document.getElementById("pageNumber"),
+ scaleSelectContainer: document.getElementById("scaleSelectContainer"),
+ scaleSelect: document.getElementById("scaleSelect"),
+ customScaleOption: document.getElementById("customScaleOption"),
+ previous: document.getElementById("previous"),
+ next: document.getElementById("next"),
+ zoomIn: document.getElementById("zoomIn"),
+ zoomOut: document.getElementById("zoomOut"),
+ viewFind: document.getElementById("viewFind"),
+ openFile: document.getElementById("openFile"),
+ print: document.getElementById("print"),
+ presentationModeButton: document.getElementById("presentationMode"),
+ download: document.getElementById("download"),
+ viewBookmark: document.getElementById("viewBookmark")
+ },
+ secondaryToolbar: {
+ toolbar: document.getElementById("secondaryToolbar"),
+ toggleButton: document.getElementById("secondaryToolbarToggle"),
+ toolbarButtonContainer: document.getElementById("secondaryToolbarButtonContainer"),
+ presentationModeButton: document.getElementById("secondaryPresentationMode"),
+ openFileButton: document.getElementById("secondaryOpenFile"),
+ printButton: document.getElementById("secondaryPrint"),
+ downloadButton: document.getElementById("secondaryDownload"),
+ viewBookmarkButton: document.getElementById("secondaryViewBookmark"),
+ firstPageButton: document.getElementById("firstPage"),
+ lastPageButton: document.getElementById("lastPage"),
+ pageRotateCwButton: document.getElementById("pageRotateCw"),
+ pageRotateCcwButton: document.getElementById("pageRotateCcw"),
+ cursorSelectToolButton: document.getElementById("cursorSelectTool"),
+ cursorHandToolButton: document.getElementById("cursorHandTool"),
+ scrollVerticalButton: document.getElementById("scrollVertical"),
+ scrollHorizontalButton: document.getElementById("scrollHorizontal"),
+ scrollWrappedButton: document.getElementById("scrollWrapped"),
+ spreadNoneButton: document.getElementById("spreadNone"),
+ spreadOddButton: document.getElementById("spreadOdd"),
+ spreadEvenButton: document.getElementById("spreadEven"),
+ documentPropertiesButton: document.getElementById("documentProperties")
+ },
+ fullscreen: {
+ contextFirstPage: document.getElementById("contextFirstPage"),
+ contextLastPage: document.getElementById("contextLastPage"),
+ contextPageRotateCw: document.getElementById("contextPageRotateCw"),
+ contextPageRotateCcw: document.getElementById("contextPageRotateCcw")
+ },
+ sidebar: {
+ outerContainer: document.getElementById("outerContainer"),
+ viewerContainer: document.getElementById("viewerContainer"),
+ toggleButton: document.getElementById("sidebarToggle"),
+ thumbnailButton: document.getElementById("viewThumbnail"),
+ outlineButton: document.getElementById("viewOutline"),
+ attachmentsButton: document.getElementById("viewAttachments"),
+ thumbnailView: document.getElementById("thumbnailView"),
+ outlineView: document.getElementById("outlineView"),
+ attachmentsView: document.getElementById("attachmentsView")
+ },
+ sidebarResizer: {
+ outerContainer: document.getElementById("outerContainer"),
+ resizer: document.getElementById("sidebarResizer")
+ },
+ findBar: {
+ bar: document.getElementById("findbar"),
+ toggleButton: document.getElementById("viewFind"),
+ findField: document.getElementById("findInput"),
+ highlightAllCheckbox: document.getElementById("findHighlightAll"),
+ caseSensitiveCheckbox: document.getElementById("findMatchCase"),
+ entireWordCheckbox: document.getElementById("findEntireWord"),
+ findMsg: document.getElementById("findMsg"),
+ findResultsCount: document.getElementById("findResultsCount"),
+ findPreviousButton: document.getElementById("findPrevious"),
+ findNextButton: document.getElementById("findNext")
+ },
+ passwordOverlay: {
+ overlayName: "passwordOverlay",
+ container: document.getElementById("passwordOverlay"),
+ label: document.getElementById("passwordText"),
+ input: document.getElementById("password"),
+ submitButton: document.getElementById("passwordSubmit"),
+ cancelButton: document.getElementById("passwordCancel")
+ },
+ documentProperties: {
+ overlayName: "documentPropertiesOverlay",
+ container: document.getElementById("documentPropertiesOverlay"),
+ closeButton: document.getElementById("documentPropertiesClose"),
+ fields: {
+ fileName: document.getElementById("fileNameField"),
+ fileSize: document.getElementById("fileSizeField"),
+ title: document.getElementById("titleField"),
+ author: document.getElementById("authorField"),
+ subject: document.getElementById("subjectField"),
+ keywords: document.getElementById("keywordsField"),
+ creationDate: document.getElementById("creationDateField"),
+ modificationDate: document.getElementById("modificationDateField"),
+ creator: document.getElementById("creatorField"),
+ producer: document.getElementById("producerField"),
+ version: document.getElementById("versionField"),
+ pageCount: document.getElementById("pageCountField"),
+ pageSize: document.getElementById("pageSizeField"),
+ linearized: document.getElementById("linearizedField")
+ }
+ },
+ errorWrapper: {
+ container: document.getElementById("errorWrapper"),
+ errorMessage: document.getElementById("errorMessage"),
+ closeButton: document.getElementById("errorClose"),
+ errorMoreInfo: document.getElementById("errorMoreInfo"),
+ moreInfoButton: document.getElementById("errorShowMore"),
+ lessInfoButton: document.getElementById("errorShowLess")
+ },
+ printContainer: document.getElementById("printContainer"),
+ openFileInputName: "fileInput",
+ debuggerScriptPath: "./debugger.js"
+ };
+}
+
+function webViewerLoad() {
+ const config = getViewerConfiguration();
+ window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication;
+ window.PDFViewerApplicationOptions = pdfjsWebAppOptions.AppOptions;
+ const event = document.createEvent("CustomEvent");
+ event.initCustomEvent("webviewerloaded", true, true, {
+ source: window
+ });
+
+ try {
+ parent.document.dispatchEvent(event);
+ } catch (ex) {
+ console.error(`webviewerloaded: ${ex}`);
+ document.dispatchEvent(event);
+ }
+
+ pdfjsWebApp.PDFViewerApplication.run(config);
+}
+
+if (document.readyState === "interactive" || document.readyState === "complete") {
+ webViewerLoad();
+} else {
+ document.addEventListener("DOMContentLoaded", webViewerLoad, true);
+}
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFPrintServiceFactory = exports.DefaultExternalServices = exports.PDFViewerApplication = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+var _app_options = __webpack_require__(3);
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_cursor_tools = __webpack_require__(6);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+var _pdf_sidebar = __webpack_require__(9);
+
+var _overlay_manager = __webpack_require__(10);
+
+var _password_prompt = __webpack_require__(11);
+
+var _pdf_attachment_viewer = __webpack_require__(12);
+
+var _pdf_document_properties = __webpack_require__(13);
+
+var _pdf_find_bar = __webpack_require__(14);
+
+var _pdf_find_controller = __webpack_require__(15);
+
+var _pdf_history = __webpack_require__(17);
+
+var _pdf_link_service = __webpack_require__(18);
+
+var _pdf_outline_viewer = __webpack_require__(19);
+
+var _pdf_presentation_mode = __webpack_require__(20);
+
+var _pdf_sidebar_resizer = __webpack_require__(21);
+
+var _pdf_thumbnail_viewer = __webpack_require__(22);
+
+var _pdf_viewer = __webpack_require__(24);
+
+var _secondary_toolbar = __webpack_require__(29);
+
+var _toolbar = __webpack_require__(31);
+
+var _view_history = __webpack_require__(32);
+
+const DEFAULT_SCALE_DELTA = 1.1;
+const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
+const FORCE_PAGES_LOADED_TIMEOUT = 10000;
+const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;
+const ENABLE_PERMISSIONS_CLASS = "enablePermissions";
+const ViewOnLoad = {
+ UNKNOWN: -1,
+ PREVIOUS: 0,
+ INITIAL: 1
+};
+
+class DefaultExternalServices {
+ constructor() {
+ throw new Error("Cannot initialize DefaultExternalServices.");
+ }
+
+ static updateFindControlState(data) {}
+
+ static updateFindMatchesCount(data) {}
+
+ static initPassiveLoading(callbacks) {}
+
+ static fallback(data, callback) {}
+
+ static reportTelemetry(data) {}
+
+ static createDownloadManager(options) {
+ throw new Error("Not implemented: createDownloadManager");
+ }
+
+ static createPreferences() {
+ throw new Error("Not implemented: createPreferences");
+ }
+
+ static createL10n(options) {
+ throw new Error("Not implemented: createL10n");
+ }
+
+ static get supportsIntegratedFind() {
+ return (0, _pdfjsLib.shadow)(this, "supportsIntegratedFind", false);
+ }
+
+ static get supportsDocumentFonts() {
+ return (0, _pdfjsLib.shadow)(this, "supportsDocumentFonts", true);
+ }
+
+ static get supportedMouseWheelZoomModifierKeys() {
+ return (0, _pdfjsLib.shadow)(this, "supportedMouseWheelZoomModifierKeys", {
+ ctrlKey: true,
+ metaKey: true
+ });
+ }
+
+ static get isInAutomation() {
+ return (0, _pdfjsLib.shadow)(this, "isInAutomation", false);
+ }
+
+}
+
+exports.DefaultExternalServices = DefaultExternalServices;
+const PDFViewerApplication = {
+ initialBookmark: document.location.hash.substring(1),
+ _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(),
+ fellback: false,
+ appConfig: null,
+ pdfDocument: null,
+ pdfLoadingTask: null,
+ printService: null,
+ pdfViewer: null,
+ pdfThumbnailViewer: null,
+ pdfRenderingQueue: null,
+ pdfPresentationMode: null,
+ pdfDocumentProperties: null,
+ pdfLinkService: null,
+ pdfHistory: null,
+ pdfSidebar: null,
+ pdfSidebarResizer: null,
+ pdfOutlineViewer: null,
+ pdfAttachmentViewer: null,
+ pdfCursorTools: null,
+ store: null,
+ downloadManager: null,
+ overlayManager: null,
+ preferences: null,
+ toolbar: null,
+ secondaryToolbar: null,
+ eventBus: null,
+ l10n: null,
+ isInitialViewSet: false,
+ downloadComplete: false,
+ isViewerEmbedded: window.parent !== window,
+ url: "",
+ baseUrl: "",
+ externalServices: DefaultExternalServices,
+ _boundEvents: {},
+ contentDispositionFilename: null,
+
+ async initialize(appConfig) {
+ this.preferences = this.externalServices.createPreferences();
+ this.appConfig = appConfig;
+ await this._readPreferences();
+ await this._parseHashParameters();
+ await this._initializeL10n();
+
+ if (this.isViewerEmbedded && _app_options.AppOptions.get("externalLinkTarget") === _pdfjsLib.LinkTarget.NONE) {
+ _app_options.AppOptions.set("externalLinkTarget", _pdfjsLib.LinkTarget.TOP);
+ }
+
+ await this._initializeViewerComponents();
+ this.bindEvents();
+ this.bindWindowEvents();
+ const appContainer = appConfig.appContainer || document.documentElement;
+ this.l10n.translate(appContainer).then(() => {
+ this.eventBus.dispatch("localized", {
+ source: this
+ });
+ });
+
+ this._initializedCapability.resolve();
+ },
+
+ async _readPreferences() {
+ if (_app_options.AppOptions.get("disablePreferences")) {
+ return;
+ }
+
+ try {
+ const prefs = await this.preferences.getAll();
+
+ for (const name in prefs) {
+ _app_options.AppOptions.set(name, prefs[name]);
+ }
+ } catch (reason) {
+ console.error(`_readPreferences: "${reason.message}".`);
+ }
+ },
+
+ async _parseHashParameters() {
+ if (!_app_options.AppOptions.get("pdfBugEnabled")) {
+ return undefined;
+ }
+
+ const hash = document.location.hash.substring(1);
+
+ if (!hash) {
+ return undefined;
+ }
+
+ const hashParams = (0, _ui_utils.parseQueryString)(hash),
+ waitOn = [];
+
+ if ("disableworker" in hashParams && hashParams.disableworker === "true") {
+ waitOn.push(loadFakeWorker());
+ }
+
+ if ("disablerange" in hashParams) {
+ _app_options.AppOptions.set("disableRange", hashParams.disablerange === "true");
+ }
+
+ if ("disablestream" in hashParams) {
+ _app_options.AppOptions.set("disableStream", hashParams.disablestream === "true");
+ }
+
+ if ("disableautofetch" in hashParams) {
+ _app_options.AppOptions.set("disableAutoFetch", hashParams.disableautofetch === "true");
+ }
+
+ if ("disablefontface" in hashParams) {
+ _app_options.AppOptions.set("disableFontFace", hashParams.disablefontface === "true");
+ }
+
+ if ("disablehistory" in hashParams) {
+ _app_options.AppOptions.set("disableHistory", hashParams.disablehistory === "true");
+ }
+
+ if ("webgl" in hashParams) {
+ _app_options.AppOptions.set("enableWebGL", hashParams.webgl === "true");
+ }
+
+ if ("verbosity" in hashParams) {
+ _app_options.AppOptions.set("verbosity", hashParams.verbosity | 0);
+ }
+
+ if ("textlayer" in hashParams) {
+ switch (hashParams.textlayer) {
+ case "off":
+ _app_options.AppOptions.set("textLayerMode", _ui_utils.TextLayerMode.DISABLE);
+
+ break;
+
+ case "visible":
+ case "shadow":
+ case "hover":
+ const viewer = this.appConfig.viewerContainer;
+ viewer.classList.add("textLayer-" + hashParams.textlayer);
+ break;
+ }
+ }
+
+ if ("pdfbug" in hashParams) {
+ _app_options.AppOptions.set("pdfBug", true);
+
+ _app_options.AppOptions.set("fontExtraProperties", true);
+
+ const enabled = hashParams.pdfbug.split(",");
+ waitOn.push(loadAndEnablePDFBug(enabled));
+ }
+
+ if ("locale" in hashParams) {
+ _app_options.AppOptions.set("locale", hashParams.locale);
+ }
+
+ return Promise.all(waitOn).catch(reason => {
+ console.error(`_parseHashParameters: "${reason.message}".`);
+ });
+ },
+
+ async _initializeL10n() {
+ this.l10n = this.externalServices.createL10n({
+ locale: _app_options.AppOptions.get("locale")
+ });
+ const dir = await this.l10n.getDirection();
+ document.getElementsByTagName("html")[0].dir = dir;
+ },
+
+ async _initializeViewerComponents() {
+ const appConfig = this.appConfig;
+ const eventBus = appConfig.eventBus || new _ui_utils.EventBus({
+ isInAutomation: this.externalServices.isInAutomation
+ });
+ this.eventBus = eventBus;
+ this.overlayManager = new _overlay_manager.OverlayManager();
+ const pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
+ pdfRenderingQueue.onIdle = this.cleanup.bind(this);
+ this.pdfRenderingQueue = pdfRenderingQueue;
+ const pdfLinkService = new _pdf_link_service.PDFLinkService({
+ eventBus,
+ externalLinkTarget: _app_options.AppOptions.get("externalLinkTarget"),
+ externalLinkRel: _app_options.AppOptions.get("externalLinkRel"),
+ ignoreDestinationZoom: _app_options.AppOptions.get("ignoreDestinationZoom")
+ });
+ this.pdfLinkService = pdfLinkService;
+ const downloadManager = this.externalServices.createDownloadManager({
+ disableCreateObjectURL: _app_options.AppOptions.get("disableCreateObjectURL")
+ });
+ this.downloadManager = downloadManager;
+ const findController = new _pdf_find_controller.PDFFindController({
+ linkService: pdfLinkService,
+ eventBus
+ });
+ this.findController = findController;
+ const container = appConfig.mainContainer;
+ const viewer = appConfig.viewerContainer;
+ this.pdfViewer = new _pdf_viewer.PDFViewer({
+ container,
+ viewer,
+ eventBus,
+ renderingQueue: pdfRenderingQueue,
+ linkService: pdfLinkService,
+ downloadManager,
+ findController,
+ renderer: _app_options.AppOptions.get("renderer"),
+ enableWebGL: _app_options.AppOptions.get("enableWebGL"),
+ l10n: this.l10n,
+ textLayerMode: _app_options.AppOptions.get("textLayerMode"),
+ imageResourcesPath: _app_options.AppOptions.get("imageResourcesPath"),
+ renderInteractiveForms: _app_options.AppOptions.get("renderInteractiveForms"),
+ enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"),
+ useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"),
+ maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels")
+ });
+ pdfRenderingQueue.setViewer(this.pdfViewer);
+ pdfLinkService.setViewer(this.pdfViewer);
+ this.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({
+ container: appConfig.sidebar.thumbnailView,
+ renderingQueue: pdfRenderingQueue,
+ linkService: pdfLinkService,
+ l10n: this.l10n
+ });
+ pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
+ this.pdfHistory = new _pdf_history.PDFHistory({
+ linkService: pdfLinkService,
+ eventBus
+ });
+ pdfLinkService.setHistory(this.pdfHistory);
+
+ if (!this.supportsIntegratedFind) {
+ this.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, this.l10n);
+ }
+
+ this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n);
+ this.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({
+ container,
+ eventBus,
+ cursorToolOnLoad: _app_options.AppOptions.get("cursorToolOnLoad")
+ });
+ this.toolbar = new _toolbar.Toolbar(appConfig.toolbar, eventBus, this.l10n);
+ this.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus);
+
+ if (this.supportsFullscreen) {
+ this.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({
+ container,
+ pdfViewer: this.pdfViewer,
+ eventBus,
+ contextMenuItems: appConfig.fullscreen
+ });
+ }
+
+ this.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, this.overlayManager, this.l10n);
+ this.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({
+ container: appConfig.sidebar.outlineView,
+ eventBus,
+ linkService: pdfLinkService
+ });
+ this.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({
+ container: appConfig.sidebar.attachmentsView,
+ eventBus,
+ downloadManager
+ });
+ this.pdfSidebar = new _pdf_sidebar.PDFSidebar({
+ elements: appConfig.sidebar,
+ pdfViewer: this.pdfViewer,
+ pdfThumbnailViewer: this.pdfThumbnailViewer,
+ eventBus,
+ l10n: this.l10n
+ });
+ this.pdfSidebar.onToggled = this.forceRendering.bind(this);
+ this.pdfSidebarResizer = new _pdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, this.l10n);
+ },
+
+ run(config) {
+ this.initialize(config).then(webViewerInitialized);
+ },
+
+ get initialized() {
+ return this._initializedCapability.settled;
+ },
+
+ get initializedPromise() {
+ return this._initializedCapability.promise;
+ },
+
+ zoomIn(ticks) {
+ if (this.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ let newScale = this.pdfViewer.currentScale;
+
+ do {
+ newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);
+ newScale = Math.ceil(newScale * 10) / 10;
+ newScale = Math.min(_ui_utils.MAX_SCALE, newScale);
+ } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE);
+
+ this.pdfViewer.currentScaleValue = newScale;
+ },
+
+ zoomOut(ticks) {
+ if (this.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ let newScale = this.pdfViewer.currentScale;
+
+ do {
+ newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);
+ newScale = Math.floor(newScale * 10) / 10;
+ newScale = Math.max(_ui_utils.MIN_SCALE, newScale);
+ } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE);
+
+ this.pdfViewer.currentScaleValue = newScale;
+ },
+
+ zoomReset() {
+ if (this.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ },
+
+ get pagesCount() {
+ return this.pdfDocument ? this.pdfDocument.numPages : 0;
+ },
+
+ get page() {
+ return this.pdfViewer.currentPageNumber;
+ },
+
+ set page(val) {
+ this.pdfViewer.currentPageNumber = val;
+ },
+
+ get printing() {
+ return !!this.printService;
+ },
+
+ get supportsPrinting() {
+ return PDFPrintServiceFactory.instance.supportsPrinting;
+ },
+
+ get supportsFullscreen() {
+ let support;
+ const doc = document.documentElement;
+ support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen || doc.msRequestFullscreen);
+
+ if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false || document.msFullscreenEnabled === false) {
+ support = false;
+ }
+
+ return (0, _pdfjsLib.shadow)(this, "supportsFullscreen", support);
+ },
+
+ get supportsIntegratedFind() {
+ return this.externalServices.supportsIntegratedFind;
+ },
+
+ get supportsDocumentFonts() {
+ return this.externalServices.supportsDocumentFonts;
+ },
+
+ get loadingBar() {
+ const bar = new _ui_utils.ProgressBar("#loadingBar");
+ return (0, _pdfjsLib.shadow)(this, "loadingBar", bar);
+ },
+
+ get supportedMouseWheelZoomModifierKeys() {
+ return this.externalServices.supportedMouseWheelZoomModifierKeys;
+ },
+
+ initPassiveLoading() {
+ throw new Error("Not implemented: initPassiveLoading");
+ },
+
+ setTitleUsingUrl(url = "") {
+ this.url = url;
+ this.baseUrl = url.split("#")[0];
+ let title = (0, _ui_utils.getPDFFileNameFromURL)(url, "");
+
+ if (!title) {
+ try {
+ title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url;
+ } catch (ex) {
+ title = url;
+ }
+ }
+
+ this.setTitle(title);
+ },
+
+ setTitle(title) {
+ if (this.isViewerEmbedded) {
+ return;
+ }
+
+ document.title = title;
+ },
+
+ async close() {
+ const errorWrapper = this.appConfig.errorWrapper.container;
+ errorWrapper.setAttribute("hidden", "true");
+
+ if (!this.pdfLoadingTask) {
+ return undefined;
+ }
+
+ const promise = this.pdfLoadingTask.destroy();
+ this.pdfLoadingTask = null;
+
+ if (this.pdfDocument) {
+ this.pdfDocument = null;
+ this.pdfThumbnailViewer.setDocument(null);
+ this.pdfViewer.setDocument(null);
+ this.pdfLinkService.setDocument(null);
+ this.pdfDocumentProperties.setDocument(null);
+ }
+
+ webViewerResetPermissions();
+ this.store = null;
+ this.isInitialViewSet = false;
+ this.downloadComplete = false;
+ this.url = "";
+ this.baseUrl = "";
+ this.contentDispositionFilename = null;
+ this.pdfSidebar.reset();
+ this.pdfOutlineViewer.reset();
+ this.pdfAttachmentViewer.reset();
+
+ if (this.pdfHistory) {
+ this.pdfHistory.reset();
+ }
+
+ if (this.findBar) {
+ this.findBar.reset();
+ }
+
+ this.toolbar.reset();
+ this.secondaryToolbar.reset();
+
+ if (typeof PDFBug !== "undefined") {
+ PDFBug.cleanup();
+ }
+
+ return promise;
+ },
+
+ async open(file, args) {
+ if (this.pdfLoadingTask) {
+ await this.close();
+ }
+
+ const workerParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER);
+
+ for (const key in workerParameters) {
+ _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key];
+ }
+
+ const parameters = Object.create(null);
+
+ if (typeof file === "string") {
+ this.setTitleUsingUrl(file);
+ parameters.url = file;
+ } else if (file && "byteLength" in file) {
+ parameters.data = file;
+ } else if (file.url && file.originalUrl) {
+ this.setTitleUsingUrl(file.originalUrl);
+ parameters.url = file.url;
+ }
+
+ const apiParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.API);
+
+ for (const key in apiParameters) {
+ let value = apiParameters[key];
+
+ if (key === "docBaseUrl" && !value) {}
+
+ parameters[key] = value;
+ }
+
+ if (args) {
+ for (const key in args) {
+ const value = args[key];
+
+ if (key === "length") {
+ this.pdfDocumentProperties.setFileSize(value);
+ }
+
+ parameters[key] = value;
+ }
+ }
+
+ const loadingTask = (0, _pdfjsLib.getDocument)(parameters);
+ this.pdfLoadingTask = loadingTask;
+
+ loadingTask.onPassword = (updateCallback, reason) => {
+ this.pdfLinkService.externalLinkEnabled = false;
+ this.passwordPrompt.setUpdateCallback(updateCallback, reason);
+ this.passwordPrompt.open();
+ };
+
+ loadingTask.onProgress = ({
+ loaded,
+ total
+ }) => {
+ this.progress(loaded / total);
+ };
+
+ loadingTask.onUnsupportedFeature = this.fallback.bind(this);
+ return loadingTask.promise.then(pdfDocument => {
+ this.load(pdfDocument);
+ }, exception => {
+ if (loadingTask !== this.pdfLoadingTask) {
+ return undefined;
+ }
+
+ const message = exception && exception.message;
+ let loadingErrorMessage;
+
+ if (exception instanceof _pdfjsLib.InvalidPDFException) {
+ loadingErrorMessage = this.l10n.get("invalid_file_error", null, "Invalid or corrupted PDF file.");
+ } else if (exception instanceof _pdfjsLib.MissingPDFException) {
+ loadingErrorMessage = this.l10n.get("missing_file_error", null, "Missing PDF file.");
+ } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) {
+ loadingErrorMessage = this.l10n.get("unexpected_response_error", null, "Unexpected server response.");
+ } else {
+ loadingErrorMessage = this.l10n.get("loading_error", null, "An error occurred while loading the PDF.");
+ }
+
+ return loadingErrorMessage.then(msg => {
+ this.error(msg, {
+ message
+ });
+ throw exception;
+ });
+ });
+ },
+
+ download() {
+ function downloadByUrl() {
+ downloadManager.downloadUrl(url, filename);
+ }
+
+ const url = this.baseUrl;
+ const filename = this.contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url);
+ const downloadManager = this.downloadManager;
+
+ downloadManager.onerror = err => {
+ this.error(`PDF failed to download: ${err}`);
+ };
+
+ if (!this.pdfDocument || !this.downloadComplete) {
+ downloadByUrl();
+ return;
+ }
+
+ this.pdfDocument.getData().then(function (data) {
+ const blob = new Blob([data], {
+ type: "application/pdf"
+ });
+ downloadManager.download(blob, url, filename);
+ }).catch(downloadByUrl);
+ },
+
+ fallback(featureId) {
+ if (this.fellback) {
+ return;
+ }
+
+ this.fellback = true;
+ this.externalServices.fallback({
+ featureId,
+ url: this.baseUrl
+ }, function response(download) {
+ if (!download) {
+ return;
+ }
+
+ PDFViewerApplication.download();
+ });
+ },
+
+ error(message, moreInfo) {
+ const moreInfoText = [this.l10n.get("error_version_info", {
+ version: _pdfjsLib.version || "?",
+ build: _pdfjsLib.build || "?"
+ }, "PDF.js v{{version}} (build: {{build}})")];
+
+ if (moreInfo) {
+ moreInfoText.push(this.l10n.get("error_message", {
+ message: moreInfo.message
+ }, "Message: {{message}}"));
+
+ if (moreInfo.stack) {
+ moreInfoText.push(this.l10n.get("error_stack", {
+ stack: moreInfo.stack
+ }, "Stack: {{stack}}"));
+ } else {
+ if (moreInfo.filename) {
+ moreInfoText.push(this.l10n.get("error_file", {
+ file: moreInfo.filename
+ }, "File: {{file}}"));
+ }
+
+ if (moreInfo.lineNumber) {
+ moreInfoText.push(this.l10n.get("error_line", {
+ line: moreInfo.lineNumber
+ }, "Line: {{line}}"));
+ }
+ }
+ }
+
+ const errorWrapperConfig = this.appConfig.errorWrapper;
+ const errorWrapper = errorWrapperConfig.container;
+ errorWrapper.removeAttribute("hidden");
+ const errorMessage = errorWrapperConfig.errorMessage;
+ errorMessage.textContent = message;
+ const closeButton = errorWrapperConfig.closeButton;
+
+ closeButton.onclick = function () {
+ errorWrapper.setAttribute("hidden", "true");
+ };
+
+ const errorMoreInfo = errorWrapperConfig.errorMoreInfo;
+ const moreInfoButton = errorWrapperConfig.moreInfoButton;
+ const lessInfoButton = errorWrapperConfig.lessInfoButton;
+
+ moreInfoButton.onclick = function () {
+ errorMoreInfo.removeAttribute("hidden");
+ moreInfoButton.setAttribute("hidden", "true");
+ lessInfoButton.removeAttribute("hidden");
+ errorMoreInfo.style.height = errorMoreInfo.scrollHeight + "px";
+ };
+
+ lessInfoButton.onclick = function () {
+ errorMoreInfo.setAttribute("hidden", "true");
+ moreInfoButton.removeAttribute("hidden");
+ lessInfoButton.setAttribute("hidden", "true");
+ };
+
+ moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
+ lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
+ closeButton.oncontextmenu = _ui_utils.noContextMenuHandler;
+ moreInfoButton.removeAttribute("hidden");
+ lessInfoButton.setAttribute("hidden", "true");
+ Promise.all(moreInfoText).then(parts => {
+ errorMoreInfo.value = parts.join("\n");
+ });
+ },
+
+ progress(level) {
+ if (this.downloadComplete) {
+ return;
+ }
+
+ const percent = Math.round(level * 100);
+
+ if (percent > this.loadingBar.percent || isNaN(percent)) {
+ this.loadingBar.percent = percent;
+ const disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get("disableAutoFetch");
+
+ if (disableAutoFetch && percent) {
+ if (this.disableAutoFetchLoadingBarTimeout) {
+ clearTimeout(this.disableAutoFetchLoadingBarTimeout);
+ this.disableAutoFetchLoadingBarTimeout = null;
+ }
+
+ this.loadingBar.show();
+ this.disableAutoFetchLoadingBarTimeout = setTimeout(() => {
+ this.loadingBar.hide();
+ this.disableAutoFetchLoadingBarTimeout = null;
+ }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT);
+ }
+ }
+ },
+
+ load(pdfDocument) {
+ this.pdfDocument = pdfDocument;
+ pdfDocument.getDownloadInfo().then(() => {
+ this.downloadComplete = true;
+ this.loadingBar.hide();
+ firstPagePromise.then(() => {
+ this.eventBus.dispatch("documentloaded", {
+ source: this
+ });
+ });
+ });
+ const pageLayoutPromise = pdfDocument.getPageLayout().catch(function () {});
+ const pageModePromise = pdfDocument.getPageMode().catch(function () {});
+ const openActionPromise = pdfDocument.getOpenAction().catch(function () {});
+ this.toolbar.setPagesCount(pdfDocument.numPages, false);
+ this.secondaryToolbar.setPagesCount(pdfDocument.numPages);
+ let baseDocumentUrl;
+ baseDocumentUrl = null;
+ this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
+ this.pdfDocumentProperties.setDocument(pdfDocument, this.url);
+ const pdfViewer = this.pdfViewer;
+ pdfViewer.setDocument(pdfDocument);
+ const {
+ firstPagePromise,
+ onePageRendered,
+ pagesPromise
+ } = pdfViewer;
+ const pdfThumbnailViewer = this.pdfThumbnailViewer;
+ pdfThumbnailViewer.setDocument(pdfDocument);
+ const storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprint)).getMultiple({
+ page: null,
+ zoom: _ui_utils.DEFAULT_SCALE_VALUE,
+ scrollLeft: "0",
+ scrollTop: "0",
+ rotation: null,
+ sidebarView: _pdf_sidebar.SidebarView.UNKNOWN,
+ scrollMode: _ui_utils.ScrollMode.UNKNOWN,
+ spreadMode: _ui_utils.SpreadMode.UNKNOWN
+ }).catch(() => {
+ return Object.create(null);
+ });
+ firstPagePromise.then(pdfPage => {
+ this.loadingBar.setWidth(this.appConfig.viewerContainer);
+ Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {
+ const viewOnLoad = _app_options.AppOptions.get("viewOnLoad");
+
+ this._initializePdfHistory({
+ fingerprint: pdfDocument.fingerprint,
+ viewOnLoad,
+ initialDest: openAction && openAction.dest
+ });
+
+ const initialBookmark = this.initialBookmark;
+
+ const zoom = _app_options.AppOptions.get("defaultZoomValue");
+
+ let hash = zoom ? `zoom=${zoom}` : null;
+ let rotation = null;
+
+ let sidebarView = _app_options.AppOptions.get("sidebarViewOnLoad");
+
+ let scrollMode = _app_options.AppOptions.get("scrollModeOnLoad");
+
+ let spreadMode = _app_options.AppOptions.get("spreadModeOnLoad");
+
+ if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) {
+ hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;
+ rotation = parseInt(stored.rotation, 10);
+
+ if (sidebarView === _pdf_sidebar.SidebarView.UNKNOWN) {
+ sidebarView = stored.sidebarView | 0;
+ }
+
+ if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {
+ scrollMode = stored.scrollMode | 0;
+ }
+
+ if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
+ spreadMode = stored.spreadMode | 0;
+ }
+ }
+
+ if (pageMode && sidebarView === _pdf_sidebar.SidebarView.UNKNOWN) {
+ sidebarView = apiPageModeToSidebarView(pageMode);
+ }
+
+ if (pageLayout && spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
+ spreadMode = apiPageLayoutToSpreadMode(pageLayout);
+ }
+
+ this.setInitialView(hash, {
+ rotation,
+ sidebarView,
+ scrollMode,
+ spreadMode
+ });
+ this.eventBus.dispatch("documentinit", {
+ source: this
+ });
+
+ if (!this.isViewerEmbedded) {
+ pdfViewer.focus();
+ }
+
+ this._initializePermissions(pdfDocument);
+
+ await Promise.race([pagesPromise, new Promise(resolve => {
+ setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);
+ })]);
+
+ if (!initialBookmark && !hash) {
+ return;
+ }
+
+ if (pdfViewer.hasEqualPageSizes) {
+ return;
+ }
+
+ this.initialBookmark = initialBookmark;
+ pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;
+ this.setInitialView(hash);
+ }).catch(() => {
+ this.setInitialView();
+ }).then(function () {
+ pdfViewer.update();
+ });
+ });
+ pagesPromise.then(() => {
+ this._initializeAutoPrint(pdfDocument, openActionPromise);
+ });
+ onePageRendered.then(() => {
+ pdfDocument.getOutline().then(outline => {
+ this.pdfOutlineViewer.render({
+ outline
+ });
+ });
+ pdfDocument.getAttachments().then(attachments => {
+ this.pdfAttachmentViewer.render({
+ attachments
+ });
+ });
+ });
+
+ this._initializePageLabels(pdfDocument);
+
+ this._initializeMetadata(pdfDocument);
+ },
+
+ async _initializeAutoPrint(pdfDocument, openActionPromise) {
+ const [openAction, javaScript] = await Promise.all([openActionPromise, pdfDocument.getJavaScript()]);
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ let triggerAutoPrint = false;
+
+ if (openAction && openAction.action === "Print") {
+ triggerAutoPrint = true;
+ }
+
+ if (javaScript) {
+ javaScript.some(js => {
+ if (!js) {
+ return false;
+ }
+
+ console.warn("Warning: JavaScript is not supported");
+ this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript);
+ return true;
+ });
+
+ if (!triggerAutoPrint) {
+ for (const js of javaScript) {
+ if (js && _ui_utils.AutoPrintRegExp.test(js)) {
+ triggerAutoPrint = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (!this.supportsPrinting) {
+ return;
+ }
+
+ if (triggerAutoPrint) {
+ setTimeout(function () {
+ window.print();
+ });
+ }
+ },
+
+ async _initializeMetadata(pdfDocument) {
+ const {
+ info,
+ metadata,
+ contentDispositionFilename
+ } = await pdfDocument.getMetadata();
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ this.documentInfo = info;
+ this.metadata = metadata;
+ this.contentDispositionFilename = contentDispositionFilename;
+ console.log(`PDF ${pdfDocument.fingerprint} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "-"}` + `${this.pdfViewer.enableWebGL ? " [WebGL]" : ""})`);
+ let pdfTitle;
+ const infoTitle = info && info.Title;
+
+ if (infoTitle) {
+ pdfTitle = infoTitle;
+ }
+
+ const metadataTitle = metadata && metadata.get("dc:title");
+
+ if (metadataTitle) {
+ if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) {
+ pdfTitle = metadataTitle;
+ }
+ }
+
+ if (pdfTitle) {
+ this.setTitle(`${pdfTitle} - ${contentDispositionFilename || document.title}`);
+ } else if (contentDispositionFilename) {
+ this.setTitle(contentDispositionFilename);
+ }
+
+ if (info.IsAcroFormPresent) {
+ console.warn("Warning: AcroForm/XFA is not supported");
+ this.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);
+ }
+
+ let versionId = "other";
+ const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"];
+
+ if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {
+ versionId = `v${info.PDFFormatVersion.replace(".", "_")}`;
+ }
+
+ let generatorId = "other";
+ const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"];
+
+ if (info.Producer) {
+ const producer = info.Producer.toLowerCase();
+ KNOWN_GENERATORS.some(function (generator) {
+ if (!producer.includes(generator)) {
+ return false;
+ }
+
+ generatorId = generator.replace(/[ .\-]/g, "_");
+ return true;
+ });
+ }
+
+ let formType = null;
+
+ if (info.IsAcroFormPresent) {
+ formType = info.IsXFAPresent ? "xfa" : "acroform";
+ }
+
+ this.externalServices.reportTelemetry({
+ type: "documentInfo",
+ version: versionId,
+ generator: generatorId,
+ formType
+ });
+ },
+
+ async _initializePageLabels(pdfDocument) {
+ const labels = await pdfDocument.getPageLabels();
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ if (!labels || _app_options.AppOptions.get("disablePageLabels")) {
+ return;
+ }
+
+ const numLabels = labels.length;
+
+ if (numLabels !== this.pagesCount) {
+ console.error("The number of Page Labels does not match the number of pages in the document.");
+ return;
+ }
+
+ let i = 0;
+
+ while (i < numLabels && labels[i] === (i + 1).toString()) {
+ i++;
+ }
+
+ if (i === numLabels) {
+ return;
+ }
+
+ const {
+ pdfViewer,
+ pdfThumbnailViewer,
+ toolbar
+ } = this;
+ pdfViewer.setPageLabels(labels);
+ pdfThumbnailViewer.setPageLabels(labels);
+ toolbar.setPagesCount(numLabels, true);
+ toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
+ },
+
+ _initializePdfHistory({
+ fingerprint,
+ viewOnLoad,
+ initialDest = null
+ }) {
+ if (this.isViewerEmbedded || _app_options.AppOptions.get("disableHistory")) {
+ return;
+ }
+
+ this.pdfHistory.initialize({
+ fingerprint,
+ resetHistory: viewOnLoad === ViewOnLoad.INITIAL,
+ updateUrl: _app_options.AppOptions.get("historyUpdateUrl")
+ });
+
+ if (this.pdfHistory.initialBookmark) {
+ this.initialBookmark = this.pdfHistory.initialBookmark;
+ this.initialRotation = this.pdfHistory.initialRotation;
+ }
+
+ if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) {
+ this.initialBookmark = JSON.stringify(initialDest);
+ this.pdfHistory.push({
+ explicitDest: initialDest,
+ pageNumber: null
+ });
+ }
+ },
+
+ async _initializePermissions(pdfDocument) {
+ const permissions = await pdfDocument.getPermissions();
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ if (!permissions || !_app_options.AppOptions.get("enablePermissions")) {
+ return;
+ }
+
+ if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) {
+ this.appConfig.viewerContainer.classList.add(ENABLE_PERMISSIONS_CLASS);
+ }
+ },
+
+ setInitialView(storedHash, {
+ rotation,
+ sidebarView,
+ scrollMode,
+ spreadMode
+ } = {}) {
+ const setRotation = angle => {
+ if ((0, _ui_utils.isValidRotation)(angle)) {
+ this.pdfViewer.pagesRotation = angle;
+ }
+ };
+
+ const setViewerModes = (scroll, spread) => {
+ if ((0, _ui_utils.isValidScrollMode)(scroll)) {
+ this.pdfViewer.scrollMode = scroll;
+ }
+
+ if ((0, _ui_utils.isValidSpreadMode)(spread)) {
+ this.pdfViewer.spreadMode = spread;
+ }
+ };
+
+ this.isInitialViewSet = true;
+ this.pdfSidebar.setInitialView(sidebarView);
+ setViewerModes(scrollMode, spreadMode);
+
+ if (this.initialBookmark) {
+ setRotation(this.initialRotation);
+ delete this.initialRotation;
+ this.pdfLinkService.setHash(this.initialBookmark);
+ this.initialBookmark = null;
+ } else if (storedHash) {
+ setRotation(rotation);
+ this.pdfLinkService.setHash(storedHash);
+ }
+
+ this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);
+ this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber);
+
+ if (!this.pdfViewer.currentScaleValue) {
+ this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ }
+ },
+
+ cleanup() {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ this.pdfViewer.cleanup();
+ this.pdfThumbnailViewer.cleanup();
+
+ if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) {
+ this.pdfDocument.cleanup();
+ }
+ },
+
+ forceRendering() {
+ this.pdfRenderingQueue.printing = this.printing;
+ this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible;
+ this.pdfRenderingQueue.renderHighestPriority();
+ },
+
+ beforePrint() {
+ if (this.printService) {
+ return;
+ }
+
+ if (!this.supportsPrinting) {
+ this.l10n.get("printing_not_supported", null, "Warning: Printing is not fully supported by this browser.").then(printMessage => {
+ this.error(printMessage);
+ });
+ return;
+ }
+
+ if (!this.pdfViewer.pageViewsReady) {
+ this.l10n.get("printing_not_ready", null, "Warning: The PDF is not fully loaded for printing.").then(notReadyMessage => {
+ window.alert(notReadyMessage);
+ });
+ return;
+ }
+
+ const pagesOverview = this.pdfViewer.getPagesOverview();
+ const printContainer = this.appConfig.printContainer;
+ const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, this.l10n);
+ this.printService = printService;
+ this.forceRendering();
+ printService.layout();
+ this.externalServices.reportTelemetry({
+ type: "print"
+ });
+ },
+
+ afterPrint() {
+ if (this.printService) {
+ this.printService.destroy();
+ this.printService = null;
+ }
+
+ this.forceRendering();
+ },
+
+ rotatePages(delta) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const newRotation = (this.pdfViewer.pagesRotation + 360 + delta) % 360;
+ this.pdfViewer.pagesRotation = newRotation;
+ },
+
+ requestPresentationMode() {
+ if (!this.pdfPresentationMode) {
+ return;
+ }
+
+ this.pdfPresentationMode.request();
+ },
+
+ bindEvents() {
+ const {
+ eventBus,
+ _boundEvents
+ } = this;
+ _boundEvents.beforePrint = this.beforePrint.bind(this);
+ _boundEvents.afterPrint = this.afterPrint.bind(this);
+
+ eventBus._on("resize", webViewerResize);
+
+ eventBus._on("hashchange", webViewerHashchange);
+
+ eventBus._on("beforeprint", _boundEvents.beforePrint);
+
+ eventBus._on("afterprint", _boundEvents.afterPrint);
+
+ eventBus._on("pagerendered", webViewerPageRendered);
+
+ eventBus._on("updateviewarea", webViewerUpdateViewarea);
+
+ eventBus._on("pagechanging", webViewerPageChanging);
+
+ eventBus._on("scalechanging", webViewerScaleChanging);
+
+ eventBus._on("rotationchanging", webViewerRotationChanging);
+
+ eventBus._on("sidebarviewchanged", webViewerSidebarViewChanged);
+
+ eventBus._on("pagemode", webViewerPageMode);
+
+ eventBus._on("namedaction", webViewerNamedAction);
+
+ eventBus._on("presentationmodechanged", webViewerPresentationModeChanged);
+
+ eventBus._on("presentationmode", webViewerPresentationMode);
+
+ eventBus._on("print", webViewerPrint);
+
+ eventBus._on("download", webViewerDownload);
+
+ eventBus._on("firstpage", webViewerFirstPage);
+
+ eventBus._on("lastpage", webViewerLastPage);
+
+ eventBus._on("nextpage", webViewerNextPage);
+
+ eventBus._on("previouspage", webViewerPreviousPage);
+
+ eventBus._on("zoomin", webViewerZoomIn);
+
+ eventBus._on("zoomout", webViewerZoomOut);
+
+ eventBus._on("zoomreset", webViewerZoomReset);
+
+ eventBus._on("pagenumberchanged", webViewerPageNumberChanged);
+
+ eventBus._on("scalechanged", webViewerScaleChanged);
+
+ eventBus._on("rotatecw", webViewerRotateCw);
+
+ eventBus._on("rotateccw", webViewerRotateCcw);
+
+ eventBus._on("switchscrollmode", webViewerSwitchScrollMode);
+
+ eventBus._on("scrollmodechanged", webViewerScrollModeChanged);
+
+ eventBus._on("switchspreadmode", webViewerSwitchSpreadMode);
+
+ eventBus._on("spreadmodechanged", webViewerSpreadModeChanged);
+
+ eventBus._on("documentproperties", webViewerDocumentProperties);
+
+ eventBus._on("find", webViewerFind);
+
+ eventBus._on("findfromurlhash", webViewerFindFromUrlHash);
+
+ eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount);
+
+ eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState);
+
+ eventBus._on("fileinputchange", webViewerFileInputChange);
+
+ eventBus._on("openfile", webViewerOpenFile);
+ },
+
+ bindWindowEvents() {
+ const {
+ eventBus,
+ _boundEvents
+ } = this;
+
+ _boundEvents.windowResize = () => {
+ eventBus.dispatch("resize", {
+ source: window
+ });
+ };
+
+ _boundEvents.windowHashChange = () => {
+ eventBus.dispatch("hashchange", {
+ source: window,
+ hash: document.location.hash.substring(1)
+ });
+ };
+
+ _boundEvents.windowBeforePrint = () => {
+ eventBus.dispatch("beforeprint", {
+ source: window
+ });
+ };
+
+ _boundEvents.windowAfterPrint = () => {
+ eventBus.dispatch("afterprint", {
+ source: window
+ });
+ };
+
+ window.addEventListener("visibilitychange", webViewerVisibilityChange);
+ window.addEventListener("wheel", webViewerWheel, {
+ passive: false
+ });
+ window.addEventListener("click", webViewerClick);
+ window.addEventListener("keydown", webViewerKeyDown);
+ window.addEventListener("resize", _boundEvents.windowResize);
+ window.addEventListener("hashchange", _boundEvents.windowHashChange);
+ window.addEventListener("beforeprint", _boundEvents.windowBeforePrint);
+ window.addEventListener("afterprint", _boundEvents.windowAfterPrint);
+ },
+
+ unbindEvents() {
+ const {
+ eventBus,
+ _boundEvents
+ } = this;
+
+ eventBus._off("resize", webViewerResize);
+
+ eventBus._off("hashchange", webViewerHashchange);
+
+ eventBus._off("beforeprint", _boundEvents.beforePrint);
+
+ eventBus._off("afterprint", _boundEvents.afterPrint);
+
+ eventBus._off("pagerendered", webViewerPageRendered);
+
+ eventBus._off("updateviewarea", webViewerUpdateViewarea);
+
+ eventBus._off("pagechanging", webViewerPageChanging);
+
+ eventBus._off("scalechanging", webViewerScaleChanging);
+
+ eventBus._off("rotationchanging", webViewerRotationChanging);
+
+ eventBus._off("sidebarviewchanged", webViewerSidebarViewChanged);
+
+ eventBus._off("pagemode", webViewerPageMode);
+
+ eventBus._off("namedaction", webViewerNamedAction);
+
+ eventBus._off("presentationmodechanged", webViewerPresentationModeChanged);
+
+ eventBus._off("presentationmode", webViewerPresentationMode);
+
+ eventBus._off("print", webViewerPrint);
+
+ eventBus._off("download", webViewerDownload);
+
+ eventBus._off("firstpage", webViewerFirstPage);
+
+ eventBus._off("lastpage", webViewerLastPage);
+
+ eventBus._off("nextpage", webViewerNextPage);
+
+ eventBus._off("previouspage", webViewerPreviousPage);
+
+ eventBus._off("zoomin", webViewerZoomIn);
+
+ eventBus._off("zoomout", webViewerZoomOut);
+
+ eventBus._off("zoomreset", webViewerZoomReset);
+
+ eventBus._off("pagenumberchanged", webViewerPageNumberChanged);
+
+ eventBus._off("scalechanged", webViewerScaleChanged);
+
+ eventBus._off("rotatecw", webViewerRotateCw);
+
+ eventBus._off("rotateccw", webViewerRotateCcw);
+
+ eventBus._off("switchscrollmode", webViewerSwitchScrollMode);
+
+ eventBus._off("scrollmodechanged", webViewerScrollModeChanged);
+
+ eventBus._off("switchspreadmode", webViewerSwitchSpreadMode);
+
+ eventBus._off("spreadmodechanged", webViewerSpreadModeChanged);
+
+ eventBus._off("documentproperties", webViewerDocumentProperties);
+
+ eventBus._off("find", webViewerFind);
+
+ eventBus._off("findfromurlhash", webViewerFindFromUrlHash);
+
+ eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount);
+
+ eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState);
+
+ eventBus._off("fileinputchange", webViewerFileInputChange);
+
+ eventBus._off("openfile", webViewerOpenFile);
+
+ _boundEvents.beforePrint = null;
+ _boundEvents.afterPrint = null;
+ },
+
+ unbindWindowEvents() {
+ const {
+ _boundEvents
+ } = this;
+ window.removeEventListener("visibilitychange", webViewerVisibilityChange);
+ window.removeEventListener("wheel", webViewerWheel, {
+ passive: false
+ });
+ window.removeEventListener("click", webViewerClick);
+ window.removeEventListener("keydown", webViewerKeyDown);
+ window.removeEventListener("resize", _boundEvents.windowResize);
+ window.removeEventListener("hashchange", _boundEvents.windowHashChange);
+ window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint);
+ window.removeEventListener("afterprint", _boundEvents.windowAfterPrint);
+ _boundEvents.windowResize = null;
+ _boundEvents.windowHashChange = null;
+ _boundEvents.windowBeforePrint = null;
+ _boundEvents.windowAfterPrint = null;
+ }
+
+};
+exports.PDFViewerApplication = PDFViewerApplication;
+let validateFileURL;
+{
+ const HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"];
+
+ validateFileURL = function (file) {
+ if (file === undefined) {
+ return;
+ }
+
+ try {
+ const viewerOrigin = new URL(window.location.href).origin || "null";
+
+ if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {
+ return;
+ }
+
+ const {
+ origin,
+ protocol
+ } = new URL(file, window.location.href);
+
+ if (origin !== viewerOrigin && protocol !== "blob:") {
+ throw new Error("file origin does not match viewer's");
+ }
+ } catch (ex) {
+ const message = ex && ex.message;
+ PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(loadingErrorMessage => {
+ PDFViewerApplication.error(loadingErrorMessage, {
+ message
+ });
+ });
+ throw ex;
+ }
+ };
+}
+
+async function loadFakeWorker() {
+ if (!_pdfjsLib.GlobalWorkerOptions.workerSrc) {
+ _pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get("workerSrc");
+ }
+
+ return (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.getWorkerSrc());
+}
+
+function loadAndEnablePDFBug(enabledTabs) {
+ const appConfig = PDFViewerApplication.appConfig;
+ return (0, _pdfjsLib.loadScript)(appConfig.debuggerScriptPath).then(function () {
+ PDFBug.enable(enabledTabs);
+ PDFBug.init({
+ OPS: _pdfjsLib.OPS
+ }, appConfig.mainContainer);
+ });
+}
+
+function webViewerInitialized() {
+ const appConfig = PDFViewerApplication.appConfig;
+ let file;
+ const queryString = document.location.search.substring(1);
+ const params = (0, _ui_utils.parseQueryString)(queryString);
+ file = "file" in params ? params.file : _app_options.AppOptions.get("defaultUrl");
+ validateFileURL(file);
+ const fileInput = document.createElement("input");
+ fileInput.id = appConfig.openFileInputName;
+ fileInput.className = "fileInput";
+ fileInput.setAttribute("type", "file");
+ fileInput.oncontextmenu = _ui_utils.noContextMenuHandler;
+ document.body.appendChild(fileInput);
+
+ if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
+ appConfig.toolbar.openFile.setAttribute("hidden", "true");
+ appConfig.secondaryToolbar.openFileButton.setAttribute("hidden", "true");
+ } else {
+ fileInput.value = null;
+ }
+
+ fileInput.addEventListener("change", function (evt) {
+ const files = evt.target.files;
+
+ if (!files || files.length === 0) {
+ return;
+ }
+
+ PDFViewerApplication.eventBus.dispatch("fileinputchange", {
+ source: this,
+ fileInput: evt.target
+ });
+ });
+ appConfig.mainContainer.addEventListener("dragover", function (evt) {
+ evt.preventDefault();
+ evt.dataTransfer.dropEffect = "move";
+ });
+ appConfig.mainContainer.addEventListener("drop", function (evt) {
+ evt.preventDefault();
+ const files = evt.dataTransfer.files;
+
+ if (!files || files.length === 0) {
+ return;
+ }
+
+ PDFViewerApplication.eventBus.dispatch("fileinputchange", {
+ source: this,
+ fileInput: evt.dataTransfer
+ });
+ });
+
+ if (!PDFViewerApplication.supportsDocumentFonts) {
+ _app_options.AppOptions.set("disableFontFace", true);
+
+ PDFViewerApplication.l10n.get("web_fonts_disabled", null, "Web fonts are disabled: unable to use embedded PDF fonts.").then(msg => {
+ console.warn(msg);
+ });
+ }
+
+ if (!PDFViewerApplication.supportsPrinting) {
+ appConfig.toolbar.print.classList.add("hidden");
+ appConfig.secondaryToolbar.printButton.classList.add("hidden");
+ }
+
+ if (!PDFViewerApplication.supportsFullscreen) {
+ appConfig.toolbar.presentationModeButton.classList.add("hidden");
+ appConfig.secondaryToolbar.presentationModeButton.classList.add("hidden");
+ }
+
+ if (PDFViewerApplication.supportsIntegratedFind) {
+ appConfig.toolbar.viewFind.classList.add("hidden");
+ }
+
+ appConfig.mainContainer.addEventListener("transitionend", function (evt) {
+ if (evt.target === this) {
+ PDFViewerApplication.eventBus.dispatch("resize", {
+ source: this
+ });
+ }
+ }, true);
+
+ try {
+ webViewerOpenFileViaURL(file);
+ } catch (reason) {
+ PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(msg => {
+ PDFViewerApplication.error(msg, reason);
+ });
+ }
+}
+
+let webViewerOpenFileViaURL;
+{
+ webViewerOpenFileViaURL = function (file) {
+ if (file && file.lastIndexOf("file:", 0) === 0) {
+ PDFViewerApplication.setTitleUsingUrl(file);
+ const xhr = new XMLHttpRequest();
+
+ xhr.onload = function () {
+ PDFViewerApplication.open(new Uint8Array(xhr.response));
+ };
+
+ xhr.open("GET", file);
+ xhr.responseType = "arraybuffer";
+ xhr.send();
+ return;
+ }
+
+ if (file) {
+ PDFViewerApplication.open(file);
+ }
+ };
+}
+
+function webViewerResetPermissions() {
+ const {
+ appConfig
+ } = PDFViewerApplication;
+
+ if (!appConfig) {
+ return;
+ }
+
+ appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS);
+}
+
+function webViewerPageRendered(evt) {
+ const pageNumber = evt.pageNumber;
+ const pageIndex = pageNumber - 1;
+ const pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex);
+
+ if (pageNumber === PDFViewerApplication.page) {
+ PDFViewerApplication.toolbar.updateLoadingIndicatorState(false);
+ }
+
+ if (!pageView) {
+ return;
+ }
+
+ if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
+ const thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageIndex);
+ thumbnailView.setImage(pageView);
+ }
+
+ if (typeof Stats !== "undefined" && Stats.enabled && pageView.stats) {
+ Stats.add(pageNumber, pageView.stats);
+ }
+
+ if (pageView.error) {
+ PDFViewerApplication.l10n.get("rendering_error", null, "An error occurred while rendering the page.").then(msg => {
+ PDFViewerApplication.error(msg, pageView.error);
+ });
+ }
+
+ PDFViewerApplication.externalServices.reportTelemetry({
+ type: "pageInfo",
+ timestamp: evt.timestamp
+ });
+ PDFViewerApplication.pdfDocument.getStats().then(function (stats) {
+ PDFViewerApplication.externalServices.reportTelemetry({
+ type: "documentStats",
+ stats
+ });
+ });
+}
+
+function webViewerPageMode({
+ mode
+}) {
+ let view;
+
+ switch (mode) {
+ case "thumbs":
+ view = _pdf_sidebar.SidebarView.THUMBS;
+ break;
+
+ case "bookmarks":
+ case "outline":
+ view = _pdf_sidebar.SidebarView.OUTLINE;
+ break;
+
+ case "attachments":
+ view = _pdf_sidebar.SidebarView.ATTACHMENTS;
+ break;
+
+ case "none":
+ view = _pdf_sidebar.SidebarView.NONE;
+ break;
+
+ default:
+ console.error('Invalid "pagemode" hash parameter: ' + mode);
+ return;
+ }
+
+ PDFViewerApplication.pdfSidebar.switchView(view, true);
+}
+
+function webViewerNamedAction(evt) {
+ const action = evt.action;
+
+ switch (action) {
+ case "GoToPage":
+ PDFViewerApplication.appConfig.toolbar.pageNumber.select();
+ break;
+
+ case "Find":
+ if (!PDFViewerApplication.supportsIntegratedFind) {
+ PDFViewerApplication.findBar.toggle();
+ }
+
+ break;
+ }
+}
+
+function webViewerPresentationModeChanged({
+ active,
+ switchInProgress
+}) {
+ let state = _ui_utils.PresentationModeState.NORMAL;
+
+ if (switchInProgress) {
+ state = _ui_utils.PresentationModeState.CHANGING;
+ } else if (active) {
+ state = _ui_utils.PresentationModeState.FULLSCREEN;
+ }
+
+ PDFViewerApplication.pdfViewer.presentationModeState = state;
+}
+
+function webViewerSidebarViewChanged(evt) {
+ PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible;
+ const store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.set("sidebarView", evt.view).catch(function () {});
+ }
+}
+
+function webViewerUpdateViewarea(evt) {
+ const location = evt.location,
+ store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.setMultiple({
+ page: location.pageNumber,
+ zoom: location.scale,
+ scrollLeft: location.left,
+ scrollTop: location.top,
+ rotation: location.rotation
+ }).catch(function () {});
+ }
+
+ const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
+ PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href;
+ PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;
+ const currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);
+ const loading = currentPage.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED;
+ PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);
+}
+
+function webViewerScrollModeChanged(evt) {
+ const store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.set("scrollMode", evt.mode).catch(function () {});
+ }
+}
+
+function webViewerSpreadModeChanged(evt) {
+ const store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.set("spreadMode", evt.mode).catch(function () {});
+ }
+}
+
+function webViewerResize() {
+ const {
+ pdfDocument,
+ pdfViewer
+ } = PDFViewerApplication;
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ const currentScaleValue = pdfViewer.currentScaleValue;
+
+ if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") {
+ pdfViewer.currentScaleValue = currentScaleValue;
+ }
+
+ pdfViewer.update();
+}
+
+function webViewerHashchange(evt) {
+ const hash = evt.hash;
+
+ if (!hash) {
+ return;
+ }
+
+ if (!PDFViewerApplication.isInitialViewSet) {
+ PDFViewerApplication.initialBookmark = hash;
+ } else if (!PDFViewerApplication.pdfHistory.popStateInProgress) {
+ PDFViewerApplication.pdfLinkService.setHash(hash);
+ }
+}
+
+let webViewerFileInputChange, webViewerOpenFile;
+{
+ webViewerFileInputChange = function (evt) {
+ if (PDFViewerApplication.pdfViewer && PDFViewerApplication.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ const file = evt.fileInput.files[0];
+
+ if (!_app_options.AppOptions.get("disableCreateObjectURL")) {
+ let url = URL.createObjectURL(file);
+
+ if (file.name) {
+ url = {
+ url,
+ originalUrl: file.name
+ };
+ }
+
+ PDFViewerApplication.open(url);
+ } else {
+ PDFViewerApplication.setTitleUsingUrl(file.name);
+ const fileReader = new FileReader();
+
+ fileReader.onload = function webViewerChangeFileReaderOnload(event) {
+ const buffer = event.target.result;
+ PDFViewerApplication.open(new Uint8Array(buffer));
+ };
+
+ fileReader.readAsArrayBuffer(file);
+ }
+
+ const appConfig = PDFViewerApplication.appConfig;
+ appConfig.toolbar.viewBookmark.setAttribute("hidden", "true");
+ appConfig.secondaryToolbar.viewBookmarkButton.setAttribute("hidden", "true");
+ appConfig.toolbar.download.setAttribute("hidden", "true");
+ appConfig.secondaryToolbar.downloadButton.setAttribute("hidden", "true");
+ };
+
+ webViewerOpenFile = function (evt) {
+ const openFileInputName = PDFViewerApplication.appConfig.openFileInputName;
+ document.getElementById(openFileInputName).click();
+ };
+}
+
+function webViewerPresentationMode() {
+ PDFViewerApplication.requestPresentationMode();
+}
+
+function webViewerPrint() {
+ window.print();
+}
+
+function webViewerDownload() {
+ PDFViewerApplication.download();
+}
+
+function webViewerFirstPage() {
+ if (PDFViewerApplication.pdfDocument) {
+ PDFViewerApplication.page = 1;
+ }
+}
+
+function webViewerLastPage() {
+ if (PDFViewerApplication.pdfDocument) {
+ PDFViewerApplication.page = PDFViewerApplication.pagesCount;
+ }
+}
+
+function webViewerNextPage() {
+ PDFViewerApplication.page++;
+}
+
+function webViewerPreviousPage() {
+ PDFViewerApplication.page--;
+}
+
+function webViewerZoomIn() {
+ PDFViewerApplication.zoomIn();
+}
+
+function webViewerZoomOut() {
+ PDFViewerApplication.zoomOut();
+}
+
+function webViewerZoomReset() {
+ PDFViewerApplication.zoomReset();
+}
+
+function webViewerPageNumberChanged(evt) {
+ const pdfViewer = PDFViewerApplication.pdfViewer;
+
+ if (evt.value !== "") {
+ pdfViewer.currentPageLabel = evt.value;
+ }
+
+ if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {
+ PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
+ }
+}
+
+function webViewerScaleChanged(evt) {
+ PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;
+}
+
+function webViewerRotateCw() {
+ PDFViewerApplication.rotatePages(90);
+}
+
+function webViewerRotateCcw() {
+ PDFViewerApplication.rotatePages(-90);
+}
+
+function webViewerSwitchScrollMode(evt) {
+ PDFViewerApplication.pdfViewer.scrollMode = evt.mode;
+}
+
+function webViewerSwitchSpreadMode(evt) {
+ PDFViewerApplication.pdfViewer.spreadMode = evt.mode;
+}
+
+function webViewerDocumentProperties() {
+ PDFViewerApplication.pdfDocumentProperties.open();
+}
+
+function webViewerFind(evt) {
+ PDFViewerApplication.findController.executeCommand("find" + evt.type, {
+ query: evt.query,
+ phraseSearch: evt.phraseSearch,
+ caseSensitive: evt.caseSensitive,
+ entireWord: evt.entireWord,
+ highlightAll: evt.highlightAll,
+ findPrevious: evt.findPrevious
+ });
+}
+
+function webViewerFindFromUrlHash(evt) {
+ PDFViewerApplication.findController.executeCommand("find", {
+ query: evt.query,
+ phraseSearch: evt.phraseSearch,
+ caseSensitive: false,
+ entireWord: false,
+ highlightAll: true,
+ findPrevious: false
+ });
+}
+
+function webViewerUpdateFindMatchesCount({
+ matchesCount
+}) {
+ if (PDFViewerApplication.supportsIntegratedFind) {
+ PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);
+ } else {
+ PDFViewerApplication.findBar.updateResultsCount(matchesCount);
+ }
+}
+
+function webViewerUpdateFindControlState({
+ state,
+ previous,
+ matchesCount
+}) {
+ if (PDFViewerApplication.supportsIntegratedFind) {
+ PDFViewerApplication.externalServices.updateFindControlState({
+ result: state,
+ findPrevious: previous,
+ matchesCount
+ });
+ } else {
+ PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount);
+ }
+}
+
+function webViewerScaleChanging(evt) {
+ PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale);
+ PDFViewerApplication.pdfViewer.update();
+}
+
+function webViewerRotationChanging(evt) {
+ PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;
+ PDFViewerApplication.forceRendering();
+ PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;
+}
+
+function webViewerPageChanging(evt) {
+ const page = evt.pageNumber;
+ PDFViewerApplication.toolbar.setPageNumber(page, evt.pageLabel || null);
+ PDFViewerApplication.secondaryToolbar.setPageNumber(page);
+
+ if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
+ PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page);
+ }
+
+ if (typeof Stats !== "undefined" && Stats.enabled) {
+ const pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1);
+
+ if (pageView && pageView.stats) {
+ Stats.add(page, pageView.stats);
+ }
+ }
+}
+
+function webViewerVisibilityChange(evt) {
+ if (document.visibilityState === "visible") {
+ setZoomDisabledTimeout();
+ }
+}
+
+let zoomDisabledTimeout = null;
+
+function setZoomDisabledTimeout() {
+ if (zoomDisabledTimeout) {
+ clearTimeout(zoomDisabledTimeout);
+ }
+
+ zoomDisabledTimeout = setTimeout(function () {
+ zoomDisabledTimeout = null;
+ }, WHEEL_ZOOM_DISABLED_TIMEOUT);
+}
+
+function webViewerWheel(evt) {
+ const {
+ pdfViewer,
+ supportedMouseWheelZoomModifierKeys
+ } = PDFViewerApplication;
+
+ if (pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ if (evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) {
+ evt.preventDefault();
+
+ if (zoomDisabledTimeout || document.visibilityState === "hidden") {
+ return;
+ }
+
+ const previousScale = pdfViewer.currentScale;
+ const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
+ const MOUSE_WHEEL_DELTA_PER_PAGE_SCALE = 3.0;
+ const ticks = delta * MOUSE_WHEEL_DELTA_PER_PAGE_SCALE;
+
+ if (ticks < 0) {
+ PDFViewerApplication.zoomOut(-ticks);
+ } else {
+ PDFViewerApplication.zoomIn(ticks);
+ }
+
+ const currentScale = pdfViewer.currentScale;
+
+ if (previousScale !== currentScale) {
+ const scaleCorrectionFactor = currentScale / previousScale - 1;
+ const rect = pdfViewer.container.getBoundingClientRect();
+ const dx = evt.clientX - rect.left;
+ const dy = evt.clientY - rect.top;
+ pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor;
+ pdfViewer.container.scrollTop += dy * scaleCorrectionFactor;
+ }
+ } else {
+ setZoomDisabledTimeout();
+ }
+}
+
+function webViewerClick(evt) {
+ if (!PDFViewerApplication.secondaryToolbar.isOpen) {
+ return;
+ }
+
+ const appConfig = PDFViewerApplication.appConfig;
+
+ if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) {
+ PDFViewerApplication.secondaryToolbar.close();
+ }
+}
+
+function webViewerKeyDown(evt) {
+ if (PDFViewerApplication.overlayManager.active) {
+ return;
+ }
+
+ let handled = false,
+ ensureViewerFocused = false;
+ const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);
+ const pdfViewer = PDFViewerApplication.pdfViewer;
+ const isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode;
+
+ if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {
+ switch (evt.keyCode) {
+ case 70:
+ if (!PDFViewerApplication.supportsIntegratedFind) {
+ PDFViewerApplication.findBar.open();
+ handled = true;
+ }
+
+ break;
+
+ case 71:
+ if (!PDFViewerApplication.supportsIntegratedFind) {
+ const findState = PDFViewerApplication.findController.state;
+
+ if (findState) {
+ PDFViewerApplication.findController.executeCommand("findagain", {
+ query: findState.query,
+ phraseSearch: findState.phraseSearch,
+ caseSensitive: findState.caseSensitive,
+ entireWord: findState.entireWord,
+ highlightAll: findState.highlightAll,
+ findPrevious: cmd === 5 || cmd === 12
+ });
+ }
+
+ handled = true;
+ }
+
+ break;
+
+ case 61:
+ case 107:
+ case 187:
+ case 171:
+ if (!isViewerInPresentationMode) {
+ PDFViewerApplication.zoomIn();
+ }
+
+ handled = true;
+ break;
+
+ case 173:
+ case 109:
+ case 189:
+ if (!isViewerInPresentationMode) {
+ PDFViewerApplication.zoomOut();
+ }
+
+ handled = true;
+ break;
+
+ case 48:
+ case 96:
+ if (!isViewerInPresentationMode) {
+ setTimeout(function () {
+ PDFViewerApplication.zoomReset();
+ });
+ handled = false;
+ }
+
+ break;
+
+ case 38:
+ if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
+ PDFViewerApplication.page = 1;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+
+ case 40:
+ if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
+ PDFViewerApplication.page = PDFViewerApplication.pagesCount;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+ }
+ }
+
+ const {
+ eventBus
+ } = PDFViewerApplication;
+
+ if (cmd === 1 || cmd === 8) {
+ switch (evt.keyCode) {
+ case 83:
+ eventBus.dispatch("download", {
+ source: window
+ });
+ handled = true;
+ break;
+
+ case 79:
+ {
+ eventBus.dispatch("openfile", {
+ source: window
+ });
+ handled = true;
+ }
+ break;
+ }
+ }
+
+ if (cmd === 3 || cmd === 10) {
+ switch (evt.keyCode) {
+ case 80:
+ PDFViewerApplication.requestPresentationMode();
+ handled = true;
+ break;
+
+ case 71:
+ PDFViewerApplication.appConfig.toolbar.pageNumber.select();
+ handled = true;
+ break;
+ }
+ }
+
+ if (handled) {
+ if (ensureViewerFocused && !isViewerInPresentationMode) {
+ pdfViewer.focus();
+ }
+
+ evt.preventDefault();
+ return;
+ }
+
+ const curElement = document.activeElement || document.querySelector(":focus");
+ const curElementTagName = curElement && curElement.tagName.toUpperCase();
+
+ if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElement && curElement.isContentEditable) {
+ if (evt.keyCode !== 27) {
+ return;
+ }
+ }
+
+ if (cmd === 0) {
+ let turnPage = 0,
+ turnOnlyIfPageFit = false;
+
+ switch (evt.keyCode) {
+ case 38:
+ case 33:
+ if (pdfViewer.isVerticalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = -1;
+ break;
+
+ case 8:
+ if (!isViewerInPresentationMode) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = -1;
+ break;
+
+ case 37:
+ if (pdfViewer.isHorizontalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ case 75:
+ case 80:
+ turnPage = -1;
+ break;
+
+ case 27:
+ if (PDFViewerApplication.secondaryToolbar.isOpen) {
+ PDFViewerApplication.secondaryToolbar.close();
+ handled = true;
+ }
+
+ if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) {
+ PDFViewerApplication.findBar.close();
+ handled = true;
+ }
+
+ break;
+
+ case 40:
+ case 34:
+ if (pdfViewer.isVerticalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = 1;
+ break;
+
+ case 13:
+ case 32:
+ if (!isViewerInPresentationMode) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = 1;
+ break;
+
+ case 39:
+ if (pdfViewer.isHorizontalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ case 74:
+ case 78:
+ turnPage = 1;
+ break;
+
+ case 36:
+ if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
+ PDFViewerApplication.page = 1;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+
+ case 35:
+ if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
+ PDFViewerApplication.page = PDFViewerApplication.pagesCount;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+
+ case 83:
+ PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT);
+ break;
+
+ case 72:
+ PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND);
+ break;
+
+ case 82:
+ PDFViewerApplication.rotatePages(90);
+ break;
+
+ case 115:
+ PDFViewerApplication.pdfSidebar.toggle();
+ break;
+ }
+
+ if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) {
+ if (turnPage > 0) {
+ if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
+ PDFViewerApplication.page++;
+ }
+ } else {
+ if (PDFViewerApplication.page > 1) {
+ PDFViewerApplication.page--;
+ }
+ }
+
+ handled = true;
+ }
+ }
+
+ if (cmd === 4) {
+ switch (evt.keyCode) {
+ case 13:
+ case 32:
+ if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") {
+ break;
+ }
+
+ if (PDFViewerApplication.page > 1) {
+ PDFViewerApplication.page--;
+ }
+
+ handled = true;
+ break;
+
+ case 82:
+ PDFViewerApplication.rotatePages(-90);
+ break;
+ }
+ }
+
+ if (!handled && !isViewerInPresentationMode) {
+ if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") {
+ ensureViewerFocused = true;
+ }
+ }
+
+ if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {
+ pdfViewer.focus();
+ }
+
+ if (handled) {
+ evt.preventDefault();
+ }
+}
+
+function apiPageLayoutToSpreadMode(layout) {
+ switch (layout) {
+ case "SinglePage":
+ case "OneColumn":
+ return _ui_utils.SpreadMode.NONE;
+
+ case "TwoColumnLeft":
+ case "TwoPageLeft":
+ return _ui_utils.SpreadMode.ODD;
+
+ case "TwoColumnRight":
+ case "TwoPageRight":
+ return _ui_utils.SpreadMode.EVEN;
+ }
+
+ return _ui_utils.SpreadMode.NONE;
+}
+
+function apiPageModeToSidebarView(mode) {
+ switch (mode) {
+ case "UseNone":
+ return _pdf_sidebar.SidebarView.NONE;
+
+ case "UseThumbs":
+ return _pdf_sidebar.SidebarView.THUMBS;
+
+ case "UseOutlines":
+ return _pdf_sidebar.SidebarView.OUTLINE;
+
+ case "UseAttachments":
+ return _pdf_sidebar.SidebarView.ATTACHMENTS;
+
+ case "UseOC":
+ }
+
+ return _pdf_sidebar.SidebarView.NONE;
+}
+
+const PDFPrintServiceFactory = {
+ instance: {
+ supportsPrinting: false,
+
+ createPrintService() {
+ throw new Error("Not implemented: createPrintService");
+ }
+
+ }
+};
+exports.PDFPrintServiceFactory = PDFPrintServiceFactory;
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isValidRotation = isValidRotation;
+exports.isValidScrollMode = isValidScrollMode;
+exports.isValidSpreadMode = isValidSpreadMode;
+exports.isPortraitOrientation = isPortraitOrientation;
+exports.clamp = clamp;
+exports.getPDFFileNameFromURL = getPDFFileNameFromURL;
+exports.noContextMenuHandler = noContextMenuHandler;
+exports.parseQueryString = parseQueryString;
+exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements;
+exports.getVisibleElements = getVisibleElements;
+exports.roundToDivide = roundToDivide;
+exports.getPageSizeInches = getPageSizeInches;
+exports.approximateFraction = approximateFraction;
+exports.getOutputScale = getOutputScale;
+exports.scrollIntoView = scrollIntoView;
+exports.watchScroll = watchScroll;
+exports.binarySearchFirstItem = binarySearchFirstItem;
+exports.normalizeWheelEventDelta = normalizeWheelEventDelta;
+exports.waitOnEventOrTimeout = waitOnEventOrTimeout;
+exports.moveToEndOfArray = moveToEndOfArray;
+exports.WaitOnType = exports.animationStarted = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.SpreadMode = exports.ScrollMode = exports.TextLayerMode = exports.RendererType = exports.PresentationModeState = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = exports.AutoPrintRegExp = void 0;
+const CSS_UNITS = 96.0 / 72.0;
+exports.CSS_UNITS = CSS_UNITS;
+const DEFAULT_SCALE_VALUE = "auto";
+exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE;
+const DEFAULT_SCALE = 1.0;
+exports.DEFAULT_SCALE = DEFAULT_SCALE;
+const MIN_SCALE = 0.1;
+exports.MIN_SCALE = MIN_SCALE;
+const MAX_SCALE = 10.0;
+exports.MAX_SCALE = MAX_SCALE;
+const UNKNOWN_SCALE = 0;
+exports.UNKNOWN_SCALE = UNKNOWN_SCALE;
+const MAX_AUTO_SCALE = 1.25;
+exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE;
+const SCROLLBAR_PADDING = 40;
+exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING;
+const VERTICAL_PADDING = 5;
+exports.VERTICAL_PADDING = VERTICAL_PADDING;
+const PresentationModeState = {
+ UNKNOWN: 0,
+ NORMAL: 1,
+ CHANGING: 2,
+ FULLSCREEN: 3
+};
+exports.PresentationModeState = PresentationModeState;
+const RendererType = {
+ CANVAS: "canvas",
+ SVG: "svg"
+};
+exports.RendererType = RendererType;
+const TextLayerMode = {
+ DISABLE: 0,
+ ENABLE: 1,
+ ENABLE_ENHANCE: 2
+};
+exports.TextLayerMode = TextLayerMode;
+const ScrollMode = {
+ UNKNOWN: -1,
+ VERTICAL: 0,
+ HORIZONTAL: 1,
+ WRAPPED: 2
+};
+exports.ScrollMode = ScrollMode;
+const SpreadMode = {
+ UNKNOWN: -1,
+ NONE: 0,
+ ODD: 1,
+ EVEN: 2
+};
+exports.SpreadMode = SpreadMode;
+const AutoPrintRegExp = /\bprint\s*\(/;
+exports.AutoPrintRegExp = AutoPrintRegExp;
+
+function formatL10nValue(text, args) {
+ if (!args) {
+ return text;
+ }
+
+ return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
+ return name in args ? args[name] : "{{" + name + "}}";
+ });
+}
+
+const NullL10n = {
+ async getLanguage() {
+ return "en-us";
+ },
+
+ async getDirection() {
+ return "ltr";
+ },
+
+ async get(property, args, fallback) {
+ return formatL10nValue(fallback, args);
+ },
+
+ async translate(element) {}
+
+};
+exports.NullL10n = NullL10n;
+
+function getOutputScale(ctx) {
+ const devicePixelRatio = window.devicePixelRatio || 1;
+ const backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
+ const pixelRatio = devicePixelRatio / backingStoreRatio;
+ return {
+ sx: pixelRatio,
+ sy: pixelRatio,
+ scaled: pixelRatio !== 1
+ };
+}
+
+function scrollIntoView(element, spot, skipOverflowHiddenElements = false) {
+ let parent = element.offsetParent;
+
+ if (!parent) {
+ console.error("offsetParent is not set -- cannot scroll");
+ return;
+ }
+
+ let offsetY = element.offsetTop + element.clientTop;
+ let offsetX = element.offsetLeft + element.clientLeft;
+
+ while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || skipOverflowHiddenElements && getComputedStyle(parent).overflow === "hidden") {
+ if (parent.dataset._scaleY) {
+ offsetY /= parent.dataset._scaleY;
+ offsetX /= parent.dataset._scaleX;
+ }
+
+ offsetY += parent.offsetTop;
+ offsetX += parent.offsetLeft;
+ parent = parent.offsetParent;
+
+ if (!parent) {
+ return;
+ }
+ }
+
+ if (spot) {
+ if (spot.top !== undefined) {
+ offsetY += spot.top;
+ }
+
+ if (spot.left !== undefined) {
+ offsetX += spot.left;
+ parent.scrollLeft = offsetX;
+ }
+ }
+
+ parent.scrollTop = offsetY;
+}
+
+function watchScroll(viewAreaElement, callback) {
+ const debounceScroll = function (evt) {
+ if (rAF) {
+ return;
+ }
+
+ rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {
+ rAF = null;
+ const currentX = viewAreaElement.scrollLeft;
+ const lastX = state.lastX;
+
+ if (currentX !== lastX) {
+ state.right = currentX > lastX;
+ }
+
+ state.lastX = currentX;
+ const currentY = viewAreaElement.scrollTop;
+ const lastY = state.lastY;
+
+ if (currentY !== lastY) {
+ state.down = currentY > lastY;
+ }
+
+ state.lastY = currentY;
+ callback(state);
+ });
+ };
+
+ const state = {
+ right: true,
+ down: true,
+ lastX: viewAreaElement.scrollLeft,
+ lastY: viewAreaElement.scrollTop,
+ _eventHandler: debounceScroll
+ };
+ let rAF = null;
+ viewAreaElement.addEventListener("scroll", debounceScroll, true);
+ return state;
+}
+
+function parseQueryString(query) {
+ const parts = query.split("&");
+ const params = Object.create(null);
+
+ for (let i = 0, ii = parts.length; i < ii; ++i) {
+ const param = parts[i].split("=");
+ const key = param[0].toLowerCase();
+ const value = param.length > 1 ? param[1] : null;
+ params[decodeURIComponent(key)] = decodeURIComponent(value);
+ }
+
+ return params;
+}
+
+function binarySearchFirstItem(items, condition) {
+ let minIndex = 0;
+ let maxIndex = items.length - 1;
+
+ if (maxIndex < 0 || !condition(items[maxIndex])) {
+ return items.length;
+ }
+
+ if (condition(items[minIndex])) {
+ return minIndex;
+ }
+
+ while (minIndex < maxIndex) {
+ const currentIndex = minIndex + maxIndex >> 1;
+ const currentItem = items[currentIndex];
+
+ if (condition(currentItem)) {
+ maxIndex = currentIndex;
+ } else {
+ minIndex = currentIndex + 1;
+ }
+ }
+
+ return minIndex;
+}
+
+function approximateFraction(x) {
+ if (Math.floor(x) === x) {
+ return [x, 1];
+ }
+
+ const xinv = 1 / x;
+ const limit = 8;
+
+ if (xinv > limit) {
+ return [1, limit];
+ } else if (Math.floor(xinv) === xinv) {
+ return [1, xinv];
+ }
+
+ const x_ = x > 1 ? xinv : x;
+ let a = 0,
+ b = 1,
+ c = 1,
+ d = 1;
+
+ while (true) {
+ const p = a + c,
+ q = b + d;
+
+ if (q > limit) {
+ break;
+ }
+
+ if (x_ <= p / q) {
+ c = p;
+ d = q;
+ } else {
+ a = p;
+ b = q;
+ }
+ }
+
+ let result;
+
+ if (x_ - a / b < c / d - x_) {
+ result = x_ === x ? [a, b] : [b, a];
+ } else {
+ result = x_ === x ? [c, d] : [d, c];
+ }
+
+ return result;
+}
+
+function roundToDivide(x, div) {
+ const r = x % div;
+ return r === 0 ? x : Math.round(x - r + div);
+}
+
+function getPageSizeInches({
+ view,
+ userUnit,
+ rotate
+}) {
+ const [x1, y1, x2, y2] = view;
+ const changeOrientation = rotate % 180 !== 0;
+ const width = (x2 - x1) / 72 * userUnit;
+ const height = (y2 - y1) / 72 * userUnit;
+ return {
+ width: changeOrientation ? height : width,
+ height: changeOrientation ? width : height
+ };
+}
+
+function backtrackBeforeAllVisibleElements(index, views, top) {
+ if (index < 2) {
+ return index;
+ }
+
+ let elt = views[index].div;
+ let pageTop = elt.offsetTop + elt.clientTop;
+
+ if (pageTop >= top) {
+ elt = views[index - 1].div;
+ pageTop = elt.offsetTop + elt.clientTop;
+ }
+
+ for (let i = index - 2; i >= 0; --i) {
+ elt = views[i].div;
+
+ if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {
+ break;
+ }
+
+ index = i;
+ }
+
+ return index;
+}
+
+function getVisibleElements(scrollEl, views, sortByVisibility = false, horizontal = false) {
+ const top = scrollEl.scrollTop,
+ bottom = top + scrollEl.clientHeight;
+ const left = scrollEl.scrollLeft,
+ right = left + scrollEl.clientWidth;
+
+ function isElementBottomAfterViewTop(view) {
+ const element = view.div;
+ const elementBottom = element.offsetTop + element.clientTop + element.clientHeight;
+ return elementBottom > top;
+ }
+
+ function isElementRightAfterViewLeft(view) {
+ const element = view.div;
+ const elementRight = element.offsetLeft + element.clientLeft + element.clientWidth;
+ return elementRight > left;
+ }
+
+ const visible = [],
+ numViews = views.length;
+ let firstVisibleElementInd = numViews === 0 ? 0 : binarySearchFirstItem(views, horizontal ? isElementRightAfterViewLeft : isElementBottomAfterViewTop);
+
+ if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {
+ firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);
+ }
+
+ let lastEdge = horizontal ? right : -1;
+
+ for (let i = firstVisibleElementInd; i < numViews; i++) {
+ const view = views[i],
+ element = view.div;
+ const currentWidth = element.offsetLeft + element.clientLeft;
+ const currentHeight = element.offsetTop + element.clientTop;
+ const viewWidth = element.clientWidth,
+ viewHeight = element.clientHeight;
+ const viewRight = currentWidth + viewWidth;
+ const viewBottom = currentHeight + viewHeight;
+
+ if (lastEdge === -1) {
+ if (viewBottom >= bottom) {
+ lastEdge = viewBottom;
+ }
+ } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {
+ break;
+ }
+
+ if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) {
+ continue;
+ }
+
+ const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);
+ const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);
+ const percent = (viewHeight - hiddenHeight) * (viewWidth - hiddenWidth) * 100 / viewHeight / viewWidth | 0;
+ visible.push({
+ id: view.id,
+ x: currentWidth,
+ y: currentHeight,
+ view,
+ percent
+ });
+ }
+
+ const first = visible[0],
+ last = visible[visible.length - 1];
+
+ if (sortByVisibility) {
+ visible.sort(function (a, b) {
+ const pc = a.percent - b.percent;
+
+ if (Math.abs(pc) > 0.001) {
+ return -pc;
+ }
+
+ return a.id - b.id;
+ });
+ }
+
+ return {
+ first,
+ last,
+ views: visible
+ };
+}
+
+function noContextMenuHandler(evt) {
+ evt.preventDefault();
+}
+
+function isDataSchema(url) {
+ let i = 0;
+ const ii = url.length;
+
+ while (i < ii && url[i].trim() === "") {
+ i++;
+ }
+
+ return url.substring(i, i + 5).toLowerCase() === "data:";
+}
+
+function getPDFFileNameFromURL(url, defaultFilename = "document.pdf") {
+ if (typeof url !== "string") {
+ return defaultFilename;
+ }
+
+ if (isDataSchema(url)) {
+ console.warn("getPDFFileNameFromURL: " + 'ignoring "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 (ex) {}
+ }
+ }
+
+ return suggestedFilename || defaultFilename;
+}
+
+function normalizeWheelEventDelta(evt) {
+ let delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);
+ const angle = Math.atan2(evt.deltaY, evt.deltaX);
+
+ if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {
+ delta = -delta;
+ }
+
+ const MOUSE_DOM_DELTA_PIXEL_MODE = 0;
+ const MOUSE_DOM_DELTA_LINE_MODE = 1;
+ const MOUSE_PIXELS_PER_LINE = 30;
+ const MOUSE_LINES_PER_PAGE = 30;
+
+ if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {
+ delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;
+ } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {
+ delta /= MOUSE_LINES_PER_PAGE;
+ }
+
+ return delta;
+}
+
+function isValidRotation(angle) {
+ return Number.isInteger(angle) && angle % 90 === 0;
+}
+
+function isValidScrollMode(mode) {
+ return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN;
+}
+
+function isValidSpreadMode(mode) {
+ return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN;
+}
+
+function isPortraitOrientation(size) {
+ return size.width <= size.height;
+}
+
+const WaitOnType = {
+ EVENT: "event",
+ TIMEOUT: "timeout"
+};
+exports.WaitOnType = WaitOnType;
+
+function waitOnEventOrTimeout({
+ target,
+ name,
+ delay = 0
+}) {
+ return new Promise(function (resolve, reject) {
+ if (typeof target !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) {
+ throw new Error("waitOnEventOrTimeout - invalid parameters.");
+ }
+
+ function handler(type) {
+ if (target instanceof EventBus) {
+ target._off(name, eventHandler);
+ } else {
+ target.removeEventListener(name, eventHandler);
+ }
+
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+
+ resolve(type);
+ }
+
+ const eventHandler = handler.bind(null, WaitOnType.EVENT);
+
+ if (target instanceof EventBus) {
+ target._on(name, eventHandler);
+ } else {
+ target.addEventListener(name, eventHandler);
+ }
+
+ const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);
+ const timeout = setTimeout(timeoutHandler, delay);
+ });
+}
+
+const animationStarted = new Promise(function (resolve) {
+ window.requestAnimationFrame(resolve);
+});
+exports.animationStarted = animationStarted;
+
+function dispatchDOMEvent(eventName, args = null) {
+ throw new Error("Not implemented: dispatchDOMEvent");
+}
+
+class EventBus {
+ constructor(options) {
+ this._listeners = Object.create(null);
+ }
+
+ on(eventName, listener) {
+ this._on(eventName, listener, {
+ external: true
+ });
+ }
+
+ off(eventName, listener) {
+ this._off(eventName, listener, {
+ external: true
+ });
+ }
+
+ dispatch(eventName) {
+ const eventListeners = this._listeners[eventName];
+
+ if (!eventListeners || eventListeners.length === 0) {
+ return;
+ }
+
+ const args = Array.prototype.slice.call(arguments, 1);
+ let externalListeners;
+ eventListeners.slice(0).forEach(function ({
+ listener,
+ external
+ }) {
+ if (external) {
+ if (!externalListeners) {
+ externalListeners = [];
+ }
+
+ externalListeners.push(listener);
+ return;
+ }
+
+ listener.apply(null, args);
+ });
+
+ if (externalListeners) {
+ externalListeners.forEach(function (listener) {
+ listener.apply(null, args);
+ });
+ externalListeners = null;
+ }
+ }
+
+ _on(eventName, listener, options = null) {
+ let eventListeners = this._listeners[eventName];
+
+ if (!eventListeners) {
+ this._listeners[eventName] = eventListeners = [];
+ }
+
+ eventListeners.push({
+ listener,
+ external: (options && options.external) === true
+ });
+ }
+
+ _off(eventName, listener, options = null) {
+ const eventListeners = this._listeners[eventName];
+
+ if (!eventListeners) {
+ return;
+ }
+
+ for (let i = 0, ii = eventListeners.length; i < ii; i++) {
+ if (eventListeners[i].listener === listener) {
+ eventListeners.splice(i, 1);
+ return;
+ }
+ }
+ }
+
+}
+
+exports.EventBus = EventBus;
+
+function clamp(v, min, max) {
+ return Math.min(Math.max(v, min), max);
+}
+
+class ProgressBar {
+ constructor(id, {
+ height,
+ width,
+ units
+ } = {}) {
+ this.visible = true;
+ this.div = document.querySelector(id + " .progress");
+ this.bar = this.div.parentNode;
+ this.height = height || 100;
+ this.width = width || 100;
+ this.units = units || "%";
+ this.div.style.height = this.height + this.units;
+ this.percent = 0;
+ }
+
+ _updateBar() {
+ if (this._indeterminate) {
+ this.div.classList.add("indeterminate");
+ this.div.style.width = this.width + this.units;
+ return;
+ }
+
+ this.div.classList.remove("indeterminate");
+ const progressSize = this.width * this._percent / 100;
+ this.div.style.width = progressSize + this.units;
+ }
+
+ get percent() {
+ return this._percent;
+ }
+
+ set percent(val) {
+ this._indeterminate = isNaN(val);
+ this._percent = clamp(val, 0, 100);
+
+ this._updateBar();
+ }
+
+ setWidth(viewer) {
+ if (!viewer) {
+ return;
+ }
+
+ const container = viewer.parentNode;
+ const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;
+
+ if (scrollbarWidth > 0) {
+ this.bar.style.width = `calc(100% - ${scrollbarWidth}px)`;
+ }
+ }
+
+ hide() {
+ if (!this.visible) {
+ return;
+ }
+
+ this.visible = false;
+ this.bar.classList.add("hidden");
+ document.body.classList.remove("loadingInProgress");
+ }
+
+ show() {
+ if (this.visible) {
+ return;
+ }
+
+ this.visible = true;
+ document.body.classList.add("loadingInProgress");
+ this.bar.classList.remove("hidden");
+ }
+
+}
+
+exports.ProgressBar = ProgressBar;
+
+function moveToEndOfArray(arr, condition) {
+ const moved = [],
+ len = arr.length;
+ let write = 0;
+
+ for (let read = 0; read < len; ++read) {
+ if (condition(arr[read])) {
+ moved.push(arr[read]);
+ } else {
+ arr[write] = arr[read];
+ ++write;
+ }
+ }
+
+ for (let read = 0; write < len; ++read, ++write) {
+ arr[write] = moved[read];
+ }
+}
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.OptionKind = exports.AppOptions = void 0;
+
+var _viewer_compatibility = __webpack_require__(4);
+
+const OptionKind = {
+ VIEWER: 0x02,
+ API: 0x04,
+ WORKER: 0x08,
+ PREFERENCE: 0x80
+};
+exports.OptionKind = OptionKind;
+const defaultOptions = {
+ cursorToolOnLoad: {
+ value: 0,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ defaultUrl: {
+ value: "compressed.tracemonkey-pldi-09.pdf",
+ kind: OptionKind.VIEWER
+ },
+ defaultZoomValue: {
+ value: "",
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ disableCreateObjectURL: {
+ value: false,
+ compatibility: _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL,
+ kind: OptionKind.VIEWER
+ },
+ disableHistory: {
+ value: false,
+ kind: OptionKind.VIEWER
+ },
+ disablePageLabels: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ enablePermissions: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ enablePrintAutoRotate: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ enableWebGL: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ externalLinkRel: {
+ value: "noopener noreferrer nofollow",
+ kind: OptionKind.VIEWER
+ },
+ externalLinkTarget: {
+ value: 0,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ historyUpdateUrl: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ ignoreDestinationZoom: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ imageResourcesPath: {
+ value: "./images/",
+ kind: OptionKind.VIEWER
+ },
+ maxCanvasPixels: {
+ value: 16777216,
+ compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels,
+ kind: OptionKind.VIEWER
+ },
+ pdfBugEnabled: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ printResolution: {
+ value: 150,
+ kind: OptionKind.VIEWER
+ },
+ renderer: {
+ value: "canvas",
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ renderInteractiveForms: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ sidebarViewOnLoad: {
+ value: -1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ scrollModeOnLoad: {
+ value: -1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ spreadModeOnLoad: {
+ value: -1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ textLayerMode: {
+ value: 1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ useOnlyCssZoom: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ viewOnLoad: {
+ value: 0,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ cMapPacked: {
+ value: true,
+ kind: OptionKind.API
+ },
+ cMapUrl: {
+ value: "../web/cmaps/",
+ kind: OptionKind.API
+ },
+ disableAutoFetch: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ disableFontFace: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ disableRange: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ disableStream: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ docBaseUrl: {
+ value: "",
+ kind: OptionKind.API
+ },
+ fontExtraProperties: {
+ value: false,
+ kind: OptionKind.API
+ },
+ isEvalSupported: {
+ value: true,
+ kind: OptionKind.API
+ },
+ maxImageSize: {
+ value: -1,
+ kind: OptionKind.API
+ },
+ pdfBug: {
+ value: false,
+ kind: OptionKind.API
+ },
+ verbosity: {
+ value: 1,
+ kind: OptionKind.API
+ },
+ workerPort: {
+ value: null,
+ kind: OptionKind.WORKER
+ },
+ workerSrc: {
+ value: "../build/pdf.worker.js",
+ kind: OptionKind.WORKER
+ }
+};
+{
+ defaultOptions.disablePreferences = {
+ value: false,
+ kind: OptionKind.VIEWER
+ };
+ defaultOptions.locale = {
+ value: typeof navigator !== "undefined" ? navigator.language : "en-US",
+ kind: OptionKind.VIEWER
+ };
+}
+const userOptions = Object.create(null);
+
+class AppOptions {
+ constructor() {
+ throw new Error("Cannot initialize AppOptions.");
+ }
+
+ static get(name) {
+ const userOption = userOptions[name];
+
+ if (userOption !== undefined) {
+ return userOption;
+ }
+
+ const defaultOption = defaultOptions[name];
+
+ if (defaultOption !== undefined) {
+ return defaultOption.compatibility || defaultOption.value;
+ }
+
+ return undefined;
+ }
+
+ static getAll(kind = null) {
+ const options = Object.create(null);
+
+ for (const name in defaultOptions) {
+ const defaultOption = defaultOptions[name];
+
+ if (kind) {
+ if ((kind & defaultOption.kind) === 0) {
+ continue;
+ }
+
+ if (kind === OptionKind.PREFERENCE) {
+ const value = defaultOption.value,
+ valueType = typeof value;
+
+ if (valueType === "boolean" || valueType === "string" || valueType === "number" && Number.isInteger(value)) {
+ options[name] = value;
+ continue;
+ }
+
+ throw new Error(`Invalid type for preference: ${name}`);
+ }
+ }
+
+ const userOption = userOptions[name];
+ options[name] = userOption !== undefined ? userOption : defaultOption.compatibility || defaultOption.value;
+ }
+
+ return options;
+ }
+
+ static set(name, value) {
+ userOptions[name] = value;
+ }
+
+ static remove(name) {
+ delete userOptions[name];
+ }
+
+}
+
+exports.AppOptions = AppOptions;
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.viewerCompatibilityParams = void 0;
+const compatibilityParams = Object.create(null);
+{
+ const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
+ const platform = typeof navigator !== "undefined" && navigator.platform || "";
+ const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
+ const isAndroid = /Android/.test(userAgent);
+ const isIE = /Trident/.test(userAgent);
+ const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
+ const isIOSChrome = /CriOS/.test(userAgent);
+
+ (function checkOnBlobSupport() {
+ if (isIE || isIOSChrome) {
+ compatibilityParams.disableCreateObjectURL = true;
+ }
+ })();
+
+ (function checkCanvasSizeLimitation() {
+ if (isIOS || isAndroid) {
+ compatibilityParams.maxCanvasPixels = 5242880;
+ }
+ })();
+}
+const viewerCompatibilityParams = Object.freeze(compatibilityParams);
+exports.viewerCompatibilityParams = viewerCompatibilityParams;
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+let pdfjsLib;
+
+if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) {
+ pdfjsLib = window["pdfjs-dist/build/pdf"];
+} else {
+ pdfjsLib = require("../build/pdf.js");
+}
+
+module.exports = pdfjsLib;
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFCursorTools = exports.CursorTool = void 0;
+
+var _grab_to_pan = __webpack_require__(7);
+
+const CursorTool = {
+ SELECT: 0,
+ HAND: 1,
+ ZOOM: 2
+};
+exports.CursorTool = CursorTool;
+
+class PDFCursorTools {
+ constructor({
+ container,
+ eventBus,
+ cursorToolOnLoad = CursorTool.SELECT
+ }) {
+ this.container = container;
+ this.eventBus = eventBus;
+ this.active = CursorTool.SELECT;
+ this.activeBeforePresentationMode = null;
+ this.handTool = new _grab_to_pan.GrabToPan({
+ element: this.container
+ });
+
+ this._addEventListeners();
+
+ Promise.resolve().then(() => {
+ this.switchTool(cursorToolOnLoad);
+ });
+ }
+
+ get activeTool() {
+ return this.active;
+ }
+
+ switchTool(tool) {
+ if (this.activeBeforePresentationMode !== null) {
+ return;
+ }
+
+ if (tool === this.active) {
+ return;
+ }
+
+ const disableActiveTool = () => {
+ switch (this.active) {
+ case CursorTool.SELECT:
+ break;
+
+ case CursorTool.HAND:
+ this.handTool.deactivate();
+ break;
+
+ case CursorTool.ZOOM:
+ }
+ };
+
+ switch (tool) {
+ case CursorTool.SELECT:
+ disableActiveTool();
+ break;
+
+ case CursorTool.HAND:
+ disableActiveTool();
+ this.handTool.activate();
+ break;
+
+ case CursorTool.ZOOM:
+ default:
+ console.error(`switchTool: "${tool}" is an unsupported value.`);
+ return;
+ }
+
+ this.active = tool;
+
+ this._dispatchEvent();
+ }
+
+ _dispatchEvent() {
+ this.eventBus.dispatch("cursortoolchanged", {
+ source: this,
+ tool: this.active
+ });
+ }
+
+ _addEventListeners() {
+ this.eventBus._on("switchcursortool", evt => {
+ this.switchTool(evt.tool);
+ });
+
+ this.eventBus._on("presentationmodechanged", evt => {
+ if (evt.switchInProgress) {
+ return;
+ }
+
+ let previouslyActive;
+
+ if (evt.active) {
+ previouslyActive = this.active;
+ this.switchTool(CursorTool.SELECT);
+ this.activeBeforePresentationMode = previouslyActive;
+ } else {
+ previouslyActive = this.activeBeforePresentationMode;
+ this.activeBeforePresentationMode = null;
+ this.switchTool(previouslyActive);
+ }
+ });
+ }
+
+}
+
+exports.PDFCursorTools = PDFCursorTools;
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.GrabToPan = GrabToPan;
+
+function GrabToPan(options) {
+ this.element = options.element;
+ this.document = options.element.ownerDocument;
+
+ if (typeof options.ignoreTarget === "function") {
+ this.ignoreTarget = options.ignoreTarget;
+ }
+
+ this.onActiveChanged = options.onActiveChanged;
+ this.activate = this.activate.bind(this);
+ this.deactivate = this.deactivate.bind(this);
+ this.toggle = this.toggle.bind(this);
+ this._onmousedown = this._onmousedown.bind(this);
+ this._onmousemove = this._onmousemove.bind(this);
+ this._endPan = this._endPan.bind(this);
+ const overlay = this.overlay = document.createElement("div");
+ overlay.className = "grab-to-pan-grabbing";
+}
+
+GrabToPan.prototype = {
+ CSS_CLASS_GRAB: "grab-to-pan-grab",
+ activate: function GrabToPan_activate() {
+ if (!this.active) {
+ this.active = true;
+ this.element.addEventListener("mousedown", this._onmousedown, true);
+ this.element.classList.add(this.CSS_CLASS_GRAB);
+
+ if (this.onActiveChanged) {
+ this.onActiveChanged(true);
+ }
+ }
+ },
+ deactivate: function GrabToPan_deactivate() {
+ if (this.active) {
+ this.active = false;
+ this.element.removeEventListener("mousedown", this._onmousedown, true);
+
+ this._endPan();
+
+ this.element.classList.remove(this.CSS_CLASS_GRAB);
+
+ if (this.onActiveChanged) {
+ this.onActiveChanged(false);
+ }
+ }
+ },
+ toggle: function GrabToPan_toggle() {
+ if (this.active) {
+ this.deactivate();
+ } else {
+ this.activate();
+ }
+ },
+ ignoreTarget: function GrabToPan_ignoreTarget(node) {
+ return node[matchesSelector]("a[href], a[href] *, input, textarea, button, button *, select, option");
+ },
+ _onmousedown: function GrabToPan__onmousedown(event) {
+ if (event.button !== 0 || this.ignoreTarget(event.target)) {
+ return;
+ }
+
+ if (event.originalTarget) {
+ try {
+ event.originalTarget.tagName;
+ } catch (e) {
+ return;
+ }
+ }
+
+ this.scrollLeftStart = this.element.scrollLeft;
+ this.scrollTopStart = this.element.scrollTop;
+ this.clientXStart = event.clientX;
+ this.clientYStart = event.clientY;
+ this.document.addEventListener("mousemove", this._onmousemove, true);
+ this.document.addEventListener("mouseup", this._endPan, true);
+ this.element.addEventListener("scroll", this._endPan, true);
+ event.preventDefault();
+ event.stopPropagation();
+ const focusedElement = document.activeElement;
+
+ if (focusedElement && !focusedElement.contains(event.target)) {
+ focusedElement.blur();
+ }
+ },
+ _onmousemove: function GrabToPan__onmousemove(event) {
+ this.element.removeEventListener("scroll", this._endPan, true);
+
+ if (isLeftMouseReleased(event)) {
+ this._endPan();
+
+ return;
+ }
+
+ const xDiff = event.clientX - this.clientXStart;
+ const yDiff = event.clientY - this.clientYStart;
+ const scrollTop = this.scrollTopStart - yDiff;
+ const scrollLeft = this.scrollLeftStart - xDiff;
+
+ if (this.element.scrollTo) {
+ this.element.scrollTo({
+ top: scrollTop,
+ left: scrollLeft,
+ behavior: "instant"
+ });
+ } else {
+ this.element.scrollTop = scrollTop;
+ this.element.scrollLeft = scrollLeft;
+ }
+
+ if (!this.overlay.parentNode) {
+ document.body.appendChild(this.overlay);
+ }
+ },
+ _endPan: function GrabToPan__endPan() {
+ this.element.removeEventListener("scroll", this._endPan, true);
+ this.document.removeEventListener("mousemove", this._onmousemove, true);
+ this.document.removeEventListener("mouseup", this._endPan, true);
+ this.overlay.remove();
+ }
+};
+let matchesSelector;
+["webkitM", "mozM", "msM", "oM", "m"].some(function (prefix) {
+ let name = prefix + "atches";
+
+ if (name in document.documentElement) {
+ matchesSelector = name;
+ }
+
+ name += "Selector";
+
+ if (name in document.documentElement) {
+ matchesSelector = name;
+ }
+
+ return matchesSelector;
+});
+const isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9;
+const chrome = window.chrome;
+const isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app);
+const isSafari6plus = /Apple/.test(navigator.vendor) && /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent);
+
+function isLeftMouseReleased(event) {
+ if ("buttons" in event && isNotIEorIsIE10plus) {
+ return !(event.buttons & 1);
+ }
+
+ if (isChrome15OrOpera15plus || isSafari6plus) {
+ return event.which === 0;
+ }
+
+ return false;
+}
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFRenderingQueue = exports.RenderingStates = void 0;
+const CLEANUP_TIMEOUT = 30000;
+const RenderingStates = {
+ INITIAL: 0,
+ RUNNING: 1,
+ PAUSED: 2,
+ FINISHED: 3
+};
+exports.RenderingStates = RenderingStates;
+
+class PDFRenderingQueue {
+ constructor() {
+ this.pdfViewer = null;
+ this.pdfThumbnailViewer = null;
+ this.onIdle = null;
+ this.highestPriorityPage = null;
+ this.idleTimeout = null;
+ this.printing = false;
+ this.isThumbnailViewEnabled = false;
+ }
+
+ setViewer(pdfViewer) {
+ this.pdfViewer = pdfViewer;
+ }
+
+ setThumbnailViewer(pdfThumbnailViewer) {
+ this.pdfThumbnailViewer = pdfThumbnailViewer;
+ }
+
+ isHighestPriority(view) {
+ return this.highestPriorityPage === view.renderingId;
+ }
+
+ renderHighestPriority(currentlyVisiblePages) {
+ if (this.idleTimeout) {
+ clearTimeout(this.idleTimeout);
+ this.idleTimeout = null;
+ }
+
+ if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {
+ return;
+ }
+
+ if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {
+ if (this.pdfThumbnailViewer.forceRendering()) {
+ return;
+ }
+ }
+
+ if (this.printing) {
+ return;
+ }
+
+ if (this.onIdle) {
+ this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);
+ }
+ }
+
+ getHighestPriority(visible, views, scrolledDown) {
+ const visibleViews = visible.views;
+ const numVisible = visibleViews.length;
+
+ if (numVisible === 0) {
+ return null;
+ }
+
+ for (let i = 0; i < numVisible; ++i) {
+ const view = visibleViews[i].view;
+
+ if (!this.isViewFinished(view)) {
+ return view;
+ }
+ }
+
+ if (scrolledDown) {
+ const nextPageIndex = visible.last.id;
+
+ if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {
+ return views[nextPageIndex];
+ }
+ } else {
+ const previousPageIndex = visible.first.id - 2;
+
+ if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) {
+ return views[previousPageIndex];
+ }
+ }
+
+ return null;
+ }
+
+ isViewFinished(view) {
+ return view.renderingState === RenderingStates.FINISHED;
+ }
+
+ renderView(view) {
+ switch (view.renderingState) {
+ case RenderingStates.FINISHED:
+ return false;
+
+ case RenderingStates.PAUSED:
+ this.highestPriorityPage = view.renderingId;
+ view.resume();
+ break;
+
+ case RenderingStates.RUNNING:
+ this.highestPriorityPage = view.renderingId;
+ break;
+
+ case RenderingStates.INITIAL:
+ this.highestPriorityPage = view.renderingId;
+ view.draw().finally(() => {
+ this.renderHighestPriority();
+ }).catch(reason => {
+ console.error(`renderView: "${reason}"`);
+ });
+ break;
+ }
+
+ return true;
+ }
+
+}
+
+exports.PDFRenderingQueue = PDFRenderingQueue;
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFSidebar = exports.SidebarView = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+const UI_NOTIFICATION_CLASS = "pdfSidebarNotification";
+const SidebarView = {
+ UNKNOWN: -1,
+ NONE: 0,
+ THUMBS: 1,
+ OUTLINE: 2,
+ ATTACHMENTS: 3,
+ LAYERS: 4
+};
+exports.SidebarView = SidebarView;
+
+class PDFSidebar {
+ constructor({
+ elements,
+ pdfViewer,
+ pdfThumbnailViewer,
+ eventBus,
+ l10n = _ui_utils.NullL10n,
+ disableNotification = false
+ }) {
+ this.isOpen = false;
+ this.active = SidebarView.THUMBS;
+ this.isInitialViewSet = false;
+ this.onToggled = null;
+ this.pdfViewer = pdfViewer;
+ this.pdfThumbnailViewer = pdfThumbnailViewer;
+ this.outerContainer = elements.outerContainer;
+ this.viewerContainer = elements.viewerContainer;
+ this.toggleButton = elements.toggleButton;
+ this.thumbnailButton = elements.thumbnailButton;
+ this.outlineButton = elements.outlineButton;
+ this.attachmentsButton = elements.attachmentsButton;
+ this.thumbnailView = elements.thumbnailView;
+ this.outlineView = elements.outlineView;
+ this.attachmentsView = elements.attachmentsView;
+ this.eventBus = eventBus;
+ this.l10n = l10n;
+ this._disableNotification = disableNotification;
+
+ this._addEventListeners();
+ }
+
+ reset() {
+ this.isInitialViewSet = false;
+
+ this._hideUINotification(null);
+
+ this.switchView(SidebarView.THUMBS);
+ this.outlineButton.disabled = false;
+ this.attachmentsButton.disabled = false;
+ }
+
+ get visibleView() {
+ return this.isOpen ? this.active : SidebarView.NONE;
+ }
+
+ get isThumbnailViewVisible() {
+ return this.isOpen && this.active === SidebarView.THUMBS;
+ }
+
+ get isOutlineViewVisible() {
+ return this.isOpen && this.active === SidebarView.OUTLINE;
+ }
+
+ get isAttachmentsViewVisible() {
+ return this.isOpen && this.active === SidebarView.ATTACHMENTS;
+ }
+
+ setInitialView(view = SidebarView.NONE) {
+ if (this.isInitialViewSet) {
+ return;
+ }
+
+ this.isInitialViewSet = true;
+
+ if (view === SidebarView.NONE || view === SidebarView.UNKNOWN) {
+ this._dispatchEvent();
+
+ return;
+ }
+
+ if (!this._switchView(view, true)) {
+ this._dispatchEvent();
+ }
+ }
+
+ switchView(view, forceOpen = false) {
+ this._switchView(view, forceOpen);
+ }
+
+ _switchView(view, forceOpen = false) {
+ const isViewChanged = view !== this.active;
+ let shouldForceRendering = false;
+
+ switch (view) {
+ case SidebarView.NONE:
+ if (this.isOpen) {
+ this.close();
+ return true;
+ }
+
+ return false;
+
+ case SidebarView.THUMBS:
+ if (this.isOpen && isViewChanged) {
+ shouldForceRendering = true;
+ }
+
+ break;
+
+ case SidebarView.OUTLINE:
+ if (this.outlineButton.disabled) {
+ return false;
+ }
+
+ break;
+
+ case SidebarView.ATTACHMENTS:
+ if (this.attachmentsButton.disabled) {
+ return false;
+ }
+
+ break;
+
+ default:
+ console.error(`PDFSidebar._switchView: "${view}" is not a valid view.`);
+ return false;
+ }
+
+ this.active = view;
+ this.thumbnailButton.classList.toggle("toggled", view === SidebarView.THUMBS);
+ this.outlineButton.classList.toggle("toggled", view === SidebarView.OUTLINE);
+ this.attachmentsButton.classList.toggle("toggled", view === SidebarView.ATTACHMENTS);
+ this.thumbnailView.classList.toggle("hidden", view !== SidebarView.THUMBS);
+ this.outlineView.classList.toggle("hidden", view !== SidebarView.OUTLINE);
+ this.attachmentsView.classList.toggle("hidden", view !== SidebarView.ATTACHMENTS);
+
+ if (forceOpen && !this.isOpen) {
+ this.open();
+ return true;
+ }
+
+ if (shouldForceRendering) {
+ this._updateThumbnailViewer();
+
+ this._forceRendering();
+ }
+
+ if (isViewChanged) {
+ this._dispatchEvent();
+ }
+
+ this._hideUINotification(this.active);
+
+ return isViewChanged;
+ }
+
+ open() {
+ if (this.isOpen) {
+ return;
+ }
+
+ this.isOpen = true;
+ this.toggleButton.classList.add("toggled");
+ this.outerContainer.classList.add("sidebarMoving", "sidebarOpen");
+
+ if (this.active === SidebarView.THUMBS) {
+ this._updateThumbnailViewer();
+ }
+
+ this._forceRendering();
+
+ this._dispatchEvent();
+
+ this._hideUINotification(this.active);
+ }
+
+ close() {
+ if (!this.isOpen) {
+ return;
+ }
+
+ this.isOpen = false;
+ this.toggleButton.classList.remove("toggled");
+ this.outerContainer.classList.add("sidebarMoving");
+ this.outerContainer.classList.remove("sidebarOpen");
+
+ this._forceRendering();
+
+ this._dispatchEvent();
+ }
+
+ toggle() {
+ if (this.isOpen) {
+ this.close();
+ } else {
+ this.open();
+ }
+ }
+
+ _dispatchEvent() {
+ this.eventBus.dispatch("sidebarviewchanged", {
+ source: this,
+ view: this.visibleView
+ });
+ }
+
+ _forceRendering() {
+ if (this.onToggled) {
+ this.onToggled();
+ } else {
+ this.pdfViewer.forceRendering();
+ this.pdfThumbnailViewer.forceRendering();
+ }
+ }
+
+ _updateThumbnailViewer() {
+ const {
+ pdfViewer,
+ pdfThumbnailViewer
+ } = this;
+ const pagesCount = pdfViewer.pagesCount;
+
+ for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) {
+ const pageView = pdfViewer.getPageView(pageIndex);
+
+ if (pageView && pageView.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) {
+ const thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);
+ thumbnailView.setImage(pageView);
+ }
+ }
+
+ pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);
+ }
+
+ _showUINotification(view) {
+ if (this._disableNotification) {
+ return;
+ }
+
+ this.l10n.get("toggle_sidebar_notification.title", null, "Toggle Sidebar (document contains outline/attachments)").then(msg => {
+ this.toggleButton.title = msg;
+ });
+
+ if (!this.isOpen) {
+ this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);
+ } else if (view === this.active) {
+ return;
+ }
+
+ switch (view) {
+ case SidebarView.OUTLINE:
+ this.outlineButton.classList.add(UI_NOTIFICATION_CLASS);
+ break;
+
+ case SidebarView.ATTACHMENTS:
+ this.attachmentsButton.classList.add(UI_NOTIFICATION_CLASS);
+ break;
+ }
+ }
+
+ _hideUINotification(view) {
+ if (this._disableNotification) {
+ return;
+ }
+
+ const removeNotification = sidebarView => {
+ switch (sidebarView) {
+ case SidebarView.OUTLINE:
+ this.outlineButton.classList.remove(UI_NOTIFICATION_CLASS);
+ break;
+
+ case SidebarView.ATTACHMENTS:
+ this.attachmentsButton.classList.remove(UI_NOTIFICATION_CLASS);
+ break;
+ }
+ };
+
+ if (!this.isOpen && view !== null) {
+ return;
+ }
+
+ this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);
+
+ if (view !== null) {
+ removeNotification(view);
+ return;
+ }
+
+ for (view in SidebarView) {
+ removeNotification(SidebarView[view]);
+ }
+
+ this.l10n.get("toggle_sidebar.title", null, "Toggle Sidebar").then(msg => {
+ this.toggleButton.title = msg;
+ });
+ }
+
+ _addEventListeners() {
+ this.viewerContainer.addEventListener("transitionend", evt => {
+ if (evt.target === this.viewerContainer) {
+ this.outerContainer.classList.remove("sidebarMoving");
+ }
+ });
+ this.toggleButton.addEventListener("click", () => {
+ this.toggle();
+ });
+ this.thumbnailButton.addEventListener("click", () => {
+ this.switchView(SidebarView.THUMBS);
+ });
+ this.outlineButton.addEventListener("click", () => {
+ this.switchView(SidebarView.OUTLINE);
+ });
+ this.outlineButton.addEventListener("dblclick", () => {
+ this.eventBus.dispatch("toggleoutlinetree", {
+ source: this
+ });
+ });
+ this.attachmentsButton.addEventListener("click", () => {
+ this.switchView(SidebarView.ATTACHMENTS);
+ });
+
+ this.eventBus._on("outlineloaded", evt => {
+ const outlineCount = evt.outlineCount;
+ this.outlineButton.disabled = !outlineCount;
+
+ if (outlineCount) {
+ this._showUINotification(SidebarView.OUTLINE);
+ } else if (this.active === SidebarView.OUTLINE) {
+ this.switchView(SidebarView.THUMBS);
+ }
+ });
+
+ this.eventBus._on("attachmentsloaded", evt => {
+ if (evt.attachmentsCount) {
+ this.attachmentsButton.disabled = false;
+
+ this._showUINotification(SidebarView.ATTACHMENTS);
+
+ return;
+ }
+
+ Promise.resolve().then(() => {
+ if (this.attachmentsView.hasChildNodes()) {
+ return;
+ }
+
+ this.attachmentsButton.disabled = true;
+
+ if (this.active === SidebarView.ATTACHMENTS) {
+ this.switchView(SidebarView.THUMBS);
+ }
+ });
+ });
+
+ this.eventBus._on("presentationmodechanged", evt => {
+ if (!evt.active && !evt.switchInProgress && this.isThumbnailViewVisible) {
+ this._updateThumbnailViewer();
+ }
+ });
+ }
+
+}
+
+exports.PDFSidebar = PDFSidebar;
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.OverlayManager = void 0;
+
+class OverlayManager {
+ constructor() {
+ this._overlays = {};
+ this._active = null;
+ this._keyDownBound = this._keyDown.bind(this);
+ }
+
+ get active() {
+ return this._active;
+ }
+
+ async register(name, element, callerCloseMethod = null, canForceClose = false) {
+ let container;
+
+ if (!name || !element || !(container = element.parentNode)) {
+ throw new Error("Not enough parameters.");
+ } else if (this._overlays[name]) {
+ throw new Error("The overlay is already registered.");
+ }
+
+ this._overlays[name] = {
+ element,
+ container,
+ callerCloseMethod,
+ canForceClose
+ };
+ }
+
+ async unregister(name) {
+ if (!this._overlays[name]) {
+ throw new Error("The overlay does not exist.");
+ } else if (this._active === name) {
+ throw new Error("The overlay cannot be removed while it is active.");
+ }
+
+ delete this._overlays[name];
+ }
+
+ async open(name) {
+ if (!this._overlays[name]) {
+ throw new Error("The overlay does not exist.");
+ } else if (this._active) {
+ if (this._overlays[name].canForceClose) {
+ this._closeThroughCaller();
+ } else if (this._active === name) {
+ throw new Error("The overlay is already active.");
+ } else {
+ throw new Error("Another overlay is currently active.");
+ }
+ }
+
+ this._active = name;
+
+ this._overlays[this._active].element.classList.remove("hidden");
+
+ this._overlays[this._active].container.classList.remove("hidden");
+
+ window.addEventListener("keydown", this._keyDownBound);
+ }
+
+ async close(name) {
+ if (!this._overlays[name]) {
+ throw new Error("The overlay does not exist.");
+ } else if (!this._active) {
+ throw new Error("The overlay is currently not active.");
+ } else if (this._active !== name) {
+ throw new Error("Another overlay is currently active.");
+ }
+
+ this._overlays[this._active].container.classList.add("hidden");
+
+ this._overlays[this._active].element.classList.add("hidden");
+
+ this._active = null;
+ window.removeEventListener("keydown", this._keyDownBound);
+ }
+
+ _keyDown(evt) {
+ if (this._active && evt.keyCode === 27) {
+ this._closeThroughCaller();
+
+ evt.preventDefault();
+ }
+ }
+
+ _closeThroughCaller() {
+ if (this._overlays[this._active].callerCloseMethod) {
+ this._overlays[this._active].callerCloseMethod();
+ }
+
+ if (this._active) {
+ this.close(this._active);
+ }
+ }
+
+}
+
+exports.OverlayManager = OverlayManager;
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PasswordPrompt = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PasswordPrompt {
+ constructor(options, overlayManager, l10n = _ui_utils.NullL10n) {
+ this.overlayName = options.overlayName;
+ this.container = options.container;
+ this.label = options.label;
+ this.input = options.input;
+ this.submitButton = options.submitButton;
+ this.cancelButton = options.cancelButton;
+ this.overlayManager = overlayManager;
+ this.l10n = l10n;
+ this.updateCallback = null;
+ this.reason = null;
+ this.submitButton.addEventListener("click", this.verify.bind(this));
+ this.cancelButton.addEventListener("click", this.close.bind(this));
+ this.input.addEventListener("keydown", e => {
+ if (e.keyCode === 13) {
+ this.verify();
+ }
+ });
+ this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true);
+ }
+
+ open() {
+ this.overlayManager.open(this.overlayName).then(() => {
+ this.input.focus();
+ let promptString;
+
+ if (this.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) {
+ promptString = this.l10n.get("password_invalid", null, "Invalid password. Please try again.");
+ } else {
+ promptString = this.l10n.get("password_label", null, "Enter the password to open this PDF file.");
+ }
+
+ promptString.then(msg => {
+ this.label.textContent = msg;
+ });
+ });
+ }
+
+ close() {
+ this.overlayManager.close(this.overlayName).then(() => {
+ this.input.value = "";
+ });
+ }
+
+ verify() {
+ const password = this.input.value;
+
+ if (password && password.length > 0) {
+ this.close();
+ this.updateCallback(password);
+ }
+ }
+
+ setUpdateCallback(updateCallback, reason) {
+ this.updateCallback = updateCallback;
+ this.reason = reason;
+ }
+
+}
+
+exports.PasswordPrompt = PasswordPrompt;
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFAttachmentViewer = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PDFAttachmentViewer {
+ constructor({
+ container,
+ eventBus,
+ downloadManager
+ }) {
+ this.container = container;
+ this.eventBus = eventBus;
+ this.downloadManager = downloadManager;
+ this.reset();
+
+ this.eventBus._on("fileattachmentannotation", this._appendAttachment.bind(this));
+ }
+
+ reset(keepRenderedCapability = false) {
+ this.attachments = null;
+ this.container.textContent = "";
+
+ if (!keepRenderedCapability) {
+ this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)();
+ }
+ }
+
+ _dispatchEvent(attachmentsCount) {
+ this._renderedCapability.resolve();
+
+ this.eventBus.dispatch("attachmentsloaded", {
+ source: this,
+ attachmentsCount
+ });
+ }
+
+ _bindPdfLink(button, content, filename) {
+ let blobUrl;
+
+ button.onclick = () => {
+ if (!blobUrl) {
+ blobUrl = URL.createObjectURL(new Blob([content], {
+ type: "application/pdf"
+ }));
+ }
+
+ let viewerUrl;
+ viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
+
+ try {
+ window.open(viewerUrl);
+ } catch (ex) {
+ console.error(`_bindPdfLink: ${ex}`);
+ URL.revokeObjectURL(blobUrl);
+ blobUrl = null;
+ this.downloadManager.downloadData(content, filename, "application/pdf");
+ }
+
+ return false;
+ };
+ }
+
+ _bindLink(button, content, filename) {
+ button.onclick = () => {
+ this.downloadManager.downloadData(content, filename, "");
+ return false;
+ };
+ }
+
+ render({
+ attachments,
+ keepRenderedCapability = false
+ }) {
+ let attachmentsCount = 0;
+
+ if (this.attachments) {
+ this.reset(keepRenderedCapability === true);
+ }
+
+ this.attachments = attachments || null;
+
+ if (!attachments) {
+ this._dispatchEvent(attachmentsCount);
+
+ return;
+ }
+
+ const names = Object.keys(attachments).sort(function (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase());
+ });
+ attachmentsCount = names.length;
+
+ for (let i = 0; i < attachmentsCount; i++) {
+ const item = attachments[names[i]];
+ const filename = (0, _pdfjsLib.removeNullCharacters)((0, _pdfjsLib.getFilenameFromUrl)(item.filename));
+ const div = document.createElement("div");
+ div.className = "attachmentsItem";
+ const button = document.createElement("button");
+ button.textContent = filename;
+
+ if (/\.pdf$/i.test(filename) && !this.downloadManager.disableCreateObjectURL) {
+ this._bindPdfLink(button, item.content, filename);
+ } else {
+ this._bindLink(button, item.content, filename);
+ }
+
+ div.appendChild(button);
+ this.container.appendChild(div);
+ }
+
+ this._dispatchEvent(attachmentsCount);
+ }
+
+ _appendAttachment({
+ id,
+ filename,
+ content
+ }) {
+ this._renderedCapability.promise.then(() => {
+ let attachments = this.attachments;
+
+ if (!attachments) {
+ attachments = Object.create(null);
+ } else {
+ for (const name in attachments) {
+ if (id === name) {
+ return;
+ }
+ }
+ }
+
+ attachments[id] = {
+ filename,
+ content
+ };
+ this.render({
+ attachments,
+ keepRenderedCapability: true
+ });
+ });
+ }
+
+}
+
+exports.PDFAttachmentViewer = PDFAttachmentViewer;
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFDocumentProperties = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _ui_utils = __webpack_require__(2);
+
+const DEFAULT_FIELD_CONTENT = "-";
+const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"];
+const US_PAGE_NAMES = {
+ "8.5x11": "Letter",
+ "8.5x14": "Legal"
+};
+const METRIC_PAGE_NAMES = {
+ "297x420": "A3",
+ "210x297": "A4"
+};
+
+function getPageName(size, isPortrait, pageNames) {
+ const width = isPortrait ? size.width : size.height;
+ const height = isPortrait ? size.height : size.width;
+ return pageNames[`${width}x${height}`];
+}
+
+class PDFDocumentProperties {
+ constructor({
+ overlayName,
+ fields,
+ container,
+ closeButton
+ }, overlayManager, eventBus, l10n = _ui_utils.NullL10n) {
+ this.overlayName = overlayName;
+ this.fields = fields;
+ this.container = container;
+ this.overlayManager = overlayManager;
+ this.l10n = l10n;
+
+ this._reset();
+
+ closeButton.addEventListener("click", this.close.bind(this));
+ this.overlayManager.register(this.overlayName, this.container, this.close.bind(this));
+
+ eventBus._on("pagechanging", evt => {
+ this._currentPageNumber = evt.pageNumber;
+ });
+
+ eventBus._on("rotationchanging", evt => {
+ this._pagesRotation = evt.pagesRotation;
+ });
+
+ this._isNonMetricLocale = true;
+ l10n.getLanguage().then(locale => {
+ this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);
+ });
+ }
+
+ open() {
+ const freezeFieldData = data => {
+ Object.defineProperty(this, "fieldData", {
+ value: Object.freeze(data),
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+ };
+
+ Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]).then(() => {
+ const currentPageNumber = this._currentPageNumber;
+ const pagesRotation = this._pagesRotation;
+
+ if (this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === this.fieldData._pagesRotation) {
+ this._updateUI();
+
+ return;
+ }
+
+ this.pdfDocument.getMetadata().then(({
+ info,
+ metadata,
+ contentDispositionFilename
+ }) => {
+ return Promise.all([info, metadata, contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(this.maybeFileSize), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
+ return this._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);
+ }), this._parseLinearization(info.IsLinearized)]);
+ }).then(([info, metadata, fileName, fileSize, creationDate, modDate, pageSize, isLinearized]) => {
+ freezeFieldData({
+ fileName,
+ fileSize,
+ title: info.Title,
+ author: info.Author,
+ subject: info.Subject,
+ keywords: info.Keywords,
+ creationDate,
+ modificationDate: modDate,
+ creator: info.Creator,
+ producer: info.Producer,
+ version: info.PDFFormatVersion,
+ pageCount: this.pdfDocument.numPages,
+ pageSize,
+ linearized: isLinearized,
+ _currentPageNumber: currentPageNumber,
+ _pagesRotation: pagesRotation
+ });
+
+ this._updateUI();
+
+ return this.pdfDocument.getDownloadInfo();
+ }).then(({
+ length
+ }) => {
+ this.maybeFileSize = length;
+ return this._parseFileSize(length);
+ }).then(fileSize => {
+ if (fileSize === this.fieldData.fileSize) {
+ return;
+ }
+
+ const data = Object.assign(Object.create(null), this.fieldData);
+ data.fileSize = fileSize;
+ freezeFieldData(data);
+
+ this._updateUI();
+ });
+ });
+ }
+
+ close() {
+ this.overlayManager.close(this.overlayName);
+ }
+
+ setDocument(pdfDocument, url = null) {
+ if (this.pdfDocument) {
+ this._reset();
+
+ this._updateUI(true);
+ }
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ this.pdfDocument = pdfDocument;
+ this.url = url;
+
+ this._dataAvailableCapability.resolve();
+ }
+
+ setFileSize(fileSize) {
+ if (Number.isInteger(fileSize) && fileSize > 0) {
+ this.maybeFileSize = fileSize;
+ }
+ }
+
+ _reset() {
+ this.pdfDocument = null;
+ this.url = null;
+ this.maybeFileSize = 0;
+ delete this.fieldData;
+ this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._currentPageNumber = 1;
+ this._pagesRotation = 0;
+ }
+
+ _updateUI(reset = false) {
+ if (reset || !this.fieldData) {
+ for (const id in this.fields) {
+ this.fields[id].textContent = DEFAULT_FIELD_CONTENT;
+ }
+
+ return;
+ }
+
+ if (this.overlayManager.active !== this.overlayName) {
+ return;
+ }
+
+ for (const id in this.fields) {
+ const content = this.fieldData[id];
+ this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;
+ }
+ }
+
+ async _parseFileSize(fileSize = 0) {
+ const kb = fileSize / 1024;
+
+ if (!kb) {
+ return undefined;
+ } else if (kb < 1024) {
+ return this.l10n.get("document_properties_kb", {
+ size_kb: (+kb.toPrecision(3)).toLocaleString(),
+ size_b: fileSize.toLocaleString()
+ }, "{{size_kb}} KB ({{size_b}} bytes)");
+ }
+
+ return this.l10n.get("document_properties_mb", {
+ size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),
+ size_b: fileSize.toLocaleString()
+ }, "{{size_mb}} MB ({{size_b}} bytes)");
+ }
+
+ async _parsePageSize(pageSizeInches, pagesRotation) {
+ if (!pageSizeInches) {
+ return undefined;
+ }
+
+ if (pagesRotation % 180 !== 0) {
+ pageSizeInches = {
+ width: pageSizeInches.height,
+ height: pageSizeInches.width
+ };
+ }
+
+ const isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches);
+ let sizeInches = {
+ width: Math.round(pageSizeInches.width * 100) / 100,
+ height: Math.round(pageSizeInches.height * 100) / 100
+ };
+ let sizeMillimeters = {
+ width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,
+ height: Math.round(pageSizeInches.height * 25.4 * 10) / 10
+ };
+ let pageName = null;
+ let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);
+
+ if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {
+ const exactMillimeters = {
+ width: pageSizeInches.width * 25.4,
+ height: pageSizeInches.height * 25.4
+ };
+ const intMillimeters = {
+ width: Math.round(sizeMillimeters.width),
+ height: Math.round(sizeMillimeters.height)
+ };
+
+ if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) {
+ rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);
+
+ if (rawName) {
+ sizeInches = {
+ width: Math.round(intMillimeters.width / 25.4 * 100) / 100,
+ height: Math.round(intMillimeters.height / 25.4 * 100) / 100
+ };
+ sizeMillimeters = intMillimeters;
+ }
+ }
+ }
+
+ if (rawName) {
+ pageName = this.l10n.get("document_properties_page_size_name_" + rawName.toLowerCase(), null, rawName);
+ }
+
+ return Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get("document_properties_page_size_unit_" + (this._isNonMetricLocale ? "inches" : "millimeters"), null, this._isNonMetricLocale ? "in" : "mm"), pageName, this.l10n.get("document_properties_page_size_orientation_" + (isPortrait ? "portrait" : "landscape"), null, isPortrait ? "portrait" : "landscape")]).then(([{
+ width,
+ height
+ }, unit, name, orientation]) => {
+ return this.l10n.get("document_properties_page_size_dimension_" + (name ? "name_" : "") + "string", {
+ width: width.toLocaleString(),
+ height: height.toLocaleString(),
+ unit,
+ name,
+ orientation
+ }, "{{width}} × {{height}} {{unit}} (" + (name ? "{{name}}, " : "") + "{{orientation}})");
+ });
+ }
+
+ async _parseDate(inputDate) {
+ const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);
+
+ if (!dateObject) {
+ return undefined;
+ }
+
+ return this.l10n.get("document_properties_date_string", {
+ date: dateObject.toLocaleDateString(),
+ time: dateObject.toLocaleTimeString()
+ }, "{{date}}, {{time}}");
+ }
+
+ _parseLinearization(isLinearized) {
+ return this.l10n.get("document_properties_linearized_" + (isLinearized ? "yes" : "no"), null, isLinearized ? "Yes" : "No");
+ }
+
+}
+
+exports.PDFDocumentProperties = PDFDocumentProperties;
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFFindBar = void 0;
+
+var _pdf_find_controller = __webpack_require__(15);
+
+var _ui_utils = __webpack_require__(2);
+
+const MATCHES_COUNT_LIMIT = 1000;
+
+class PDFFindBar {
+ constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
+ this.opened = false;
+ this.bar = options.bar || null;
+ this.toggleButton = options.toggleButton || null;
+ this.findField = options.findField || null;
+ this.highlightAll = options.highlightAllCheckbox || null;
+ this.caseSensitive = options.caseSensitiveCheckbox || null;
+ this.entireWord = options.entireWordCheckbox || null;
+ this.findMsg = options.findMsg || null;
+ this.findResultsCount = options.findResultsCount || null;
+ this.findPreviousButton = options.findPreviousButton || null;
+ this.findNextButton = options.findNextButton || null;
+ this.eventBus = eventBus;
+ this.l10n = l10n;
+ this.toggleButton.addEventListener("click", () => {
+ this.toggle();
+ });
+ this.findField.addEventListener("input", () => {
+ this.dispatchEvent("");
+ });
+ this.bar.addEventListener("keydown", e => {
+ switch (e.keyCode) {
+ case 13:
+ if (e.target === this.findField) {
+ this.dispatchEvent("again", e.shiftKey);
+ }
+
+ break;
+
+ case 27:
+ this.close();
+ break;
+ }
+ });
+ this.findPreviousButton.addEventListener("click", () => {
+ this.dispatchEvent("again", true);
+ });
+ this.findNextButton.addEventListener("click", () => {
+ this.dispatchEvent("again", false);
+ });
+ this.highlightAll.addEventListener("click", () => {
+ this.dispatchEvent("highlightallchange");
+ });
+ this.caseSensitive.addEventListener("click", () => {
+ this.dispatchEvent("casesensitivitychange");
+ });
+ this.entireWord.addEventListener("click", () => {
+ this.dispatchEvent("entirewordchange");
+ });
+
+ this.eventBus._on("resize", this._adjustWidth.bind(this));
+ }
+
+ reset() {
+ this.updateUIState();
+ }
+
+ dispatchEvent(type, findPrev) {
+ this.eventBus.dispatch("find", {
+ source: this,
+ type,
+ query: this.findField.value,
+ phraseSearch: true,
+ caseSensitive: this.caseSensitive.checked,
+ entireWord: this.entireWord.checked,
+ highlightAll: this.highlightAll.checked,
+ findPrevious: findPrev
+ });
+ }
+
+ updateUIState(state, previous, matchesCount) {
+ let notFound = false;
+ let findMsg = "";
+ let status = "";
+
+ switch (state) {
+ case _pdf_find_controller.FindState.FOUND:
+ break;
+
+ case _pdf_find_controller.FindState.PENDING:
+ status = "pending";
+ break;
+
+ case _pdf_find_controller.FindState.NOT_FOUND:
+ findMsg = this.l10n.get("find_not_found", null, "Phrase not found");
+ notFound = true;
+ break;
+
+ case _pdf_find_controller.FindState.WRAPPED:
+ if (previous) {
+ findMsg = this.l10n.get("find_reached_top", null, "Reached top of document, continued from bottom");
+ } else {
+ findMsg = this.l10n.get("find_reached_bottom", null, "Reached end of document, continued from top");
+ }
+
+ break;
+ }
+
+ this.findField.classList.toggle("notFound", notFound);
+ this.findField.setAttribute("data-status", status);
+ Promise.resolve(findMsg).then(msg => {
+ this.findMsg.textContent = msg;
+
+ this._adjustWidth();
+ });
+ this.updateResultsCount(matchesCount);
+ }
+
+ updateResultsCount({
+ current = 0,
+ total = 0
+ } = {}) {
+ if (!this.findResultsCount) {
+ return;
+ }
+
+ const limit = MATCHES_COUNT_LIMIT;
+ let matchesCountMsg = "";
+
+ if (total > 0) {
+ if (total > limit) {
+ matchesCountMsg = this.l10n.get("find_match_count_limit", {
+ limit
+ }, "More than {{limit}} match" + (limit !== 1 ? "es" : ""));
+ } else {
+ matchesCountMsg = this.l10n.get("find_match_count", {
+ current,
+ total
+ }, "{{current}} of {{total}} match" + (total !== 1 ? "es" : ""));
+ }
+ }
+
+ Promise.resolve(matchesCountMsg).then(msg => {
+ this.findResultsCount.textContent = msg;
+ this.findResultsCount.classList.toggle("hidden", !total);
+
+ this._adjustWidth();
+ });
+ }
+
+ open() {
+ if (!this.opened) {
+ this.opened = true;
+ this.toggleButton.classList.add("toggled");
+ this.bar.classList.remove("hidden");
+ }
+
+ this.findField.select();
+ this.findField.focus();
+
+ this._adjustWidth();
+ }
+
+ close() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.opened = false;
+ this.toggleButton.classList.remove("toggled");
+ this.bar.classList.add("hidden");
+ this.eventBus.dispatch("findbarclose", {
+ source: this
+ });
+ }
+
+ toggle() {
+ if (this.opened) {
+ this.close();
+ } else {
+ this.open();
+ }
+ }
+
+ _adjustWidth() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.bar.classList.remove("wrapContainers");
+ const findbarHeight = this.bar.clientHeight;
+ const inputContainerHeight = this.bar.firstElementChild.clientHeight;
+
+ if (findbarHeight > inputContainerHeight) {
+ this.bar.classList.add("wrapContainers");
+ }
+ }
+
+}
+
+exports.PDFFindBar = PDFFindBar;
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFFindController = exports.FindState = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_find_utils = __webpack_require__(16);
+
+var _ui_utils = __webpack_require__(2);
+
+const FindState = {
+ FOUND: 0,
+ NOT_FOUND: 1,
+ WRAPPED: 2,
+ PENDING: 3
+};
+exports.FindState = FindState;
+const FIND_TIMEOUT = 250;
+const MATCH_SCROLL_OFFSET_TOP = -50;
+const MATCH_SCROLL_OFFSET_LEFT = -400;
+const CHARACTERS_TO_NORMALIZE = {
+ "\u2018": "'",
+ "\u2019": "'",
+ "\u201A": "'",
+ "\u201B": "'",
+ "\u201C": '"',
+ "\u201D": '"',
+ "\u201E": '"',
+ "\u201F": '"',
+ "\u00BC": "1/4",
+ "\u00BD": "1/2",
+ "\u00BE": "3/4"
+};
+let normalizationRegex = null;
+
+function normalize(text) {
+ if (!normalizationRegex) {
+ const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join("");
+ normalizationRegex = new RegExp(`[${replace}]`, "g");
+ }
+
+ return text.replace(normalizationRegex, function (ch) {
+ return CHARACTERS_TO_NORMALIZE[ch];
+ });
+}
+
+class PDFFindController {
+ constructor({
+ linkService,
+ eventBus
+ }) {
+ this._linkService = linkService;
+ this._eventBus = eventBus;
+
+ this._reset();
+
+ eventBus._on("findbarclose", this._onFindBarClose.bind(this));
+ }
+
+ get highlightMatches() {
+ return this._highlightMatches;
+ }
+
+ get pageMatches() {
+ return this._pageMatches;
+ }
+
+ get pageMatchesLength() {
+ return this._pageMatchesLength;
+ }
+
+ get selected() {
+ return this._selected;
+ }
+
+ get state() {
+ return this._state;
+ }
+
+ setDocument(pdfDocument) {
+ if (this._pdfDocument) {
+ this._reset();
+ }
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ this._pdfDocument = pdfDocument;
+
+ this._firstPageCapability.resolve();
+ }
+
+ executeCommand(cmd, state) {
+ if (!state) {
+ return;
+ }
+
+ const pdfDocument = this._pdfDocument;
+
+ if (this._state === null || this._shouldDirtyMatch(cmd, state)) {
+ this._dirtyMatch = true;
+ }
+
+ this._state = state;
+
+ if (cmd !== "findhighlightallchange") {
+ this._updateUIState(FindState.PENDING);
+ }
+
+ this._firstPageCapability.promise.then(() => {
+ if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
+ return;
+ }
+
+ this._extractText();
+
+ const findbarClosed = !this._highlightMatches;
+ const pendingTimeout = !!this._findTimeout;
+
+ if (this._findTimeout) {
+ clearTimeout(this._findTimeout);
+ this._findTimeout = null;
+ }
+
+ if (cmd === "find") {
+ this._findTimeout = setTimeout(() => {
+ this._nextMatch();
+
+ this._findTimeout = null;
+ }, FIND_TIMEOUT);
+ } else if (this._dirtyMatch) {
+ this._nextMatch();
+ } else if (cmd === "findagain") {
+ this._nextMatch();
+
+ if (findbarClosed && this._state.highlightAll) {
+ this._updateAllPages();
+ }
+ } else if (cmd === "findhighlightallchange") {
+ if (pendingTimeout) {
+ this._nextMatch();
+ } else {
+ this._highlightMatches = true;
+ }
+
+ this._updateAllPages();
+ } else {
+ this._nextMatch();
+ }
+ });
+ }
+
+ scrollMatchIntoView({
+ element = null,
+ pageIndex = -1,
+ matchIndex = -1
+ }) {
+ if (!this._scrollMatches || !element) {
+ return;
+ } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {
+ return;
+ } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {
+ return;
+ }
+
+ this._scrollMatches = false;
+ const spot = {
+ top: MATCH_SCROLL_OFFSET_TOP,
+ left: MATCH_SCROLL_OFFSET_LEFT
+ };
+ (0, _ui_utils.scrollIntoView)(element, spot, true);
+ }
+
+ _reset() {
+ this._highlightMatches = false;
+ this._scrollMatches = false;
+ this._pdfDocument = null;
+ this._pageMatches = [];
+ this._pageMatchesLength = [];
+ this._state = null;
+ this._selected = {
+ pageIdx: -1,
+ matchIdx: -1
+ };
+ this._offset = {
+ pageIdx: null,
+ matchIdx: null,
+ wrapped: false
+ };
+ this._extractTextPromises = [];
+ this._pageContents = [];
+ this._matchesCountTotal = 0;
+ this._pagesToSearch = null;
+ this._pendingFindMatches = Object.create(null);
+ this._resumePageIdx = null;
+ this._dirtyMatch = false;
+ clearTimeout(this._findTimeout);
+ this._findTimeout = null;
+ this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
+ }
+
+ get _query() {
+ if (this._state.query !== this._rawQuery) {
+ this._rawQuery = this._state.query;
+ this._normalizedQuery = normalize(this._state.query);
+ }
+
+ return this._normalizedQuery;
+ }
+
+ _shouldDirtyMatch(cmd, state) {
+ if (state.query !== this._state.query) {
+ return true;
+ }
+
+ switch (cmd) {
+ case "findagain":
+ const pageNumber = this._selected.pageIdx + 1;
+ const linkService = this._linkService;
+
+ if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) {
+ return true;
+ }
+
+ return false;
+
+ case "findhighlightallchange":
+ return false;
+ }
+
+ return true;
+ }
+
+ _prepareMatches(matchesWithLength, matches, matchesLength) {
+ function isSubTerm(currentIndex) {
+ const currentElem = matchesWithLength[currentIndex];
+ const nextElem = matchesWithLength[currentIndex + 1];
+
+ if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) {
+ currentElem.skipped = true;
+ return true;
+ }
+
+ for (let i = currentIndex - 1; i >= 0; i--) {
+ const prevElem = matchesWithLength[i];
+
+ if (prevElem.skipped) {
+ continue;
+ }
+
+ if (prevElem.match + prevElem.matchLength < currentElem.match) {
+ break;
+ }
+
+ if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) {
+ currentElem.skipped = true;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ matchesWithLength.sort(function (a, b) {
+ return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match;
+ });
+
+ for (let i = 0, len = matchesWithLength.length; i < len; i++) {
+ if (isSubTerm(i)) {
+ continue;
+ }
+
+ matches.push(matchesWithLength[i].match);
+ matchesLength.push(matchesWithLength[i].matchLength);
+ }
+ }
+
+ _isEntireWord(content, startIdx, length) {
+ if (startIdx > 0) {
+ const first = content.charCodeAt(startIdx);
+ const limit = content.charCodeAt(startIdx - 1);
+
+ if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) {
+ return false;
+ }
+ }
+
+ const endIdx = startIdx + length - 1;
+
+ if (endIdx < content.length - 1) {
+ const last = content.charCodeAt(endIdx);
+ const limit = content.charCodeAt(endIdx + 1);
+
+ if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(limit)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ _calculatePhraseMatch(query, pageIndex, pageContent, entireWord) {
+ const matches = [];
+ const queryLen = query.length;
+ let matchIdx = -queryLen;
+
+ while (true) {
+ matchIdx = pageContent.indexOf(query, matchIdx + queryLen);
+
+ if (matchIdx === -1) {
+ break;
+ }
+
+ if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {
+ continue;
+ }
+
+ matches.push(matchIdx);
+ }
+
+ this._pageMatches[pageIndex] = matches;
+ }
+
+ _calculateWordMatch(query, pageIndex, pageContent, entireWord) {
+ const matchesWithLength = [];
+ const queryArray = query.match(/\S+/g);
+
+ for (let i = 0, len = queryArray.length; i < len; i++) {
+ const subquery = queryArray[i];
+ const subqueryLen = subquery.length;
+ let matchIdx = -subqueryLen;
+
+ while (true) {
+ matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);
+
+ if (matchIdx === -1) {
+ break;
+ }
+
+ if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) {
+ continue;
+ }
+
+ matchesWithLength.push({
+ match: matchIdx,
+ matchLength: subqueryLen,
+ skipped: false
+ });
+ }
+ }
+
+ this._pageMatchesLength[pageIndex] = [];
+ this._pageMatches[pageIndex] = [];
+
+ this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], this._pageMatchesLength[pageIndex]);
+ }
+
+ _calculateMatch(pageIndex) {
+ let pageContent = this._pageContents[pageIndex];
+ let query = this._query;
+ const {
+ caseSensitive,
+ entireWord,
+ phraseSearch
+ } = this._state;
+
+ if (query.length === 0) {
+ return;
+ }
+
+ if (!caseSensitive) {
+ pageContent = pageContent.toLowerCase();
+ query = query.toLowerCase();
+ }
+
+ if (phraseSearch) {
+ this._calculatePhraseMatch(query, pageIndex, pageContent, entireWord);
+ } else {
+ this._calculateWordMatch(query, pageIndex, pageContent, entireWord);
+ }
+
+ if (this._state.highlightAll) {
+ this._updatePage(pageIndex);
+ }
+
+ if (this._resumePageIdx === pageIndex) {
+ this._resumePageIdx = null;
+
+ this._nextPageMatch();
+ }
+
+ const pageMatchesCount = this._pageMatches[pageIndex].length;
+
+ if (pageMatchesCount > 0) {
+ this._matchesCountTotal += pageMatchesCount;
+
+ this._updateUIResultsCount();
+ }
+ }
+
+ _extractText() {
+ if (this._extractTextPromises.length > 0) {
+ return;
+ }
+
+ let promise = Promise.resolve();
+
+ for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
+ const extractTextCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._extractTextPromises[i] = extractTextCapability.promise;
+ promise = promise.then(() => {
+ return this._pdfDocument.getPage(i + 1).then(pdfPage => {
+ return pdfPage.getTextContent({
+ normalizeWhitespace: true
+ });
+ }).then(textContent => {
+ const textItems = textContent.items;
+ const strBuf = [];
+
+ for (let j = 0, jj = textItems.length; j < jj; j++) {
+ strBuf.push(textItems[j].str);
+ }
+
+ this._pageContents[i] = normalize(strBuf.join(""));
+ extractTextCapability.resolve(i);
+ }, reason => {
+ console.error(`Unable to get text content for page ${i + 1}`, reason);
+ this._pageContents[i] = "";
+ extractTextCapability.resolve(i);
+ });
+ });
+ }
+ }
+
+ _updatePage(index) {
+ if (this._scrollMatches && this._selected.pageIdx === index) {
+ this._linkService.page = index + 1;
+ }
+
+ this._eventBus.dispatch("updatetextlayermatches", {
+ source: this,
+ pageIndex: index
+ });
+ }
+
+ _updateAllPages() {
+ this._eventBus.dispatch("updatetextlayermatches", {
+ source: this,
+ pageIndex: -1
+ });
+ }
+
+ _nextMatch() {
+ const previous = this._state.findPrevious;
+ const currentPageIndex = this._linkService.page - 1;
+ const numPages = this._linkService.pagesCount;
+ this._highlightMatches = true;
+
+ if (this._dirtyMatch) {
+ this._dirtyMatch = false;
+ this._selected.pageIdx = this._selected.matchIdx = -1;
+ this._offset.pageIdx = currentPageIndex;
+ this._offset.matchIdx = null;
+ this._offset.wrapped = false;
+ this._resumePageIdx = null;
+ this._pageMatches.length = 0;
+ this._pageMatchesLength.length = 0;
+ this._matchesCountTotal = 0;
+
+ this._updateAllPages();
+
+ for (let i = 0; i < numPages; i++) {
+ if (this._pendingFindMatches[i] === true) {
+ continue;
+ }
+
+ this._pendingFindMatches[i] = true;
+
+ this._extractTextPromises[i].then(pageIdx => {
+ delete this._pendingFindMatches[pageIdx];
+
+ this._calculateMatch(pageIdx);
+ });
+ }
+ }
+
+ if (this._query === "") {
+ this._updateUIState(FindState.FOUND);
+
+ return;
+ }
+
+ if (this._resumePageIdx) {
+ return;
+ }
+
+ const offset = this._offset;
+ this._pagesToSearch = numPages;
+
+ if (offset.matchIdx !== null) {
+ const numPageMatches = this._pageMatches[offset.pageIdx].length;
+
+ if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {
+ offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;
+
+ this._updateMatch(true);
+
+ return;
+ }
+
+ this._advanceOffsetPage(previous);
+ }
+
+ this._nextPageMatch();
+ }
+
+ _matchesReady(matches) {
+ const offset = this._offset;
+ const numMatches = matches.length;
+ const previous = this._state.findPrevious;
+
+ if (numMatches) {
+ offset.matchIdx = previous ? numMatches - 1 : 0;
+
+ this._updateMatch(true);
+
+ return true;
+ }
+
+ this._advanceOffsetPage(previous);
+
+ if (offset.wrapped) {
+ offset.matchIdx = null;
+
+ if (this._pagesToSearch < 0) {
+ this._updateMatch(false);
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ _nextPageMatch() {
+ if (this._resumePageIdx !== null) {
+ console.error("There can only be one pending page.");
+ }
+
+ let matches = null;
+
+ do {
+ const pageIdx = this._offset.pageIdx;
+ matches = this._pageMatches[pageIdx];
+
+ if (!matches) {
+ this._resumePageIdx = pageIdx;
+ break;
+ }
+ } while (!this._matchesReady(matches));
+ }
+
+ _advanceOffsetPage(previous) {
+ const offset = this._offset;
+ const numPages = this._linkService.pagesCount;
+ offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;
+ offset.matchIdx = null;
+ this._pagesToSearch--;
+
+ if (offset.pageIdx >= numPages || offset.pageIdx < 0) {
+ offset.pageIdx = previous ? numPages - 1 : 0;
+ offset.wrapped = true;
+ }
+ }
+
+ _updateMatch(found = false) {
+ let state = FindState.NOT_FOUND;
+ const wrapped = this._offset.wrapped;
+ this._offset.wrapped = false;
+
+ if (found) {
+ const previousPage = this._selected.pageIdx;
+ this._selected.pageIdx = this._offset.pageIdx;
+ this._selected.matchIdx = this._offset.matchIdx;
+ state = wrapped ? FindState.WRAPPED : FindState.FOUND;
+
+ if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {
+ this._updatePage(previousPage);
+ }
+ }
+
+ this._updateUIState(state, this._state.findPrevious);
+
+ if (this._selected.pageIdx !== -1) {
+ this._scrollMatches = true;
+
+ this._updatePage(this._selected.pageIdx);
+ }
+ }
+
+ _onFindBarClose(evt) {
+ const pdfDocument = this._pdfDocument;
+
+ this._firstPageCapability.promise.then(() => {
+ if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
+ return;
+ }
+
+ if (this._findTimeout) {
+ clearTimeout(this._findTimeout);
+ this._findTimeout = null;
+ }
+
+ if (this._resumePageIdx) {
+ this._resumePageIdx = null;
+ this._dirtyMatch = true;
+ }
+
+ this._updateUIState(FindState.FOUND);
+
+ this._highlightMatches = false;
+
+ this._updateAllPages();
+ });
+ }
+
+ _requestMatchesCount() {
+ const {
+ pageIdx,
+ matchIdx
+ } = this._selected;
+ let current = 0,
+ total = this._matchesCountTotal;
+
+ if (matchIdx !== -1) {
+ for (let i = 0; i < pageIdx; i++) {
+ current += this._pageMatches[i] && this._pageMatches[i].length || 0;
+ }
+
+ current += matchIdx + 1;
+ }
+
+ if (current < 1 || current > total) {
+ current = total = 0;
+ }
+
+ return {
+ current,
+ total
+ };
+ }
+
+ _updateUIResultsCount() {
+ this._eventBus.dispatch("updatefindmatchescount", {
+ source: this,
+ matchesCount: this._requestMatchesCount()
+ });
+ }
+
+ _updateUIState(state, previous) {
+ this._eventBus.dispatch("updatefindcontrolstate", {
+ source: this,
+ state,
+ previous,
+ matchesCount: this._requestMatchesCount()
+ });
+ }
+
+}
+
+exports.PDFFindController = PDFFindController;
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.getCharacterType = getCharacterType;
+exports.CharacterType = void 0;
+const CharacterType = {
+ SPACE: 0,
+ ALPHA_LETTER: 1,
+ PUNCT: 2,
+ HAN_LETTER: 3,
+ KATAKANA_LETTER: 4,
+ HIRAGANA_LETTER: 5,
+ HALFWIDTH_KATAKANA_LETTER: 6,
+ THAI_LETTER: 7
+};
+exports.CharacterType = CharacterType;
+
+function isAlphabeticalScript(charCode) {
+ return charCode < 0x2e80;
+}
+
+function isAscii(charCode) {
+ return (charCode & 0xff80) === 0;
+}
+
+function isAsciiAlpha(charCode) {
+ return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;
+}
+
+function isAsciiDigit(charCode) {
+ return charCode >= 0x30 && charCode <= 0x39;
+}
+
+function isAsciiSpace(charCode) {
+ return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;
+}
+
+function isHan(charCode) {
+ return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;
+}
+
+function isKatakana(charCode) {
+ return charCode >= 0x30a0 && charCode <= 0x30ff;
+}
+
+function isHiragana(charCode) {
+ return charCode >= 0x3040 && charCode <= 0x309f;
+}
+
+function isHalfwidthKatakana(charCode) {
+ return charCode >= 0xff60 && charCode <= 0xff9f;
+}
+
+function isThai(charCode) {
+ return (charCode & 0xff80) === 0x0e00;
+}
+
+function getCharacterType(charCode) {
+ if (isAlphabeticalScript(charCode)) {
+ if (isAscii(charCode)) {
+ if (isAsciiSpace(charCode)) {
+ return CharacterType.SPACE;
+ } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {
+ return CharacterType.ALPHA_LETTER;
+ }
+
+ return CharacterType.PUNCT;
+ } else if (isThai(charCode)) {
+ return CharacterType.THAI_LETTER;
+ } else if (charCode === 0xa0) {
+ return CharacterType.SPACE;
+ }
+
+ return CharacterType.ALPHA_LETTER;
+ }
+
+ if (isHan(charCode)) {
+ return CharacterType.HAN_LETTER;
+ } else if (isKatakana(charCode)) {
+ return CharacterType.KATAKANA_LETTER;
+ } else if (isHiragana(charCode)) {
+ return CharacterType.HIRAGANA_LETTER;
+ } else if (isHalfwidthKatakana(charCode)) {
+ return CharacterType.HALFWIDTH_KATAKANA_LETTER;
+ }
+
+ return CharacterType.ALPHA_LETTER;
+}
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isDestHashesEqual = isDestHashesEqual;
+exports.isDestArraysEqual = isDestArraysEqual;
+exports.PDFHistory = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+const HASH_CHANGE_TIMEOUT = 1000;
+const POSITION_UPDATED_THRESHOLD = 50;
+const UPDATE_VIEWAREA_TIMEOUT = 1000;
+
+function getCurrentHash() {
+ return document.location.hash;
+}
+
+class PDFHistory {
+ constructor({
+ linkService,
+ eventBus
+ }) {
+ this.linkService = linkService;
+ this.eventBus = eventBus;
+ this._initialized = false;
+ this._fingerprint = "";
+ this.reset();
+ this._boundEvents = null;
+ this._isViewerInPresentationMode = false;
+
+ this.eventBus._on("presentationmodechanged", evt => {
+ this._isViewerInPresentationMode = evt.active || evt.switchInProgress;
+ });
+
+ this.eventBus._on("pagesinit", () => {
+ this._isPagesLoaded = false;
+
+ const onPagesLoaded = evt => {
+ this.eventBus._off("pagesloaded", onPagesLoaded);
+
+ this._isPagesLoaded = !!evt.pagesCount;
+ };
+
+ this.eventBus._on("pagesloaded", onPagesLoaded);
+ });
+ }
+
+ initialize({
+ fingerprint,
+ resetHistory = false,
+ updateUrl = false
+ }) {
+ if (!fingerprint || typeof fingerprint !== "string") {
+ console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
+ return;
+ }
+
+ if (this._initialized) {
+ this.reset();
+ }
+
+ const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint;
+ this._fingerprint = fingerprint;
+ this._updateUrl = updateUrl === true;
+ this._initialized = true;
+
+ this._bindEvents();
+
+ const state = window.history.state;
+ this._popStateInProgress = false;
+ this._blockHashChange = 0;
+ this._currentHash = getCurrentHash();
+ this._numPositionUpdates = 0;
+ this._uid = this._maxUid = 0;
+ this._destination = null;
+ this._position = null;
+
+ if (!this._isValidState(state, true) || resetHistory) {
+ const {
+ hash,
+ page,
+ rotation
+ } = this._parseCurrentHash(true);
+
+ if (!hash || reInitialized || resetHistory) {
+ this._pushOrReplaceState(null, true);
+
+ return;
+ }
+
+ this._pushOrReplaceState({
+ hash,
+ page,
+ rotation
+ }, true);
+
+ return;
+ }
+
+ const destination = state.destination;
+
+ this._updateInternalState(destination, state.uid, true);
+
+ if (this._uid > this._maxUid) {
+ this._maxUid = this._uid;
+ }
+
+ if (destination.rotation !== undefined) {
+ this._initialRotation = destination.rotation;
+ }
+
+ if (destination.dest) {
+ this._initialBookmark = JSON.stringify(destination.dest);
+ this._destination.page = null;
+ } else if (destination.hash) {
+ this._initialBookmark = destination.hash;
+ } else if (destination.page) {
+ this._initialBookmark = `page=${destination.page}`;
+ }
+ }
+
+ reset() {
+ if (this._initialized) {
+ this._pageHide();
+
+ this._initialized = false;
+
+ this._unbindEvents();
+ }
+
+ if (this._updateViewareaTimeout) {
+ clearTimeout(this._updateViewareaTimeout);
+ this._updateViewareaTimeout = null;
+ }
+
+ this._initialBookmark = null;
+ this._initialRotation = null;
+ }
+
+ push({
+ namedDest = null,
+ explicitDest,
+ pageNumber
+ }) {
+ if (!this._initialized) {
+ return;
+ }
+
+ if (namedDest && typeof namedDest !== "string") {
+ console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`);
+ return;
+ } else if (!Array.isArray(explicitDest)) {
+ console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`);
+ return;
+ } else if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
+ if (pageNumber !== null || this._destination) {
+ console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`);
+ return;
+ }
+ }
+
+ const hash = namedDest || JSON.stringify(explicitDest);
+
+ if (!hash) {
+ return;
+ }
+
+ let forceReplace = false;
+
+ if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {
+ if (this._destination.page) {
+ return;
+ }
+
+ forceReplace = true;
+ }
+
+ if (this._popStateInProgress && !forceReplace) {
+ return;
+ }
+
+ this._pushOrReplaceState({
+ dest: explicitDest,
+ hash,
+ page: pageNumber,
+ rotation: this.linkService.rotation
+ }, forceReplace);
+
+ if (!this._popStateInProgress) {
+ this._popStateInProgress = true;
+ Promise.resolve().then(() => {
+ this._popStateInProgress = false;
+ });
+ }
+ }
+
+ pushCurrentPosition() {
+ if (!this._initialized || this._popStateInProgress) {
+ return;
+ }
+
+ this._tryPushCurrentPosition();
+ }
+
+ back() {
+ if (!this._initialized || this._popStateInProgress) {
+ return;
+ }
+
+ const state = window.history.state;
+
+ if (this._isValidState(state) && state.uid > 0) {
+ window.history.back();
+ }
+ }
+
+ forward() {
+ if (!this._initialized || this._popStateInProgress) {
+ return;
+ }
+
+ const state = window.history.state;
+
+ if (this._isValidState(state) && state.uid < this._maxUid) {
+ window.history.forward();
+ }
+ }
+
+ get popStateInProgress() {
+ return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);
+ }
+
+ get initialBookmark() {
+ return this._initialized ? this._initialBookmark : null;
+ }
+
+ get initialRotation() {
+ return this._initialized ? this._initialRotation : null;
+ }
+
+ _pushOrReplaceState(destination, forceReplace = false) {
+ const shouldReplace = forceReplace || !this._destination;
+ const newState = {
+ fingerprint: this._fingerprint,
+ uid: shouldReplace ? this._uid : this._uid + 1,
+ destination
+ };
+
+ this._updateInternalState(destination, newState.uid);
+
+ let newUrl;
+
+ if (this._updateUrl && destination && destination.hash) {
+ const baseUrl = document.location.href.split("#")[0];
+
+ if (!baseUrl.startsWith("file://")) {
+ newUrl = `${baseUrl}#${destination.hash}`;
+ }
+ }
+
+ if (shouldReplace) {
+ window.history.replaceState(newState, "", newUrl);
+ } else {
+ this._maxUid = this._uid;
+ window.history.pushState(newState, "", newUrl);
+ }
+ }
+
+ _tryPushCurrentPosition(temporary = false) {
+ if (!this._position) {
+ return;
+ }
+
+ let position = this._position;
+
+ if (temporary) {
+ position = Object.assign(Object.create(null), this._position);
+ position.temporary = true;
+ }
+
+ if (!this._destination) {
+ this._pushOrReplaceState(position);
+
+ return;
+ }
+
+ if (this._destination.temporary) {
+ this._pushOrReplaceState(position, true);
+
+ return;
+ }
+
+ if (this._destination.hash === position.hash) {
+ return;
+ }
+
+ if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {
+ return;
+ }
+
+ let forceReplace = false;
+
+ if (this._destination.page >= position.first && this._destination.page <= position.page) {
+ if (this._destination.dest || !this._destination.first) {
+ return;
+ }
+
+ forceReplace = true;
+ }
+
+ this._pushOrReplaceState(position, forceReplace);
+ }
+
+ _isValidState(state, checkReload = false) {
+ if (!state) {
+ return false;
+ }
+
+ if (state.fingerprint !== this._fingerprint) {
+ if (checkReload) {
+ if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) {
+ return false;
+ }
+
+ const [perfEntry] = performance.getEntriesByType("navigation");
+
+ if (!perfEntry || perfEntry.type !== "reload") {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ if (!Number.isInteger(state.uid) || state.uid < 0) {
+ return false;
+ }
+
+ if (state.destination === null || typeof state.destination !== "object") {
+ return false;
+ }
+
+ return true;
+ }
+
+ _updateInternalState(destination, uid, removeTemporary = false) {
+ if (this._updateViewareaTimeout) {
+ clearTimeout(this._updateViewareaTimeout);
+ this._updateViewareaTimeout = null;
+ }
+
+ if (removeTemporary && destination && destination.temporary) {
+ delete destination.temporary;
+ }
+
+ this._destination = destination;
+ this._uid = uid;
+ this._numPositionUpdates = 0;
+ }
+
+ _parseCurrentHash(checkNameddest = false) {
+ const hash = unescape(getCurrentHash()).substring(1);
+ const params = (0, _ui_utils.parseQueryString)(hash);
+ const nameddest = params.nameddest || "";
+ let page = params.page | 0;
+
+ if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) {
+ page = null;
+ }
+
+ return {
+ hash,
+ page,
+ rotation: this.linkService.rotation
+ };
+ }
+
+ _updateViewarea({
+ location
+ }) {
+ if (this._updateViewareaTimeout) {
+ clearTimeout(this._updateViewareaTimeout);
+ this._updateViewareaTimeout = null;
+ }
+
+ this._position = {
+ hash: this._isViewerInPresentationMode ? `page=${location.pageNumber}` : location.pdfOpenParams.substring(1),
+ page: this.linkService.page,
+ first: location.pageNumber,
+ rotation: location.rotation
+ };
+
+ if (this._popStateInProgress) {
+ return;
+ }
+
+ if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {
+ this._numPositionUpdates++;
+ }
+
+ if (UPDATE_VIEWAREA_TIMEOUT > 0) {
+ this._updateViewareaTimeout = setTimeout(() => {
+ if (!this._popStateInProgress) {
+ this._tryPushCurrentPosition(true);
+ }
+
+ this._updateViewareaTimeout = null;
+ }, UPDATE_VIEWAREA_TIMEOUT);
+ }
+ }
+
+ _popState({
+ state
+ }) {
+ const newHash = getCurrentHash(),
+ hashChanged = this._currentHash !== newHash;
+ this._currentHash = newHash;
+
+ if (!state) {
+ this._uid++;
+
+ const {
+ hash,
+ page,
+ rotation
+ } = this._parseCurrentHash();
+
+ this._pushOrReplaceState({
+ hash,
+ page,
+ rotation
+ }, true);
+
+ return;
+ }
+
+ if (!this._isValidState(state)) {
+ return;
+ }
+
+ this._popStateInProgress = true;
+
+ if (hashChanged) {
+ this._blockHashChange++;
+ (0, _ui_utils.waitOnEventOrTimeout)({
+ target: window,
+ name: "hashchange",
+ delay: HASH_CHANGE_TIMEOUT
+ }).then(() => {
+ this._blockHashChange--;
+ });
+ }
+
+ const destination = state.destination;
+
+ this._updateInternalState(destination, state.uid, true);
+
+ if (this._uid > this._maxUid) {
+ this._maxUid = this._uid;
+ }
+
+ if ((0, _ui_utils.isValidRotation)(destination.rotation)) {
+ this.linkService.rotation = destination.rotation;
+ }
+
+ if (destination.dest) {
+ this.linkService.navigateTo(destination.dest);
+ } else if (destination.hash) {
+ this.linkService.setHash(destination.hash);
+ } else if (destination.page) {
+ this.linkService.page = destination.page;
+ }
+
+ Promise.resolve().then(() => {
+ this._popStateInProgress = false;
+ });
+ }
+
+ _pageHide() {
+ if (!this._destination || this._destination.temporary) {
+ this._tryPushCurrentPosition();
+ }
+ }
+
+ _bindEvents() {
+ if (this._boundEvents) {
+ return;
+ }
+
+ this._boundEvents = {
+ updateViewarea: this._updateViewarea.bind(this),
+ popState: this._popState.bind(this),
+ pageHide: this._pageHide.bind(this)
+ };
+
+ this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea);
+
+ window.addEventListener("popstate", this._boundEvents.popState);
+ window.addEventListener("pagehide", this._boundEvents.pageHide);
+ }
+
+ _unbindEvents() {
+ if (!this._boundEvents) {
+ return;
+ }
+
+ this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea);
+
+ window.removeEventListener("popstate", this._boundEvents.popState);
+ window.removeEventListener("pagehide", this._boundEvents.pageHide);
+ this._boundEvents = null;
+ }
+
+}
+
+exports.PDFHistory = PDFHistory;
+
+function isDestHashesEqual(destHash, pushHash) {
+ if (typeof destHash !== "string" || typeof pushHash !== "string") {
+ return false;
+ }
+
+ if (destHash === pushHash) {
+ return true;
+ }
+
+ const {
+ nameddest
+ } = (0, _ui_utils.parseQueryString)(destHash);
+
+ if (nameddest === pushHash) {
+ return true;
+ }
+
+ return false;
+}
+
+function isDestArraysEqual(firstDest, secondDest) {
+ function isEntryEqual(first, second) {
+ if (typeof first !== typeof second) {
+ return false;
+ }
+
+ if (Array.isArray(first) || Array.isArray(second)) {
+ return false;
+ }
+
+ if (first !== null && typeof first === "object" && second !== null) {
+ if (Object.keys(first).length !== Object.keys(second).length) {
+ return false;
+ }
+
+ for (const key in first) {
+ if (!isEntryEqual(first[key], second[key])) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return first === second || Number.isNaN(first) && Number.isNaN(second);
+ }
+
+ if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {
+ return false;
+ }
+
+ if (firstDest.length !== secondDest.length) {
+ return false;
+ }
+
+ for (let i = 0, ii = firstDest.length; i < ii; i++) {
+ if (!isEntryEqual(firstDest[i], secondDest[i])) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.SimpleLinkService = exports.PDFLinkService = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+class PDFLinkService {
+ constructor({
+ eventBus,
+ externalLinkTarget = null,
+ externalLinkRel = null,
+ externalLinkEnabled = true,
+ ignoreDestinationZoom = false
+ } = {}) {
+ this.eventBus = eventBus;
+ this.externalLinkTarget = externalLinkTarget;
+ this.externalLinkRel = externalLinkRel;
+ this.externalLinkEnabled = externalLinkEnabled;
+ this._ignoreDestinationZoom = ignoreDestinationZoom;
+ this.baseUrl = null;
+ this.pdfDocument = null;
+ this.pdfViewer = null;
+ this.pdfHistory = null;
+ this._pagesRefCache = null;
+ }
+
+ setDocument(pdfDocument, baseUrl = null) {
+ this.baseUrl = baseUrl;
+ this.pdfDocument = pdfDocument;
+ this._pagesRefCache = Object.create(null);
+ }
+
+ setViewer(pdfViewer) {
+ this.pdfViewer = pdfViewer;
+ }
+
+ setHistory(pdfHistory) {
+ this.pdfHistory = pdfHistory;
+ }
+
+ get pagesCount() {
+ return this.pdfDocument ? this.pdfDocument.numPages : 0;
+ }
+
+ get page() {
+ return this.pdfViewer.currentPageNumber;
+ }
+
+ set page(value) {
+ this.pdfViewer.currentPageNumber = value;
+ }
+
+ get rotation() {
+ return this.pdfViewer.pagesRotation;
+ }
+
+ set rotation(value) {
+ this.pdfViewer.pagesRotation = value;
+ }
+
+ navigateTo(dest) {
+ const goToDestination = ({
+ namedDest,
+ explicitDest
+ }) => {
+ const destRef = explicitDest[0];
+ let pageNumber;
+
+ if (destRef instanceof Object) {
+ pageNumber = this._cachedPageNumber(destRef);
+
+ if (pageNumber === null) {
+ this.pdfDocument.getPageIndex(destRef).then(pageIndex => {
+ this.cachePageRef(pageIndex + 1, destRef);
+ goToDestination({
+ namedDest,
+ explicitDest
+ });
+ }).catch(() => {
+ console.error(`PDFLinkService.navigateTo: "${destRef}" is not ` + `a valid page reference, for dest="${dest}".`);
+ });
+ return;
+ }
+ } else if (Number.isInteger(destRef)) {
+ pageNumber = destRef + 1;
+ } else {
+ console.error(`PDFLinkService.navigateTo: "${destRef}" is not ` + `a valid destination reference, for dest="${dest}".`);
+ return;
+ }
+
+ if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {
+ console.error(`PDFLinkService.navigateTo: "${pageNumber}" is not ` + `a valid page number, for dest="${dest}".`);
+ return;
+ }
+
+ if (this.pdfHistory) {
+ this.pdfHistory.pushCurrentPosition();
+ this.pdfHistory.push({
+ namedDest,
+ explicitDest,
+ pageNumber
+ });
+ }
+
+ this.pdfViewer.scrollPageIntoView({
+ pageNumber,
+ destArray: explicitDest,
+ ignoreDestinationZoom: this._ignoreDestinationZoom
+ });
+ };
+
+ new Promise((resolve, reject) => {
+ if (typeof dest === "string") {
+ this.pdfDocument.getDestination(dest).then(destArray => {
+ resolve({
+ namedDest: dest,
+ explicitDest: destArray
+ });
+ });
+ return;
+ }
+
+ resolve({
+ namedDest: "",
+ explicitDest: dest
+ });
+ }).then(data => {
+ if (!Array.isArray(data.explicitDest)) {
+ console.error(`PDFLinkService.navigateTo: "${data.explicitDest}" is` + ` not a valid destination array, for dest="${dest}".`);
+ return;
+ }
+
+ goToDestination(data);
+ });
+ }
+
+ getDestinationHash(dest) {
+ if (typeof dest === "string") {
+ return this.getAnchorUrl("#" + escape(dest));
+ }
+
+ if (Array.isArray(dest)) {
+ const str = JSON.stringify(dest);
+ return this.getAnchorUrl("#" + escape(str));
+ }
+
+ return this.getAnchorUrl("");
+ }
+
+ getAnchorUrl(anchor) {
+ return (this.baseUrl || "") + anchor;
+ }
+
+ setHash(hash) {
+ let pageNumber, dest;
+
+ if (hash.includes("=")) {
+ const params = (0, _ui_utils.parseQueryString)(hash);
+
+ if ("search" in params) {
+ this.eventBus.dispatch("findfromurlhash", {
+ source: this,
+ query: params.search.replace(/"/g, ""),
+ phraseSearch: params.phrase === "true"
+ });
+ }
+
+ if ("page" in params) {
+ pageNumber = params.page | 0 || 1;
+ }
+
+ if ("zoom" in params) {
+ const zoomArgs = params.zoom.split(",");
+ const zoomArg = zoomArgs[0];
+ const zoomArgNumber = parseFloat(zoomArg);
+
+ if (!zoomArg.includes("Fit")) {
+ dest = [null, {
+ name: "XYZ"
+ }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];
+ } else {
+ if (zoomArg === "Fit" || zoomArg === "FitB") {
+ dest = [null, {
+ name: zoomArg
+ }];
+ } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") {
+ dest = [null, {
+ name: zoomArg
+ }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];
+ } else if (zoomArg === "FitR") {
+ if (zoomArgs.length !== 5) {
+ console.error('PDFLinkService.setHash: Not enough parameters for "FitR".');
+ } else {
+ dest = [null, {
+ name: zoomArg
+ }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];
+ }
+ } else {
+ console.error(`PDFLinkService.setHash: "${zoomArg}" is not ` + "a valid zoom value.");
+ }
+ }
+ }
+
+ if (dest) {
+ this.pdfViewer.scrollPageIntoView({
+ pageNumber: pageNumber || this.page,
+ destArray: dest,
+ allowNegativeOffset: true
+ });
+ } else if (pageNumber) {
+ this.page = pageNumber;
+ }
+
+ if ("pagemode" in params) {
+ this.eventBus.dispatch("pagemode", {
+ source: this,
+ mode: params.pagemode
+ });
+ }
+
+ if ("nameddest" in params) {
+ this.navigateTo(params.nameddest);
+ }
+ } else {
+ dest = unescape(hash);
+
+ try {
+ dest = JSON.parse(dest);
+
+ if (!Array.isArray(dest)) {
+ dest = dest.toString();
+ }
+ } catch (ex) {}
+
+ if (typeof dest === "string" || isValidExplicitDestination(dest)) {
+ this.navigateTo(dest);
+ return;
+ }
+
+ console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not ` + "a valid destination.");
+ }
+ }
+
+ executeNamedAction(action) {
+ switch (action) {
+ case "GoBack":
+ if (this.pdfHistory) {
+ this.pdfHistory.back();
+ }
+
+ break;
+
+ case "GoForward":
+ if (this.pdfHistory) {
+ this.pdfHistory.forward();
+ }
+
+ break;
+
+ case "NextPage":
+ if (this.page < this.pagesCount) {
+ this.page++;
+ }
+
+ break;
+
+ case "PrevPage":
+ if (this.page > 1) {
+ this.page--;
+ }
+
+ break;
+
+ case "LastPage":
+ this.page = this.pagesCount;
+ break;
+
+ case "FirstPage":
+ this.page = 1;
+ break;
+
+ default:
+ break;
+ }
+
+ this.eventBus.dispatch("namedaction", {
+ source: this,
+ action
+ });
+ }
+
+ cachePageRef(pageNum, pageRef) {
+ if (!pageRef) {
+ return;
+ }
+
+ const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
+ this._pagesRefCache[refStr] = pageNum;
+ }
+
+ _cachedPageNumber(pageRef) {
+ const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
+ return this._pagesRefCache && this._pagesRefCache[refStr] || null;
+ }
+
+ isPageVisible(pageNumber) {
+ return this.pdfViewer.isPageVisible(pageNumber);
+ }
+
+}
+
+exports.PDFLinkService = PDFLinkService;
+
+function isValidExplicitDestination(dest) {
+ if (!Array.isArray(dest)) {
+ return false;
+ }
+
+ const destLength = dest.length;
+
+ if (destLength < 2) {
+ return false;
+ }
+
+ const page = dest[0];
+
+ if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) {
+ return false;
+ }
+
+ const zoom = dest[1];
+
+ if (!(typeof zoom === "object" && typeof zoom.name === "string")) {
+ return false;
+ }
+
+ let allowNull = true;
+
+ switch (zoom.name) {
+ case "XYZ":
+ if (destLength !== 5) {
+ return false;
+ }
+
+ break;
+
+ case "Fit":
+ case "FitB":
+ return destLength === 2;
+
+ case "FitH":
+ case "FitBH":
+ case "FitV":
+ case "FitBV":
+ if (destLength !== 3) {
+ return false;
+ }
+
+ break;
+
+ case "FitR":
+ if (destLength !== 6) {
+ return false;
+ }
+
+ allowNull = false;
+ break;
+
+ default:
+ return false;
+ }
+
+ for (let i = 2; i < destLength; i++) {
+ const param = dest[i];
+
+ if (!(typeof param === "number" || allowNull && param === null)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+class SimpleLinkService {
+ constructor() {
+ this.externalLinkTarget = null;
+ this.externalLinkRel = null;
+ this.externalLinkEnabled = true;
+ this._ignoreDestinationZoom = false;
+ }
+
+ get pagesCount() {
+ return 0;
+ }
+
+ get page() {
+ return 0;
+ }
+
+ set page(value) {}
+
+ get rotation() {
+ return 0;
+ }
+
+ set rotation(value) {}
+
+ navigateTo(dest) {}
+
+ getDestinationHash(dest) {
+ return "#";
+ }
+
+ getAnchorUrl(hash) {
+ return "#";
+ }
+
+ setHash(hash) {}
+
+ executeNamedAction(action) {}
+
+ cachePageRef(pageNum, pageRef) {}
+
+ isPageVisible(pageNumber) {
+ return true;
+ }
+
+}
+
+exports.SimpleLinkService = SimpleLinkService;
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFOutlineViewer = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+const DEFAULT_TITLE = "\u2013";
+
+class PDFOutlineViewer {
+ constructor({
+ container,
+ linkService,
+ eventBus
+ }) {
+ this.container = container;
+ this.linkService = linkService;
+ this.eventBus = eventBus;
+ this.reset();
+
+ eventBus._on("toggleoutlinetree", this.toggleOutlineTree.bind(this));
+ }
+
+ reset() {
+ this.outline = null;
+ this.lastToggleIsShow = true;
+ this.container.textContent = "";
+ this.container.classList.remove("outlineWithDeepNesting");
+ }
+
+ _dispatchEvent(outlineCount) {
+ this.eventBus.dispatch("outlineloaded", {
+ source: this,
+ outlineCount
+ });
+ }
+
+ _bindLink(element, {
+ url,
+ newWindow,
+ dest
+ }) {
+ const {
+ linkService
+ } = this;
+
+ if (url) {
+ (0, _pdfjsLib.addLinkAttributes)(element, {
+ url,
+ target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget,
+ rel: linkService.externalLinkRel,
+ enabled: linkService.externalLinkEnabled
+ });
+ return;
+ }
+
+ element.href = linkService.getDestinationHash(dest);
+
+ element.onclick = () => {
+ if (dest) {
+ linkService.navigateTo(dest);
+ }
+
+ return false;
+ };
+ }
+
+ _setStyles(element, {
+ bold,
+ italic
+ }) {
+ if (bold) {
+ element.style.fontWeight = "bold";
+ }
+
+ if (italic) {
+ element.style.fontStyle = "italic";
+ }
+ }
+
+ _addToggleButton(div, {
+ count,
+ items
+ }) {
+ const toggler = document.createElement("div");
+ toggler.className = "outlineItemToggler";
+
+ if (count < 0 && Math.abs(count) === items.length) {
+ toggler.classList.add("outlineItemsHidden");
+ }
+
+ toggler.onclick = evt => {
+ evt.stopPropagation();
+ toggler.classList.toggle("outlineItemsHidden");
+
+ if (evt.shiftKey) {
+ const shouldShowAll = !toggler.classList.contains("outlineItemsHidden");
+
+ this._toggleOutlineItem(div, shouldShowAll);
+ }
+ };
+
+ div.insertBefore(toggler, div.firstChild);
+ }
+
+ _toggleOutlineItem(root, show = false) {
+ this.lastToggleIsShow = show;
+
+ for (const toggler of root.querySelectorAll(".outlineItemToggler")) {
+ toggler.classList.toggle("outlineItemsHidden", !show);
+ }
+ }
+
+ toggleOutlineTree() {
+ if (!this.outline) {
+ return;
+ }
+
+ this._toggleOutlineItem(this.container, !this.lastToggleIsShow);
+ }
+
+ render({
+ outline
+ }) {
+ let outlineCount = 0;
+
+ if (this.outline) {
+ this.reset();
+ }
+
+ this.outline = outline || null;
+
+ if (!outline) {
+ this._dispatchEvent(outlineCount);
+
+ return;
+ }
+
+ const fragment = document.createDocumentFragment();
+ const queue = [{
+ parent: fragment,
+ items: this.outline
+ }];
+ let hasAnyNesting = false;
+
+ while (queue.length > 0) {
+ const levelData = queue.shift();
+
+ for (const item of levelData.items) {
+ const div = document.createElement("div");
+ div.className = "outlineItem";
+ const element = document.createElement("a");
+
+ this._bindLink(element, item);
+
+ this._setStyles(element, item);
+
+ element.textContent = (0, _pdfjsLib.removeNullCharacters)(item.title) || DEFAULT_TITLE;
+ div.appendChild(element);
+
+ if (item.items.length > 0) {
+ hasAnyNesting = true;
+
+ this._addToggleButton(div, item);
+
+ const itemsDiv = document.createElement("div");
+ itemsDiv.className = "outlineItems";
+ div.appendChild(itemsDiv);
+ queue.push({
+ parent: itemsDiv,
+ items: item.items
+ });
+ }
+
+ levelData.parent.appendChild(div);
+ outlineCount++;
+ }
+ }
+
+ if (hasAnyNesting) {
+ this.container.classList.add("outlineWithDeepNesting");
+ this.lastToggleIsShow = fragment.querySelectorAll(".outlineItemsHidden").length === 0;
+ }
+
+ this.container.appendChild(fragment);
+
+ this._dispatchEvent(outlineCount);
+ }
+
+}
+
+exports.PDFOutlineViewer = PDFOutlineViewer;
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFPresentationMode = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+const DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500;
+const DELAY_BEFORE_HIDING_CONTROLS = 3000;
+const ACTIVE_SELECTOR = "pdfPresentationMode";
+const CONTROLS_SELECTOR = "pdfPresentationModeControls";
+const MOUSE_SCROLL_COOLDOWN_TIME = 50;
+const PAGE_SWITCH_THRESHOLD = 0.1;
+const SWIPE_MIN_DISTANCE_THRESHOLD = 50;
+const SWIPE_ANGLE_THRESHOLD = Math.PI / 6;
+
+class PDFPresentationMode {
+ constructor({
+ container,
+ pdfViewer,
+ eventBus,
+ contextMenuItems = null
+ }) {
+ this.container = container;
+ this.pdfViewer = pdfViewer;
+ this.eventBus = eventBus;
+ this.active = false;
+ this.args = null;
+ this.contextMenuOpen = false;
+ this.mouseScrollTimeStamp = 0;
+ this.mouseScrollDelta = 0;
+ this.touchSwipeState = null;
+
+ if (contextMenuItems) {
+ contextMenuItems.contextFirstPage.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("firstpage", {
+ source: this
+ });
+ });
+ contextMenuItems.contextLastPage.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("lastpage", {
+ source: this
+ });
+ });
+ contextMenuItems.contextPageRotateCw.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("rotatecw", {
+ source: this
+ });
+ });
+ contextMenuItems.contextPageRotateCcw.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("rotateccw", {
+ source: this
+ });
+ });
+ }
+ }
+
+ request() {
+ if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) {
+ return false;
+ }
+
+ this._addFullscreenChangeListeners();
+
+ this._setSwitchInProgress();
+
+ this._notifyStateChange();
+
+ if (this.container.requestFullscreen) {
+ this.container.requestFullscreen();
+ } else if (this.container.mozRequestFullScreen) {
+ this.container.mozRequestFullScreen();
+ } else if (this.container.webkitRequestFullscreen) {
+ this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
+ } else if (this.container.msRequestFullscreen) {
+ this.container.msRequestFullscreen();
+ } else {
+ return false;
+ }
+
+ this.args = {
+ page: this.pdfViewer.currentPageNumber,
+ previousScale: this.pdfViewer.currentScaleValue
+ };
+ return true;
+ }
+
+ _mouseWheel(evt) {
+ if (!this.active) {
+ return;
+ }
+
+ evt.preventDefault();
+ const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
+ const currentTime = new Date().getTime();
+ const storedTime = this.mouseScrollTimeStamp;
+
+ if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
+ return;
+ }
+
+ if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {
+ this._resetMouseScrollState();
+ }
+
+ this.mouseScrollDelta += delta;
+
+ if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {
+ const totalDelta = this.mouseScrollDelta;
+
+ this._resetMouseScrollState();
+
+ const success = totalDelta > 0 ? this._goToPreviousPage() : this._goToNextPage();
+
+ if (success) {
+ this.mouseScrollTimeStamp = currentTime;
+ }
+ }
+ }
+
+ get isFullscreen() {
+ return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement);
+ }
+
+ _goToPreviousPage() {
+ const page = this.pdfViewer.currentPageNumber;
+
+ if (page <= 1) {
+ return false;
+ }
+
+ this.pdfViewer.currentPageNumber = page - 1;
+ return true;
+ }
+
+ _goToNextPage() {
+ const page = this.pdfViewer.currentPageNumber;
+
+ if (page >= this.pdfViewer.pagesCount) {
+ return false;
+ }
+
+ this.pdfViewer.currentPageNumber = page + 1;
+ return true;
+ }
+
+ _notifyStateChange() {
+ this.eventBus.dispatch("presentationmodechanged", {
+ source: this,
+ active: this.active,
+ switchInProgress: !!this.switchInProgress
+ });
+ }
+
+ _setSwitchInProgress() {
+ if (this.switchInProgress) {
+ clearTimeout(this.switchInProgress);
+ }
+
+ this.switchInProgress = setTimeout(() => {
+ this._removeFullscreenChangeListeners();
+
+ delete this.switchInProgress;
+
+ this._notifyStateChange();
+ }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS);
+ }
+
+ _resetSwitchInProgress() {
+ if (this.switchInProgress) {
+ clearTimeout(this.switchInProgress);
+ delete this.switchInProgress;
+ }
+ }
+
+ _enter() {
+ this.active = true;
+
+ this._resetSwitchInProgress();
+
+ this._notifyStateChange();
+
+ this.container.classList.add(ACTIVE_SELECTOR);
+ setTimeout(() => {
+ this.pdfViewer.currentPageNumber = this.args.page;
+ this.pdfViewer.currentScaleValue = "page-fit";
+ }, 0);
+
+ this._addWindowListeners();
+
+ this._showControls();
+
+ this.contextMenuOpen = false;
+ this.container.setAttribute("contextmenu", "viewerContextMenu");
+ window.getSelection().removeAllRanges();
+ }
+
+ _exit() {
+ const page = this.pdfViewer.currentPageNumber;
+ this.container.classList.remove(ACTIVE_SELECTOR);
+ setTimeout(() => {
+ this.active = false;
+
+ this._removeFullscreenChangeListeners();
+
+ this._notifyStateChange();
+
+ this.pdfViewer.currentScaleValue = this.args.previousScale;
+ this.pdfViewer.currentPageNumber = page;
+ this.args = null;
+ }, 0);
+
+ this._removeWindowListeners();
+
+ this._hideControls();
+
+ this._resetMouseScrollState();
+
+ this.container.removeAttribute("contextmenu");
+ this.contextMenuOpen = false;
+ }
+
+ _mouseDown(evt) {
+ if (this.contextMenuOpen) {
+ this.contextMenuOpen = false;
+ evt.preventDefault();
+ return;
+ }
+
+ if (evt.button === 0) {
+ const isInternalLink = evt.target.href && evt.target.classList.contains("internalLink");
+
+ if (!isInternalLink) {
+ evt.preventDefault();
+
+ if (evt.shiftKey) {
+ this._goToPreviousPage();
+ } else {
+ this._goToNextPage();
+ }
+ }
+ }
+ }
+
+ _contextMenu() {
+ this.contextMenuOpen = true;
+ }
+
+ _showControls() {
+ if (this.controlsTimeout) {
+ clearTimeout(this.controlsTimeout);
+ } else {
+ this.container.classList.add(CONTROLS_SELECTOR);
+ }
+
+ this.controlsTimeout = setTimeout(() => {
+ this.container.classList.remove(CONTROLS_SELECTOR);
+ delete this.controlsTimeout;
+ }, DELAY_BEFORE_HIDING_CONTROLS);
+ }
+
+ _hideControls() {
+ if (!this.controlsTimeout) {
+ return;
+ }
+
+ clearTimeout(this.controlsTimeout);
+ this.container.classList.remove(CONTROLS_SELECTOR);
+ delete this.controlsTimeout;
+ }
+
+ _resetMouseScrollState() {
+ this.mouseScrollTimeStamp = 0;
+ this.mouseScrollDelta = 0;
+ }
+
+ _touchSwipe(evt) {
+ if (!this.active) {
+ return;
+ }
+
+ if (evt.touches.length > 1) {
+ this.touchSwipeState = null;
+ return;
+ }
+
+ switch (evt.type) {
+ case "touchstart":
+ this.touchSwipeState = {
+ startX: evt.touches[0].pageX,
+ startY: evt.touches[0].pageY,
+ endX: evt.touches[0].pageX,
+ endY: evt.touches[0].pageY
+ };
+ break;
+
+ case "touchmove":
+ if (this.touchSwipeState === null) {
+ return;
+ }
+
+ this.touchSwipeState.endX = evt.touches[0].pageX;
+ this.touchSwipeState.endY = evt.touches[0].pageY;
+ evt.preventDefault();
+ break;
+
+ case "touchend":
+ if (this.touchSwipeState === null) {
+ return;
+ }
+
+ let delta = 0;
+ const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;
+ const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;
+ const absAngle = Math.abs(Math.atan2(dy, dx));
+
+ if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) {
+ delta = dx;
+ } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) {
+ delta = dy;
+ }
+
+ if (delta > 0) {
+ this._goToPreviousPage();
+ } else if (delta < 0) {
+ this._goToNextPage();
+ }
+
+ break;
+ }
+ }
+
+ _addWindowListeners() {
+ this.showControlsBind = this._showControls.bind(this);
+ this.mouseDownBind = this._mouseDown.bind(this);
+ this.mouseWheelBind = this._mouseWheel.bind(this);
+ this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this);
+ this.contextMenuBind = this._contextMenu.bind(this);
+ this.touchSwipeBind = this._touchSwipe.bind(this);
+ window.addEventListener("mousemove", this.showControlsBind);
+ window.addEventListener("mousedown", this.mouseDownBind);
+ window.addEventListener("wheel", this.mouseWheelBind, {
+ passive: false
+ });
+ window.addEventListener("keydown", this.resetMouseScrollStateBind);
+ window.addEventListener("contextmenu", this.contextMenuBind);
+ window.addEventListener("touchstart", this.touchSwipeBind);
+ window.addEventListener("touchmove", this.touchSwipeBind);
+ window.addEventListener("touchend", this.touchSwipeBind);
+ }
+
+ _removeWindowListeners() {
+ window.removeEventListener("mousemove", this.showControlsBind);
+ window.removeEventListener("mousedown", this.mouseDownBind);
+ window.removeEventListener("wheel", this.mouseWheelBind, {
+ passive: false
+ });
+ window.removeEventListener("keydown", this.resetMouseScrollStateBind);
+ window.removeEventListener("contextmenu", this.contextMenuBind);
+ window.removeEventListener("touchstart", this.touchSwipeBind);
+ window.removeEventListener("touchmove", this.touchSwipeBind);
+ window.removeEventListener("touchend", this.touchSwipeBind);
+ delete this.showControlsBind;
+ delete this.mouseDownBind;
+ delete this.mouseWheelBind;
+ delete this.resetMouseScrollStateBind;
+ delete this.contextMenuBind;
+ delete this.touchSwipeBind;
+ }
+
+ _fullscreenChange() {
+ if (this.isFullscreen) {
+ this._enter();
+ } else {
+ this._exit();
+ }
+ }
+
+ _addFullscreenChangeListeners() {
+ this.fullscreenChangeBind = this._fullscreenChange.bind(this);
+ window.addEventListener("fullscreenchange", this.fullscreenChangeBind);
+ window.addEventListener("mozfullscreenchange", this.fullscreenChangeBind);
+ window.addEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
+ window.addEventListener("MSFullscreenChange", this.fullscreenChangeBind);
+ }
+
+ _removeFullscreenChangeListeners() {
+ window.removeEventListener("fullscreenchange", this.fullscreenChangeBind);
+ window.removeEventListener("mozfullscreenchange", this.fullscreenChangeBind);
+ window.removeEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
+ window.removeEventListener("MSFullscreenChange", this.fullscreenChangeBind);
+ delete this.fullscreenChangeBind;
+ }
+
+}
+
+exports.PDFPresentationMode = PDFPresentationMode;
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFSidebarResizer = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+const SIDEBAR_WIDTH_VAR = "--sidebar-width";
+const SIDEBAR_MIN_WIDTH = 200;
+const SIDEBAR_RESIZING_CLASS = "sidebarResizing";
+
+class PDFSidebarResizer {
+ constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
+ this.enabled = false;
+ this.isRTL = false;
+ this.sidebarOpen = false;
+ this.doc = document.documentElement;
+ this._width = null;
+ this._outerContainerWidth = null;
+ this._boundEvents = Object.create(null);
+ this.outerContainer = options.outerContainer;
+ this.resizer = options.resizer;
+ this.eventBus = eventBus;
+ this.l10n = l10n;
+
+ if (typeof CSS === "undefined" || typeof CSS.supports !== "function" || !CSS.supports(SIDEBAR_WIDTH_VAR, `calc(-1 * ${SIDEBAR_MIN_WIDTH}px)`)) {
+ console.warn("PDFSidebarResizer: " + "The browser does not support resizing of the sidebar.");
+ return;
+ }
+
+ this.enabled = true;
+ this.resizer.classList.remove("hidden");
+ this.l10n.getDirection().then(dir => {
+ this.isRTL = dir === "rtl";
+ });
+
+ this._addEventListeners();
+ }
+
+ get outerContainerWidth() {
+ if (!this._outerContainerWidth) {
+ this._outerContainerWidth = this.outerContainer.clientWidth;
+ }
+
+ return this._outerContainerWidth;
+ }
+
+ _updateWidth(width = 0) {
+ if (!this.enabled) {
+ return false;
+ }
+
+ const newWidth = (0, _ui_utils.clamp)(width, SIDEBAR_MIN_WIDTH, Math.floor(this.outerContainerWidth / 2));
+
+ if (newWidth === this._width) {
+ return false;
+ }
+
+ this._width = newWidth;
+ this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, `${newWidth}px`);
+ return true;
+ }
+
+ _mouseMove(evt) {
+ let width = evt.clientX;
+
+ if (this.isRTL) {
+ width = this.outerContainerWidth - width;
+ }
+
+ this._updateWidth(width);
+ }
+
+ _mouseUp(evt) {
+ this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
+ this.eventBus.dispatch("resize", {
+ source: this
+ });
+ const _boundEvents = this._boundEvents;
+ window.removeEventListener("mousemove", _boundEvents.mouseMove);
+ window.removeEventListener("mouseup", _boundEvents.mouseUp);
+ }
+
+ _addEventListeners() {
+ if (!this.enabled) {
+ return;
+ }
+
+ const _boundEvents = this._boundEvents;
+ _boundEvents.mouseMove = this._mouseMove.bind(this);
+ _boundEvents.mouseUp = this._mouseUp.bind(this);
+ this.resizer.addEventListener("mousedown", evt => {
+ if (evt.button !== 0) {
+ return;
+ }
+
+ this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
+ window.addEventListener("mousemove", _boundEvents.mouseMove);
+ window.addEventListener("mouseup", _boundEvents.mouseUp);
+ });
+
+ this.eventBus._on("sidebarviewchanged", evt => {
+ this.sidebarOpen = !!(evt && evt.view);
+ });
+
+ this.eventBus._on("resize", evt => {
+ if (!evt || evt.source !== window) {
+ return;
+ }
+
+ this._outerContainerWidth = null;
+
+ if (!this._width) {
+ return;
+ }
+
+ if (!this.sidebarOpen) {
+ this._updateWidth(this._width);
+
+ return;
+ }
+
+ this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
+
+ const updated = this._updateWidth(this._width);
+
+ Promise.resolve().then(() => {
+ this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
+
+ if (updated) {
+ this.eventBus.dispatch("resize", {
+ source: this
+ });
+ }
+ });
+ });
+ }
+
+}
+
+exports.PDFSidebarResizer = PDFSidebarResizer;
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFThumbnailViewer = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdf_thumbnail_view = __webpack_require__(23);
+
+const THUMBNAIL_SCROLL_MARGIN = -19;
+const THUMBNAIL_SELECTED_CLASS = "selected";
+
+class PDFThumbnailViewer {
+ constructor({
+ container,
+ linkService,
+ renderingQueue,
+ l10n = _ui_utils.NullL10n
+ }) {
+ this.container = container;
+ this.linkService = linkService;
+ this.renderingQueue = renderingQueue;
+ this.l10n = l10n;
+ this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this));
+
+ this._resetView();
+ }
+
+ _scrollUpdated() {
+ this.renderingQueue.renderHighestPriority();
+ }
+
+ getThumbnail(index) {
+ return this._thumbnails[index];
+ }
+
+ _getVisibleThumbs() {
+ return (0, _ui_utils.getVisibleElements)(this.container, this._thumbnails);
+ }
+
+ scrollThumbnailIntoView(pageNumber) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const thumbnailView = this._thumbnails[pageNumber - 1];
+
+ if (!thumbnailView) {
+ console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.');
+ return;
+ }
+
+ if (pageNumber !== this._currentPageNumber) {
+ const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];
+ prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);
+ thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
+ }
+
+ const visibleThumbs = this._getVisibleThumbs();
+
+ const numVisibleThumbs = visibleThumbs.views.length;
+
+ if (numVisibleThumbs > 0) {
+ const first = visibleThumbs.first.id;
+ const last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first;
+ let shouldScroll = false;
+
+ if (pageNumber <= first || pageNumber >= last) {
+ shouldScroll = true;
+ } else {
+ visibleThumbs.views.some(function (view) {
+ if (view.id !== pageNumber) {
+ return false;
+ }
+
+ shouldScroll = view.percent < 100;
+ return true;
+ });
+ }
+
+ if (shouldScroll) {
+ (0, _ui_utils.scrollIntoView)(thumbnailView.div, {
+ top: THUMBNAIL_SCROLL_MARGIN
+ });
+ }
+ }
+
+ this._currentPageNumber = pageNumber;
+ }
+
+ get pagesRotation() {
+ return this._pagesRotation;
+ }
+
+ set pagesRotation(rotation) {
+ if (!(0, _ui_utils.isValidRotation)(rotation)) {
+ throw new Error("Invalid thumbnails rotation angle.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (this._pagesRotation === rotation) {
+ return;
+ }
+
+ this._pagesRotation = rotation;
+
+ for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+ this._thumbnails[i].update(rotation);
+ }
+ }
+
+ cleanup() {
+ _pdf_thumbnail_view.PDFThumbnailView.cleanup();
+ }
+
+ _resetView() {
+ this._thumbnails = [];
+ this._currentPageNumber = 1;
+ this._pageLabels = null;
+ this._pagesRotation = 0;
+ this._pagesRequests = new WeakMap();
+ this.container.textContent = "";
+ }
+
+ setDocument(pdfDocument) {
+ if (this.pdfDocument) {
+ this._cancelRendering();
+
+ this._resetView();
+ }
+
+ this.pdfDocument = pdfDocument;
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ pdfDocument.getPage(1).then(firstPdfPage => {
+ const pagesCount = pdfDocument.numPages;
+ const viewport = firstPdfPage.getViewport({
+ scale: 1
+ });
+
+ for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
+ const thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({
+ container: this.container,
+ id: pageNum,
+ defaultViewport: viewport.clone(),
+ linkService: this.linkService,
+ renderingQueue: this.renderingQueue,
+ disableCanvasToImageConversion: false,
+ l10n: this.l10n
+ });
+
+ this._thumbnails.push(thumbnail);
+ }
+
+ const firstThumbnailView = this._thumbnails[0];
+
+ if (firstThumbnailView) {
+ firstThumbnailView.setPdfPage(firstPdfPage);
+ }
+
+ const thumbnailView = this._thumbnails[this._currentPageNumber - 1];
+ thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
+ }).catch(reason => {
+ console.error("Unable to initialize thumbnail viewer", reason);
+ });
+ }
+
+ _cancelRendering() {
+ for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+ if (this._thumbnails[i]) {
+ this._thumbnails[i].cancelRendering();
+ }
+ }
+ }
+
+ setPageLabels(labels) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (!labels) {
+ this._pageLabels = null;
+ } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
+ this._pageLabels = null;
+ console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels.");
+ } else {
+ this._pageLabels = labels;
+ }
+
+ for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+ const label = this._pageLabels && this._pageLabels[i];
+
+ this._thumbnails[i].setPageLabel(label);
+ }
+ }
+
+ _ensurePdfPageLoaded(thumbView) {
+ if (thumbView.pdfPage) {
+ return Promise.resolve(thumbView.pdfPage);
+ }
+
+ if (this._pagesRequests.has(thumbView)) {
+ return this._pagesRequests.get(thumbView);
+ }
+
+ const promise = this.pdfDocument.getPage(thumbView.id).then(pdfPage => {
+ if (!thumbView.pdfPage) {
+ thumbView.setPdfPage(pdfPage);
+ }
+
+ this._pagesRequests.delete(thumbView);
+
+ return pdfPage;
+ }).catch(reason => {
+ console.error("Unable to get page for thumb view", reason);
+
+ this._pagesRequests.delete(thumbView);
+ });
+
+ this._pagesRequests.set(thumbView, promise);
+
+ return promise;
+ }
+
+ forceRendering() {
+ const visibleThumbs = this._getVisibleThumbs();
+
+ const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, this.scroll.down);
+
+ if (thumbView) {
+ this._ensurePdfPageLoaded(thumbView).then(() => {
+ this.renderingQueue.renderView(thumbView);
+ });
+
+ return true;
+ }
+
+ return false;
+ }
+
+}
+
+exports.PDFThumbnailViewer = PDFThumbnailViewer;
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFThumbnailView = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+const MAX_NUM_SCALING_STEPS = 3;
+const THUMBNAIL_CANVAS_BORDER_WIDTH = 1;
+const THUMBNAIL_WIDTH = 98;
+
+const TempImageFactory = function TempImageFactoryClosure() {
+ let tempCanvasCache = null;
+ return {
+ getCanvas(width, height) {
+ let tempCanvas = tempCanvasCache;
+
+ if (!tempCanvas) {
+ tempCanvas = document.createElement("canvas");
+ tempCanvasCache = tempCanvas;
+ }
+
+ tempCanvas.width = width;
+ tempCanvas.height = height;
+ tempCanvas.mozOpaque = true;
+ const ctx = tempCanvas.getContext("2d", {
+ alpha: false
+ });
+ ctx.save();
+ ctx.fillStyle = "rgb(255, 255, 255)";
+ ctx.fillRect(0, 0, width, height);
+ ctx.restore();
+ return tempCanvas;
+ },
+
+ destroyCanvas() {
+ const tempCanvas = tempCanvasCache;
+
+ if (tempCanvas) {
+ tempCanvas.width = 0;
+ tempCanvas.height = 0;
+ }
+
+ tempCanvasCache = null;
+ }
+
+ };
+}();
+
+class PDFThumbnailView {
+ constructor({
+ container,
+ id,
+ defaultViewport,
+ linkService,
+ renderingQueue,
+ disableCanvasToImageConversion = false,
+ l10n = _ui_utils.NullL10n
+ }) {
+ this.id = id;
+ this.renderingId = "thumbnail" + id;
+ this.pageLabel = null;
+ this.pdfPage = null;
+ this.rotation = 0;
+ this.viewport = defaultViewport;
+ this.pdfPageRotate = defaultViewport.rotation;
+ this.linkService = linkService;
+ this.renderingQueue = renderingQueue;
+ this.renderTask = null;
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ this.resume = null;
+ this.disableCanvasToImageConversion = disableCanvasToImageConversion;
+ this.pageWidth = this.viewport.width;
+ this.pageHeight = this.viewport.height;
+ this.pageRatio = this.pageWidth / this.pageHeight;
+ this.canvasWidth = THUMBNAIL_WIDTH;
+ this.canvasHeight = this.canvasWidth / this.pageRatio | 0;
+ this.scale = this.canvasWidth / this.pageWidth;
+ this.l10n = l10n;
+ const anchor = document.createElement("a");
+ anchor.href = linkService.getAnchorUrl("#page=" + id);
+
+ this._thumbPageTitle.then(msg => {
+ anchor.title = msg;
+ });
+
+ anchor.onclick = function () {
+ linkService.page = id;
+ return false;
+ };
+
+ this.anchor = anchor;
+ const div = document.createElement("div");
+ div.className = "thumbnail";
+ div.setAttribute("data-page-number", this.id);
+ this.div = div;
+ const ring = document.createElement("div");
+ ring.className = "thumbnailSelectionRing";
+ const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;
+ ring.style.width = this.canvasWidth + borderAdjustment + "px";
+ ring.style.height = this.canvasHeight + borderAdjustment + "px";
+ this.ring = ring;
+ div.appendChild(ring);
+ anchor.appendChild(div);
+ container.appendChild(anchor);
+ }
+
+ setPdfPage(pdfPage) {
+ this.pdfPage = pdfPage;
+ this.pdfPageRotate = pdfPage.rotate;
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = pdfPage.getViewport({
+ scale: 1,
+ rotation: totalRotation
+ });
+ this.reset();
+ }
+
+ reset() {
+ this.cancelRendering();
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ this.pageWidth = this.viewport.width;
+ this.pageHeight = this.viewport.height;
+ this.pageRatio = this.pageWidth / this.pageHeight;
+ this.canvasHeight = this.canvasWidth / this.pageRatio | 0;
+ this.scale = this.canvasWidth / this.pageWidth;
+ this.div.removeAttribute("data-loaded");
+ const ring = this.ring;
+ const childNodes = ring.childNodes;
+
+ for (let i = childNodes.length - 1; i >= 0; i--) {
+ ring.removeChild(childNodes[i]);
+ }
+
+ const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;
+ ring.style.width = this.canvasWidth + borderAdjustment + "px";
+ ring.style.height = this.canvasHeight + borderAdjustment + "px";
+
+ if (this.canvas) {
+ this.canvas.width = 0;
+ this.canvas.height = 0;
+ delete this.canvas;
+ }
+
+ if (this.image) {
+ this.image.removeAttribute("src");
+ delete this.image;
+ }
+ }
+
+ update(rotation) {
+ if (typeof rotation !== "undefined") {
+ this.rotation = rotation;
+ }
+
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = this.viewport.clone({
+ scale: 1,
+ rotation: totalRotation
+ });
+ this.reset();
+ }
+
+ cancelRendering() {
+ if (this.renderTask) {
+ this.renderTask.cancel();
+ this.renderTask = null;
+ }
+
+ this.resume = null;
+ }
+
+ _getPageDrawContext(noCtxScale = false) {
+ const canvas = document.createElement("canvas");
+ this.canvas = canvas;
+ canvas.mozOpaque = true;
+ const ctx = canvas.getContext("2d", {
+ alpha: false
+ });
+ const outputScale = (0, _ui_utils.getOutputScale)(ctx);
+ canvas.width = this.canvasWidth * outputScale.sx | 0;
+ canvas.height = this.canvasHeight * outputScale.sy | 0;
+ canvas.style.width = this.canvasWidth + "px";
+ canvas.style.height = this.canvasHeight + "px";
+
+ if (!noCtxScale && outputScale.scaled) {
+ ctx.scale(outputScale.sx, outputScale.sy);
+ }
+
+ return ctx;
+ }
+
+ _convertCanvasToImage() {
+ if (!this.canvas) {
+ return;
+ }
+
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+ return;
+ }
+
+ const className = "thumbnailImage";
+
+ if (this.disableCanvasToImageConversion) {
+ this.canvas.className = className;
+
+ this._thumbPageCanvas.then(msg => {
+ this.canvas.setAttribute("aria-label", msg);
+ });
+
+ this.div.setAttribute("data-loaded", true);
+ this.ring.appendChild(this.canvas);
+ return;
+ }
+
+ const image = document.createElement("img");
+ image.className = className;
+
+ this._thumbPageCanvas.then(msg => {
+ image.setAttribute("aria-label", msg);
+ });
+
+ image.style.width = this.canvasWidth + "px";
+ image.style.height = this.canvasHeight + "px";
+ image.src = this.canvas.toDataURL();
+ this.image = image;
+ this.div.setAttribute("data-loaded", true);
+ this.ring.appendChild(image);
+ this.canvas.width = 0;
+ this.canvas.height = 0;
+ delete this.canvas;
+ }
+
+ draw() {
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
+ console.error("Must be in new state before drawing");
+ return Promise.resolve(undefined);
+ }
+
+ const {
+ pdfPage
+ } = this;
+
+ if (!pdfPage) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+ return Promise.reject(new Error("pdfPage is not loaded"));
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+ const renderCapability = (0, _pdfjsLib.createPromiseCapability)();
+
+ const finishRenderTask = error => {
+ if (renderTask === this.renderTask) {
+ this.renderTask = null;
+ }
+
+ if (error instanceof _pdfjsLib.RenderingCancelledException) {
+ renderCapability.resolve(undefined);
+ return;
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ this._convertCanvasToImage();
+
+ if (!error) {
+ renderCapability.resolve(undefined);
+ } else {
+ renderCapability.reject(error);
+ }
+ };
+
+ const ctx = this._getPageDrawContext();
+
+ const drawViewport = this.viewport.clone({
+ scale: this.scale
+ });
+
+ const renderContinueCallback = cont => {
+ if (!this.renderingQueue.isHighestPriority(this)) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;
+
+ this.resume = () => {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+ cont();
+ };
+
+ return;
+ }
+
+ cont();
+ };
+
+ const renderContext = {
+ canvasContext: ctx,
+ viewport: drawViewport
+ };
+ const renderTask = this.renderTask = pdfPage.render(renderContext);
+ renderTask.onContinue = renderContinueCallback;
+ renderTask.promise.then(function () {
+ finishRenderTask(null);
+ }, function (error) {
+ finishRenderTask(error);
+ });
+ return renderCapability.promise;
+ }
+
+ setImage(pageView) {
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
+ return;
+ }
+
+ const img = pageView.canvas;
+
+ if (!img) {
+ return;
+ }
+
+ if (!this.pdfPage) {
+ this.setPdfPage(pageView.pdfPage);
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ const ctx = this._getPageDrawContext(true);
+
+ const canvas = ctx.canvas;
+
+ if (img.width <= 2 * canvas.width) {
+ ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);
+
+ this._convertCanvasToImage();
+
+ return;
+ }
+
+ let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;
+ let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;
+ const reducedImage = TempImageFactory.getCanvas(reducedWidth, reducedHeight);
+ const reducedImageCtx = reducedImage.getContext("2d");
+
+ while (reducedWidth > img.width || reducedHeight > img.height) {
+ reducedWidth >>= 1;
+ reducedHeight >>= 1;
+ }
+
+ reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight);
+
+ while (reducedWidth > 2 * canvas.width) {
+ reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1);
+ reducedWidth >>= 1;
+ reducedHeight >>= 1;
+ }
+
+ ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height);
+
+ this._convertCanvasToImage();
+ }
+
+ get _thumbPageTitle() {
+ return this.l10n.get("thumb_page_title", {
+ page: this.pageLabel !== null ? this.pageLabel : this.id
+ }, "Page {{page}}");
+ }
+
+ get _thumbPageCanvas() {
+ return this.l10n.get("thumb_page_canvas", {
+ page: this.pageLabel !== null ? this.pageLabel : this.id
+ }, "Thumbnail of Page {{page}}");
+ }
+
+ setPageLabel(label) {
+ this.pageLabel = typeof label === "string" ? label : null;
+
+ this._thumbPageTitle.then(msg => {
+ this.anchor.title = msg;
+ });
+
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+ return;
+ }
+
+ this._thumbPageCanvas.then(msg => {
+ if (this.image) {
+ this.image.setAttribute("aria-label", msg);
+ } else if (this.disableCanvasToImageConversion && this.canvas) {
+ this.canvas.setAttribute("aria-label", msg);
+ }
+ });
+ }
+
+ static cleanup() {
+ TempImageFactory.destroyCanvas();
+ }
+
+}
+
+exports.PDFThumbnailView = PDFThumbnailView;
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFViewer = void 0;
+
+var _base_viewer = __webpack_require__(25);
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PDFViewer extends _base_viewer.BaseViewer {
+ get _viewerElement() {
+ return (0, _pdfjsLib.shadow)(this, "_viewerElement", this.viewer);
+ }
+
+ _scrollIntoView({
+ pageDiv,
+ pageSpot = null,
+ pageNumber = null
+ }) {
+ if (!pageSpot && !this.isInPresentationMode) {
+ const left = pageDiv.offsetLeft + pageDiv.clientLeft;
+ const right = left + pageDiv.clientWidth;
+ const {
+ scrollLeft,
+ clientWidth
+ } = this.container;
+
+ if (this._isScrollModeHorizontal || left < scrollLeft || right > scrollLeft + clientWidth) {
+ pageSpot = {
+ left: 0,
+ top: 0
+ };
+ }
+ }
+
+ super._scrollIntoView({
+ pageDiv,
+ pageSpot,
+ pageNumber
+ });
+ }
+
+ _getVisiblePages() {
+ if (this.isInPresentationMode) {
+ return this._getCurrentVisiblePage();
+ }
+
+ return super._getVisiblePages();
+ }
+
+ _updateHelper(visiblePages) {
+ if (this.isInPresentationMode) {
+ return;
+ }
+
+ let currentId = this._currentPageNumber;
+ let stillFullyVisible = false;
+
+ for (const page of visiblePages) {
+ if (page.percent < 100) {
+ break;
+ }
+
+ if (page.id === currentId) {
+ stillFullyVisible = true;
+ break;
+ }
+ }
+
+ if (!stillFullyVisible) {
+ currentId = visiblePages[0].id;
+ }
+
+ this._setCurrentPageNumber(currentId);
+ }
+
+}
+
+exports.PDFViewer = PDFViewer;
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.BaseViewer = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+var _annotation_layer_builder = __webpack_require__(26);
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_page_view = __webpack_require__(27);
+
+var _pdf_link_service = __webpack_require__(18);
+
+var _text_layer_builder = __webpack_require__(28);
+
+const DEFAULT_CACHE_SIZE = 10;
+
+function PDFPageViewBuffer(size) {
+ const data = [];
+
+ this.push = function (view) {
+ const i = data.indexOf(view);
+
+ if (i >= 0) {
+ data.splice(i, 1);
+ }
+
+ data.push(view);
+
+ if (data.length > size) {
+ data.shift().destroy();
+ }
+ };
+
+ this.resize = function (newSize, pagesToKeep) {
+ size = newSize;
+
+ if (pagesToKeep) {
+ const pageIdsToKeep = new Set();
+
+ for (let i = 0, iMax = pagesToKeep.length; i < iMax; ++i) {
+ pageIdsToKeep.add(pagesToKeep[i].id);
+ }
+
+ (0, _ui_utils.moveToEndOfArray)(data, function (page) {
+ return pageIdsToKeep.has(page.id);
+ });
+ }
+
+ while (data.length > size) {
+ data.shift().destroy();
+ }
+ };
+}
+
+function isSameScale(oldScale, newScale) {
+ if (newScale === oldScale) {
+ return true;
+ }
+
+ if (Math.abs(newScale - oldScale) < 1e-15) {
+ return true;
+ }
+
+ return false;
+}
+
+class BaseViewer {
+ constructor(options) {
+ if (this.constructor === BaseViewer) {
+ throw new Error("Cannot initialize BaseViewer.");
+ }
+
+ this._name = this.constructor.name;
+ this.container = options.container;
+ this.viewer = options.viewer || options.container.firstElementChild;
+ this.eventBus = options.eventBus;
+ this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
+ this.downloadManager = options.downloadManager || null;
+ this.findController = options.findController || null;
+ this.removePageBorders = options.removePageBorders || false;
+ this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
+ this.imageResourcesPath = options.imageResourcesPath || "";
+ this.renderInteractiveForms = options.renderInteractiveForms || false;
+ this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;
+ this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
+ this.enableWebGL = options.enableWebGL || false;
+ this.useOnlyCssZoom = options.useOnlyCssZoom || false;
+ this.maxCanvasPixels = options.maxCanvasPixels;
+ this.l10n = options.l10n || _ui_utils.NullL10n;
+ this.defaultRenderingQueue = !options.renderingQueue;
+
+ if (this.defaultRenderingQueue) {
+ this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
+ this.renderingQueue.setViewer(this);
+ } else {
+ this.renderingQueue = options.renderingQueue;
+ }
+
+ this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this));
+ this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN;
+ this._onBeforeDraw = this._onAfterDraw = null;
+
+ this._resetView();
+
+ if (this.removePageBorders) {
+ this.viewer.classList.add("removePageBorders");
+ }
+
+ Promise.resolve().then(() => {
+ this.eventBus.dispatch("baseviewerinit", {
+ source: this
+ });
+ });
+ }
+
+ get pagesCount() {
+ return this._pages.length;
+ }
+
+ getPageView(index) {
+ return this._pages[index];
+ }
+
+ get pageViewsReady() {
+ if (!this._pagesCapability.settled) {
+ return false;
+ }
+
+ return this._pages.every(function (pageView) {
+ return pageView && pageView.pdfPage;
+ });
+ }
+
+ get currentPageNumber() {
+ return this._currentPageNumber;
+ }
+
+ set currentPageNumber(val) {
+ if (!Number.isInteger(val)) {
+ throw new Error("Invalid page number.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (!this._setCurrentPageNumber(val, true)) {
+ console.error(`${this._name}.currentPageNumber: "${val}" is not a valid page.`);
+ }
+ }
+
+ _setCurrentPageNumber(val, resetCurrentPageView = false) {
+ if (this._currentPageNumber === val) {
+ if (resetCurrentPageView) {
+ this._resetCurrentPageView();
+ }
+
+ return true;
+ }
+
+ if (!(0 < val && val <= this.pagesCount)) {
+ return false;
+ }
+
+ this._currentPageNumber = val;
+ this.eventBus.dispatch("pagechanging", {
+ source: this,
+ pageNumber: val,
+ pageLabel: this._pageLabels && this._pageLabels[val - 1]
+ });
+
+ if (resetCurrentPageView) {
+ this._resetCurrentPageView();
+ }
+
+ return true;
+ }
+
+ get currentPageLabel() {
+ return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
+ }
+
+ set currentPageLabel(val) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ let page = val | 0;
+
+ if (this._pageLabels) {
+ const i = this._pageLabels.indexOf(val);
+
+ if (i >= 0) {
+ page = i + 1;
+ }
+ }
+
+ if (!this._setCurrentPageNumber(page, true)) {
+ console.error(`${this._name}.currentPageLabel: "${val}" is not a valid page.`);
+ }
+ }
+
+ get currentScale() {
+ return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;
+ }
+
+ set currentScale(val) {
+ if (isNaN(val)) {
+ throw new Error("Invalid numeric scale.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ this._setScale(val, false);
+ }
+
+ get currentScaleValue() {
+ return this._currentScaleValue;
+ }
+
+ set currentScaleValue(val) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ this._setScale(val, false);
+ }
+
+ get pagesRotation() {
+ return this._pagesRotation;
+ }
+
+ set pagesRotation(rotation) {
+ if (!(0, _ui_utils.isValidRotation)(rotation)) {
+ throw new Error("Invalid pages rotation angle.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (this._pagesRotation === rotation) {
+ return;
+ }
+
+ this._pagesRotation = rotation;
+ const pageNumber = this._currentPageNumber;
+
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ const pageView = this._pages[i];
+ pageView.update(pageView.scale, rotation);
+ }
+
+ if (this._currentScaleValue) {
+ this._setScale(this._currentScaleValue, true);
+ }
+
+ this.eventBus.dispatch("rotationchanging", {
+ source: this,
+ pagesRotation: rotation,
+ pageNumber
+ });
+
+ if (this.defaultRenderingQueue) {
+ this.update();
+ }
+ }
+
+ get firstPagePromise() {
+ return this.pdfDocument ? this._firstPageCapability.promise : null;
+ }
+
+ get onePageRendered() {
+ return this.pdfDocument ? this._onePageRenderedCapability.promise : null;
+ }
+
+ get pagesPromise() {
+ return this.pdfDocument ? this._pagesCapability.promise : null;
+ }
+
+ get _viewerElement() {
+ throw new Error("Not implemented: _viewerElement");
+ }
+
+ _onePageRenderedOrForceFetch() {
+ if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {
+ return Promise.resolve();
+ }
+
+ return this._onePageRenderedCapability.promise;
+ }
+
+ setDocument(pdfDocument) {
+ if (this.pdfDocument) {
+ this._cancelRendering();
+
+ this._resetView();
+
+ if (this.findController) {
+ this.findController.setDocument(null);
+ }
+ }
+
+ this.pdfDocument = pdfDocument;
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ const pagesCount = pdfDocument.numPages;
+ const firstPagePromise = pdfDocument.getPage(1);
+
+ this._pagesCapability.promise.then(() => {
+ this.eventBus.dispatch("pagesloaded", {
+ source: this,
+ pagesCount
+ });
+ });
+
+ this._onBeforeDraw = evt => {
+ const pageView = this._pages[evt.pageNumber - 1];
+
+ if (!pageView) {
+ return;
+ }
+
+ this._buffer.push(pageView);
+ };
+
+ this.eventBus._on("pagerender", this._onBeforeDraw);
+
+ this._onAfterDraw = evt => {
+ if (evt.cssTransform || this._onePageRenderedCapability.settled) {
+ return;
+ }
+
+ this._onePageRenderedCapability.resolve();
+
+ this.eventBus._off("pagerendered", this._onAfterDraw);
+
+ this._onAfterDraw = null;
+ };
+
+ this.eventBus._on("pagerendered", this._onAfterDraw);
+
+ firstPagePromise.then(firstPdfPage => {
+ this._firstPageCapability.resolve(firstPdfPage);
+
+ const scale = this.currentScale;
+ const viewport = firstPdfPage.getViewport({
+ scale: scale * _ui_utils.CSS_UNITS
+ });
+ const textLayerFactory = this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? this : null;
+
+ for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
+ const pageView = new _pdf_page_view.PDFPageView({
+ container: this._viewerElement,
+ eventBus: this.eventBus,
+ id: pageNum,
+ scale,
+ defaultViewport: viewport.clone(),
+ renderingQueue: this.renderingQueue,
+ textLayerFactory,
+ textLayerMode: this.textLayerMode,
+ annotationLayerFactory: this,
+ imageResourcesPath: this.imageResourcesPath,
+ renderInteractiveForms: this.renderInteractiveForms,
+ renderer: this.renderer,
+ enableWebGL: this.enableWebGL,
+ useOnlyCssZoom: this.useOnlyCssZoom,
+ maxCanvasPixels: this.maxCanvasPixels,
+ l10n: this.l10n
+ });
+
+ this._pages.push(pageView);
+ }
+
+ const firstPageView = this._pages[0];
+
+ if (firstPageView) {
+ firstPageView.setPdfPage(firstPdfPage);
+ this.linkService.cachePageRef(1, firstPdfPage.ref);
+ }
+
+ if (this._spreadMode !== _ui_utils.SpreadMode.NONE) {
+ this._updateSpreadMode();
+ }
+
+ this._onePageRenderedOrForceFetch().then(() => {
+ if (this.findController) {
+ this.findController.setDocument(pdfDocument);
+ }
+
+ if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
+ this._pagesCapability.resolve();
+
+ return;
+ }
+
+ let getPagesLeft = pagesCount - 1;
+
+ if (getPagesLeft <= 0) {
+ this._pagesCapability.resolve();
+
+ return;
+ }
+
+ for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {
+ pdfDocument.getPage(pageNum).then(pdfPage => {
+ const pageView = this._pages[pageNum - 1];
+
+ if (!pageView.pdfPage) {
+ pageView.setPdfPage(pdfPage);
+ }
+
+ this.linkService.cachePageRef(pageNum, pdfPage.ref);
+
+ if (--getPagesLeft === 0) {
+ this._pagesCapability.resolve();
+ }
+ }, reason => {
+ console.error(`Unable to get page ${pageNum} to initialize viewer`, reason);
+
+ if (--getPagesLeft === 0) {
+ this._pagesCapability.resolve();
+ }
+ });
+ }
+ });
+
+ this.eventBus.dispatch("pagesinit", {
+ source: this
+ });
+
+ if (this.defaultRenderingQueue) {
+ this.update();
+ }
+ }).catch(reason => {
+ console.error("Unable to initialize viewer", reason);
+ });
+ }
+
+ setPageLabels(labels) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (!labels) {
+ this._pageLabels = null;
+ } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
+ this._pageLabels = null;
+ console.error(`${this._name}.setPageLabels: Invalid page labels.`);
+ } else {
+ this._pageLabels = labels;
+ }
+
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ const pageView = this._pages[i];
+ const label = this._pageLabels && this._pageLabels[i];
+ pageView.setPageLabel(label);
+ }
+ }
+
+ _resetView() {
+ this._pages = [];
+ this._currentPageNumber = 1;
+ this._currentScale = _ui_utils.UNKNOWN_SCALE;
+ this._currentScaleValue = null;
+ this._pageLabels = null;
+ this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
+ this._location = null;
+ this._pagesRotation = 0;
+ this._pagesRequests = new WeakMap();
+ this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._scrollMode = _ui_utils.ScrollMode.VERTICAL;
+ this._spreadMode = _ui_utils.SpreadMode.NONE;
+
+ if (this._onBeforeDraw) {
+ this.eventBus._off("pagerender", this._onBeforeDraw);
+
+ this._onBeforeDraw = null;
+ }
+
+ if (this._onAfterDraw) {
+ this.eventBus._off("pagerendered", this._onAfterDraw);
+
+ this._onAfterDraw = null;
+ }
+
+ this.viewer.textContent = "";
+
+ this._updateScrollMode();
+ }
+
+ _scrollUpdate() {
+ if (this.pagesCount === 0) {
+ return;
+ }
+
+ this.update();
+ }
+
+ _scrollIntoView({
+ pageDiv,
+ pageSpot = null,
+ pageNumber = null
+ }) {
+ (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot);
+ }
+
+ _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {
+ this._currentScaleValue = newValue.toString();
+
+ if (isSameScale(this._currentScale, newScale)) {
+ if (preset) {
+ this.eventBus.dispatch("scalechanging", {
+ source: this,
+ scale: newScale,
+ presetValue: newValue
+ });
+ }
+
+ return;
+ }
+
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ this._pages[i].update(newScale);
+ }
+
+ this._currentScale = newScale;
+
+ if (!noScroll) {
+ let page = this._currentPageNumber,
+ dest;
+
+ if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {
+ page = this._location.pageNumber;
+ dest = [null, {
+ name: "XYZ"
+ }, this._location.left, this._location.top, null];
+ }
+
+ this.scrollPageIntoView({
+ pageNumber: page,
+ destArray: dest,
+ allowNegativeOffset: true
+ });
+ }
+
+ this.eventBus.dispatch("scalechanging", {
+ source: this,
+ scale: newScale,
+ presetValue: preset ? newValue : undefined
+ });
+
+ if (this.defaultRenderingQueue) {
+ this.update();
+ }
+ }
+
+ _setScale(value, noScroll = false) {
+ let scale = parseFloat(value);
+
+ if (scale > 0) {
+ this._setScaleUpdatePages(scale, value, noScroll, false);
+ } else {
+ const currentPage = this._pages[this._currentPageNumber - 1];
+
+ if (!currentPage) {
+ return;
+ }
+
+ const noPadding = this.isInPresentationMode || this.removePageBorders;
+ let hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING;
+ let vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING;
+
+ if (!noPadding && this._isScrollModeHorizontal) {
+ [hPadding, vPadding] = [vPadding, hPadding];
+ }
+
+ const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale;
+ const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
+
+ switch (value) {
+ case "page-actual":
+ scale = 1;
+ break;
+
+ case "page-width":
+ scale = pageWidthScale;
+ break;
+
+ case "page-height":
+ scale = pageHeightScale;
+ break;
+
+ case "page-fit":
+ scale = Math.min(pageWidthScale, pageHeightScale);
+ break;
+
+ case "auto":
+ const horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);
+ scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);
+ break;
+
+ default:
+ console.error(`${this._name}._setScale: "${value}" is an unknown zoom value.`);
+ return;
+ }
+
+ this._setScaleUpdatePages(scale, value, noScroll, true);
+ }
+ }
+
+ _resetCurrentPageView() {
+ if (this.isInPresentationMode) {
+ this._setScale(this._currentScaleValue, true);
+ }
+
+ const pageView = this._pages[this._currentPageNumber - 1];
+
+ this._scrollIntoView({
+ pageDiv: pageView.div
+ });
+ }
+
+ scrollPageIntoView({
+ pageNumber,
+ destArray = null,
+ allowNegativeOffset = false,
+ ignoreDestinationZoom = false
+ }) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];
+
+ if (!pageView) {
+ console.error(`${this._name}.scrollPageIntoView: ` + `"${pageNumber}" is not a valid pageNumber parameter.`);
+ return;
+ }
+
+ if (this.isInPresentationMode || !destArray) {
+ this._setCurrentPageNumber(pageNumber, true);
+
+ return;
+ }
+
+ let x = 0,
+ y = 0;
+ let width = 0,
+ height = 0,
+ widthScale,
+ heightScale;
+ const changeOrientation = pageView.rotation % 180 !== 0;
+ const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS;
+ const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS;
+ let scale = 0;
+
+ switch (destArray[1].name) {
+ case "XYZ":
+ x = destArray[2];
+ y = destArray[3];
+ scale = destArray[4];
+ x = x !== null ? x : 0;
+ y = y !== null ? y : pageHeight;
+ break;
+
+ case "Fit":
+ case "FitB":
+ scale = "page-fit";
+ break;
+
+ case "FitH":
+ case "FitBH":
+ y = destArray[2];
+ scale = "page-width";
+
+ if (y === null && this._location) {
+ x = this._location.left;
+ y = this._location.top;
+ }
+
+ break;
+
+ case "FitV":
+ case "FitBV":
+ x = destArray[2];
+ width = pageWidth;
+ height = pageHeight;
+ scale = "page-height";
+ break;
+
+ case "FitR":
+ x = destArray[2];
+ y = destArray[3];
+ width = destArray[4] - x;
+ height = destArray[5] - y;
+ const hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;
+ const vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;
+ widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS;
+ heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS;
+ scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
+ break;
+
+ default:
+ console.error(`${this._name}.scrollPageIntoView: ` + `"${destArray[1].name}" is not a valid destination type.`);
+ return;
+ }
+
+ if (!ignoreDestinationZoom) {
+ if (scale && scale !== this._currentScale) {
+ this.currentScaleValue = scale;
+ } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {
+ this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ }
+ }
+
+ if (scale === "page-fit" && !destArray[4]) {
+ this._scrollIntoView({
+ pageDiv: pageView.div,
+ pageNumber
+ });
+
+ return;
+ }
+
+ const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];
+ let left = Math.min(boundingRect[0][0], boundingRect[1][0]);
+ let top = Math.min(boundingRect[0][1], boundingRect[1][1]);
+
+ if (!allowNegativeOffset) {
+ left = Math.max(left, 0);
+ top = Math.max(top, 0);
+ }
+
+ this._scrollIntoView({
+ pageDiv: pageView.div,
+ pageSpot: {
+ left,
+ top
+ },
+ pageNumber
+ });
+ }
+
+ _updateLocation(firstPage) {
+ const currentScale = this._currentScale;
+ const currentScaleValue = this._currentScaleValue;
+ const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;
+ const pageNumber = firstPage.id;
+ let pdfOpenParams = "#page=" + pageNumber;
+ pdfOpenParams += "&zoom=" + normalizedScaleValue;
+ const currentPageView = this._pages[pageNumber - 1];
+ const container = this.container;
+ const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);
+ const intLeft = Math.round(topLeft[0]);
+ const intTop = Math.round(topLeft[1]);
+ pdfOpenParams += "," + intLeft + "," + intTop;
+ this._location = {
+ pageNumber,
+ scale: normalizedScaleValue,
+ top: intTop,
+ left: intLeft,
+ rotation: this._pagesRotation,
+ pdfOpenParams
+ };
+ }
+
+ _updateHelper(visiblePages) {
+ throw new Error("Not implemented: _updateHelper");
+ }
+
+ update() {
+ const visible = this._getVisiblePages();
+
+ const visiblePages = visible.views,
+ numVisiblePages = visiblePages.length;
+
+ if (numVisiblePages === 0) {
+ return;
+ }
+
+ const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);
+
+ this._buffer.resize(newCacheSize, visiblePages);
+
+ this.renderingQueue.renderHighestPriority(visible);
+
+ this._updateHelper(visiblePages);
+
+ this._updateLocation(visible.first);
+
+ this.eventBus.dispatch("updateviewarea", {
+ source: this,
+ location: this._location
+ });
+ }
+
+ containsElement(element) {
+ return this.container.contains(element);
+ }
+
+ focus() {
+ this.container.focus();
+ }
+
+ get _isScrollModeHorizontal() {
+ return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;
+ }
+
+ get isInPresentationMode() {
+ return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
+ }
+
+ get isChangingPresentationMode() {
+ return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;
+ }
+
+ get isHorizontalScrollbarEnabled() {
+ return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;
+ }
+
+ get isVerticalScrollbarEnabled() {
+ return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;
+ }
+
+ _getCurrentVisiblePage() {
+ if (!this.pagesCount) {
+ return {
+ views: []
+ };
+ }
+
+ const pageView = this._pages[this._currentPageNumber - 1];
+ const element = pageView.div;
+ const view = {
+ id: pageView.id,
+ x: element.offsetLeft + element.clientLeft,
+ y: element.offsetTop + element.clientTop,
+ view: pageView
+ };
+ return {
+ first: view,
+ last: view,
+ views: [view]
+ };
+ }
+
+ _getVisiblePages() {
+ return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true, this._isScrollModeHorizontal);
+ }
+
+ isPageVisible(pageNumber) {
+ if (!this.pdfDocument) {
+ return false;
+ }
+
+ if (pageNumber < 1 || pageNumber > this.pagesCount) {
+ console.error(`${this._name}.isPageVisible: "${pageNumber}" is out of bounds.`);
+ return false;
+ }
+
+ return this._getVisiblePages().views.some(function (view) {
+ return view.id === pageNumber;
+ });
+ }
+
+ cleanup() {
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+ this._pages[i].reset();
+ }
+ }
+ }
+
+ _cancelRendering() {
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ if (this._pages[i]) {
+ this._pages[i].cancelRendering();
+ }
+ }
+ }
+
+ _ensurePdfPageLoaded(pageView) {
+ if (pageView.pdfPage) {
+ return Promise.resolve(pageView.pdfPage);
+ }
+
+ if (this._pagesRequests.has(pageView)) {
+ return this._pagesRequests.get(pageView);
+ }
+
+ const promise = this.pdfDocument.getPage(pageView.id).then(pdfPage => {
+ if (!pageView.pdfPage) {
+ pageView.setPdfPage(pdfPage);
+ }
+
+ this._pagesRequests.delete(pageView);
+
+ return pdfPage;
+ }).catch(reason => {
+ console.error("Unable to get page for page view", reason);
+
+ this._pagesRequests.delete(pageView);
+ });
+
+ this._pagesRequests.set(pageView, promise);
+
+ return promise;
+ }
+
+ forceRendering(currentlyVisiblePages) {
+ const visiblePages = currentlyVisiblePages || this._getVisiblePages();
+
+ const scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down;
+ const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead);
+
+ if (pageView) {
+ this._ensurePdfPageLoaded(pageView).then(() => {
+ this.renderingQueue.renderView(pageView);
+ });
+
+ return true;
+ }
+
+ return false;
+ }
+
+ createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
+ return new _text_layer_builder.TextLayerBuilder({
+ textLayerDiv,
+ eventBus,
+ pageIndex,
+ viewport,
+ findController: this.isInPresentationMode ? null : this.findController,
+ enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection
+ });
+ }
+
+ createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n) {
+ return new _annotation_layer_builder.AnnotationLayerBuilder({
+ pageDiv,
+ pdfPage,
+ imageResourcesPath,
+ renderInteractiveForms,
+ linkService: this.linkService,
+ downloadManager: this.downloadManager,
+ l10n
+ });
+ }
+
+ get hasEqualPageSizes() {
+ const firstPageView = this._pages[0];
+
+ for (let i = 1, ii = this._pages.length; i < ii; ++i) {
+ const pageView = this._pages[i];
+
+ if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ getPagesOverview() {
+ const pagesOverview = this._pages.map(function (pageView) {
+ const viewport = pageView.pdfPage.getViewport({
+ scale: 1
+ });
+ return {
+ width: viewport.width,
+ height: viewport.height,
+ rotation: viewport.rotation
+ };
+ });
+
+ if (!this.enablePrintAutoRotate) {
+ return pagesOverview;
+ }
+
+ const isFirstPagePortrait = (0, _ui_utils.isPortraitOrientation)(pagesOverview[0]);
+ return pagesOverview.map(function (size) {
+ if (isFirstPagePortrait === (0, _ui_utils.isPortraitOrientation)(size)) {
+ return size;
+ }
+
+ return {
+ width: size.height,
+ height: size.width,
+ rotation: (size.rotation + 90) % 360
+ };
+ });
+ }
+
+ get scrollMode() {
+ return this._scrollMode;
+ }
+
+ set scrollMode(mode) {
+ if (this._scrollMode === mode) {
+ return;
+ }
+
+ if (!(0, _ui_utils.isValidScrollMode)(mode)) {
+ throw new Error(`Invalid scroll mode: ${mode}`);
+ }
+
+ this._scrollMode = mode;
+ this.eventBus.dispatch("scrollmodechanged", {
+ source: this,
+ mode
+ });
+
+ this._updateScrollMode(this._currentPageNumber);
+ }
+
+ _updateScrollMode(pageNumber = null) {
+ const scrollMode = this._scrollMode,
+ viewer = this.viewer;
+ viewer.classList.toggle("scrollHorizontal", scrollMode === _ui_utils.ScrollMode.HORIZONTAL);
+ viewer.classList.toggle("scrollWrapped", scrollMode === _ui_utils.ScrollMode.WRAPPED);
+
+ if (!this.pdfDocument || !pageNumber) {
+ return;
+ }
+
+ if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
+ this._setScale(this._currentScaleValue, true);
+ }
+
+ this._setCurrentPageNumber(pageNumber, true);
+
+ this.update();
+ }
+
+ get spreadMode() {
+ return this._spreadMode;
+ }
+
+ set spreadMode(mode) {
+ if (this._spreadMode === mode) {
+ return;
+ }
+
+ if (!(0, _ui_utils.isValidSpreadMode)(mode)) {
+ throw new Error(`Invalid spread mode: ${mode}`);
+ }
+
+ this._spreadMode = mode;
+ this.eventBus.dispatch("spreadmodechanged", {
+ source: this,
+ mode
+ });
+
+ this._updateSpreadMode(this._currentPageNumber);
+ }
+
+ _updateSpreadMode(pageNumber = null) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const viewer = this.viewer,
+ pages = this._pages;
+ viewer.textContent = "";
+
+ if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
+ for (let i = 0, iMax = pages.length; i < iMax; ++i) {
+ viewer.appendChild(pages[i].div);
+ }
+ } else {
+ const parity = this._spreadMode - 1;
+ let spread = null;
+
+ for (let i = 0, iMax = pages.length; i < iMax; ++i) {
+ if (spread === null) {
+ spread = document.createElement("div");
+ spread.className = "spread";
+ viewer.appendChild(spread);
+ } else if (i % 2 === parity) {
+ spread = spread.cloneNode(false);
+ viewer.appendChild(spread);
+ }
+
+ spread.appendChild(pages[i].div);
+ }
+ }
+
+ if (!pageNumber) {
+ return;
+ }
+
+ this._setCurrentPageNumber(pageNumber, true);
+
+ this.update();
+ }
+
+}
+
+exports.BaseViewer = BaseViewer;
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdf_link_service = __webpack_require__(18);
+
+class AnnotationLayerBuilder {
+ constructor({
+ pageDiv,
+ pdfPage,
+ linkService,
+ downloadManager,
+ imageResourcesPath = "",
+ renderInteractiveForms = false,
+ l10n = _ui_utils.NullL10n
+ }) {
+ this.pageDiv = pageDiv;
+ this.pdfPage = pdfPage;
+ this.linkService = linkService;
+ this.downloadManager = downloadManager;
+ this.imageResourcesPath = imageResourcesPath;
+ this.renderInteractiveForms = renderInteractiveForms;
+ this.l10n = l10n;
+ this.div = null;
+ this._cancelled = false;
+ }
+
+ render(viewport, intent = "display") {
+ this.pdfPage.getAnnotations({
+ intent
+ }).then(annotations => {
+ if (this._cancelled) {
+ return;
+ }
+
+ const parameters = {
+ viewport: viewport.clone({
+ dontFlip: true
+ }),
+ div: this.div,
+ annotations,
+ page: this.pdfPage,
+ imageResourcesPath: this.imageResourcesPath,
+ renderInteractiveForms: this.renderInteractiveForms,
+ linkService: this.linkService,
+ downloadManager: this.downloadManager
+ };
+
+ if (this.div) {
+ _pdfjsLib.AnnotationLayer.update(parameters);
+ } else {
+ if (annotations.length === 0) {
+ return;
+ }
+
+ this.div = document.createElement("div");
+ this.div.className = "annotationLayer";
+ this.pageDiv.appendChild(this.div);
+ parameters.div = this.div;
+
+ _pdfjsLib.AnnotationLayer.render(parameters);
+
+ this.l10n.translate(this.div);
+ }
+ });
+ }
+
+ cancel() {
+ this._cancelled = true;
+ }
+
+ hide() {
+ if (!this.div) {
+ return;
+ }
+
+ this.div.setAttribute("hidden", "true");
+ }
+
+}
+
+exports.AnnotationLayerBuilder = AnnotationLayerBuilder;
+
+class DefaultAnnotationLayerFactory {
+ createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n) {
+ return new AnnotationLayerBuilder({
+ pageDiv,
+ pdfPage,
+ imageResourcesPath,
+ renderInteractiveForms,
+ linkService: new _pdf_link_service.SimpleLinkService(),
+ l10n
+ });
+ }
+
+}
+
+exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory;
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFPageView = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+var _viewer_compatibility = __webpack_require__(4);
+
+const MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216;
+
+class PDFPageView {
+ constructor(options) {
+ const container = options.container;
+ const defaultViewport = options.defaultViewport;
+ this.id = options.id;
+ this.renderingId = "page" + this.id;
+ this.pdfPage = null;
+ this.pageLabel = null;
+ this.rotation = 0;
+ this.scale = options.scale || _ui_utils.DEFAULT_SCALE;
+ this.viewport = defaultViewport;
+ this.pdfPageRotate = defaultViewport.rotation;
+ this.hasRestrictedScaling = false;
+ this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
+ this.imageResourcesPath = options.imageResourcesPath || "";
+ this.renderInteractiveForms = options.renderInteractiveForms || false;
+ this.useOnlyCssZoom = options.useOnlyCssZoom || false;
+ this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;
+ this.eventBus = options.eventBus;
+ this.renderingQueue = options.renderingQueue;
+ this.textLayerFactory = options.textLayerFactory;
+ this.annotationLayerFactory = options.annotationLayerFactory;
+ this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
+ this.enableWebGL = options.enableWebGL || false;
+ this.l10n = options.l10n || _ui_utils.NullL10n;
+ this.paintTask = null;
+ this.paintedViewportMap = new WeakMap();
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ this.resume = null;
+ this.error = null;
+ this.annotationLayer = null;
+ this.textLayer = null;
+ this.zoomLayer = null;
+ const div = document.createElement("div");
+ div.className = "page";
+ div.style.width = Math.floor(this.viewport.width) + "px";
+ div.style.height = Math.floor(this.viewport.height) + "px";
+ div.setAttribute("data-page-number", this.id);
+ this.div = div;
+ container.appendChild(div);
+ }
+
+ setPdfPage(pdfPage) {
+ this.pdfPage = pdfPage;
+ this.pdfPageRotate = pdfPage.rotate;
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = pdfPage.getViewport({
+ scale: this.scale * _ui_utils.CSS_UNITS,
+ rotation: totalRotation
+ });
+ this.stats = pdfPage.stats;
+ this.reset();
+ }
+
+ destroy() {
+ this.reset();
+
+ if (this.pdfPage) {
+ this.pdfPage.cleanup();
+ }
+ }
+
+ _resetZoomLayer(removeFromDOM = false) {
+ if (!this.zoomLayer) {
+ return;
+ }
+
+ const zoomLayerCanvas = this.zoomLayer.firstChild;
+ this.paintedViewportMap.delete(zoomLayerCanvas);
+ zoomLayerCanvas.width = 0;
+ zoomLayerCanvas.height = 0;
+
+ if (removeFromDOM) {
+ this.zoomLayer.remove();
+ }
+
+ this.zoomLayer = null;
+ }
+
+ reset(keepZoomLayer = false, keepAnnotations = false) {
+ this.cancelRendering(keepAnnotations);
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ const div = this.div;
+ div.style.width = Math.floor(this.viewport.width) + "px";
+ div.style.height = Math.floor(this.viewport.height) + "px";
+ const childNodes = div.childNodes;
+ const currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null;
+ const currentAnnotationNode = keepAnnotations && this.annotationLayer && this.annotationLayer.div || null;
+
+ for (let i = childNodes.length - 1; i >= 0; i--) {
+ const node = childNodes[i];
+
+ if (currentZoomLayerNode === node || currentAnnotationNode === node) {
+ continue;
+ }
+
+ div.removeChild(node);
+ }
+
+ div.removeAttribute("data-loaded");
+
+ if (currentAnnotationNode) {
+ this.annotationLayer.hide();
+ } else if (this.annotationLayer) {
+ this.annotationLayer.cancel();
+ this.annotationLayer = null;
+ }
+
+ if (!currentZoomLayerNode) {
+ if (this.canvas) {
+ this.paintedViewportMap.delete(this.canvas);
+ this.canvas.width = 0;
+ this.canvas.height = 0;
+ delete this.canvas;
+ }
+
+ this._resetZoomLayer();
+ }
+
+ if (this.svg) {
+ this.paintedViewportMap.delete(this.svg);
+ delete this.svg;
+ }
+
+ this.loadingIconDiv = document.createElement("div");
+ this.loadingIconDiv.className = "loadingIcon";
+ div.appendChild(this.loadingIconDiv);
+ }
+
+ update(scale, rotation) {
+ this.scale = scale || this.scale;
+
+ if (typeof rotation !== "undefined") {
+ this.rotation = rotation;
+ }
+
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = this.viewport.clone({
+ scale: this.scale * _ui_utils.CSS_UNITS,
+ rotation: totalRotation
+ });
+
+ if (this.svg) {
+ this.cssTransform(this.svg, true);
+ this.eventBus.dispatch("pagerendered", {
+ source: this,
+ pageNumber: this.id,
+ cssTransform: true,
+ timestamp: performance.now()
+ });
+ return;
+ }
+
+ let isScalingRestricted = false;
+
+ if (this.canvas && this.maxCanvasPixels > 0) {
+ const outputScale = this.outputScale;
+
+ if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) {
+ isScalingRestricted = true;
+ }
+ }
+
+ if (this.canvas) {
+ if (this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) {
+ this.cssTransform(this.canvas, true);
+ this.eventBus.dispatch("pagerendered", {
+ source: this,
+ pageNumber: this.id,
+ cssTransform: true,
+ timestamp: performance.now()
+ });
+ return;
+ }
+
+ if (!this.zoomLayer && !this.canvas.hasAttribute("hidden")) {
+ this.zoomLayer = this.canvas.parentNode;
+ this.zoomLayer.style.position = "absolute";
+ }
+ }
+
+ if (this.zoomLayer) {
+ this.cssTransform(this.zoomLayer.firstChild);
+ }
+
+ this.reset(true, true);
+ }
+
+ cancelRendering(keepAnnotations = false) {
+ if (this.paintTask) {
+ this.paintTask.cancel();
+ this.paintTask = null;
+ }
+
+ this.resume = null;
+
+ if (this.textLayer) {
+ this.textLayer.cancel();
+ this.textLayer = null;
+ }
+
+ if (!keepAnnotations && this.annotationLayer) {
+ this.annotationLayer.cancel();
+ this.annotationLayer = null;
+ }
+ }
+
+ cssTransform(target, redrawAnnotations = false) {
+ const width = this.viewport.width;
+ const height = this.viewport.height;
+ const div = this.div;
+ target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + "px";
+ target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + "px";
+ const relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation;
+ const absRotation = Math.abs(relativeRotation);
+ let scaleX = 1,
+ scaleY = 1;
+
+ if (absRotation === 90 || absRotation === 270) {
+ scaleX = height / width;
+ scaleY = width / height;
+ }
+
+ const cssTransform = "rotate(" + relativeRotation + "deg) " + "scale(" + scaleX + "," + scaleY + ")";
+ target.style.transform = cssTransform;
+
+ if (this.textLayer) {
+ const textLayerViewport = this.textLayer.viewport;
+ const textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation;
+ const textAbsRotation = Math.abs(textRelativeRotation);
+ let scale = width / textLayerViewport.width;
+
+ if (textAbsRotation === 90 || textAbsRotation === 270) {
+ scale = width / textLayerViewport.height;
+ }
+
+ const textLayerDiv = this.textLayer.textLayerDiv;
+ let transX, transY;
+
+ switch (textAbsRotation) {
+ case 0:
+ transX = transY = 0;
+ break;
+
+ case 90:
+ transX = 0;
+ transY = "-" + textLayerDiv.style.height;
+ break;
+
+ case 180:
+ transX = "-" + textLayerDiv.style.width;
+ transY = "-" + textLayerDiv.style.height;
+ break;
+
+ case 270:
+ transX = "-" + textLayerDiv.style.width;
+ transY = 0;
+ break;
+
+ default:
+ console.error("Bad rotation value.");
+ break;
+ }
+
+ textLayerDiv.style.transform = "rotate(" + textAbsRotation + "deg) " + "scale(" + scale + ", " + scale + ") " + "translate(" + transX + ", " + transY + ")";
+ textLayerDiv.style.transformOrigin = "0% 0%";
+ }
+
+ if (redrawAnnotations && this.annotationLayer) {
+ this.annotationLayer.render(this.viewport, "display");
+ }
+ }
+
+ get width() {
+ return this.viewport.width;
+ }
+
+ get height() {
+ return this.viewport.height;
+ }
+
+ getPagePoint(x, y) {
+ return this.viewport.convertToPdfPoint(x, y);
+ }
+
+ draw() {
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
+ console.error("Must be in new state before drawing");
+ this.reset();
+ }
+
+ const {
+ div,
+ pdfPage
+ } = this;
+
+ if (!pdfPage) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ if (this.loadingIconDiv) {
+ div.removeChild(this.loadingIconDiv);
+ delete this.loadingIconDiv;
+ }
+
+ return Promise.reject(new Error("pdfPage is not loaded"));
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+ const canvasWrapper = document.createElement("div");
+ canvasWrapper.style.width = div.style.width;
+ canvasWrapper.style.height = div.style.height;
+ canvasWrapper.classList.add("canvasWrapper");
+
+ if (this.annotationLayer && this.annotationLayer.div) {
+ div.insertBefore(canvasWrapper, this.annotationLayer.div);
+ } else {
+ div.appendChild(canvasWrapper);
+ }
+
+ let textLayer = null;
+
+ if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) {
+ const textLayerDiv = document.createElement("div");
+ textLayerDiv.className = "textLayer";
+ textLayerDiv.style.width = canvasWrapper.style.width;
+ textLayerDiv.style.height = canvasWrapper.style.height;
+
+ if (this.annotationLayer && this.annotationLayer.div) {
+ div.insertBefore(textLayerDiv, this.annotationLayer.div);
+ } else {
+ div.appendChild(textLayerDiv);
+ }
+
+ textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE, this.eventBus);
+ }
+
+ this.textLayer = textLayer;
+ let renderContinueCallback = null;
+
+ if (this.renderingQueue) {
+ renderContinueCallback = cont => {
+ if (!this.renderingQueue.isHighestPriority(this)) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;
+
+ this.resume = () => {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+ cont();
+ };
+
+ return;
+ }
+
+ cont();
+ };
+ }
+
+ const finishPaintTask = async error => {
+ if (paintTask === this.paintTask) {
+ this.paintTask = null;
+ }
+
+ if (error instanceof _pdfjsLib.RenderingCancelledException) {
+ this.error = null;
+ return;
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ if (this.loadingIconDiv) {
+ div.removeChild(this.loadingIconDiv);
+ delete this.loadingIconDiv;
+ }
+
+ this._resetZoomLayer(true);
+
+ this.error = error;
+ this.stats = pdfPage.stats;
+ this.eventBus.dispatch("pagerendered", {
+ source: this,
+ pageNumber: this.id,
+ cssTransform: false,
+ timestamp: performance.now()
+ });
+
+ if (error) {
+ throw error;
+ }
+ };
+
+ const paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper);
+ paintTask.onRenderContinue = renderContinueCallback;
+ this.paintTask = paintTask;
+ const resultPromise = paintTask.promise.then(function () {
+ return finishPaintTask(null).then(function () {
+ if (textLayer) {
+ const readableStream = pdfPage.streamTextContent({
+ normalizeWhitespace: true
+ });
+ textLayer.setTextContentStream(readableStream);
+ textLayer.render();
+ }
+ });
+ }, function (reason) {
+ return finishPaintTask(reason);
+ });
+
+ if (this.annotationLayerFactory) {
+ if (!this.annotationLayer) {
+ this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, this.imageResourcesPath, this.renderInteractiveForms, this.l10n);
+ }
+
+ this.annotationLayer.render(this.viewport, "display");
+ }
+
+ div.setAttribute("data-loaded", true);
+ this.eventBus.dispatch("pagerender", {
+ source: this,
+ pageNumber: this.id
+ });
+ return resultPromise;
+ }
+
+ paintOnCanvas(canvasWrapper) {
+ const renderCapability = (0, _pdfjsLib.createPromiseCapability)();
+ const result = {
+ promise: renderCapability.promise,
+
+ onRenderContinue(cont) {
+ cont();
+ },
+
+ cancel() {
+ renderTask.cancel();
+ }
+
+ };
+ const viewport = this.viewport;
+ const canvas = document.createElement("canvas");
+ this.l10n.get("page_canvas", {
+ page: this.id
+ }, "Page {{page}}").then(msg => {
+ canvas.setAttribute("aria-label", msg);
+ });
+ canvas.setAttribute("hidden", "hidden");
+ let isCanvasHidden = true;
+
+ const showCanvas = function () {
+ if (isCanvasHidden) {
+ canvas.removeAttribute("hidden");
+ isCanvasHidden = false;
+ }
+ };
+
+ canvasWrapper.appendChild(canvas);
+ this.canvas = canvas;
+ canvas.mozOpaque = true;
+ const ctx = canvas.getContext("2d", {
+ alpha: false
+ });
+ const outputScale = (0, _ui_utils.getOutputScale)(ctx);
+ this.outputScale = outputScale;
+
+ if (this.useOnlyCssZoom) {
+ const actualSizeViewport = viewport.clone({
+ scale: _ui_utils.CSS_UNITS
+ });
+ outputScale.sx *= actualSizeViewport.width / viewport.width;
+ outputScale.sy *= actualSizeViewport.height / viewport.height;
+ outputScale.scaled = true;
+ }
+
+ if (this.maxCanvasPixels > 0) {
+ const pixelsInViewport = viewport.width * viewport.height;
+ const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);
+
+ if (outputScale.sx > maxScale || outputScale.sy > maxScale) {
+ outputScale.sx = maxScale;
+ outputScale.sy = maxScale;
+ outputScale.scaled = true;
+ this.hasRestrictedScaling = true;
+ } else {
+ this.hasRestrictedScaling = false;
+ }
+ }
+
+ const sfx = (0, _ui_utils.approximateFraction)(outputScale.sx);
+ const sfy = (0, _ui_utils.approximateFraction)(outputScale.sy);
+ canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]);
+ canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]);
+ canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + "px";
+ canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + "px";
+ this.paintedViewportMap.set(canvas, viewport);
+ const transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];
+ const renderContext = {
+ canvasContext: ctx,
+ transform,
+ viewport: this.viewport,
+ enableWebGL: this.enableWebGL,
+ renderInteractiveForms: this.renderInteractiveForms
+ };
+ const renderTask = this.pdfPage.render(renderContext);
+
+ renderTask.onContinue = function (cont) {
+ showCanvas();
+
+ if (result.onRenderContinue) {
+ result.onRenderContinue(cont);
+ } else {
+ cont();
+ }
+ };
+
+ renderTask.promise.then(function () {
+ showCanvas();
+ renderCapability.resolve(undefined);
+ }, function (error) {
+ showCanvas();
+ renderCapability.reject(error);
+ });
+ return result;
+ }
+
+ paintOnSvg(wrapper) {
+ let cancelled = false;
+
+ const ensureNotCancelled = () => {
+ if (cancelled) {
+ throw new _pdfjsLib.RenderingCancelledException(`Rendering cancelled, page ${this.id}`, "svg");
+ }
+ };
+
+ const pdfPage = this.pdfPage;
+ const actualSizeViewport = this.viewport.clone({
+ scale: _ui_utils.CSS_UNITS
+ });
+ const promise = pdfPage.getOperatorList().then(opList => {
+ ensureNotCancelled();
+ const svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs);
+ return svgGfx.getSVG(opList, actualSizeViewport).then(svg => {
+ ensureNotCancelled();
+ this.svg = svg;
+ this.paintedViewportMap.set(svg, actualSizeViewport);
+ svg.style.width = wrapper.style.width;
+ svg.style.height = wrapper.style.height;
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+ wrapper.appendChild(svg);
+ });
+ });
+ return {
+ promise,
+
+ onRenderContinue(cont) {
+ cont();
+ },
+
+ cancel() {
+ cancelled = true;
+ }
+
+ };
+ }
+
+ setPageLabel(label) {
+ this.pageLabel = typeof label === "string" ? label : null;
+
+ if (this.pageLabel !== null) {
+ this.div.setAttribute("data-page-label", this.pageLabel);
+ } else {
+ this.div.removeAttribute("data-page-label");
+ }
+ }
+
+}
+
+exports.PDFPageView = PDFPageView;
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.DefaultTextLayerFactory = exports.TextLayerBuilder = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+const EXPAND_DIVS_TIMEOUT = 300;
+
+class TextLayerBuilder {
+ constructor({
+ textLayerDiv,
+ eventBus,
+ pageIndex,
+ viewport,
+ findController = null,
+ enhanceTextSelection = false
+ }) {
+ this.textLayerDiv = textLayerDiv;
+ this.eventBus = eventBus;
+ this.textContent = null;
+ this.textContentItemsStr = [];
+ this.textContentStream = null;
+ this.renderingDone = false;
+ this.pageIdx = pageIndex;
+ this.pageNumber = this.pageIdx + 1;
+ this.matches = [];
+ this.viewport = viewport;
+ this.textDivs = [];
+ this.findController = findController;
+ this.textLayerRenderTask = null;
+ this.enhanceTextSelection = enhanceTextSelection;
+ this._onUpdateTextLayerMatches = null;
+
+ this._bindMouse();
+ }
+
+ _finishRendering() {
+ this.renderingDone = true;
+
+ if (!this.enhanceTextSelection) {
+ const endOfContent = document.createElement("div");
+ endOfContent.className = "endOfContent";
+ this.textLayerDiv.appendChild(endOfContent);
+ }
+
+ this.eventBus.dispatch("textlayerrendered", {
+ source: this,
+ pageNumber: this.pageNumber,
+ numTextDivs: this.textDivs.length
+ });
+ }
+
+ render(timeout = 0) {
+ if (!(this.textContent || this.textContentStream) || this.renderingDone) {
+ return;
+ }
+
+ this.cancel();
+ this.textDivs = [];
+ const textLayerFrag = document.createDocumentFragment();
+ this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({
+ textContent: this.textContent,
+ textContentStream: this.textContentStream,
+ container: textLayerFrag,
+ viewport: this.viewport,
+ textDivs: this.textDivs,
+ textContentItemsStr: this.textContentItemsStr,
+ timeout,
+ enhanceTextSelection: this.enhanceTextSelection
+ });
+ this.textLayerRenderTask.promise.then(() => {
+ this.textLayerDiv.appendChild(textLayerFrag);
+
+ this._finishRendering();
+
+ this._updateMatches();
+ }, function (reason) {});
+
+ if (!this._onUpdateTextLayerMatches) {
+ this._onUpdateTextLayerMatches = evt => {
+ if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {
+ this._updateMatches();
+ }
+ };
+
+ this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches);
+ }
+ }
+
+ cancel() {
+ if (this.textLayerRenderTask) {
+ this.textLayerRenderTask.cancel();
+ this.textLayerRenderTask = null;
+ }
+
+ if (this._onUpdateTextLayerMatches) {
+ this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches);
+
+ this._onUpdateTextLayerMatches = null;
+ }
+ }
+
+ setTextContentStream(readableStream) {
+ this.cancel();
+ this.textContentStream = readableStream;
+ }
+
+ setTextContent(textContent) {
+ this.cancel();
+ this.textContent = textContent;
+ }
+
+ _convertMatches(matches, matchesLength) {
+ if (!matches) {
+ return [];
+ }
+
+ const {
+ findController,
+ textContentItemsStr
+ } = this;
+ let i = 0,
+ iIndex = 0;
+ const end = textContentItemsStr.length - 1;
+ const queryLen = findController.state.query.length;
+ const result = [];
+
+ for (let m = 0, mm = matches.length; m < mm; m++) {
+ let matchIdx = matches[m];
+
+ while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {
+ iIndex += textContentItemsStr[i].length;
+ i++;
+ }
+
+ if (i === textContentItemsStr.length) {
+ console.error("Could not find a matching mapping");
+ }
+
+ const match = {
+ begin: {
+ divIdx: i,
+ offset: matchIdx - iIndex
+ }
+ };
+
+ if (matchesLength) {
+ matchIdx += matchesLength[m];
+ } else {
+ matchIdx += queryLen;
+ }
+
+ while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {
+ iIndex += textContentItemsStr[i].length;
+ i++;
+ }
+
+ match.end = {
+ divIdx: i,
+ offset: matchIdx - iIndex
+ };
+ result.push(match);
+ }
+
+ return result;
+ }
+
+ _renderMatches(matches) {
+ if (matches.length === 0) {
+ return;
+ }
+
+ const {
+ findController,
+ pageIdx,
+ textContentItemsStr,
+ textDivs
+ } = this;
+ const isSelectedPage = pageIdx === findController.selected.pageIdx;
+ const selectedMatchIdx = findController.selected.matchIdx;
+ const highlightAll = findController.state.highlightAll;
+ let prevEnd = null;
+ const infinity = {
+ divIdx: -1,
+ offset: undefined
+ };
+
+ function beginText(begin, className) {
+ const divIdx = begin.divIdx;
+ textDivs[divIdx].textContent = "";
+ appendTextToDiv(divIdx, 0, begin.offset, className);
+ }
+
+ function appendTextToDiv(divIdx, fromOffset, toOffset, className) {
+ const div = textDivs[divIdx];
+ const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);
+ const node = document.createTextNode(content);
+
+ if (className) {
+ const span = document.createElement("span");
+ span.className = className;
+ span.appendChild(node);
+ div.appendChild(span);
+ return;
+ }
+
+ div.appendChild(node);
+ }
+
+ let i0 = selectedMatchIdx,
+ i1 = i0 + 1;
+
+ if (highlightAll) {
+ i0 = 0;
+ i1 = matches.length;
+ } else if (!isSelectedPage) {
+ return;
+ }
+
+ for (let i = i0; i < i1; i++) {
+ const match = matches[i];
+ const begin = match.begin;
+ const end = match.end;
+ const isSelected = isSelectedPage && i === selectedMatchIdx;
+ const highlightSuffix = isSelected ? " selected" : "";
+
+ if (isSelected) {
+ findController.scrollMatchIntoView({
+ element: textDivs[begin.divIdx],
+ pageIndex: pageIdx,
+ matchIndex: selectedMatchIdx
+ });
+ }
+
+ if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {
+ if (prevEnd !== null) {
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
+ }
+
+ beginText(begin);
+ } else {
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);
+ }
+
+ if (begin.divIdx === end.divIdx) {
+ appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix);
+ } else {
+ appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix);
+
+ for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {
+ textDivs[n0].className = "highlight middle" + highlightSuffix;
+ }
+
+ beginText(end, "highlight end" + highlightSuffix);
+ }
+
+ prevEnd = end;
+ }
+
+ if (prevEnd) {
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
+ }
+ }
+
+ _updateMatches() {
+ if (!this.renderingDone) {
+ return;
+ }
+
+ const {
+ findController,
+ matches,
+ pageIdx,
+ textContentItemsStr,
+ textDivs
+ } = this;
+ let clearedUntilDivIdx = -1;
+
+ for (let i = 0, ii = matches.length; i < ii; i++) {
+ const match = matches[i];
+ const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);
+
+ for (let n = begin, end = match.end.divIdx; n <= end; n++) {
+ const div = textDivs[n];
+ div.textContent = textContentItemsStr[n];
+ div.className = "";
+ }
+
+ clearedUntilDivIdx = match.end.divIdx + 1;
+ }
+
+ if (!findController || !findController.highlightMatches) {
+ return;
+ }
+
+ const pageMatches = findController.pageMatches[pageIdx] || null;
+ const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;
+ this.matches = this._convertMatches(pageMatches, pageMatchesLength);
+
+ this._renderMatches(this.matches);
+ }
+
+ _bindMouse() {
+ const div = this.textLayerDiv;
+ let expandDivsTimer = null;
+ div.addEventListener("mousedown", evt => {
+ if (this.enhanceTextSelection && this.textLayerRenderTask) {
+ this.textLayerRenderTask.expandTextDivs(true);
+
+ if (expandDivsTimer) {
+ clearTimeout(expandDivsTimer);
+ expandDivsTimer = null;
+ }
+
+ return;
+ }
+
+ const end = div.querySelector(".endOfContent");
+
+ if (!end) {
+ return;
+ }
+
+ let adjustTop = evt.target !== div;
+ adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none";
+
+ if (adjustTop) {
+ const divBounds = div.getBoundingClientRect();
+ const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);
+ end.style.top = (r * 100).toFixed(2) + "%";
+ }
+
+ end.classList.add("active");
+ });
+ div.addEventListener("mouseup", () => {
+ if (this.enhanceTextSelection && this.textLayerRenderTask) {
+ expandDivsTimer = setTimeout(() => {
+ if (this.textLayerRenderTask) {
+ this.textLayerRenderTask.expandTextDivs(false);
+ }
+
+ expandDivsTimer = null;
+ }, EXPAND_DIVS_TIMEOUT);
+ return;
+ }
+
+ const end = div.querySelector(".endOfContent");
+
+ if (!end) {
+ return;
+ }
+
+ end.style.top = "";
+ end.classList.remove("active");
+ });
+ }
+
+}
+
+exports.TextLayerBuilder = TextLayerBuilder;
+
+class DefaultTextLayerFactory {
+ createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
+ return new TextLayerBuilder({
+ textLayerDiv,
+ pageIndex,
+ viewport,
+ enhanceTextSelection,
+ eventBus
+ });
+ }
+
+}
+
+exports.DefaultTextLayerFactory = DefaultTextLayerFactory;
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.SecondaryToolbar = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+var _pdf_cursor_tools = __webpack_require__(6);
+
+var _pdf_single_page_viewer = __webpack_require__(30);
+
+class SecondaryToolbar {
+ constructor(options, mainContainer, eventBus) {
+ this.toolbar = options.toolbar;
+ this.toggleButton = options.toggleButton;
+ this.toolbarButtonContainer = options.toolbarButtonContainer;
+ this.buttons = [{
+ element: options.presentationModeButton,
+ eventName: "presentationmode",
+ close: true
+ }, {
+ element: options.openFileButton,
+ eventName: "openfile",
+ close: true
+ }, {
+ element: options.printButton,
+ eventName: "print",
+ close: true
+ }, {
+ element: options.downloadButton,
+ eventName: "download",
+ close: true
+ }, {
+ element: options.viewBookmarkButton,
+ eventName: null,
+ close: true
+ }, {
+ element: options.firstPageButton,
+ eventName: "firstpage",
+ close: true
+ }, {
+ element: options.lastPageButton,
+ eventName: "lastpage",
+ close: true
+ }, {
+ element: options.pageRotateCwButton,
+ eventName: "rotatecw",
+ close: false
+ }, {
+ element: options.pageRotateCcwButton,
+ eventName: "rotateccw",
+ close: false
+ }, {
+ element: options.cursorSelectToolButton,
+ eventName: "switchcursortool",
+ eventDetails: {
+ tool: _pdf_cursor_tools.CursorTool.SELECT
+ },
+ close: true
+ }, {
+ element: options.cursorHandToolButton,
+ eventName: "switchcursortool",
+ eventDetails: {
+ tool: _pdf_cursor_tools.CursorTool.HAND
+ },
+ close: true
+ }, {
+ element: options.scrollVerticalButton,
+ eventName: "switchscrollmode",
+ eventDetails: {
+ mode: _ui_utils.ScrollMode.VERTICAL
+ },
+ close: true
+ }, {
+ element: options.scrollHorizontalButton,
+ eventName: "switchscrollmode",
+ eventDetails: {
+ mode: _ui_utils.ScrollMode.HORIZONTAL
+ },
+ close: true
+ }, {
+ element: options.scrollWrappedButton,
+ eventName: "switchscrollmode",
+ eventDetails: {
+ mode: _ui_utils.ScrollMode.WRAPPED
+ },
+ close: true
+ }, {
+ element: options.spreadNoneButton,
+ eventName: "switchspreadmode",
+ eventDetails: {
+ mode: _ui_utils.SpreadMode.NONE
+ },
+ close: true
+ }, {
+ element: options.spreadOddButton,
+ eventName: "switchspreadmode",
+ eventDetails: {
+ mode: _ui_utils.SpreadMode.ODD
+ },
+ close: true
+ }, {
+ element: options.spreadEvenButton,
+ eventName: "switchspreadmode",
+ eventDetails: {
+ mode: _ui_utils.SpreadMode.EVEN
+ },
+ close: true
+ }, {
+ element: options.documentPropertiesButton,
+ eventName: "documentproperties",
+ close: true
+ }];
+ this.items = {
+ firstPage: options.firstPageButton,
+ lastPage: options.lastPageButton,
+ pageRotateCw: options.pageRotateCwButton,
+ pageRotateCcw: options.pageRotateCcwButton
+ };
+ this.mainContainer = mainContainer;
+ this.eventBus = eventBus;
+ this.opened = false;
+ this.containerHeight = null;
+ this.previousContainerHeight = null;
+ this.reset();
+
+ this._bindClickListeners();
+
+ this._bindCursorToolsListener(options);
+
+ this._bindScrollModeListener(options);
+
+ this._bindSpreadModeListener(options);
+
+ this.eventBus._on("resize", this._setMaxHeight.bind(this));
+
+ this.eventBus._on("baseviewerinit", evt => {
+ if (evt.source instanceof _pdf_single_page_viewer.PDFSinglePageViewer) {
+ this.toolbarButtonContainer.classList.add("hiddenScrollModeButtons", "hiddenSpreadModeButtons");
+ } else {
+ this.toolbarButtonContainer.classList.remove("hiddenScrollModeButtons", "hiddenSpreadModeButtons");
+ }
+ });
+ }
+
+ get isOpen() {
+ return this.opened;
+ }
+
+ setPageNumber(pageNumber) {
+ this.pageNumber = pageNumber;
+
+ this._updateUIState();
+ }
+
+ setPagesCount(pagesCount) {
+ this.pagesCount = pagesCount;
+
+ this._updateUIState();
+ }
+
+ reset() {
+ this.pageNumber = 0;
+ this.pagesCount = 0;
+
+ this._updateUIState();
+
+ this.eventBus.dispatch("secondarytoolbarreset", {
+ source: this
+ });
+ }
+
+ _updateUIState() {
+ this.items.firstPage.disabled = this.pageNumber <= 1;
+ this.items.lastPage.disabled = this.pageNumber >= this.pagesCount;
+ this.items.pageRotateCw.disabled = this.pagesCount === 0;
+ this.items.pageRotateCcw.disabled = this.pagesCount === 0;
+ }
+
+ _bindClickListeners() {
+ this.toggleButton.addEventListener("click", this.toggle.bind(this));
+
+ for (const {
+ element,
+ eventName,
+ close,
+ eventDetails
+ } of this.buttons) {
+ element.addEventListener("click", evt => {
+ if (eventName !== null) {
+ const details = {
+ source: this
+ };
+
+ for (const property in eventDetails) {
+ details[property] = eventDetails[property];
+ }
+
+ this.eventBus.dispatch(eventName, details);
+ }
+
+ if (close) {
+ this.close();
+ }
+ });
+ }
+ }
+
+ _bindCursorToolsListener(buttons) {
+ this.eventBus._on("cursortoolchanged", function ({
+ tool
+ }) {
+ buttons.cursorSelectToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.SELECT);
+ buttons.cursorHandToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.HAND);
+ });
+ }
+
+ _bindScrollModeListener(buttons) {
+ function scrollModeChanged({
+ mode
+ }) {
+ buttons.scrollVerticalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.VERTICAL);
+ buttons.scrollHorizontalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.HORIZONTAL);
+ buttons.scrollWrappedButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.WRAPPED);
+ const isScrollModeHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL;
+ buttons.spreadNoneButton.disabled = isScrollModeHorizontal;
+ buttons.spreadOddButton.disabled = isScrollModeHorizontal;
+ buttons.spreadEvenButton.disabled = isScrollModeHorizontal;
+ }
+
+ this.eventBus._on("scrollmodechanged", scrollModeChanged);
+
+ this.eventBus._on("secondarytoolbarreset", evt => {
+ if (evt.source === this) {
+ scrollModeChanged({
+ mode: _ui_utils.ScrollMode.VERTICAL
+ });
+ }
+ });
+ }
+
+ _bindSpreadModeListener(buttons) {
+ function spreadModeChanged({
+ mode
+ }) {
+ buttons.spreadNoneButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.NONE);
+ buttons.spreadOddButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.ODD);
+ buttons.spreadEvenButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.EVEN);
+ }
+
+ this.eventBus._on("spreadmodechanged", spreadModeChanged);
+
+ this.eventBus._on("secondarytoolbarreset", evt => {
+ if (evt.source === this) {
+ spreadModeChanged({
+ mode: _ui_utils.SpreadMode.NONE
+ });
+ }
+ });
+ }
+
+ open() {
+ if (this.opened) {
+ return;
+ }
+
+ this.opened = true;
+
+ this._setMaxHeight();
+
+ this.toggleButton.classList.add("toggled");
+ this.toolbar.classList.remove("hidden");
+ }
+
+ close() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.opened = false;
+ this.toolbar.classList.add("hidden");
+ this.toggleButton.classList.remove("toggled");
+ }
+
+ toggle() {
+ if (this.opened) {
+ this.close();
+ } else {
+ this.open();
+ }
+ }
+
+ _setMaxHeight() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.containerHeight = this.mainContainer.clientHeight;
+
+ if (this.containerHeight === this.previousContainerHeight) {
+ return;
+ }
+
+ this.toolbarButtonContainer.style.maxHeight = `${this.containerHeight - _ui_utils.SCROLLBAR_PADDING}px`;
+ this.previousContainerHeight = this.containerHeight;
+ }
+
+}
+
+exports.SecondaryToolbar = SecondaryToolbar;
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFSinglePageViewer = void 0;
+
+var _base_viewer = __webpack_require__(25);
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PDFSinglePageViewer extends _base_viewer.BaseViewer {
+ constructor(options) {
+ super(options);
+
+ this.eventBus._on("pagesinit", evt => {
+ this._ensurePageViewVisible();
+ });
+ }
+
+ get _viewerElement() {
+ return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer);
+ }
+
+ _resetView() {
+ super._resetView();
+
+ this._previousPageNumber = 1;
+ this._shadowViewer = document.createDocumentFragment();
+ this._updateScrollDown = null;
+ }
+
+ _ensurePageViewVisible() {
+ const pageView = this._pages[this._currentPageNumber - 1];
+ const previousPageView = this._pages[this._previousPageNumber - 1];
+ const viewerNodes = this.viewer.childNodes;
+
+ switch (viewerNodes.length) {
+ case 0:
+ this.viewer.appendChild(pageView.div);
+ break;
+
+ case 1:
+ if (viewerNodes[0] !== previousPageView.div) {
+ throw new Error("_ensurePageViewVisible: Unexpected previously visible page.");
+ }
+
+ if (pageView === previousPageView) {
+ break;
+ }
+
+ this._shadowViewer.appendChild(previousPageView.div);
+
+ this.viewer.appendChild(pageView.div);
+ this.container.scrollTop = 0;
+ break;
+
+ default:
+ throw new Error("_ensurePageViewVisible: Only one page should be visible at a time.");
+ }
+
+ this._previousPageNumber = this._currentPageNumber;
+ }
+
+ _scrollUpdate() {
+ if (this._updateScrollDown) {
+ this._updateScrollDown();
+ }
+
+ super._scrollUpdate();
+ }
+
+ _scrollIntoView({
+ pageDiv,
+ pageSpot = null,
+ pageNumber = null
+ }) {
+ if (pageNumber) {
+ this._setCurrentPageNumber(pageNumber);
+ }
+
+ const scrolledDown = this._currentPageNumber >= this._previousPageNumber;
+
+ this._ensurePageViewVisible();
+
+ this.update();
+
+ super._scrollIntoView({
+ pageDiv,
+ pageSpot,
+ pageNumber
+ });
+
+ this._updateScrollDown = () => {
+ this.scroll.down = scrolledDown;
+ this._updateScrollDown = null;
+ };
+ }
+
+ _getVisiblePages() {
+ return this._getCurrentVisiblePage();
+ }
+
+ _updateHelper(visiblePages) {}
+
+ get _isScrollModeHorizontal() {
+ return (0, _pdfjsLib.shadow)(this, "_isScrollModeHorizontal", false);
+ }
+
+ _updateScrollMode() {}
+
+ _updateSpreadMode() {}
+
+}
+
+exports.PDFSinglePageViewer = PDFSinglePageViewer;
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Toolbar = void 0;
+
+var _ui_utils = __webpack_require__(2);
+
+const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading";
+const SCALE_SELECT_CONTAINER_WIDTH = 140;
+const SCALE_SELECT_WIDTH = 162;
+
+class Toolbar {
+ constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
+ this.toolbar = options.container;
+ this.eventBus = eventBus;
+ this.l10n = l10n;
+ this.buttons = [{
+ element: options.previous,
+ eventName: "previouspage"
+ }, {
+ element: options.next,
+ eventName: "nextpage"
+ }, {
+ element: options.zoomIn,
+ eventName: "zoomin"
+ }, {
+ element: options.zoomOut,
+ eventName: "zoomout"
+ }, {
+ element: options.openFile,
+ eventName: "openfile"
+ }, {
+ element: options.print,
+ eventName: "print"
+ }, {
+ element: options.presentationModeButton,
+ eventName: "presentationmode"
+ }, {
+ element: options.download,
+ eventName: "download"
+ }, {
+ element: options.viewBookmark,
+ eventName: null
+ }];
+ this.items = {
+ numPages: options.numPages,
+ pageNumber: options.pageNumber,
+ scaleSelectContainer: options.scaleSelectContainer,
+ scaleSelect: options.scaleSelect,
+ customScaleOption: options.customScaleOption,
+ previous: options.previous,
+ next: options.next,
+ zoomIn: options.zoomIn,
+ zoomOut: options.zoomOut
+ };
+ this._wasLocalized = false;
+ this.reset();
+
+ this._bindListeners();
+ }
+
+ setPageNumber(pageNumber, pageLabel) {
+ this.pageNumber = pageNumber;
+ this.pageLabel = pageLabel;
+
+ this._updateUIState(false);
+ }
+
+ setPagesCount(pagesCount, hasPageLabels) {
+ this.pagesCount = pagesCount;
+ this.hasPageLabels = hasPageLabels;
+
+ this._updateUIState(true);
+ }
+
+ setPageScale(pageScaleValue, pageScale) {
+ this.pageScaleValue = (pageScaleValue || pageScale).toString();
+ this.pageScale = pageScale;
+
+ this._updateUIState(false);
+ }
+
+ reset() {
+ this.pageNumber = 0;
+ this.pageLabel = null;
+ this.hasPageLabels = false;
+ this.pagesCount = 0;
+ this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ this.pageScale = _ui_utils.DEFAULT_SCALE;
+
+ this._updateUIState(true);
+
+ this.updateLoadingIndicatorState();
+ }
+
+ _bindListeners() {
+ const {
+ pageNumber,
+ scaleSelect
+ } = this.items;
+ const self = this;
+
+ for (const {
+ element,
+ eventName
+ } of this.buttons) {
+ element.addEventListener("click", evt => {
+ if (eventName !== null) {
+ this.eventBus.dispatch(eventName, {
+ source: this
+ });
+ }
+ });
+ }
+
+ pageNumber.addEventListener("click", function () {
+ this.select();
+ });
+ pageNumber.addEventListener("change", function () {
+ self.eventBus.dispatch("pagenumberchanged", {
+ source: self,
+ value: this.value
+ });
+ });
+ scaleSelect.addEventListener("change", function () {
+ if (this.value === "custom") {
+ return;
+ }
+
+ self.eventBus.dispatch("scalechanged", {
+ source: self,
+ value: this.value
+ });
+ });
+ scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;
+
+ this.eventBus._on("localized", () => {
+ this._wasLocalized = true;
+
+ this._adjustScaleWidth();
+
+ this._updateUIState(true);
+ });
+ }
+
+ _updateUIState(resetNumPages = false) {
+ if (!this._wasLocalized) {
+ return;
+ }
+
+ const {
+ pageNumber,
+ pagesCount,
+ pageScaleValue,
+ pageScale,
+ items
+ } = this;
+
+ if (resetNumPages) {
+ if (this.hasPageLabels) {
+ items.pageNumber.type = "text";
+ } else {
+ items.pageNumber.type = "number";
+ this.l10n.get("of_pages", {
+ pagesCount
+ }, "of {{pagesCount}}").then(msg => {
+ items.numPages.textContent = msg;
+ });
+ }
+
+ items.pageNumber.max = pagesCount;
+ }
+
+ if (this.hasPageLabels) {
+ items.pageNumber.value = this.pageLabel;
+ this.l10n.get("page_of_pages", {
+ pageNumber,
+ pagesCount
+ }, "({{pageNumber}} of {{pagesCount}})").then(msg => {
+ items.numPages.textContent = msg;
+ });
+ } else {
+ items.pageNumber.value = pageNumber;
+ }
+
+ items.previous.disabled = pageNumber <= 1;
+ items.next.disabled = pageNumber >= pagesCount;
+ items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;
+ items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;
+ const customScale = Math.round(pageScale * 10000) / 100;
+ this.l10n.get("page_scale_percent", {
+ scale: customScale
+ }, "{{scale}}%").then(msg => {
+ let predefinedValueFound = false;
+
+ for (const option of items.scaleSelect.options) {
+ if (option.value !== pageScaleValue) {
+ option.selected = false;
+ continue;
+ }
+
+ option.selected = true;
+ predefinedValueFound = true;
+ }
+
+ if (!predefinedValueFound) {
+ items.customScaleOption.textContent = msg;
+ items.customScaleOption.selected = true;
+ }
+ });
+ }
+
+ updateLoadingIndicatorState(loading = false) {
+ const pageNumberInput = this.items.pageNumber;
+ pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading);
+ }
+
+ async _adjustScaleWidth() {
+ const {
+ items,
+ l10n
+ } = this;
+ const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto", null, "Automatic Zoom"), l10n.get("page_scale_actual", null, "Actual Size"), l10n.get("page_scale_fit", null, "Page Fit"), l10n.get("page_scale_width", null, "Page Width")]);
+ let canvas = document.createElement("canvas");
+ canvas.mozOpaque = true;
+ let ctx = canvas.getContext("2d", {
+ alpha: false
+ });
+ await _ui_utils.animationStarted;
+ const {
+ fontSize,
+ fontFamily
+ } = getComputedStyle(items.scaleSelect);
+ ctx.font = `${fontSize} ${fontFamily}`;
+ let maxWidth = 0;
+
+ for (const predefinedValue of await predefinedValuesPromise) {
+ const {
+ width
+ } = ctx.measureText(predefinedValue);
+
+ if (width > maxWidth) {
+ maxWidth = width;
+ }
+ }
+
+ const overflow = SCALE_SELECT_WIDTH - SCALE_SELECT_CONTAINER_WIDTH;
+ maxWidth += 1.5 * overflow;
+
+ if (maxWidth > SCALE_SELECT_CONTAINER_WIDTH) {
+ items.scaleSelect.style.width = `${maxWidth + overflow}px`;
+ items.scaleSelectContainer.style.width = `${maxWidth}px`;
+ }
+
+ canvas.width = 0;
+ canvas.height = 0;
+ canvas = ctx = null;
+ }
+
+}
+
+exports.Toolbar = Toolbar;
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.ViewHistory = void 0;
+const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;
+
+class ViewHistory {
+ constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) {
+ this.fingerprint = fingerprint;
+ this.cacheSize = cacheSize;
+ this._initializedPromise = this._readFromStorage().then(databaseStr => {
+ const database = JSON.parse(databaseStr || "{}");
+ let index = -1;
+
+ if (!Array.isArray(database.files)) {
+ database.files = [];
+ } else {
+ while (database.files.length >= this.cacheSize) {
+ database.files.shift();
+ }
+
+ for (let i = 0, ii = database.files.length; i < ii; i++) {
+ const branch = database.files[i];
+
+ if (branch.fingerprint === this.fingerprint) {
+ index = i;
+ break;
+ }
+ }
+ }
+
+ if (index === -1) {
+ index = database.files.push({
+ fingerprint: this.fingerprint
+ }) - 1;
+ }
+
+ this.file = database.files[index];
+ this.database = database;
+ });
+ }
+
+ async _writeToStorage() {
+ const databaseStr = JSON.stringify(this.database);
+ localStorage.setItem("pdfjs.history", databaseStr);
+ }
+
+ async _readFromStorage() {
+ return localStorage.getItem("pdfjs.history");
+ }
+
+ async set(name, val) {
+ await this._initializedPromise;
+ this.file[name] = val;
+ return this._writeToStorage();
+ }
+
+ async setMultiple(properties) {
+ await this._initializedPromise;
+
+ for (const name in properties) {
+ this.file[name] = properties[name];
+ }
+
+ return this._writeToStorage();
+ }
+
+ async get(name, defaultValue) {
+ await this._initializedPromise;
+ const val = this.file[name];
+ return val !== undefined ? val : defaultValue;
+ }
+
+ async getMultiple(properties) {
+ await this._initializedPromise;
+ const values = Object.create(null);
+
+ for (const name in properties) {
+ const val = this.file[name];
+ values[name] = val !== undefined ? val : properties[name];
+ }
+
+ return values;
+ }
+
+}
+
+exports.ViewHistory = ViewHistory;
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.GenericCom = void 0;
+
+var _app = __webpack_require__(1);
+
+var _preferences = __webpack_require__(34);
+
+var _download_manager = __webpack_require__(35);
+
+var _genericl10n = __webpack_require__(36);
+
+;
+const GenericCom = {};
+exports.GenericCom = GenericCom;
+
+class GenericPreferences extends _preferences.BasePreferences {
+ async _writeToStorage(prefObj) {
+ localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj));
+ }
+
+ async _readFromStorage(prefObj) {
+ return JSON.parse(localStorage.getItem("pdfjs.preferences"));
+ }
+
+}
+
+class GenericExternalServices extends _app.DefaultExternalServices {
+ static createDownloadManager(options) {
+ return new _download_manager.DownloadManager(options);
+ }
+
+ static createPreferences() {
+ return new GenericPreferences();
+ }
+
+ static createL10n({
+ locale = "en-US"
+ }) {
+ return new _genericl10n.GenericL10n(locale);
+ }
+
+}
+
+_app.PDFViewerApplication.externalServices = GenericExternalServices;
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.BasePreferences = void 0;
+
+var _app_options = __webpack_require__(3);
+
+let defaultPreferences = null;
+
+function getDefaultPreferences() {
+ if (!defaultPreferences) {
+ defaultPreferences = Promise.resolve({
+ "cursorToolOnLoad": 0,
+ "defaultZoomValue": "",
+ "disablePageLabels": false,
+ "enablePermissions": false,
+ "enablePrintAutoRotate": false,
+ "enableWebGL": false,
+ "externalLinkTarget": 0,
+ "historyUpdateUrl": false,
+ "ignoreDestinationZoom": false,
+ "pdfBugEnabled": false,
+ "renderer": "canvas",
+ "renderInteractiveForms": false,
+ "sidebarViewOnLoad": -1,
+ "scrollModeOnLoad": -1,
+ "spreadModeOnLoad": -1,
+ "textLayerMode": 1,
+ "useOnlyCssZoom": false,
+ "viewOnLoad": 0,
+ "disableAutoFetch": false,
+ "disableFontFace": false,
+ "disableRange": false,
+ "disableStream": false
+ });
+ }
+
+ return defaultPreferences;
+}
+
+class BasePreferences {
+ constructor() {
+ if (this.constructor === BasePreferences) {
+ throw new Error("Cannot initialize BasePreferences.");
+ }
+
+ this.prefs = null;
+ this._initializedPromise = getDefaultPreferences().then(defaults => {
+ Object.defineProperty(this, "defaults", {
+ value: Object.freeze(defaults),
+ writable: false,
+ enumerable: true,
+ configurable: false
+ });
+ this.prefs = Object.assign(Object.create(null), defaults);
+ return this._readFromStorage(defaults);
+ }).then(prefs => {
+ if (!prefs) {
+ return;
+ }
+
+ for (const name in prefs) {
+ const defaultValue = this.defaults[name],
+ prefValue = prefs[name];
+
+ if (defaultValue === undefined || typeof prefValue !== typeof defaultValue) {
+ continue;
+ }
+
+ this.prefs[name] = prefValue;
+ }
+ });
+ }
+
+ async _writeToStorage(prefObj) {
+ throw new Error("Not implemented: _writeToStorage");
+ }
+
+ async _readFromStorage(prefObj) {
+ throw new Error("Not implemented: _readFromStorage");
+ }
+
+ async reset() {
+ await this._initializedPromise;
+ this.prefs = Object.assign(Object.create(null), this.defaults);
+ return this._writeToStorage(this.defaults);
+ }
+
+ async set(name, value) {
+ await this._initializedPromise;
+ const defaultValue = this.defaults[name];
+
+ if (defaultValue === undefined) {
+ throw new Error(`Set preference: "${name}" is undefined.`);
+ } else if (value === undefined) {
+ throw new Error("Set preference: no value is specified.");
+ }
+
+ const valueType = typeof value;
+ const defaultType = typeof defaultValue;
+
+ if (valueType !== defaultType) {
+ if (valueType === "number" && defaultType === "string") {
+ value = value.toString();
+ } else {
+ throw new Error(`Set preference: "${value}" is a ${valueType}, ` + `expected a ${defaultType}.`);
+ }
+ } else {
+ if (valueType === "number" && !Number.isInteger(value)) {
+ throw new Error(`Set preference: "${value}" must be an integer.`);
+ }
+ }
+
+ this.prefs[name] = value;
+ return this._writeToStorage(this.prefs);
+ }
+
+ async get(name) {
+ await this._initializedPromise;
+ const defaultValue = this.defaults[name];
+
+ if (defaultValue === undefined) {
+ throw new Error(`Get preference: "${name}" is undefined.`);
+ } else {
+ const prefValue = this.prefs[name];
+
+ if (prefValue !== undefined) {
+ return prefValue;
+ }
+ }
+
+ return defaultValue;
+ }
+
+ async getAll() {
+ await this._initializedPromise;
+ return Object.assign(Object.create(null), this.defaults, this.prefs);
+ }
+
+}
+
+exports.BasePreferences = BasePreferences;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.DownloadManager = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _viewer_compatibility = __webpack_require__(4);
+
+;
+const DISABLE_CREATE_OBJECT_URL = _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL || false;
+
+function download(blobUrl, filename) {
+ const a = document.createElement("a");
+
+ if (!a.click) {
+ throw new Error('DownloadManager: "a.click()" is not supported.');
+ }
+
+ a.href = blobUrl;
+ a.target = "_parent";
+
+ if ("download" in a) {
+ a.download = filename;
+ }
+
+ (document.body || document.documentElement).appendChild(a);
+ a.click();
+ a.remove();
+}
+
+class DownloadManager {
+ constructor({
+ disableCreateObjectURL = DISABLE_CREATE_OBJECT_URL
+ }) {
+ this.disableCreateObjectURL = disableCreateObjectURL;
+ }
+
+ downloadUrl(url, filename) {
+ if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, "http://example.com")) {
+ return;
+ }
+
+ download(url + "#pdfjs.action=download", filename);
+ }
+
+ downloadData(data, filename, contentType) {
+ if (navigator.msSaveBlob) {
+ navigator.msSaveBlob(new Blob([data], {
+ type: contentType
+ }), filename);
+ return;
+ }
+
+ const blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, this.disableCreateObjectURL);
+ download(blobUrl, filename);
+ }
+
+ download(blob, url, filename) {
+ if (navigator.msSaveBlob) {
+ if (!navigator.msSaveBlob(blob, filename)) {
+ this.downloadUrl(url, filename);
+ }
+
+ return;
+ }
+
+ if (this.disableCreateObjectURL) {
+ this.downloadUrl(url, filename);
+ return;
+ }
+
+ const blobUrl = URL.createObjectURL(blob);
+ download(blobUrl, filename);
+ }
+
+}
+
+exports.DownloadManager = DownloadManager;
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.GenericL10n = void 0;
+
+__webpack_require__(37);
+
+const webL10n = document.webL10n;
+
+class GenericL10n {
+ constructor(lang) {
+ this._lang = lang;
+ this._ready = new Promise((resolve, reject) => {
+ webL10n.setLanguage(lang, () => {
+ resolve(webL10n);
+ });
+ });
+ }
+
+ async getLanguage() {
+ const l10n = await this._ready;
+ return l10n.getLanguage();
+ }
+
+ async getDirection() {
+ const l10n = await this._ready;
+ return l10n.getDirection();
+ }
+
+ async get(property, args, fallback) {
+ const l10n = await this._ready;
+ return l10n.get(property, args, fallback);
+ }
+
+ async translate(element) {
+ const l10n = await this._ready;
+ return l10n.translate(element);
+ }
+
+}
+
+exports.GenericL10n = GenericL10n;
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+document.webL10n = function (window, document, undefined) {
+ var gL10nData = {};
+ var gTextData = '';
+ var gTextProp = 'textContent';
+ var gLanguage = '';
+ var gMacros = {};
+ var gReadyState = 'loading';
+ var gAsyncResourceLoading = true;
+
+ function getL10nResourceLinks() {
+ return document.querySelectorAll('link[type="application/l10n"]');
+ }
+
+ function getL10nDictionary() {
+ var script = document.querySelector('script[type="application/l10n"]');
+ return script ? JSON.parse(script.innerHTML) : null;
+ }
+
+ function getTranslatableChildren(element) {
+ return element ? element.querySelectorAll('*[data-l10n-id]') : [];
+ }
+
+ function getL10nAttributes(element) {
+ if (!element) return {};
+ var l10nId = element.getAttribute('data-l10n-id');
+ var l10nArgs = element.getAttribute('data-l10n-args');
+ var args = {};
+
+ if (l10nArgs) {
+ try {
+ args = JSON.parse(l10nArgs);
+ } catch (e) {
+ console.warn('could not parse arguments for #' + l10nId);
+ }
+ }
+
+ return {
+ id: l10nId,
+ args: args
+ };
+ }
+
+ function xhrLoadText(url, onSuccess, onFailure) {
+ onSuccess = onSuccess || function _onSuccess(data) {};
+
+ onFailure = onFailure || function _onFailure() {};
+
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, gAsyncResourceLoading);
+
+ if (xhr.overrideMimeType) {
+ xhr.overrideMimeType('text/plain; charset=utf-8');
+ }
+
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200 || xhr.status === 0) {
+ onSuccess(xhr.responseText);
+ } else {
+ onFailure();
+ }
+ }
+ };
+
+ xhr.onerror = onFailure;
+ xhr.ontimeout = onFailure;
+
+ try {
+ xhr.send(null);
+ } catch (e) {
+ onFailure();
+ }
+ }
+
+ function parseResource(href, lang, successCallback, failureCallback) {
+ var baseURL = href.replace(/[^\/]*$/, '') || './';
+
+ function evalString(text) {
+ if (text.lastIndexOf('\\') < 0) return text;
+ return text.replace(/\\\\/g, '\\').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\t/g, '\t').replace(/\\b/g, '\b').replace(/\\f/g, '\f').replace(/\\{/g, '{').replace(/\\}/g, '}').replace(/\\"/g, '"').replace(/\\'/g, "'");
+ }
+
+ function parseProperties(text, parsedPropertiesCallback) {
+ var dictionary = {};
+ var reBlank = /^\s*|\s*$/;
+ var reComment = /^\s*#|^\s*$/;
+ var reSection = /^\s*\[(.*)\]\s*$/;
+ var reImport = /^\s*@import\s+url\((.*)\)\s*$/i;
+ var reSplit = /^([^=\s]*)\s*=\s*(.+)$/;
+
+ function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {
+ var entries = rawText.replace(reBlank, '').split(/[\r\n]+/);
+ var currentLang = '*';
+ var genericLang = lang.split('-', 1)[0];
+ var skipLang = false;
+ var match = '';
+
+ function nextEntry() {
+ while (true) {
+ if (!entries.length) {
+ parsedRawLinesCallback();
+ return;
+ }
+
+ var line = entries.shift();
+ if (reComment.test(line)) continue;
+
+ if (extendedSyntax) {
+ match = reSection.exec(line);
+
+ if (match) {
+ currentLang = match[1].toLowerCase();
+ skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang;
+ continue;
+ } else if (skipLang) {
+ continue;
+ }
+
+ match = reImport.exec(line);
+
+ if (match) {
+ loadImport(baseURL + match[1], nextEntry);
+ return;
+ }
+ }
+
+ var tmp = line.match(reSplit);
+
+ if (tmp && tmp.length == 3) {
+ dictionary[tmp[1]] = evalString(tmp[2]);
+ }
+ }
+ }
+
+ nextEntry();
+ }
+
+ function loadImport(url, callback) {
+ xhrLoadText(url, function (content) {
+ parseRawLines(content, false, callback);
+ }, function () {
+ console.warn(url + ' not found.');
+ callback();
+ });
+ }
+
+ parseRawLines(text, true, function () {
+ parsedPropertiesCallback(dictionary);
+ });
+ }
+
+ xhrLoadText(href, function (response) {
+ gTextData += response;
+ parseProperties(response, function (data) {
+ for (var key in data) {
+ var id,
+ prop,
+ index = key.lastIndexOf('.');
+
+ if (index > 0) {
+ id = key.substring(0, index);
+ prop = key.substring(index + 1);
+ } else {
+ id = key;
+ prop = gTextProp;
+ }
+
+ if (!gL10nData[id]) {
+ gL10nData[id] = {};
+ }
+
+ gL10nData[id][prop] = data[key];
+ }
+
+ if (successCallback) {
+ successCallback();
+ }
+ });
+ }, failureCallback);
+ }
+
+ function loadLocale(lang, callback) {
+ if (lang) {
+ lang = lang.toLowerCase();
+ }
+
+ callback = callback || function _callback() {};
+
+ clear();
+ gLanguage = lang;
+ var langLinks = getL10nResourceLinks();
+ var langCount = langLinks.length;
+
+ if (langCount === 0) {
+ var dict = getL10nDictionary();
+
+ if (dict && dict.locales && dict.default_locale) {
+ console.log('using the embedded JSON directory, early way out');
+ gL10nData = dict.locales[lang];
+
+ if (!gL10nData) {
+ var defaultLocale = dict.default_locale.toLowerCase();
+
+ for (var anyCaseLang in dict.locales) {
+ anyCaseLang = anyCaseLang.toLowerCase();
+
+ if (anyCaseLang === lang) {
+ gL10nData = dict.locales[lang];
+ break;
+ } else if (anyCaseLang === defaultLocale) {
+ gL10nData = dict.locales[defaultLocale];
+ }
+ }
+ }
+
+ callback();
+ } else {
+ console.log('no resource to load, early way out');
+ }
+
+ gReadyState = 'complete';
+ return;
+ }
+
+ var onResourceLoaded = null;
+ var gResourceCount = 0;
+
+ onResourceLoaded = function () {
+ gResourceCount++;
+
+ if (gResourceCount >= langCount) {
+ callback();
+ gReadyState = 'complete';
+ }
+ };
+
+ function L10nResourceLink(link) {
+ var href = link.href;
+
+ this.load = function (lang, callback) {
+ parseResource(href, lang, callback, function () {
+ console.warn(href + ' not found.');
+ console.warn('"' + lang + '" resource not found');
+ gLanguage = '';
+ callback();
+ });
+ };
+ }
+
+ for (var i = 0; i < langCount; i++) {
+ var resource = new L10nResourceLink(langLinks[i]);
+ resource.load(lang, onResourceLoaded);
+ }
+ }
+
+ function clear() {
+ gL10nData = {};
+ gTextData = '';
+ gLanguage = '';
+ }
+
+ function getPluralRules(lang) {
+ var locales2rules = {
+ 'af': 3,
+ 'ak': 4,
+ 'am': 4,
+ 'ar': 1,
+ 'asa': 3,
+ 'az': 0,
+ 'be': 11,
+ 'bem': 3,
+ 'bez': 3,
+ 'bg': 3,
+ 'bh': 4,
+ 'bm': 0,
+ 'bn': 3,
+ 'bo': 0,
+ 'br': 20,
+ 'brx': 3,
+ 'bs': 11,
+ 'ca': 3,
+ 'cgg': 3,
+ 'chr': 3,
+ 'cs': 12,
+ 'cy': 17,
+ 'da': 3,
+ 'de': 3,
+ 'dv': 3,
+ 'dz': 0,
+ 'ee': 3,
+ 'el': 3,
+ 'en': 3,
+ 'eo': 3,
+ 'es': 3,
+ 'et': 3,
+ 'eu': 3,
+ 'fa': 0,
+ 'ff': 5,
+ 'fi': 3,
+ 'fil': 4,
+ 'fo': 3,
+ 'fr': 5,
+ 'fur': 3,
+ 'fy': 3,
+ 'ga': 8,
+ 'gd': 24,
+ 'gl': 3,
+ 'gsw': 3,
+ 'gu': 3,
+ 'guw': 4,
+ 'gv': 23,
+ 'ha': 3,
+ 'haw': 3,
+ 'he': 2,
+ 'hi': 4,
+ 'hr': 11,
+ 'hu': 0,
+ 'id': 0,
+ 'ig': 0,
+ 'ii': 0,
+ 'is': 3,
+ 'it': 3,
+ 'iu': 7,
+ 'ja': 0,
+ 'jmc': 3,
+ 'jv': 0,
+ 'ka': 0,
+ 'kab': 5,
+ 'kaj': 3,
+ 'kcg': 3,
+ 'kde': 0,
+ 'kea': 0,
+ 'kk': 3,
+ 'kl': 3,
+ 'km': 0,
+ 'kn': 0,
+ 'ko': 0,
+ 'ksb': 3,
+ 'ksh': 21,
+ 'ku': 3,
+ 'kw': 7,
+ 'lag': 18,
+ 'lb': 3,
+ 'lg': 3,
+ 'ln': 4,
+ 'lo': 0,
+ 'lt': 10,
+ 'lv': 6,
+ 'mas': 3,
+ 'mg': 4,
+ 'mk': 16,
+ 'ml': 3,
+ 'mn': 3,
+ 'mo': 9,
+ 'mr': 3,
+ 'ms': 0,
+ 'mt': 15,
+ 'my': 0,
+ 'nah': 3,
+ 'naq': 7,
+ 'nb': 3,
+ 'nd': 3,
+ 'ne': 3,
+ 'nl': 3,
+ 'nn': 3,
+ 'no': 3,
+ 'nr': 3,
+ 'nso': 4,
+ 'ny': 3,
+ 'nyn': 3,
+ 'om': 3,
+ 'or': 3,
+ 'pa': 3,
+ 'pap': 3,
+ 'pl': 13,
+ 'ps': 3,
+ 'pt': 3,
+ 'rm': 3,
+ 'ro': 9,
+ 'rof': 3,
+ 'ru': 11,
+ 'rwk': 3,
+ 'sah': 0,
+ 'saq': 3,
+ 'se': 7,
+ 'seh': 3,
+ 'ses': 0,
+ 'sg': 0,
+ 'sh': 11,
+ 'shi': 19,
+ 'sk': 12,
+ 'sl': 14,
+ 'sma': 7,
+ 'smi': 7,
+ 'smj': 7,
+ 'smn': 7,
+ 'sms': 7,
+ 'sn': 3,
+ 'so': 3,
+ 'sq': 3,
+ 'sr': 11,
+ 'ss': 3,
+ 'ssy': 3,
+ 'st': 3,
+ 'sv': 3,
+ 'sw': 3,
+ 'syr': 3,
+ 'ta': 3,
+ 'te': 3,
+ 'teo': 3,
+ 'th': 0,
+ 'ti': 4,
+ 'tig': 3,
+ 'tk': 3,
+ 'tl': 4,
+ 'tn': 3,
+ 'to': 0,
+ 'tr': 0,
+ 'ts': 3,
+ 'tzm': 22,
+ 'uk': 11,
+ 'ur': 3,
+ 've': 3,
+ 'vi': 0,
+ 'vun': 3,
+ 'wa': 4,
+ 'wae': 3,
+ 'wo': 0,
+ 'xh': 3,
+ 'xog': 3,
+ 'yo': 0,
+ 'zh': 0,
+ 'zu': 3
+ };
+
+ function isIn(n, list) {
+ return list.indexOf(n) !== -1;
+ }
+
+ function isBetween(n, start, end) {
+ return start <= n && n <= end;
+ }
+
+ var pluralRules = {
+ '0': function (n) {
+ return 'other';
+ },
+ '1': function (n) {
+ if (isBetween(n % 100, 3, 10)) return 'few';
+ if (n === 0) return 'zero';
+ if (isBetween(n % 100, 11, 99)) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '2': function (n) {
+ if (n !== 0 && n % 10 === 0) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '3': function (n) {
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '4': function (n) {
+ if (isBetween(n, 0, 1)) return 'one';
+ return 'other';
+ },
+ '5': function (n) {
+ if (isBetween(n, 0, 2) && n != 2) return 'one';
+ return 'other';
+ },
+ '6': function (n) {
+ if (n === 0) return 'zero';
+ if (n % 10 == 1 && n % 100 != 11) return 'one';
+ return 'other';
+ },
+ '7': function (n) {
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '8': function (n) {
+ if (isBetween(n, 3, 6)) return 'few';
+ if (isBetween(n, 7, 10)) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '9': function (n) {
+ if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '10': function (n) {
+ if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few';
+ if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one';
+ return 'other';
+ },
+ '11': function (n) {
+ if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';
+ if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many';
+ if (n % 10 == 1 && n % 100 != 11) return 'one';
+ return 'other';
+ },
+ '12': function (n) {
+ if (isBetween(n, 2, 4)) return 'few';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '13': function (n) {
+ if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';
+ if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '14': function (n) {
+ if (isBetween(n % 100, 3, 4)) return 'few';
+ if (n % 100 == 2) return 'two';
+ if (n % 100 == 1) return 'one';
+ return 'other';
+ },
+ '15': function (n) {
+ if (n === 0 || isBetween(n % 100, 2, 10)) return 'few';
+ if (isBetween(n % 100, 11, 19)) return 'many';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '16': function (n) {
+ if (n % 10 == 1 && n != 11) return 'one';
+ return 'other';
+ },
+ '17': function (n) {
+ if (n == 3) return 'few';
+ if (n === 0) return 'zero';
+ if (n == 6) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '18': function (n) {
+ if (n === 0) return 'zero';
+ if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one';
+ return 'other';
+ },
+ '19': function (n) {
+ if (isBetween(n, 2, 10)) return 'few';
+ if (isBetween(n, 0, 1)) return 'one';
+ return 'other';
+ },
+ '20': function (n) {
+ if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few';
+ if (n % 1000000 === 0 && n !== 0) return 'many';
+ if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two';
+ if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one';
+ return 'other';
+ },
+ '21': function (n) {
+ if (n === 0) return 'zero';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '22': function (n) {
+ if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one';
+ return 'other';
+ },
+ '23': function (n) {
+ if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one';
+ return 'other';
+ },
+ '24': function (n) {
+ if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few';
+ if (isIn(n, [2, 12])) return 'two';
+ if (isIn(n, [1, 11])) return 'one';
+ return 'other';
+ }
+ };
+ var index = locales2rules[lang.replace(/-.*$/, '')];
+
+ if (!(index in pluralRules)) {
+ console.warn('plural form unknown for [' + lang + ']');
+ return function () {
+ return 'other';
+ };
+ }
+
+ return pluralRules[index];
+ }
+
+ gMacros.plural = function (str, param, key, prop) {
+ var n = parseFloat(param);
+ if (isNaN(n)) return str;
+ if (prop != gTextProp) return str;
+
+ if (!gMacros._pluralRules) {
+ gMacros._pluralRules = getPluralRules(gLanguage);
+ }
+
+ var index = '[' + gMacros._pluralRules(n) + ']';
+
+ if (n === 0 && key + '[zero]' in gL10nData) {
+ str = gL10nData[key + '[zero]'][prop];
+ } else if (n == 1 && key + '[one]' in gL10nData) {
+ str = gL10nData[key + '[one]'][prop];
+ } else if (n == 2 && key + '[two]' in gL10nData) {
+ str = gL10nData[key + '[two]'][prop];
+ } else if (key + index in gL10nData) {
+ str = gL10nData[key + index][prop];
+ } else if (key + '[other]' in gL10nData) {
+ str = gL10nData[key + '[other]'][prop];
+ }
+
+ return str;
+ };
+
+ function getL10nData(key, args, fallback) {
+ var data = gL10nData[key];
+
+ if (!data) {
+ console.warn('#' + key + ' is undefined.');
+
+ if (!fallback) {
+ return null;
+ }
+
+ data = fallback;
+ }
+
+ var rv = {};
+
+ for (var prop in data) {
+ var str = data[prop];
+ str = substIndexes(str, args, key, prop);
+ str = substArguments(str, args, key);
+ rv[prop] = str;
+ }
+
+ return rv;
+ }
+
+ function substIndexes(str, args, key, prop) {
+ var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/;
+ var reMatch = reIndex.exec(str);
+ if (!reMatch || !reMatch.length) return str;
+ var macroName = reMatch[1];
+ var paramName = reMatch[2];
+ var param;
+
+ if (args && paramName in args) {
+ param = args[paramName];
+ } else if (paramName in gL10nData) {
+ param = gL10nData[paramName];
+ }
+
+ if (macroName in gMacros) {
+ var macro = gMacros[macroName];
+ str = macro(str, param, key, prop);
+ }
+
+ return str;
+ }
+
+ function substArguments(str, args, key) {
+ var reArgs = /\{\{\s*(.+?)\s*\}\}/g;
+ return str.replace(reArgs, function (matched_text, arg) {
+ if (args && arg in args) {
+ return args[arg];
+ }
+
+ if (arg in gL10nData) {
+ return gL10nData[arg];
+ }
+
+ console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');
+ return matched_text;
+ });
+ }
+
+ function translateElement(element) {
+ var l10n = getL10nAttributes(element);
+ if (!l10n.id) return;
+ var data = getL10nData(l10n.id, l10n.args);
+
+ if (!data) {
+ console.warn('#' + l10n.id + ' is undefined.');
+ return;
+ }
+
+ if (data[gTextProp]) {
+ if (getChildElementCount(element) === 0) {
+ element[gTextProp] = data[gTextProp];
+ } else {
+ var children = element.childNodes;
+ var found = false;
+
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) {
+ if (found) {
+ children[i].nodeValue = '';
+ } else {
+ children[i].nodeValue = data[gTextProp];
+ found = true;
+ }
+ }
+ }
+
+ if (!found) {
+ var textNode = document.createTextNode(data[gTextProp]);
+ element.insertBefore(textNode, element.firstChild);
+ }
+ }
+
+ delete data[gTextProp];
+ }
+
+ for (var k in data) {
+ element[k] = data[k];
+ }
+ }
+
+ function getChildElementCount(element) {
+ if (element.children) {
+ return element.children.length;
+ }
+
+ if (typeof element.childElementCount !== 'undefined') {
+ return element.childElementCount;
+ }
+
+ var count = 0;
+
+ for (var i = 0; i < element.childNodes.length; i++) {
+ count += element.nodeType === 1 ? 1 : 0;
+ }
+
+ return count;
+ }
+
+ function translateFragment(element) {
+ element = element || document.documentElement;
+ var children = getTranslatableChildren(element);
+ var elementCount = children.length;
+
+ for (var i = 0; i < elementCount; i++) {
+ translateElement(children[i]);
+ }
+
+ translateElement(element);
+ }
+
+ return {
+ get: function (key, args, fallbackString) {
+ var index = key.lastIndexOf('.');
+ var prop = gTextProp;
+
+ if (index > 0) {
+ prop = key.substring(index + 1);
+ key = key.substring(0, index);
+ }
+
+ var fallback;
+
+ if (fallbackString) {
+ fallback = {};
+ fallback[prop] = fallbackString;
+ }
+
+ var data = getL10nData(key, args, fallback);
+
+ if (data && prop in data) {
+ return data[prop];
+ }
+
+ return '{{' + key + '}}';
+ },
+ getData: function () {
+ return gL10nData;
+ },
+ getText: function () {
+ return gTextData;
+ },
+ getLanguage: function () {
+ return gLanguage;
+ },
+ setLanguage: function (lang, callback) {
+ loadLocale(lang, function () {
+ if (callback) callback();
+ });
+ },
+ getDirection: function () {
+ var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];
+ var shortCode = gLanguage.split('-', 1)[0];
+ return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr';
+ },
+ translate: translateFragment,
+ getReadyState: function () {
+ return gReadyState;
+ },
+ ready: function (callback) {
+ if (!callback) {
+ return;
+ } else if (gReadyState == 'complete' || gReadyState == 'interactive') {
+ window.setTimeout(function () {
+ callback();
+ });
+ } else if (document.addEventListener) {
+ document.addEventListener('localized', function once() {
+ document.removeEventListener('localized', once);
+ callback();
+ });
+ }
+ }
+ };
+}(window, document);
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.PDFPrintService = PDFPrintService;
+
+var _ui_utils = __webpack_require__(2);
+
+var _app = __webpack_require__(1);
+
+var _app_options = __webpack_require__(3);
+
+let activeService = null;
+let overlayManager = null;
+
+function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
+ const scratchCanvas = activeService.scratchCanvas;
+ const PRINT_RESOLUTION = _app_options.AppOptions.get("printResolution") || 150;
+ const PRINT_UNITS = PRINT_RESOLUTION / 72.0;
+ scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);
+ scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);
+ const width = Math.floor(size.width * _ui_utils.CSS_UNITS) + "px";
+ const height = Math.floor(size.height * _ui_utils.CSS_UNITS) + "px";
+ const ctx = scratchCanvas.getContext("2d");
+ ctx.save();
+ ctx.fillStyle = "rgb(255, 255, 255)";
+ ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);
+ ctx.restore();
+ return pdfDocument.getPage(pageNumber).then(function (pdfPage) {
+ const renderContext = {
+ canvasContext: ctx,
+ transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],
+ viewport: pdfPage.getViewport({
+ scale: 1,
+ rotation: size.rotation
+ }),
+ intent: "print"
+ };
+ return pdfPage.render(renderContext).promise;
+ }).then(function () {
+ return {
+ width,
+ height
+ };
+ });
+}
+
+function PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
+ this.pdfDocument = pdfDocument;
+ this.pagesOverview = pagesOverview;
+ this.printContainer = printContainer;
+ this.l10n = l10n || _ui_utils.NullL10n;
+ this.disableCreateObjectURL = _app_options.AppOptions.get("disableCreateObjectURL");
+ this.currentPage = -1;
+ this.scratchCanvas = document.createElement("canvas");
+}
+
+PDFPrintService.prototype = {
+ layout() {
+ this.throwIfInactive();
+ const body = document.querySelector("body");
+ body.setAttribute("data-pdfjsprinting", true);
+ const hasEqualPageSizes = this.pagesOverview.every(function (size) {
+ return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height;
+ }, this);
+
+ if (!hasEqualPageSizes) {
+ console.warn("Not all pages have the same size. The printed " + "result may be incorrect!");
+ }
+
+ this.pageStyleSheet = document.createElement("style");
+ const pageSize = this.pagesOverview[0];
+ this.pageStyleSheet.textContent = "@supports ((size:A4) and (size:1pt 1pt)) {" + "@page { size: " + pageSize.width + "pt " + pageSize.height + "pt;}" + "}";
+ body.appendChild(this.pageStyleSheet);
+ },
+
+ destroy() {
+ if (activeService !== this) {
+ return;
+ }
+
+ this.printContainer.textContent = "";
+ const body = document.querySelector("body");
+ body.removeAttribute("data-pdfjsprinting");
+
+ if (this.pageStyleSheet) {
+ this.pageStyleSheet.remove();
+ this.pageStyleSheet = null;
+ }
+
+ this.scratchCanvas.width = this.scratchCanvas.height = 0;
+ this.scratchCanvas = null;
+ activeService = null;
+ ensureOverlay().then(function () {
+ if (overlayManager.active !== "printServiceOverlay") {
+ return;
+ }
+
+ overlayManager.close("printServiceOverlay");
+ });
+ },
+
+ renderPages() {
+ const pageCount = this.pagesOverview.length;
+
+ const renderNextPage = (resolve, reject) => {
+ this.throwIfInactive();
+
+ if (++this.currentPage >= pageCount) {
+ renderProgress(pageCount, pageCount, this.l10n);
+ resolve();
+ return;
+ }
+
+ const index = this.currentPage;
+ renderProgress(index, pageCount, this.l10n);
+ renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index]).then(this.useRenderedPage.bind(this)).then(function () {
+ renderNextPage(resolve, reject);
+ }, reject);
+ };
+
+ return new Promise(renderNextPage);
+ },
+
+ useRenderedPage(printItem) {
+ this.throwIfInactive();
+ const img = document.createElement("img");
+ img.style.width = printItem.width;
+ img.style.height = printItem.height;
+ const scratchCanvas = this.scratchCanvas;
+
+ if ("toBlob" in scratchCanvas && !this.disableCreateObjectURL) {
+ scratchCanvas.toBlob(function (blob) {
+ img.src = URL.createObjectURL(blob);
+ });
+ } else {
+ img.src = scratchCanvas.toDataURL();
+ }
+
+ const wrapper = document.createElement("div");
+ wrapper.appendChild(img);
+ this.printContainer.appendChild(wrapper);
+ return new Promise(function (resolve, reject) {
+ img.onload = resolve;
+ img.onerror = reject;
+ });
+ },
+
+ performPrint() {
+ this.throwIfInactive();
+ return new Promise(resolve => {
+ setTimeout(() => {
+ if (!this.active) {
+ resolve();
+ return;
+ }
+
+ print.call(window);
+ setTimeout(resolve, 20);
+ }, 0);
+ });
+ },
+
+ get active() {
+ return this === activeService;
+ },
+
+ throwIfInactive() {
+ if (!this.active) {
+ throw new Error("This print request was cancelled or completed.");
+ }
+ }
+
+};
+const print = window.print;
+
+window.print = function () {
+ if (activeService) {
+ console.warn("Ignored window.print() because of a pending print job.");
+ return;
+ }
+
+ ensureOverlay().then(function () {
+ if (activeService) {
+ overlayManager.open("printServiceOverlay");
+ }
+ });
+
+ try {
+ dispatchEvent("beforeprint");
+ } finally {
+ if (!activeService) {
+ console.error("Expected print service to be initialized.");
+ ensureOverlay().then(function () {
+ if (overlayManager.active === "printServiceOverlay") {
+ overlayManager.close("printServiceOverlay");
+ }
+ });
+ return;
+ }
+
+ const activeServiceOnEntry = activeService;
+ activeService.renderPages().then(function () {
+ return activeServiceOnEntry.performPrint();
+ }).catch(function () {}).then(function () {
+ if (activeServiceOnEntry.active) {
+ abort();
+ }
+ });
+ }
+};
+
+function dispatchEvent(eventType) {
+ const event = document.createEvent("CustomEvent");
+ event.initCustomEvent(eventType, false, false, "custom");
+ window.dispatchEvent(event);
+}
+
+function abort() {
+ if (activeService) {
+ activeService.destroy();
+ dispatchEvent("afterprint");
+ }
+}
+
+function renderProgress(index, total, l10n) {
+ const progressContainer = document.getElementById("printServiceOverlay");
+ const progress = Math.round(100 * index / total);
+ const progressBar = progressContainer.querySelector("progress");
+ const progressPerc = progressContainer.querySelector(".relative-progress");
+ progressBar.value = progress;
+ l10n.get("print_progress_percent", {
+ progress
+ }, progress + "%").then(msg => {
+ progressPerc.textContent = msg;
+ });
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {
+ window.print();
+ event.preventDefault();
+
+ if (event.stopImmediatePropagation) {
+ event.stopImmediatePropagation();
+ } else {
+ event.stopPropagation();
+ }
+ }
+}, true);
+
+if ("onbeforeprint" in window) {
+ const stopPropagationIfNeeded = function (event) {
+ if (event.detail !== "custom" && event.stopImmediatePropagation) {
+ event.stopImmediatePropagation();
+ }
+ };
+
+ window.addEventListener("beforeprint", stopPropagationIfNeeded);
+ window.addEventListener("afterprint", stopPropagationIfNeeded);
+}
+
+let overlayPromise;
+
+function ensureOverlay() {
+ if (!overlayPromise) {
+ overlayManager = _app.PDFViewerApplication.overlayManager;
+
+ if (!overlayManager) {
+ throw new Error("The overlay manager has not yet been initialized.");
+ }
+
+ overlayPromise = overlayManager.register("printServiceOverlay", document.getElementById("printServiceOverlay"), abort, true);
+ document.getElementById("printCancel").onclick = abort;
+ }
+
+ return overlayPromise;
+}
+
+_app.PDFPrintServiceFactory.instance = {
+ supportsPrinting: true,
+
+ createPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
+ if (activeService) {
+ throw new Error("The print service is created and active.");
+ }
+
+ activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n);
+ return activeService;
+ }
+
+};
+
+/***/ })
+/******/ ]);
//# sourceMappingURL=viewer.js.map
\ No newline at end of file
diff --git a/themes/hugo-theme-pdf-js/theme.toml b/themes/hugo-theme-pdf-js/theme.toml
index ceadd5a035feeefceb989224ecf5af04a568100f..b4f9b9cd2fb1c9ac0e332b43daf19cee969bc028 100644
--- a/themes/hugo-theme-pdf-js/theme.toml
+++ b/themes/hugo-theme-pdf-js/theme.toml
@@ -1,21 +1,21 @@
-# theme.toml template for a Hugo theme
-# See https://github.com/gohugoio/hugoThemes#themetoml for an example
-
-name = "Hugo Theme Pdf Js"
-license = "MIT"
-licenselink = "https://github.com/yyexplore/hugo-theme-pdf-js/blob/master/LICENSE"
-description = "embed pdf"
-homepage = "http://example.com/"
-tags = []
-features = []
-min_version = "0.41.0"
-
-[author]
- name = ""
- homepage = ""
-
-# If porting an existing theme
-[original]
- name = ""
- homepage = ""
- repo = ""
+# theme.toml template for a Hugo theme
+# See https://github.com/gohugoio/hugoThemes#themetoml for an example
+
+name = "Hugo Theme Pdf Js"
+license = "MIT"
+licenselink = "https://github.com/yyexplore/hugo-theme-pdf-js/blob/master/LICENSE"
+description = "embed pdf"
+homepage = "http://example.com/"
+tags = []
+features = []
+min_version = "0.41.0"
+
+[author]
+ name = ""
+ homepage = ""
+
+# If porting an existing theme
+[original]
+ name = ""
+ homepage = ""
+ repo = ""